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

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

j2ee設計模式:CMP到BMP模式(一)

2019-11-18 16:21:23
字體:
來源:轉載
供稿:網友

   EJB2.0終于給了我們一個可操作的容器管理持久(CMP)模型。只要有可能,在我的EJB項目中我就用CMP beans;但是,由于這件奇怪的事情,我需要把我的實體變成bean管理(BMP)的。我使用下面的模式讓我干凈利落的從CMP模型轉換到bean管理持久模型。

    在這篇文章中,我們將討論:
    1.CMP 2.0: 發生了什么變化?
    2.Inventory(貨物清單)EJB應用程序
    3.開發一個CMP bean
     4.移植CMP bean到BMP

cmp 2.0: 發生了什么變化?
     當EJB問世的時候,CMP引起了很大的反響,當EJB2.0問世的時候,又對CMP模型進行了修訂,它給了我們真正想要的特性:諸如關系和查詢語言標準化。
    與EJB1.1相比,當我們用EJB2.0寫一個CMP bean時,我們的寫法有很大的不同。我們創建抽象類,而不是創建被容器管理變量的公共域,我們像javaBean一樣創建抽象的屬性(getters and setters)。這準許特定廠商的持久性管理器用他們自己的方式實現數據訪問器(accessors)。
    這將幫助他們(廠商)提出像這樣的邏輯:
      ●由于他們不調用任何set方法,所以在ejbStore()中不做任何動作
      ●他們僅僅改變一個域,所以我們只在UPDATE查詢語句中set那個域
      ●我們延遲裝載一些數據,所以當用戶用GET方法請求數據的時候我們才讀取他

    順便提一個問題:為什么我們必須在抽象類中創建抽象方法?為什么持久性管理器不能在派生類中創建方法?
    答:我們必須在抽象類中訪問這些方法。例如:在ejbCreate()中,我們通過傳入參數來SET它們。

Inventory EJB 應用程序  
    為了說明該實體模型,我們將看到一個簡單的應用用該實體模型化該貨物清單(Inventory)系統。我們應用程序包括以下組成部分:

   inventory實體bean:  這是我們的焦點。他將映射到數據庫表Inventory,該表紀錄了條目的名字(主關鍵字),價格和倉庫中條目的數目
   價格無狀態會話bean:該Bean用Inventory實體Bean來得到條目的價格,它用本地(local)接口來訪問該實體
   價格客戶: 這個命令行應用程序在會話(session)上運行該方法來測試所有工作都運行得很好
   關鍵點是當我們把這個Inventory實體從 CMP移植到BMP實現時候,什么也不要做改變

  讓我們看一下用CMP實現Inventory實體
開發一個cmp bean
   inventory CMP要我們創建一個抽象類(依照實體說明),xml描述文件告訴框架應該影射什么,圖一說明了我們的條目看起來是什么樣子

j2ee設計模式:CMP到BMP模式(一)
圖一


抽象實體bean
該抽象實體有下列屬性:
  實現了javax.ejb.EntityBean接口
   abstract public class InventoryBean implements EntityBean
  實現在實體接口中聲明的方法
  
public void setEntityContext(EntityContext context) {
   ctx = context;
}
public void unsetEntityContext() {
   ctx = null;
}
public void ejbActivate() {}
public void ejbPassivate() {}
public void ejbRemove() throws RemoveException {}
public void ejbStore() {}
public void ejbLoad() {}

  
  實現ejbCreate()和ejbPostCreate()方法該方法對應于HOME接口中的Create()方法(用抽象set方法set所有參數)
  
 public String ejbCreate(String item, float PRice, int stock) throws CreateException {
      setItem(item);
      setPrice(price);
      setStock(stock);
      return null;
}
public void ejbPostCreate(String item, float price, int stock) throws CreateException {}
  實現抽象get和set方法
  
public abstract String getItem();
public abstract void setItem(String item);
public abstract float getPrice();
public abstract void setPrice(float price);
public abstract int getStock();
public abstract void setStock(int stock);

  實現一個助手方法來訪問實體上下文(在后面的BMPbean中我們將用到它)
  
public EntityContext getEntityContext() {
   return ctx;
}


ejb部署描述符  
我們創建了一個CMP實體類,現在該創建部署描述符了.首先我們將創建一個標準的"ejb-jar.xml",然后我們需要配置與廠商有關的信息.我們將說明WebLogic 6.1 部署描述符,我們選一個.
  標準 ejb-jar.xml

  基本的實體配置信息:

  我們將配置類名,用局部變量,在實體內部它們是局部變量.我們通過持久類型XML標簽告訴容器該實體是CMP
<entity>
  <ejb-name>InventoryBean</ejb-name>
  <local-home>InventoryHome</local-home>
  <local>Inventory>/local<
  <ejb-class>InventoryBean</ejb-class>
  <persistence-type>Container</persistence-type>
  <prim-key-class>java.lang.String</prim-key-class>
  <reentrant>False</reentrant>

接著,我們將告訴容器那些域是容器管理的,item域是主鍵類:

原文:http://www.onjava.com/pub/a/onjava/2002/04/10/j2eedesign.Html

matrix開源技術經Onjava授權翻譯并發布.
如果你對此文章有任何看法或建議,請到Matrix論壇發表您的意見.
注明: 如果對matrix的翻譯文章系列感興趣,請點擊oreilly和javaworld文章翻譯計劃查看詳細情況
您也可以點擊-minpeng_2001查看翻譯作者的詳細信息.進入討論組討論。

(出處:http://m.survivalescaperooms.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 家居| 改则县| 黄冈市| 乡城县| 长顺县| 马鞍山市| 高青县| 甘德县| 延吉市| 喀喇| 汶上县| 年辖:市辖区| 柘城县| 平江县| 重庆市| 延寿县| 额济纳旗| 永丰县| 察雅县| 烟台市| 凤台县| 建昌县| 丰原市| 建宁县| 北京市| 雅江县| 庆阳市| 白沙| 清原| 乃东县| 牡丹江市| 靖州| 防城港市| 木里| 全州县| 凤阳县| 石棉县| 武邑县| 南京市| 沽源县| 邵阳县|