您的位置:首页 > 编程语言 > Java开发

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

2009-05-13 12:52 627 查看
本文为原创,如需转载,请注明作者和出处,谢谢!



上一篇:eclipse + JBoss 5 + EJB3开发指南(1):编写无状态的SessionBean

编写有状态的(Stateful)的Session Bean也非常简单,只需要将无状态注释(@Stateless)改成有状态注释(@Stateful)即可。如果使用Stateful Sessionbean,客户端在使用同一个SessionBean对象实例时可以保存状态,也就是说,在多次引用该对象时实际上在服务端是使用的同一个 Sessionbean的对象实例,而无状态sessionbean使用了不同的sessionbean对象实例,因此,是无法保存状态的。

下面将编写一个简单的购物车的例子,该例子将客户购买的商品都保存在stateful sessionbean中的List对象中。然后在客户端使用同一个sessionbean的对象实例输出这些商品。我们首先来实现一个 sessionbean的远程接口,这和无状态sessionbean是一样的。代码如下:

package service;

import java.util.List;

import javax.ejb.Remote;

@Remote

public interface ShoppingCart

{

// 添加某个商品信息

public void addCommodity (String value);

// 获得客户购买的所有商品的纱衔泥

public List<String> getCommodity();

}

为了方便,在这里只将商品名保存在List对象中,读者也可以在List对象中保存更复杂的信息,如使用一个对象来保存商品信息。

下面来编写具体的Stateful sessionbean,代码如下:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->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(String value)

{

shoppingCart.add(value);

}

@Override

public List<String> getCommodity()

{

return shoppingCart;

}

}

最后我们编写一个客户端调用程序,代码如下:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->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

{

Properties prop = new Properties();

InitialContext ctx = new InitialContext();

ShoppingCart shoppingCart = (ShoppingCart) ctx

.lookup("ShoppingCartBean/remote");

shoppingCart.addCommodity("自行车");

shoppingCart.addCommodity("笔记本电脑");

shoppingCart.addCommodity("液晶电视");

List<String> commodities = shoppingCart.getCommodity();

for(String commodity: commodities)

{

System.out.println(commodity);

}

}

}

在客户端调用时,需要将ShoppingCart接口复制到客户端,当然,@Remote可以去掉。别忘了引用JBoss安装目录中的client目录中 的jar文件。客户端仍然使用了jndi.properties文件来配置相应的信息,该文件位于src目录下,内容如下;

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory

java.naming.provider.url=localhost

在执行上面的程序后,将输出如下的信息:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->自行车

笔记本电脑

液晶电视
从上面的输出结果可以看出,使用getCommodity方法成功获得了所有的商品信息。要注意的是,需要使用同一个sessionbean对象实例 (shoppingCart)才能保存状态。如果在web应用程序中,需要将shoppingCart对象保存在Session中,这样在同一个会话中的 用户就可以使用该购物车对象了。

下一篇:eclipse + JBoss 5 + EJB3开发指南(2):编写有状态的SessionBean
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐