程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> eclipse+JBoss 5+EJB3開發指南(2):編寫有狀態的SessionBean

eclipse+JBoss 5+EJB3開發指南(2):編寫有狀態的SessionBean

編輯:關於JAVA

編寫有狀態的(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中,這樣在同一個會話中的用戶就可以使用該購物車對象了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved