分布式對象和EJB調(diào)用_第1頁
分布式對象和EJB調(diào)用_第2頁
分布式對象和EJB調(diào)用_第3頁
分布式對象和EJB調(diào)用_第4頁
分布式對象和EJB調(diào)用_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、分布式對象和 EJB 調(diào)用作者:葉楓 Email: borland2004一、分布式對象什么是分布式對象?簡單地說,分布式對象就是可以允許從遠(yuǎn)程調(diào)用的對象。調(diào)用分布式對象的客戶端可 以是和分布式對象在同一個(gè)進(jìn)程內(nèi)的或者進(jìn)程外的,甚至是網(wǎng)絡(luò)上的任意一點(diǎn)。一個(gè)完整的分布式對象嚴(yán) 格地說不是一個(gè)簡單的單個(gè)對象或組件,它是一個(gè)體系,也就是說它是有一個(gè)或多個(gè)對象和接口組成的體 系。二、調(diào)用分布式對象一個(gè)調(diào)用分布式對象至少有尋找和調(diào)用兩個(gè)步驟組成。調(diào)用分布式對象并不是簡單地從遠(yuǎn)程直接調(diào)用對象 本身,而是調(diào)用分布式對象的代理 (Skeleton,此外客戶端也需要通過分布式對象在客戶端的代理 (Stub通 過

2、遠(yuǎn)程方法調(diào)用協(xié)議 (Remote Method Invocation, 也就是 RMI 來查找和調(diào)用分布式對象。因此一個(gè)分布式 對象體系是由三個(gè)部分組成,即分布式對象本身,對象在客戶端的代理 (Stub和對象在服務(wù)器端的代理 (Skeleton。具體的調(diào)用步驟如下:1. 客戶端調(diào)用分布式對象在客戶端的的代理 (Stub, Stub 接受請求并查找分布式對象在服務(wù)器 端的代理 (Skeleton,注意查找的不是分布式對象。找到之后向 Skeleton 發(fā)送調(diào)用請求,告訴 Skeleton 需要調(diào)用分布式對象的某個(gè)方法以及相關(guān)的參數(shù)。2. 分布式對象在服務(wù)器端的代理 Skeleton 接收到來自

3、Stub 的請求,并將其轉(zhuǎn)發(fā)給分布 式對象,有分布式對象就是這個(gè)請求并完成方法調(diào)用后將結(jié)果返回給 Skeleton 并有 Skeleton 返回給 stub 來完成整個(gè)調(diào)用過程。調(diào)用的示意圖如下: 在以上的調(diào)用過程中,客戶端只是調(diào)用 Stub ,并沒有調(diào)用分布式對象或其他接口,在客戶端看來, 分布式對象就像在本地一樣,它根本就不關(guān)心分布式對象究竟在哪里,它也不知道分布式對象的具體位 置,一切有分布式對象在客戶端的代理 Stub 來完成,這就是分布式的一個(gè)只要特征:分布透明。另外,也要注要到一點(diǎn),即客戶端通過 Stub 只能夠調(diào)用分布式對象的某些方法,這些方法是分布式 對象公開可以調(diào)用的方法。而

4、客戶端只是調(diào)用了 Stub 的方法就完成了調(diào)用分布式對象上的公開的方法, 這說明什么? 說明了 Stub 和分布式對象都必須實(shí)現(xiàn)一個(gè)公共的接口,這個(gè)接口就是遠(yuǎn)程接口 (Remote Interface 。但是,這兩個(gè)遠(yuǎn)程接口的實(shí)現(xiàn)是截然不同的,分布式對象實(shí)現(xiàn)的具體的業(yè)務(wù)規(guī)則或者說是真正 的邏輯,而 Stub 上的實(shí)現(xiàn)只是簡單的克隆,即簡單的調(diào)用,并沒有實(shí)現(xiàn)邏輯。分布式對象的實(shí)現(xiàn)方式可以有好多種,比如 CORBA , 微軟的 DCOM ,以及 Sun 的 RMI-IIOP 。三、 EJB 基本概念EJB實(shí)際上就是分布式對象在 Java 里的一種實(shí)現(xiàn)。所以一個(gè)完整的 EJB 既不是一個(gè)對象或組件,

5、它 是有一系列相關(guān)的對象,接口和描述文件組成,本文就 EJB 在 Java 里如何實(shí)現(xiàn)調(diào)用作一個(gè)簡單的描述。 其他具體的 EJB 相關(guān)的知識我就不作深入討論。一個(gè)基本的 EJB 應(yīng)該有以下的對象和接口組成 :-1. Enterprise Bean Class這個(gè)類是我們實(shí)現(xiàn)業(yè)務(wù)邏輯的地方,實(shí)際上這個(gè)類也只是一個(gè)虛類,具體的類有 EJB 容器實(shí)現(xiàn)。 2. EJB Object這個(gè)對象就是上面我們提到的 Skeleton ,是 Enterprise Bean在服務(wù)器端的代理,當(dāng)客戶端需要調(diào)用 Enterprise Bean上的方法時(shí), EJB 容器將會接收客戶的請求并將請求轉(zhuǎn)發(fā)給這個(gè)對象,有它來完

6、成對 Enterprise Bean的調(diào)用,在這過程中, EJB 容器還會完成一系列的動作或服務(wù),比如事務(wù)管理,安全 管理等。當(dāng)然了,這個(gè)對象并不需要我們來寫,是有 EJB 服務(wù)器來實(shí)現(xiàn)的。3. Remote Interface上面說了,客戶端需要調(diào)用 Enterprise Bean時(shí)有 EJB 容器將請求轉(zhuǎn)發(fā)給 EJB Object來完成,那么, EJB 容器怎么知道需要公開 Enterprise Bean的哪些方法給客戶呢?它又怎么知道如何實(shí)現(xiàn) EJB Object呢? 這就是 Remote Interface的功勞了。 Remote Interface就是一個(gè) Java Interfac

7、e,在這個(gè) Interface 里 定義了 Enterprise Bean中客戶端可以調(diào)用的方法, EJB 容器就是根據(jù)這個(gè)接口來實(shí)現(xiàn) EJB Object的。 客戶端調(diào)用 EJB Object的示意圖如下:- 4. Home Object通過前面的描述我們知道客戶端調(diào)用 Enterprise Bean并不是調(diào)用 Bean 的本身,而是調(diào)用 EJB Object ,那么,客戶端是如何取得 EJB Object的呢? 當(dāng)然了,客戶端是不可以直接創(chuàng)建 EJB Object類 的實(shí)例的,因?yàn)樵诓煌臋C(jī)器上 (其實(shí)應(yīng)該說是不在一個(gè) Application 里 ,在加上前面講述分布式對象 時(shí)說了,客戶端

8、并不知道服務(wù)器端對象的位置的。所以也無法實(shí)例化這個(gè)類。所以就必須有另外一種 方式來實(shí)例化 EJB Object。大家如果看過我在 CRM 實(shí)踐項(xiàng)目里寫的用戶登陸的代碼就可以看出,從 Servlet 調(diào)用 Service 到 Service 調(diào)用 DAO 都沒有直接創(chuàng)建類的實(shí)例,都是通過一個(gè)接口工廠返回一個(gè) 接口而不是具體的類實(shí)例。在 EJB 的實(shí)現(xiàn)里也是這樣,要取得 EJB Object,不能直接實(shí)例化,必須通 過 EJB Object工廠來返回一個(gè) EJB Object(其實(shí)返回的是一個(gè)接口實(shí)現(xiàn) ,這個(gè) EJB Object工廠就是 Home Object。和 EJB Object一樣, Home Object也是有 EJB 容器來實(shí)現(xiàn)的。5. Home Interface和 Remote Interface的存在原理一樣, EJB 容易需要通過 Home Interface 接口來實(shí)現(xiàn) Home Interface. 所以調(diào)用過程就變?yōu)槿缦聢D所示: 當(dāng)然了,以上講述的只是 EJB 的一般情況,在 EJB2.0的規(guī)范里多了兩個(gè)接口, Local Home和 Local Interface 。并不是所有的 EJB 都必須有 Home Interface, Remote Interface, Local Home 或者 Local Interface 。比如在同一個(gè) Applica

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論