三、無(wú)狀態(tài)會(huì)話Bean實(shí)例
在上一篇文章里,其實(shí)我們已經(jīng)應(yīng)用到了無(wú)狀態(tài)會(huì)話Bean,那好,下面我們?cè)敿?xì)的來(lái)分析下上一篇文章里給出的示例程序。 沒(méi)有閱讀過(guò)的朋友請(qǐng)點(diǎn)擊這里閱讀:<<一步一步學(xué)EJB 3.0(二):初探企業(yè)EJB模塊開發(fā)>> .
業(yè)務(wù)實(shí)現(xiàn)類如下:
從上面可以看出,我們要開發(fā)一個(gè)有會(huì)話狀態(tài)Java Bean可以通過(guò)@Stateful來(lái)標(biāo)注該Java Bean為有會(huì)話狀態(tài)Bean. 這與無(wú)會(huì)話狀態(tài)Bean不同的是在最后一個(gè)方法上便可以看出,加上了@Remove標(biāo)注.
1. @Stateful : 用于標(biāo)注一個(gè)Java Bean為有狀態(tài)會(huì)話Bean.
2. @Remove : 當(dāng)呼叫它, 就會(huì)清除這個(gè) Instance.
有狀態(tài)會(huì)話Bean在實(shí)際開發(fā)中用得不是很多,這里就不做詳細(xì)介紹, 記得前面說(shuō)過(guò),這些文章只是引導(dǎo)性文章,要深入詳細(xì)的學(xué)習(xí)EJB請(qǐng)查看相關(guān)資料和書籍.
注: 原創(chuàng)文章歡迎轉(zhuǎn)載,但請(qǐng)注明出處 http://beniao.blogjava.net
在上一篇文章里,其實(shí)我們已經(jīng)應(yīng)用到了無(wú)狀態(tài)會(huì)話Bean,那好,下面我們?cè)敿?xì)的來(lái)分析下上一篇文章里給出的示例程序。 沒(méi)有閱讀過(guò)的朋友請(qǐng)點(diǎn)擊這里閱讀:<<一步一步學(xué)EJB 3.0(二):初探企業(yè)EJB模塊開發(fā)>> .
首先我們來(lái)看看接口的定義:
1 /**
2 * 遠(yuǎn)程接口
3 * @author Beniao
4 */
5 @Remote
6 public interface HelloRemote {
7 void sayHello(String str);
8 }
2 * 遠(yuǎn)程接口
3 * @author Beniao
4 */
5 @Remote
6 public interface HelloRemote {
7 void sayHello(String str);
8 }
這里我們定義了一個(gè)接口,并通過(guò)@Remote將此接口標(biāo)記為遠(yuǎn)程接口.下面是實(shí)現(xiàn)類的定義:
1
/**
2
* 無(wú)狀態(tài)會(huì)話Bean
3
* @author Beniao
4
*/
5
@Stateless(mappedName="myejb/hello")
6
@Remote(HelloRemote.class) //所實(shí)現(xiàn)的遠(yuǎn)程接口
7
public class HelloBean implements HelloRemote {
8
public void sayHello(String str) {
9
System.out.println("Hello " + str);
10
}
11
}

2

3

4

5

6

7

8

9

10

11

這個(gè)實(shí)現(xiàn)類很簡(jiǎn)單,就是直接在參數(shù)前加上"Hello "后輸出.這里我們需要注意的就是在類上面的兩個(gè)標(biāo)注符:
1. @Stateless: 用于標(biāo)記當(dāng)前Java Bean為無(wú)會(huì)話狀態(tài)Bean. 通過(guò)指定屬性mappedName來(lái)生成JNDI.
2. @Remote: 用于標(biāo)記當(dāng)前Java Bean所實(shí)現(xiàn)的遠(yuǎn)程接口
OK,上面就是一個(gè)無(wú)會(huì)話Bean的簡(jiǎn)單示例,客戶端可以直接通過(guò)@Stateless中配置的mappedName來(lái)獲取實(shí)例.
1 public class Main {
2 public static void main(String[] args) throws Exception {
3 Context ctx = new InitialContext();
4 HelloRemote hw = (HelloRemote)ctx.lookup("myejb/hello");
5 hw.sayHello(" Beniao!");
6 }
7 }
2 public static void main(String[] args) throws Exception {
3 Context ctx = new InitialContext();
4 HelloRemote hw = (HelloRemote)ctx.lookup("myejb/hello");
5 hw.sayHello(" Beniao!");
6 }
7 }
更詳細(xì)的開發(fā)請(qǐng)大家查看相應(yīng)的資料,我寫這些文章只是一個(gè)引導(dǎo)而已.
四、有狀態(tài)會(huì)話Bean實(shí)例
我們還是從商業(yè)接口開始分析,下面是一個(gè)簡(jiǎn)單購(gòu)物車的商業(yè)接口:
1 /**
2 * 購(gòu)物車的商業(yè)接口
3 * @author Beniao
4 */
5 @Remote
6 public interface ShoppingCatRemote {
7 void addItem(String item, int quantity);
8 void removeItem(String item, String quantity);
9 Map<String, Integer> getItems();
10 void clearItems();
11 }
2 * 購(gòu)物車的商業(yè)接口
3 * @author Beniao
4 */
5 @Remote
6 public interface ShoppingCatRemote {
7 void addItem(String item, int quantity);
8 void removeItem(String item, String quantity);
9 Map<String, Integer> getItems();
10 void clearItems();
11 }
業(yè)務(wù)實(shí)現(xiàn)類如下:
1 /**
2 * 通過(guò)@Stateful來(lái)標(biāo)注該Java Bean為有會(huì)話狀態(tài)Bean
3 * @author Beniao
4 */
5 @Stateful(mappedName="ejb/ShoppingCat")
6 public class ShoppingCatBean implements ShoppingCatRemote {
7
8 private HashMap<String ,Integer> items = new HashMap<String, Integer>();
9
10
11 public void addItem(String item, int quantity) {
12 Integer orderQuantity = items.get(item);
13 if(orderQuantity == null) {
14 orderQuantity = 0;
15 }
16 orderQuantity += quantity;
17 items.put(item, orderQuantity);
18 }
19
20 public void removeItem(String item, String quantity) {
21 System.out.println("將商品移出購(gòu)物車");
22 }
23
24 public Map<String, Integer> getItems() {
25 //..代碼略
26 return null;
27 }
28
29 @Remove
30 public void clearItems() {
31 items.clear();
32 }
33 }
2 * 通過(guò)@Stateful來(lái)標(biāo)注該Java Bean為有會(huì)話狀態(tài)Bean
3 * @author Beniao
4 */
5 @Stateful(mappedName="ejb/ShoppingCat")
6 public class ShoppingCatBean implements ShoppingCatRemote {
7
8 private HashMap<String ,Integer> items = new HashMap<String, Integer>();
9
10
11 public void addItem(String item, int quantity) {
12 Integer orderQuantity = items.get(item);
13 if(orderQuantity == null) {
14 orderQuantity = 0;
15 }
16 orderQuantity += quantity;
17 items.put(item, orderQuantity);
18 }
19
20 public void removeItem(String item, String quantity) {
21 System.out.println("將商品移出購(gòu)物車");
22 }
23
24 public Map<String, Integer> getItems() {
25 //..代碼略
26 return null;
27 }
28
29 @Remove
30 public void clearItems() {
31 items.clear();
32 }
33 }
從上面可以看出,我們要開發(fā)一個(gè)有會(huì)話狀態(tài)Java Bean可以通過(guò)@Stateful來(lái)標(biāo)注該Java Bean為有會(huì)話狀態(tài)Bean. 這與無(wú)會(huì)話狀態(tài)Bean不同的是在最后一個(gè)方法上便可以看出,加上了@Remove標(biāo)注.
1. @Stateful : 用于標(biāo)注一個(gè)Java Bean為有狀態(tài)會(huì)話Bean.
2. @Remove : 當(dāng)呼叫它, 就會(huì)清除這個(gè) Instance.
有狀態(tài)會(huì)話Bean在實(shí)際開發(fā)中用得不是很多,這里就不做詳細(xì)介紹, 記得前面說(shuō)過(guò),這些文章只是引導(dǎo)性文章,要深入詳細(xì)的學(xué)習(xí)EJB請(qǐng)查看相關(guān)資料和書籍.
注: 原創(chuàng)文章歡迎轉(zhuǎn)載,但請(qǐng)注明出處 http://beniao.blogjava.net