三、無狀態(tài)會話Bean實例
        在上一篇文章里,其實我們已經(jīng)應(yīng)用到了無狀態(tài)會話Bean,那好,下面我們詳細(xì)的來分析下上一篇文章里給出的示例程序。 沒有閱讀過的朋友請點擊這里閱讀:<<一步一步學(xué)EJB 3.0(二):初探企業(yè)EJB模塊開發(fā)>> .

         首先我們來看看接口的定義:

1 /**
2  * 遠(yuǎn)程接口
3  * @author Beniao
4  */
5 @Remote
6 public interface HelloRemote {
7     void sayHello(String str);
8 }

    
        這里我們定義了一個接口,并通過@Remote將此接口標(biāo)記為遠(yuǎn)程接口.下面是實現(xiàn)類的定義:

 1/**
 2 * 無狀態(tài)會話Bean
 3 * @author Beniao
 4 */

 5@Stateless(mappedName="myejb/hello")
 6@Remote(HelloRemote.class)  //所實現(xiàn)的遠(yuǎn)程接口
 7public class HelloBean implements HelloRemote {
 8    public void sayHello(String str) {
 9        System.out.println("Hello " + str);
10    }

11}


        這個實現(xiàn)類很簡單,就是直接在參數(shù)前加上"Hello "后輸出.這里我們需要注意的就是在類上面的兩個標(biāo)注符:
        1.  @Stateless: 用于標(biāo)記當(dāng)前Java Bean為無會話狀態(tài)Bean. 通過指定屬性mappedName來生成JNDI.
        2.  @Remote:  用于標(biāo)記當(dāng)前Java Bean所實現(xiàn)的遠(yuǎn)程接口

        OK,上面就是一個無會話Bean的簡單示例,客戶端可以直接通過@Stateless中配置的mappedName來獲取實例.

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 }

        更詳細(xì)的開發(fā)請大家查看相應(yīng)的資料,我寫這些文章只是一個引導(dǎo)而已.

四、有狀態(tài)會話Bean實例
        我們還是從商業(yè)接口開始分析,下面是一個簡單購物車的商業(yè)接口:

 1 /**
 2  * 購物車的商業(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ù)實現(xiàn)類如下:
 1 /**
 2  * 通過@Stateful來標(biāo)注該Java Bean為有會話狀態(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("將商品移出購物車");
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ā)一個有會話狀態(tài)Java Bean可以通過@Stateful來標(biāo)注該Java Bean為有會話狀態(tài)Bean. 這與無會話狀態(tài)Bean不同的是在最后一個方法上便可以看出,加上了@Remove標(biāo)注.
        1. @Stateful : 用于標(biāo)注一個Java Bean為有狀態(tài)會話Bean.
        2. @Remove :  當(dāng)呼叫它, 就會清除這個 Instance.

        有狀態(tài)會話Bean在實際開發(fā)中用得不是很多,這里就不做詳細(xì)介紹, 記得前面說過,這些文章只是引導(dǎo)性文章,要深入詳細(xì)的學(xué)習(xí)EJB請查看相關(guān)資料和書籍.

注: 原創(chuàng)文章歡迎轉(zhuǎn)載,但請注明出處 http://beniao.blogjava.net