【原創】eclipse + JBoss 5 + EJB3開發指南(2):編寫有狀態的SessionBean
本文為原創,如需轉載,請註明作者和出處,謝謝!
編寫有狀態的(Stateful)的Session Bean也非常簡單,只需要將無狀態註釋(@Stateless)改成有狀態註釋(@Stateful)即可。如果使用Stateful Sessionbean,客戶端在使用同一個SessionBean物件例項時可以儲存狀態,也就是說,在多次引用該物件時實際上在服務端是使用的同一個 Sessionbean的物件例項,而無狀態sessionbean使用了不同的sessionbean物件例項,因此,是無法儲存狀態的。
下面將編寫一個簡單的購物車的例子,該例子將客戶購買的商品都儲存在stateful sessionbean中的List物件中。然後在客戶端使用同一個sessionbean的物件例項輸出這些商品。我們首先來實現一個 sessionbean的遠端介面,這和無狀態sessionbean是一樣的。程式碼如下:
為了方便,在這裡只將商品名儲存在List物件中,讀者也可以在List物件中儲存更復雜的資訊,如使用一個物件來儲存商品資訊。
下面來編寫具體的Stateful sessionbean,程式碼如下:
最後我們編寫一個客戶端呼叫程式,程式碼如下:
在客戶端呼叫時,需要將ShoppingCart介面複製到客戶端,當然,@Remote可以去掉。別忘了引用JBoss安裝目錄中的client目錄中 的jar檔案。客戶端仍然使用了jndi.properties檔案來配置相應的資訊,該檔案位於src目錄下,內容如下;
在執行上面的程式後,將輸出如下的資訊:
編寫有狀態的(Stateful)的Session Bean也非常簡單,只需要將無狀態註釋(@Stateless)改成有狀態註釋(@Stateful)即可。如果使用Stateful Sessionbean,客戶端在使用同一個SessionBean物件例項時可以儲存狀態,也就是說,在多次引用該物件時實際上在服務端是使用的同一個 Sessionbean的物件例項,而無狀態sessionbean使用了不同的sessionbean物件例項,因此,是無法儲存狀態的。
下面將編寫一個簡單的購物車的例子,該例子將客戶購買的商品都儲存在stateful sessionbean中的List物件中。然後在客戶端使用同一個sessionbean的物件例項輸出這些商品。我們首先來實現一個 sessionbean的遠端介面,這和無狀態sessionbean是一樣的。程式碼如下:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->package service;
import java.util.List;
import javax.ejb.Remote;
@Remote
public interface ShoppingCart
{
// 新增某個商品資訊
public void addCommodity (String value);
// 獲得客戶購買的所有商品的紗銜泥
public List<String> getCommodity();
}
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->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,程式碼如下:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->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;
}
}
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->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;
}
}
最後我們編寫一個客戶端呼叫程式,程式碼如下:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->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);
}
}
}
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->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目錄下,內容如下;
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost
在執行上面的程式後,將輸出如下的資訊:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->自行車
膝上型電腦
液晶電視
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->自行車
膝上型電腦
液晶電視
從上面的輸出結果可以看出,使用getCommodity方法成功獲得了所有的商品資訊。要注意的是,需要使用同一個sessionbean物件例項 (shoppingCart)才能儲存狀態。如果在web應用程式中,需要將shoppingCart物件儲存在Session中,這樣在同一個會話中的 使用者就可以使用該購物車物件了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12921506/viewspace-594943/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【原創】eclipse + JBoss 5 + EJB3開發指南(6):編寫第一個實體Bean程式EclipseBean
- 【原創】eclipse + JBoss 5 + EJB3開發指南(3):使用Session Bean的本地介面EclipseSessionBean
- 【原創】eclipse + JBoss 5 + EJB3開發指南(4):Session Bean中的註釋方法EclipseSessionBean
- 【原創】eclipse + JBoss 5 + EJB3開發指南(5):使用配置檔案釋出Session BeanEclipseSessionBean
- 有關EJB的有態SessionBean和無態SessionBean的疑惑SessionBean
- Jboss3.0-Tomat4.03下Ejb的開發之一(SessionBean的開發) (轉)S3SessionBean
- 初次使用無狀態sessionbean的問題SessionBean
- 請教:EJB3的SessionBean主動呼叫問題SessionBean
- 求教,eclipse2.1+jboss3.2.2開發EclipseS3
- Oracle資料庫開發指南(原創)Oracle資料庫
- 狀態管理框架開發不完全指南框架
- eclipse+lomboz+jboss開發疑問(新手)Eclipse
- Eclipse+JBoss+MySQL開發環境設定EclipseMySql開發環境
- (原創)物件導向的系統對接介面編寫。第2篇物件
- 有關jboss開發EJB的JAR的問題?JAR
- Jboss7 部署EJB3 簡明教程
- (原創)物件導向的系統對接介面編寫。第5篇(完結)物件
- 有JBOSS seam的詳細開發資料嗎
- 有狀態和無狀態的區別
- Bran的核心開發指南(5)
- jboss to weblogic移值說明(原創)Web
- Flutter外掛開發指南01: 通道Channel的編寫與實現Flutter
- 原創書寫開篇sqltuningSQL
- Gavin King真正走上EJB路線,推出基於JSF/EJB3的快速開發框架JBoss SeamJS框架
- mysql開發-動態語句編寫-引號使用MySql
- Bookmarklet編寫指南
- 編寫高質量程式碼之狀態維護
- java安全編碼指南之:方法編寫指南Java
- 手把手教你使用Go基於zookeeper編寫服務發現「原創」Go
- 【原創】Java多執行緒初學者指南(5):join方法的使用Java執行緒
- 開發動態編輯的表格
- 在jboss中為何SessionBean不能獲得資料來源?SessionBean
- HTML Email 編寫指南HTMLAI
- RESTful API 編寫指南RESTAPI
- 敏捷合同編寫指南敏捷
- [原創]Brida操作指南
- 提高開發效率的 Eclipse 實用操作(2)Eclipse
- 轉:【Eclipse外掛開發】開啟編輯器Eclipse