博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
eclipse + JBoss 5 + EJB3开发指南(2):编写有状态的SessionBean
阅读量:7111 次
发布时间:2019-06-28

本文共 2237 字,大约阅读时间需要 7 分钟。

 编写有状态的(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,代码如下:

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;
    }    
}

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

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目录下,内容如下;

java.naming.factory.initial
=
org.jnp.interfaces.NamingContextFactory
java.naming.provider.url
=
localhost

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

自行车
笔记本电脑
液晶电视
    从上面的输出结果可以看出,使用getCommodity方法成功获得了所有的商品信息。要注意的是,需要使用同一个sessionbean对象实例(shoppingCart)才能保存状态。如果在web应用程序中,需要将shoppingCart对象保存在Session中,这样在同一个会话中的用户就可以使用该购物车对象了。
 
本文转自 androidguy 51CTO博客,原文链接:http://blog.51cto.com/androidguy/214456,如需转载请自行联系原作者
你可能感兴趣的文章
MySql md5加密 sqlserver md5加密 C# md5加密 java md5加密
查看>>
jQuery介绍
查看>>
[ 转 ] 网页聊天室的原理
查看>>
eclipse中svn提交报错的解决
查看>>
mysql 总结
查看>>
php环境配置和nginx安装配置教程
查看>>
Python学习(21)python操作mysql数据库_操作
查看>>
ASCII
查看>>
TCP/IP协议(数据封装与拆装过程)
查看>>
我的 .npmrc 配置
查看>>
43、转换流
查看>>
ssh端口转发
查看>>
Tomcat.md
查看>>
javascript里用php
查看>>
【BO】SAP BO相关问题汇总贴
查看>>
最短路径(迪杰斯特拉算法)- 数据结构和算法64
查看>>
mac os x查看端口命令
查看>>
位语法
查看>>
redis的两种持久化方案
查看>>
[Python爬虫] 之九:Selenium +phantomjs抓取活动行中会议活动(单线程抓取)
查看>>