2009-01-14 66 views
0

可以說你有接口定義。通過不同的JVM接口實現

這個接口可以操作

然後,您將有兩個應用程序在不同的JVM中運行,並通過交換操作實例來以某種方式進行遠程通信。

讓我們打電話給他們申請A和申請B

如果應用一個工具操作帶班所不具備的應用的類路徑,將應用仍然能夠處理接口,落實?即使當B是在不同的JVM?

+0

這是RMI的問題嗎? – 2009-01-14 15:01:12

+0

是的。 想法是這些操作實例將作爲EJB中的方法參數進行交換。 – jan 2009-01-14 15:04:16

回答

1

這取決於你的意思是「以某種方式遠程通信」是什麼。如果應用程序A 實際上只是將應用程序B中的某種令牌內置到代理中,以便將對操作接口的調用代理迴應用程序A,那麼它可能沒問題。如果想法是讓應用程序B創建實現類的本地實例,那麼這不起作用,因爲它不知道對象是什麼樣的。

0

只要它只是試圖通過通用接口來引用它,它應該應該能夠處理它。只要它們都實現相同版本的接口,實際的實現並不重要。

+0

這實際上是否意味着通過電線發送了java字節碼? – jan 2009-01-14 14:58:23

5

這取決於發生在你的「遠程莫名其妙溝通」的一部分的魔力。

如果這個通信是通過RMI或類似的技術完成,那麼這將是罰款。應用程序B將爲JVM A中的Operation對象創建一個遠程代理,並且此代理上的調用方法會生成對JVM A的HTTP請求,這些請求將針對生活在該JVM(可以訪問實現類)中的實際對象進行解析。

如果此通信是通過序列化的對象,併發送它們通過電線做了,那麼它將無法工作。當來自應用程序A的對象到達JVM B時,反序列化將失敗(使用ClassNotFoundException或類似方法)。

也很可能其他的遠程訪問技術,在這種情況下的東西都與實現有關。我知道Classloaders可以從字節數組中加載類,因此從概念上說很可能有這樣的類加載器能夠從遠程源加載類。我相信網絡庫理論上可以通過這種方式連接實際的類,因此,雖然JVM B本身不會知道實現類,但是它的類加載器將根據需要提供類的字節碼。