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

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

用本地引用提高EJB訪問效率

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

  EJB 1.0和1.1規范只定義了一種在EJB組件中引用另一組件的方法,即通過Bean的遠程接口。假如兩個Bean都在同一個容器之內,則這種網絡開銷是不必要的。為解決這個問題,EJB 2.0規范定義了一種新的EJB引用類型,即本地引用。
  
  
  一、兩種引用類型
  
  
  為了從其他EJB組件訪問某個Bean,容器提供了一種非凡的機制。這種機制答應一個Bean提供者通過稱為EJB引用的“邏輯名字”引用另一個EJB的Home。EJB容器利用應用的部署描述器為EJB構造環境,而這些引用在部署描述器中作為非凡的項目聲明。在部署描述器中,部署者把組件代碼中要用到的EJB引用綁定到其他被引用EJB的Home。
  
  
  如前所述,在EJB 2.0規范出現之前,在一個EJB中引用其他Bean只有一種方法,即通過遠程接口,它要求進行跨越網絡的遠程過程調用。假如某個事務由多個Bean協作完成,通過網絡進行多個對象的匯集和釋放將是一項相當繁重的工作。
  
  
  EJB 2.0規范新增了一種本地接口類型,答應在同一容器之內的Bean直接互相引用,避免了遠程接口的網絡開銷。本地接口是一種標準的java接口,而不是從RMI繼續得到。EJB組件的定義可以包含本地接口或遠程接口,或者兩者都定義。
  
  
  本地引用的指定方式和傳統的遠程引用一樣,即在部署描述器中指定。事實上,本地引用的部署描述元素與遠程引用的描述元素完全對應。
  
  
  下面的代碼片斷是一個典型的遠程引用:
  
  
  
  PRodUCt
  ejb/Product
  Entity
  com.xyz.widgets.ProductHome
  com.xyz.widgets.Product
  ../products/product.jar#Product
  

  
  
  
  
  下面的代碼片斷是同一Bean的本地引用:
  
  
  
  Product
  ejb/Product
  Entity
  com.xyz.widgets.ProductHome
  com.xyz.widgets.Product
  ../products/product.jar#Product
  

  
  
  
  
  下表簡要說明了各個元素的用途:
  用本地引用提高EJB訪問效率
  二、創建本地接口,通過本地接口訪問EJB
  
  
  要把一個現有的遠程接口改為本地接口,有三個地方必須修改:部署描述器,Bean的接口,以及對EJB的調用。前面我們介紹了如何通過部署描述器指定一個本地引用,現在我們要把遠程接口轉換成本地接口,然后修改JNDI查找調用,讓它使用新的本地接口。
  
  
  ■ Home接口
  
  
  指定Home接口時,現在必須導入的是“javax.ejb.EJBLocalHome”,而不是“javax.ejb.EJBHome”。接口的聲明也必須改變,讓它從“EJBLocalHome”(一個標準Java接口)繼續,而不是從“EJBHome”(一個RMI接口)繼續。同時,從該接口定義的方法中唯一應該拋出的異常是javax.ejb.CreateException,而java.rmi.RemoteException異常則不再必要。
  
  
  ■ 本地接口
  
  
  指定本地接口時,現在必須導入“javax.ejb.EJBLocalObject”,而不是“javax.ejb.EJBObject”。接口聲明也必須改變,讓它從“EJBLocalObject”(一個本地接口)繼續,而不是從“EJBObject”(一個RMI接口)繼續。
  
  
  ■ 執行調用
  
  
  創建好接口、設置好部署描述器之后,剩下的工作就是執行JNDI調用,查找對其他EJB的引用。調用Bean的遠程接口時,javax.rmi.PortableRemoteObject的“narrow()”方法匯集經過RMI的調用。對于本地引用,這種開銷就不再必要,這時只需簡單地進行JNDI查找并進行適當的類型定型。下面是一個例子:
  
  
  
  home = (ProductHome) initCtx.lookup("java:comp/env/ejb/Product");
  
  
  
  
  
  它不僅提高了效率,而且代碼也比用來獲取遠程接口的代碼更直觀易懂。
  
  
  本地接口使得處于同一容器內的兩個EJB組件能夠更高效地進行通信。對于實體Bean的應用來說,這種技術尤其有用,因為與客戶程序直接訪問實體Bean相比,在實踐中,通過會話Bean訪問實體Bean得到了更廣泛的認可。
  
  
  假如你預備使用本地引用,請先檢查自己的應用服務器平臺是否支持它。也許,在EJB 2.0規范獲得廣泛應用之前,我們還得等待一段時間。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 福贡县| 广东省| 桂阳县| 拉萨市| 新余市| 新巴尔虎右旗| 天水市| 河北省| 普兰店市| 重庆市| 丰台区| 保定市| 乌拉特后旗| 若尔盖县| 青川县| 临朐县| 兰西县| 保定市| 修水县| 洛南县| 峡江县| 伽师县| 洛宁县| 信丰县| 辰溪县| 留坝县| 蛟河市| 滨州市| 延川县| 都江堰市| 黔南| 涟水县| 宿州市| 望奎县| 吉木乃县| 潍坊市| 泗水县| 乌拉特后旗| 甘泉县| 南平市| 承德市|