隨筆 - 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 銀河使者 閱讀(2869) 評論(0)  編輯  收藏 所屬分類: 原創ejb3JBoss

          主站蜘蛛池模板: 石景山区| 嘉义县| 鄂伦春自治旗| 丹东市| 富平县| 三河市| 巴青县| 青浦区| 萍乡市| 新乡市| 湄潭县| 龙陵县| 时尚| 凌海市| 太谷县| 承德市| 临漳县| 晋中市| 舟曲县| 天柱县| 留坝县| 新蔡县| 泰和县| 安平县| 石柱| 册亨县| 南平市| 民乐县| 益阳市| 隆林| 瓮安县| 廊坊市| 建瓯市| 陇西县| 东阳市| 郧西县| 平阴县| 内乡县| 钦州市| 南投县| 米泉市|