在EJB

2011-10-14 54 views
7

我讀企業JavaBeans 3.1的書,我不知道如果我理解正確的EJB組件的代理對象的概念代理對象。我現在知道它遵循代理模式,我已經閱讀了一些。在EJB

當我們對豆類的接口,我們這樣做是因爲我們希望有代理模式實現的。這對我們有所幫助,因爲客戶只關心我們可以做什麼,而不是直接綁定到一個類,而是一個可以充當真實對象的接口。

因此,容器可能實例化代理對象實現相應的接口和調用在我們真正的EJB之前添加一些魔碼(網絡代碼),因爲代理對象自動做出正確的?

我誤解了這個概念嗎?如果是這種情況可以有人告訴我什麼是錯的?

回答

4

正確。如果您的應用程序僅限於本地JVM,那麼您爲Bean編寫的接口就足夠了。在這種情況下,不需要代理,因爲實現類可以實例化並直接提供。 EJB的

客戶端無法對其實現類的工作,因爲他們沒有他們在類路徑中。 EJB是位置透明的,您可以通過網絡或位於同一服務器上的其他應用程序調用它們,但由不同的類加載器隔離。在這種情況下,您需要有代理對象進行編組,通過網絡發送並解開您提供給EJB調用的參數以及您收到的這些調用的結果。而在客戶端,您需要一個虛擬的EJB接口實現,將您的調用轉發到安裝此EJB的服務器。

代理還處理其他功能,比如開始/結束周圍EJB方法調用的交易。

編輯:如果你好奇,究竟這樣的代理可以做,看看在Java和AOP(在AspectJ中或Spring)RMI的概述。它會告訴你什麼樣的任務可以用這種方式來實現。

+0

。我認爲代理總是需要的。如何在沒有代理的情況下自動實現交易? –

3

你指的是代理接口無國籍(和狀態)會話bean和消息驅動bean?

如果是這樣,我認爲你的理解是正確的。你似乎錯過的唯一的東西就是無狀態bean實例池的概念。容器不會爲每個請求實例化,而是在需要時提供實現。

此外,使用代理服務器允許容器管理的事情發生:事務管理,異步線程管理等

你寫的,如果應用程序僅限於本地JVM不需要代理