随笔 - 312, 文章 - 14, 评论 - 1393, 引用 - 0
数据加载中……

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

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

上一篇: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,代码如下:
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中,这样在同一个会话中的用户就可以使用该购物车对象了。

下一篇:eclipse + JBoss 5 + EJB3开发指南(3):使用Session Bean的本地接口





Android开发完全讲义(第2版)(本书版权已输出到台湾)

http://product.dangdang.com/product.aspx?product_id=22741502



Android高薪之路:Android程序员面试宝典 http://book.360buy.com/10970314.html


新浪微博:http://t.sina.com.cn/androidguy   昵称:李宁_Lining

posted on 2009-05-13 09:51 银河使者 阅读(2826) 评论(0)  编辑  收藏 所属分类: 原创ejb3JBoss


只有注册用户登录后才能发表评论。


网站导航: