2016-04-26 42 views
0

我正在开发一个使用RMI激活的系统,以便在它们自己的JVM中隔离一组相似但独立的组件,以便如果一个崩溃(a)不会降低整个系统的性能,(b)在下次需要时它会自动重新启动。我为每个组件注册一个激活组,然后我想在该组内注册可激活对象。综观公共API,似乎有对如何注册ActivationDesc与激活系统两种选择:如何在注册可激活对象时生成存根和ActivationID

  • ActivationGroup.getSystem().registerObject,它的回报,如果你想随后注销对象
  • Activatable.register您需要的ActivationID,它返回一个存根,通过它可以激活和调用远程对象。

但我无法找到通过公共API什么办法让这两个存根为同一注册ID - 我看没有明显的方式来获取客户端存根对于给定ActivationID (没有实际接触激活器并激活远程对象,这是ActivationID.activate会做的),也不获得给定存根的ActivationID

我错过了什么?有没有办法做到这一点,而无需深入研究内部sun.* API?

回答

0

好问题。我不得不重读我的书籍章节来刷新我的记忆。你是使用Activation的少数几个人之一,在这里或在Oracle/Sun Java论坛上,我已经在近二十年中看到过几个关于它的问题。

答案是你是正确的:你不能。 ActivationID似乎是真正用于内部使用,以及registerObject(),这最终是register()内部调用。被激活的服务器在激活时与它一起提供:这意味着它可以取消注册本身,这反过来意味着如果要从外部注销对象,则可以使用远程方法提供该对象,您可以从外部调用该对象导致它注销自己。我不知道ActivationID是否有其他实际用途,但是如果有类似的技术适用。或者你可以提供一个远程的getActivationID()方法当然。