繁体   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