由于EJB對象可以運(yùn)行在與客戶不同的機(jī)器上,因此客戶不能夠直接實(shí)例化EJB對象。EJB推崇位置透明性,因此從這個(gè)角
度考慮客戶不應(yīng)該對EJB對象的位置信息進(jìn)行關(guān)注。
為獲得對EJB對象的引用,客戶代碼需要從EJB對象工廠中請求EJB對象。該工廠負(fù)責(zé)實(shí)例化EJB對象。EJB規(guī)范將這種工廠
稱之為Home對象。Home對象的職責(zé)主要有:
1、創(chuàng)建EJB對象
2、查找現(xiàn)有的EJB對象
3、刪除EJB對象
同EJB對象一樣,Home對象專屬于特定的EJB容器。Home對象含有容器特定的邏輯,如負(fù)載均衡邏輯、借助于圖形化管理
控制臺追蹤信息等。與此同時(shí),Home對象也是EJB容器的組成部分,通過容器提供的工具能夠自動創(chuàng)建它。
Home對象是創(chuàng)建EJB對象的工廠。但是Home對象是如何實(shí)例化EJB對象的呢?為創(chuàng)建Home對象,EJB容器需要掌握這方面的
信息。通過指定Home接口給容器即可完成這方面信息的注入。Home接口簡單的定義了用于創(chuàng)建、銷毀和查找EJB對象的方法。
容器的Home對象實(shí)現(xiàn)了Home接口。
使用Home接口存在一個(gè)問題,即通過Home接口創(chuàng)建EJB實(shí)例速度很慢,而且,借助于遠(yuǎn)程接口調(diào)用EJB實(shí)例也是如此。當(dāng)
訪問EJB對象時(shí),通常會依次觸發(fā)如下內(nèi)容:
1、客戶調(diào)用本地存根
2、存根將參數(shù)壓包成適合網(wǎng)絡(luò)傳輸格式
3、存根借助于網(wǎng)絡(luò)將參數(shù)傳遞給骨架
4、骨架將參數(shù)解包成適合Java的格式。
5、骨架調(diào)用EJB對象。
6、EJB對象獲得所需的中間件服務(wù),如連接池、事務(wù)、安全性和生命周期服務(wù)。
7、EJB對象調(diào)用企業(yè)Bean實(shí)例,Bean實(shí)例處理客戶請求。
從EJB2.0開始,客戶能夠通過本地對象(而不是EJB對象)快速、高效的訪問企業(yè)Bean組件。具體過程如下:
1、客戶訪問本地對象
2、本地對象獲得所需的中間件服務(wù)
3、一旦企業(yè)Bean實(shí)例處理完客戶請求,則將結(jié)果返回給本地對象,最終傳回給客戶。
EJB對象指請求攔截器,遠(yuǎn)程接口指供請求攔截器使用的接口,Home對象指工廠,Home接口指工廠接口。
本地接口存在的缺點(diǎn):
1、只在同一進(jìn)程中有效。如在同一應(yīng)用服務(wù)器中存在訪問銀行賬號實(shí)體Bean的銀行出納會話Bean,如果EJB組件代碼本身依賴
于本地接口實(shí)現(xiàn),則不能夠通過遠(yuǎn)程訪問到它。
2、通過引用(傳址),而不是傳值來marshal參數(shù)。
部署描述符:借助于部署描述符文件,EJB組件能夠聲明其依賴的中間件服務(wù)。然后,EJB容器將通過部署描述符了解到組件
待使用的中間件服務(wù)。
posted on 2009-10-29 15:56
王永慶 閱讀(208)
評論(0) 編輯 收藏 所屬分類:
EJB學(xué)習(xí)筆記