eclipse + JBoss 5 + EJB3开发指南(2):编写有状态的SessionBean

xiaoxiao2026-03-20  5

本文为原创,如需转载,请注明作者和出处,谢谢! 上一篇: eclipse + JBoss 5 + EJB3开发指南(1):编写第一个无状态的SessionBean 编写有状态的(Stateful)的Session Bean也非常简单,只需要将无状态注释(@Stateless)改成有状态注释(@Stateful)即可。如果使用Stateful Sessionbean,客户端在使用同一个SessionBean对象实例时可以保存状态,也就是说,在多次引用该对象时实际上在服务端是使用的同一个Sessionbean的对象实例,而无状态sessionbean使用了不同的sessionbean对象实例,因此,是无法保存状态的。 下面将编写一个简单的购物车的例子,该例子将客户购买的商品都保存在stateful sessionbean中的List对象中。然后在客户端使用同一个sessionbean的对象实例输出这些商品。我们首先来实现一个sessionbean的远程接口,这和无状态sessionbean是一样的。代码如下: <!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> package service; import java.util.List; import javax.ejb.Remote; @Remote public interface ShoppingCart { // 添加某个商品信息 public void addCommodity(Stringvalue); // 获得客户购买的所有商品的纱衔泥 public List < String > getCommodity(); } 为了方便,在这里只将商品名保存在List对象中,读者也可以在List对象中保存更复杂的信息,如使用一个对象来保存商品信息。 下面来编写具体的Stateful sessionbean,代码如下: <!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> package service; import java.util.ArrayList; import java.util.List; import javax.ejb.Stateful; @Stateful public class ShoppingCartBean implements ShoppingCart { private List < String > shoppingCart = new ArrayList < String > (); @Override public void addCommodity(Stringvalue) { shoppingCart.add(value); } @Override public List < String > getCommodity() { return shoppingCart; } } 最后我们编写一个客户端调用程序,代码如下: <!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> package test; import java.util.List; import java.util.Properties; import javax.naming.InitialContext; import service.ShoppingCart; public class Client { public static void main(String[]args) throws Exception { Propertiesprop = new Properties(); InitialContextctx = new InitialContext(); ShoppingCartshoppingCart = (ShoppingCart)ctx .lookup( " ShoppingCartBean/remote " ); shoppingCart.addCommodity( " 自行车 " ); shoppingCart.addCommodity( " 笔记本电脑 " ); shoppingCart.addCommodity( " 液晶电视 " ); List < String > commodities = shoppingCart.getCommodity(); for (Stringcommodity:commodities) { System.out.println(commodity); } } } 在客户端调用时,需要将ShoppingCart接口复制到客户端,当然,@Remote可以去掉。别忘了引用JBoss安装目录中的client目录中的jar文件。客户端仍然使用了jndi.properties文件来配置相应的信息,该文件位于src目录下,内容如下; <!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> java.naming.factory.initial = org.jnp.interfaces.NamingContextFactory java.naming.provider.url = localhost 在执行上面的程序后,将输出如下的信息: <!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 自行车 笔记本电脑 液晶电视

从上面的输出结果可以看出,使用getCommodity方法成功获得了所有的商品信息。要注意的是,需要使用同一个sessionbean对象实例(shoppingCart)才能保存状态。如果在web应用程序中,需要将shoppingCart对象保存在Session中,这样在同一个会话中的用户就可以使用该购物车对象了。 下一篇:eclipse + JBoss 5 + EJB3开发指南(3):使用Session Bean的本地接口

国内最棒的Google Android技术社区(eoeandroid),欢迎访问! 《银河系列原创教程》发布 《Java Web开发速学宝典》出版,欢迎定购 相关资源:敏捷开发V1.0.pptx
转载请注明原文地址: https://www.6miu.com/read-5046229.html

最新回复(0)