我正在开发一个使用RMI激活的系统,以便在它们自己的JVM中隔离一组相似但独立的组件,这样如果一个崩溃(a)它不会导致整个系统崩溃,(b)它将下次需要时自动重启。我为每个组件注册一个激活组,然后我想在该组中注册可激活对象。查看公共API,如何在激活系统中注册ActivationDesc
似乎有两种选择:
ActivationGroup.getSystem().registerObject
,如果您想要随后取消注册该对象,则会返回您需要的ActivationID
Activatable.register
,返回一个存根,通过它可以激活和调用远程对象。但是我无法通过公共API找到任何方法来获取存根和相同注册的ID - 我看不到获取客户端存根的明显方法对于给定的ActivationID
(此时没有实际联系激活器并激活远程对象,这是ActivationID.activate
将要执行的操作),也不是获取给定存根的ActivationID
。
我错过了什么?有没有办法在不必深入研究内部sun.*
API的情况下执行此操作?
答案 0 :(得分:0)
好问题。我不得不重读我的书章以刷新我的记忆。您是少数几个使用Activation的人之一,近二十年来我在这里或在Oracle / Sun Java论坛上看到的问题很少。
答案是你纠结:你不能。 ActivationID
似乎非常适合内部使用,以及registerObject()
,这最终是register()
内部调用的内容。激活的服务器在激活时提供它:这意味着它可以取消注册本身,这反过来意味着如果你想从外面取消注册一个对象,你可以提供一个远程方法你可以从外部打电话,导致它取消注册。我不知道ActivationID
off-off外部的任何其他实际用途,但如果有类似的技术则适用。或者,您当然可以使用远程getActivationID()
方法提供它。