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

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

前進:從EJB 2.1到EJB 3.0

2019-11-18 11:36:35
字體:
來源:轉載
供稿:網友

  在開始討論怎樣從EJB 2.1遷移到EJB 3.0之前,有必要先了解一下遷移之后將會得到什么:主要來說,EJB 3.0減少了在創建EJB時所需的類、接口、部署描述符的數量。EJB 3.0通過用純舊式java對象(POJO)取代抽象bean類,用純舊式Java接口(POJI)取代組件與主接口(Component & Home),簡化了EJB的開發過程,在此,后者是可選項--你不必全部包含進它們。

  部署描述符--ejb-jar.xml--由其指定了EJB名、bean對象名、接口、查找者方法、容器治理關系(CMR),在此就不再需要其他與開發商相關的部署描述符了,因為已被組件類中的元數據注釋所取代。這就是你為什么需要使用JDK 5.0來開發EJB 3.0應用的原因,因為它們使用了注釋,而注釋在JDK 5.0之前不可用。

  EJB 3.0用javax.persistence.EntityManager API取代了EJB 2.1中的查找者方法,通常EJB 2.1的客戶端應用使用JNDI名來獲得一個對實體(entity)及會話(session)bean對象的引用,而EJB 3.0客戶端應用則是使用@Resource、@Inject和@EJB。

  在EJB 2.1中,可使用javax.ejb包裝類與接口來開發實體與會話,在此,一個會話bean實現了SessionBean接口,而一個實體bean實現了EntityBean接口;相比之下,EJB 3.0的會話與實體bean類是POJO,并沒有實現SessionBean和EntityBean接口。

  一個EJB 2.1的會話bean類指定了一個或多個ejbCreate方法、回調方法、setSessionContext方法和業務(business)方法;與此類似,一個EJB 2.1實體指定了ejbCreate()、ejbPostCreate()、回調、容量治理持久性(CMP)、CMR的getter/setter和業務方法。一個EJB 3.0會話bean類只指定了業務方法;同樣地,一個EJB 3.0實體bean只指定了業務方法、對不同bean屬性的getter/setter方法及對bean關系的getter/setter方法。

  EJB 2.1主接口擴展了javax.ejb.EJBHome接口、另有一個本地主接口擴展了javax.ejb.EJBLocalHome接口;EJB 2.1的遠程接口擴展了javax.ejb.EJBObject接口,另有一個本地接口擴展了javax.ejb.EJBLocalObject接口。在EJB 3.0中,并沒有指定組件與主接口--它們已被POJI取代,假如一個會話bean類沒有指定一個業務接口,那么EJB服務器將從會話bean類中為它生成一個POJI業務接口。

  請在腦海中記住這些變化,本文的后續部分,將用兩個示例來集中講述把一個會話bean和一個實體bean,從EJB 2.1遷移到EJB 3.0時所需的具體信息。

  遷移會話bean

  示例中的EJB 2.1會話bean類--BookCatalogBean--指定了一個ejbCreate方法、一個稱為getTitle()的業務方法和一個回調方法:

// BookCatalogBean.java
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

public class BookCatalogBean implements SessionBean
{
 PRivate SessionContext ctx;
 public String getEdition(String title)
 {
  if(title.equals("Java & XML"))
   return new String("第二個版本");
  if(title.equals("Java and XSLT"))
   return new String("第一個版本");
 }
 public void ejbCreate(){}
 public void ejbRemove() {}
 public void ejbActivate() {}
 public void ejbPassivate() {}
 public void setSessionContext(SessionContext ctx)
 {this.ctx=ctx;}
}
  在EJB 3.0會話bean中,可使用元數據注釋來指定bean類型,即使用@Stateful和@Stateless來分別指定Stateful(有狀態)或Stateless(無狀態)。也可在一個會話bean中用一個業務接口來取代組件與主接口,因為業務接口是一個POJI,所以可用@Local和@Remote來指定其為本地或遠程類型,而一個會話bean可同時實現本地與遠程接口。

  假如在bean類不指定接口類型(本地或遠程),那EJB服務器在默認情況下會自動生成一個本地業務接口,在此也可使用@Local和@Remote注釋來指定接口類。

  下面的EJB 3.0會話bean是一個POJO,其由前面的BookCatalogBean.java EJB 2.1無狀態會話bean移植而來,注重它使用了@Stateless注釋,實現了一個本地業務接口,并在@Local注釋中指定了本地接口類名。

// BookCatalogBean.java EJB 3.0 Session Bean
@Stateless
@Local ({BookCatalogLocal.java})
public class BookCatalogBean implements
BookCatalogLocal
{
 public String getEdition(String title)
 {
  if(title.equals("Java & XML"))
   return new String("第二個版本");
  if(title.equals("Java and XSLT"))
   return new String("第一個版本");
 }
}
  另外,也要注重,通過@Local注釋,上面的EJB 3.0bean類用一個本地業務接口(POJI)取代了EJB 2.1中的組件與主接口。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 云龙县| 邓州市| 汽车| 若羌县| 衢州市| 滦平县| 神木县| 米易县| 金湖县| 辽中县| 汕尾市| 苏尼特左旗| 自贡市| 安化县| 韶山市| 林西县| 曲沃县| 克拉玛依市| 墨玉县| 阳谷县| 禄劝| 嵊州市| 共和县| 云梦县| 屏山县| 武威市| 涡阳县| 舞阳县| 新泰市| 合江县| 钟山县| 噶尔县| 平南县| 韶关市| 乌兰察布市| 威宁| 宁波市| 共和县| 米脂县| 札达县| 青铜峡市|