簡體   English   中英

通過不同的JVM實現接口

[英]Interface implementation through different JVMs

假設您有接口定義。

該接口可以是Operation

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

讓我們將它們稱為應用程序A和應用程序B。

如果應用程序A使用應用程序B的類路徑中不可用的類來實現Operation ,那么應用程序B仍然能夠處理該接口的實現嗎? 即使B在不同的JVM中?

這取決於您“以某種方式進行遠程通信”部分中發生的魔術。

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

如果此通信是通過序列化對象並通過電線發送它們完成的,則它將無法正常工作。 當來自應用程序A的對象到達JVM B時,反序列化將失敗(帶有ClassNotFoundException或類似的東西)。

可能還有其他遠程技術,在這種情況下,事情取決於實現。 我知道類加載器可以從字節數組中加載類,因此,從概念上講,有這樣的類加載器能夠從遠程源加載類是很有可能的。 我相信,網絡庫理論上可以通過這種方式在線路上對實際的類進行序列化,因此,盡管JVM B本身不會知道實現類,但仍會根據需要向其類加載器提供該類的字節碼。

這取決於您“以某種方式進行遠程通信”的含義。 如果應用程序A 實際上只是將應用程序B的某種令牌交付給代理,該令牌已內置在代理中,從而將對Operation接口的調用代回給應用程序A,則可能是可以的。 如果這個想法是為了讓應用程序B創建實現類的本地實例,那將是行不通的,因為它不知道對象的外觀。

只要它僅嘗試通過公共接口引用它,它就應該能夠處理它。 只要它們都實現相同版本的Interface,實際的實現就無關緊要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM