Ich habe ein Problem mit RMI Reaper Thread, die nicht alle mein Programm beenden kann, da dieser Thread nicht Daemon ist. Ich habe Informationen gefunden, dass dieser Thread nur stoppt, wenn alle Objekte nicht exportiert werden. Also habe ich den folgenden Code, um rmi serer zu erstellen.RMI: RMI Reaper Thread, UnicastRemoteObject und Registry
registry = LocateRegistry.createRegistry(2525);
Server stub = (Server) UnicastRemoteObject.exportObject(defaultServer, 2525);
registry.rebind("//localhost/server", stub);
Und ich habe zwei Versionen von "unexporting". 1
Version:
UnicastRemoteObject.unexportObject(defaultServer, true);
Version 2:
UnicastRemoteObject.unexportObject(registry, true);
Als ich Version 2 verwenden - RMI Reaper Thread nicht beendet und alle das Programm nicht beenden. Wenn ich Version 1 benutze, ist alles in Ordnung. Doch in vielen Orten fand ich den folgenden Code:
UnicastRemoteObject.unexportObject(rmiRegistry, true); // Stop the RMI registry
Könnte jemand erklären, warum und wie Registry mit UnicastRemoteObject verknüpft.
Kann ich die Registrierung über UnicastRemoteObject.exportObject exportieren? –
Nein, weil Sie kein Objekt der erforderlichen Klasse erstellen und ihm die erforderliche RMI-Objekt-ID zuweisen können. – EJP
Aber warum, wenn ich Registry nicht exportiere habe ich keine Probleme mit RMI Reaper Thread? Kann es bedeuten, dass diese Registrierung automatisch exportiert und nicht exportiert wird? –