本文為原創(chuàng),如需轉(zhuǎn)載,請(qǐng)注明作者和出處,謝謝!
上一篇:
eclipse + JBoss 5 + EJB3開(kāi)發(fā)指南(1):編寫(xiě)第一個(gè)無(wú)狀態(tài)的SessionBean
編寫(xiě)有狀態(tài)的(Stateful)的Session Bean也非常簡(jiǎn)單,只需要將無(wú)狀態(tài)注釋(@Stateless)改成有狀態(tài)注釋?zhuān)?#64;Stateful)即可。如果使用Stateful Sessionbean,客戶端在使用同一個(gè)SessionBean對(duì)象實(shí)例時(shí)可以保存狀態(tài),也就是說(shuō),在多次引用該對(duì)象時(shí)實(shí)際上在服務(wù)端是使用的同一個(gè)Sessionbean的對(duì)象實(shí)例,而無(wú)狀態(tài)sessionbean使用了不同的sessionbean對(duì)象實(shí)例,因此,是無(wú)法保存狀態(tài)的。
下面將編寫(xiě)一個(gè)簡(jiǎn)單的購(gòu)物車(chē)的例子,該例子將客戶購(gòu)買(mǎi)的商品都保存在stateful sessionbean中的List對(duì)象中。然后在客戶端使用同一個(gè)sessionbean的對(duì)象實(shí)例輸出這些商品。我們首先來(lái)實(shí)現(xiàn)一個(gè)sessionbean的遠(yuǎn)程接口,這和無(wú)狀態(tài)sessionbean是一樣的。代碼如下:
package service;
import java.util.List;
import javax.ejb.Remote;
@Remote
public interface ShoppingCart
{
// 添加某個(gè)商品信息
public void addCommodity (String value);
// 獲得客戶購(gòu)買(mǎi)的所有商品的紗銜泥
public List<String> getCommodity();
}
為了方便,在這里只將商品名保存在List對(duì)象中,讀者也可以在List對(duì)象中保存更復(fù)雜的信息,如使用一個(gè)對(duì)象來(lái)保存商品信息。
下面來(lái)編寫(xiě)具體的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;
}
}
最后我們編寫(xiě)一個(gè)客戶端調(diào)用程序,代碼如下:
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("自行車(chē)");
shoppingCart.addCommodity("筆記本電腦");
shoppingCart.addCommodity("液晶電視");
List<String> commodities = shoppingCart.getCommodity();
for(String commodity: commodities)
{
System.out.println(commodity);
}
}
}
在客戶端調(diào)用時(shí),需要將ShoppingCart接口復(fù)制到客戶端,當(dāng)然,@Remote可以去掉。別忘了引用JBoss安裝目錄中的client目錄中的jar文件。客戶端仍然使用了jndi.properties文件來(lái)配置相應(yīng)的信息,該文件位于src目錄下,內(nèi)容如下;
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost
在執(zhí)行上面的程序后,將輸出如下的信息:
自行車(chē)
筆記本電腦
液晶電視
從上面的輸出結(jié)果可以看出,使用getCommodity方法成功獲得了所有的商品信息。要注意的是,需要使用同一個(gè)sessionbean對(duì)象實(shí)例(shoppingCart)才能保存狀態(tài)。如果在web應(yīng)用程序中,需要將shoppingCart對(duì)象保存在Session中,這樣在同一個(gè)會(huì)話中的用戶就可以使用該購(gòu)物車(chē)對(duì)象了。
下一篇:eclipse + JBoss 5 + EJB3開(kāi)發(fā)指南(3):使用Session Bean的本地接口
新浪微博:http://t.sina.com.cn/androidguy 昵稱(chēng):李寧_Lining