EJB有状态和无状态会话Bean的区别

有状态会话bean:每个用户有自己特有的一个实例,在用户生存期内bean保持了用户的信息,即有状态;一旦用户销毁(调用结束或实例结束),bean的生命期也会结束,也就是说每个用户最初得到一个初始bean

无状态会话bean:bean一旦被实例化加入会话池中,每个用户都可以共用,即使用户消亡,bean生命期也不一定结束,仍然可以被其他用户调用,由于没有特定用户,那么就不能保持某一用户状态,所以叫无状态bean

举例说明:

ShoppingCart接口

package com.comeinfo.ejb;

import java.util.List;

public interface ShoppingCart {

 public void addCommodity(String value);
 
 public List<String> getCommodity();
 
}

无状态会话Bean

package com.comeinfo.ejb.impl;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.Remote;
import javax.ejb.Stateless;

import com.comeinfo.ejb.ShoppingCart;

@Stateless
@Remote(ShoppingCart.class)
public class ShoppingCartBean implements ShoppingCart {

 private List<String> shoppingCart = new ArrayList<String>();
 
 @Override
 public void addCommodity(String value) {
  // TODO Auto-generated method stub
  shoppingCart.add(value);
 }

 @Override
 public List<String> getCommodity() {
  // TODO Auto-generated method stub
  return shoppingCart;
 }

}

测试代码:

public static void main(String[] args) throws NamingException {
  // TODO Auto-generated method stub
  //Properties props = new Properties();
  //props.setProperty(Context.PROVIDER_URL, "127.0.0.1:1099");
  //props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
  
  InitialContext ctx = new InitialContext();
  ShoppingCart shoppingCart = (ShoppingCart)ctx.lookup("ShoppingCartBean/remote");
  shoppingCart.addCommodity("鱼");
  shoppingCart.addCommodity("虾");
  List<String> list = shoppingCart.getCommodity();
  System.out.println(list.size());
 }

执行一次输出:2

执行两次输出:4

执行三次输出:6

 

有状态会话Bean:

package com.comeinfo.ejb.impl;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.Remote;
import javax.ejb.Stateful;

import com.comeinfo.ejb.ShoppingCart;

@Stateful
@Remote(ShoppingCart.class)
public class ShoppingCartBean implements ShoppingCart {

 private List<String> shoppingCart = new ArrayList<String>();
 
 @Override
 public void addCommodity(String value) {
  // TODO Auto-generated method stub
  shoppingCart.add(value);
 }

 @Override
 public List<String> getCommodity() {
  // TODO Auto-generated method stub
  return shoppingCart;
 }

}
使用上面的测试代码测试:

执行一次输出:2

执行两次输出:2

执行三次输出:2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值