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

本文通过一个购物车示例介绍了如何使用EJB3和Stateful Session Bean保存客户端状态。具体包括定义远程接口、实现Stateful Session Bean以及客户端调用流程。

本文为原创,如需转载,请注明作者和出处,谢谢!

上一篇: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(Stringvalue);
// 获得客户购买的所有商品的纱衔泥
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(Stringvalue)
{
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
{
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目录下,内容如下;

<!--

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值