posts - 36,comments - 31,trackbacks - 0

          ??? EJB 1.0 1.1規范只定義了一種在EJB組件中引用另一組件的方法,即通過Bean的遠程接口。如果兩個Bean都在同一個容器之內,則這種網絡開銷是不必要的。為解決這個問題,EJB 2.0規范定義了一種新的EJB引用類型,即本地引用。

            一、兩種引用類型

            為了從其他EJB組件訪問某個Bean,容器提供了一種特殊的機制。這種機制允許一個Bean提供者通過稱為EJB引用的“邏輯名字”引用另一個EJBHomeEJB容器利用應用的部署描述器為EJB構造環境,而這些引用在部署描述器中作為特殊的項目聲明。在部署描述器中,部署者把組件代碼中要用到的EJB引用綁定到其他被引用EJBHome

            如前所述,在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

            要把一個現有的遠程接口改為本地接口,有三個地方必須修改:部署描述器,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規范獲得廣泛應用之前,我們還得等待一段時間。
          posted on 2006-07-31 10:33 心隨我動 閱讀(244) 評論(0)  編輯  收藏 所屬分類: EJB

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          網站流量統計:
          澳大利亞 ABC 在線英語廣播電臺
          主站蜘蛛池模板: 大兴区| 盐池县| 资阳市| 团风县| 八宿县| 格尔木市| 大城县| 晋城| 五常市| 灵寿县| 贵定县| 广德县| 颍上县| 南京市| 博湖县| 马鞍山市| 亳州市| 焉耆| 布尔津县| 富蕴县| 岳西县| 隆昌县| 迁西县| 北海市| 宁夏| 芷江| 南昌市| 阳信县| 沧源| 和平区| 靖州| 辽宁省| 高邑县| 大洼县| 迁西县| 堆龙德庆县| 香河县| 凯里市| 咸宁市| 铁岭市| 镇巴县|