有状态会话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