2009-01-14 102 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本身不会知道实现类,但是它的类加载器将根据需要提供类的字节码。