国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

EJB3.0開發指南之無狀態會話Bean

2019-11-18 15:46:05
字體:
來源:轉載
供稿:網友

  在所有的EJB3.0規范中定義的EJB,都不必實現Home接口。

  一個會話Bean必須有一個業務接口,這個接口由會話Bean來實現,或者也可以由會話Bean來產生。這樣,你可以只寫一個文件,就可以生成業務邏輯實現類、遠程接口、本地接口等。


@Remote
@Local
@Stateless

public class CounterBean
{
……
}
  在目前jboss的實現中,必須要有一個獨立的業務接口。

  這個接口不必實現EJBObject或者EJBLocalObject。

  一個無狀態會話Bean 必須使用Stateless注釋,以表明它是一個無狀態的會話Bean。EJB容器將根據這個注釋來判定它的類型。或者實現javax.ejb.sessionBean接口。

  一個無狀態的會話Bean可以實現setSessionContext方法,也可以不實現。

  一個無狀態的會話Bean可以實現ejbCreate/ejbRemove方法。

  一個無狀態的會話Bean可以通過依靠注入(Dependency Injection)也就是現在吵得挺火的IOC獲取容器的資源和環境屬性。具體介紹請看后面的章節。

  在Eclipse中導入本文提供的例子Stateless。

  這個例子是一個計數器的例子,它實現了兩個業務方法add和getNumber,add方法就是給計數器加上一個整數值,getNumber方法將得到計數器的當前值。

  這個例子主要有5個文件:

   Counter.java:業務接口。

   CounterBean.java:業務實現類。將來我們開發的EJB也都是這樣命名(在接口名上加上Bean)。

   Client.java:測試EJB的客戶端類。
  
   jndi.PRoperties:jndi屬性文件,提供訪問jdni的基本配置屬性。

   Build.xml:ant 配置文件,用以編譯、發布、測試、清除EJB。

   下面針對每個文件的內容做一個介紹。

Counter.java
package com.kuaff.ejb3.stateless;

import javax.ejb.Remote;

@Remote

public interface Counter
{
 public int add(int i);
 public int getNumber();
}
  這個接口很簡單,定義了上面介紹的兩個業務方法,同時,我們為這個接口加上了Remote注釋,這樣我們的遠程客戶端就可以通過JNDI名稱查找到它,并調用它的業務方法。

  它的JNDI名稱怎么配置呢?

  你不必配置它的JNDI名稱,也不必寫它的配置文件。在JBOSS實現的EJB3.0中,你不必寫任何的EJB部署文件和jboss部署文件。JBOSS默認使用接口的全稱作為它的JNDI名。在上面的例子中,它的全稱就是:

  com.kuaff.ejb3.stateless.Counter,你也可以通過Counter.class.forName()得到。

CounterBean.java

package com.kuaff.ejb3.stateless;

import javax.ejb.Stateless;

@Stateless

public class CounterBean implements Counter
{
 private int number = 0;
 //給計數器加上i
 public int add(int i)
 {
  number += i;
  return number;
 }

 //得到當前的計數

 public int getNumber()
 {
  return number;
 }

}

  這個是計數器的實現類。注重這個類使用Stateless做了注釋,這是必須的。

Client.java

package com.kuaff.ejb3.stateless;
import javax.naming.InitialContext;
import javax.naming.NamingException;

 public class Client
 {
  public static void main(String[] args)
  {
   InitialContext ctx;
   try
    ctx = new InitialContext();
    Counter counter = (Counter) ctx.lookup(Counter.class.getName());
    counter.add(10);
    System.out.println("當前的number:" + counter.getNumber());
    counter.add(10);
    System.out.println("當前的number:" + counter.getNumber());
    Counter counter2 = (Counter) ctx.lookup(Counter.class.getName());
    counter2.add(10);
    System.out.println("當前的number:" + counter2.getNumber());
    catch (NamingException e)
    {
     e.printStackTrace();
    }
   
   }
  }
  這個類用來測試我們發布的計數器EJB。首先通過ctx = new InitialContext();得到上下文,然后通過lookup查找計數器,然后給計數器加10,顯示當前的計數器信息。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 广河县| 惠来县| 嘉义县| 溧水县| 丘北县| 襄垣县| 陵川县| 工布江达县| 安泽县| 云霄县| 黑水县| 宜宾市| 昌都县| 菏泽市| 南丰县| 安平县| 博乐市| 大余县| 昌平区| 芦山县| 镇坪县| 凤城市| 会泽县| 阿克| 招远市| 揭东县| 三江| 阿拉善右旗| 保康县| 饶平县| 舒城县| 余江县| 铜山县| 四川省| 金溪县| 凤山县| 乐东| 嘉善县| 年辖:市辖区| 石城县| 宁河县|