您的位置:首页 > 运维架构

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

2009-12-16 09:32 507 查看
有状态会话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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息