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
无状态会话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
相关文章推荐
- EJB中有状态会话Bean 和 无状态会话Bean 的区别
- EJB有状态的会话Bean和无状态的会话Bean的区别
- EJB-无状态会话Bean实例+与状态bean区别
- EJB中有状态会话Bean 和 无状态会话Bean 的区别
- 专稿:实战EJB之三 开发会话Bean(有状态会话Bean)
- 精通EJB(3) 无状态会话bean基础
- EJB开发第一个无状态会话bean、开发EJB客户端
- Eclipse3.2.1+jboss4.0.5开发J2EE中的EJB(无状态会话Bean 附图)
- 无状态会话Bean与有状态会话Bean的区别以及实例池
- 有状态会话Bean(sfsb)和无状态会话Bean(slsb)的区别
- EJB-无状态会话Bean与有状态会话Bean对比
- EJB3.0开发指南:有状态会话Bean
- 有状态会话Bean(SLSB)和无状态会话Bean(SFSB)的区别
- EJB 3会话bean与Spring的区别
- EJB基础一 无状态会话BEAN使用
- JBoss+Ant实现EJB无状态会话bean实例
- EJB系列(三)--有状态会话Bean和无状态会话Bean
- Ejb in action(四)——购物车实例演示有状态会话Bean
- EJB中有状态会话Bean与无状态会话Bean
- 有状态会话Bean(SLSB)和无状态会话Bean(SFSB)的区别