RMI:RMI Reaper线程、UnicastRemoteObject和Registry
RMI: RMI Reaper thread, UnicastRemoteObject and Registry
我的 RMI Reaper 线程有问题,它不允许我的所有程序终止,因为该线程不是守护进程。我发现只有当所有对象都未导出时该线程才会停止的信息。所以我有以下代码来创建 rmi serer。
registry = LocateRegistry.createRegistry(2525);
Server stub = (Server) UnicastRemoteObject.exportObject(defaultServer, 2525);
registry.rebind("//localhost/server", stub);
我有两个版本的"unexporting"。
版本 1:
UnicastRemoteObject.unexportObject(defaultServer, true);
版本 2:
UnicastRemoteObject.unexportObject(registry, true);
当我使用版本 2 时 - RMI Reaper 线程不会终止并且所有程序都不会终止。当我使用版本 1 时一切正常。然而,在很多地方我发现了以下代码:
UnicastRemoteObject.unexportObject(rmiRegistry, true); // Stop the RMI registry
任何人都可以解释注册表与 UnicastRemoteObject 链接的原因和方式。
registry = LocateRegistry.createRegistry(2525);
导出注册表。
Server stub = (Server) UnicastRemoteObject.exportObject(defaultServer, 2525);
导出您的远程对象defaultServer
。
因此,当不导出时,你必须同时使用你提到的两行:
UnicastRemoteObject.unexportObject(defaultServer, true);
取消导出您自己的远程对象,并且
UnicastRemoteObject.unexportObject(registry, true);
取消导出您启动的注册表。
how Registry is linked with UnicastRemoteObject.
您将远程对象绑定到注册表中。出于 DGC 的目的,使注册表成为远程对象的客户端,从而使其保持活动状态。
我的 RMI Reaper 线程有问题,它不允许我的所有程序终止,因为该线程不是守护进程。我发现只有当所有对象都未导出时该线程才会停止的信息。所以我有以下代码来创建 rmi serer。
registry = LocateRegistry.createRegistry(2525);
Server stub = (Server) UnicastRemoteObject.exportObject(defaultServer, 2525);
registry.rebind("//localhost/server", stub);
我有两个版本的"unexporting"。
版本 1:
UnicastRemoteObject.unexportObject(defaultServer, true);
版本 2:
UnicastRemoteObject.unexportObject(registry, true);
当我使用版本 2 时 - RMI Reaper 线程不会终止并且所有程序都不会终止。当我使用版本 1 时一切正常。然而,在很多地方我发现了以下代码:
UnicastRemoteObject.unexportObject(rmiRegistry, true); // Stop the RMI registry
任何人都可以解释注册表与 UnicastRemoteObject 链接的原因和方式。
registry = LocateRegistry.createRegistry(2525);
导出注册表。
Server stub = (Server) UnicastRemoteObject.exportObject(defaultServer, 2525);
导出您的远程对象defaultServer
。
因此,当不导出时,你必须同时使用你提到的两行:
UnicastRemoteObject.unexportObject(defaultServer, true);
取消导出您自己的远程对象,并且
UnicastRemoteObject.unexportObject(registry, true);
取消导出您启动的注册表。
how Registry is linked with UnicastRemoteObject.
您将远程对象绑定到注册表中。出于 DGC 的目的,使注册表成为远程对象的客户端,从而使其保持活动状态。