eclipse + JBoss 5 + EJB3开发指南(2):编写有状态的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,代码如下:
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,如需转载请自行联系原作者

相关文章
|
Java 应用服务中间件 Android开发
【EJB学习笔记】——EJB开发环境搭建(Eclipse集成JBoss)
  之前一直用的EJB开发环境是他们搭建好的,直接拿来用,不过还是感觉老吃别人嚼好的不太好吃,所以自己动手来玩一玩。   EJB开发依赖的最基本的环境:JDK、Eclipse、JBoss,这里简单介绍一下最基本的环境的搭建。
【EJB学习笔记】——EJB开发环境搭建(Eclipse集成JBoss)
|
Java 数据库连接 应用服务中间件
怎样在eclipse里安装Hibernate / JBoss 工具【最新】
原文:http://www.mkyong.com/hibernate/how-to-install-hibernate-tools-in-eclipse-ide/
229 0
怎样在eclipse里安装Hibernate / JBoss 工具【最新】
|
IDE 应用服务中间件 开发工具
|
应用服务中间件 容器 消息中间件
eclipse + JBoss 5 + EJB3开发指南(14):消息驱动Bean
本文为原创,如需转载,请注明作者和出处,谢谢!     在前面的文章中给出的SessionBean的例子都是同步调用SessionBean方法的,也就是说,只有当方法中的代码都执行完,才能返回到客户 端。
1086 0
|
7月前
|
Java Maven Android开发
在Eclipse里配置Maven插件
Maven是一款比较常用的Java开发拓展包,它相当于一个全自动jar包管理器,会导入用户开发时需要使用的相应jar包。使用Maven开发Java程序,可以极大提升开发者的开发效率。下面我就跟大家介绍一下如何在Eclipse里安装和配置Maven插件。
172 0
|
7月前
|
XML Java Maven
eclipse 、idea 安装activiti插件
eclipse 、idea 安装activiti插件
181 0
|
Java Android开发
eclipse安装SpringBoot插件的无敌办法
eclipse安装SpringBoot插件的无敌办法
152 0
|
Java Android开发 Spring
在 Eclipse 中安装 SpringTools 插件
在 Eclipse 中安装 SpringTools 插件
145 0
|
XML Java 应用服务中间件
Eclipse插件下载地址汇总
Eclipse插件下载地址汇总
347 0
下一篇
DataWorks