注册可激活对象时如何生成存根和ActivationID

时间:2016-04-26 12:17:04

标签: java rmi

我正在开发一个使用RMI激活的系统,以便在它们自己的JVM中隔离一组相似但独立的组件,这样如果一个崩溃(a)它不会导致整个系统崩溃,(b)它将下次需要时自动重启。我为每个组件注册一个激活组,然后我想在该组中注册可激活对象。查看公共API,如何在激活系统中注册ActivationDesc似乎有两种选择:

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

但是我无法通过公共API找到任何方法来获取存根相同注册的ID - 我看不到获取客户端存根的明显方法对于给定的ActivationID(此时没有实际联系激活器并激活远程对象,这是ActivationID.activate将要执行的操作),也不是获取给定存根的ActivationID

我错过了什么?有没有办法在不必深入研究内部sun.* API的情况下执行此操作?

1 个答案:

答案 0 :(得分:0)

好问题。我不得不重读我的书章以刷新我的记忆。您是少数几个使用Activation的人之一,近二十年来我在这里或在Oracle / Sun Java论坛上看到的问题很少。

答案是你纠结:你不能。 ActivationID似乎非常适合内部使用,以及registerObject(),这最终是register()内部调用的内容。激活的服务器在激活时提供它:这意味着它可以取消注册本身,这反过来意味着如果你想从外面取消注册一个对象,你可以提供一个远程方法你可以从外部打电话,导致它取消注册。我不知道ActivationID off-off外部的任何其他实际用途,但如果有类似的技术则适用。或者,您当然可以使用远程getActivationID()方法提供它。

相关问题