2016-07-24 23 views
0

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.

Antwort

2
registry = LocateRegistry.createRegistry(2525); 

Das exportiert eine Registrierung.

Server stub = (Server) UnicastRemoteObject.exportObject(defaultServer, 2525); 

Das exportiert Ihr Remote-Objekt defaultServer.

Ergo, wenn unexporting, müssen Sie sowohl die Zeilen, die Sie erwähnen:

UnicastRemoteObject.unexportObject(defaultServer, true); 

Exportieren Ihr eigenes entferntes Objekt und

UnicastRemoteObject.unexportObject(registry, true); 

Exportieren die Registrierung, die Sie begonnen hat.

wie die Registrierung mit UnicastRemoteObject verknüpft ist.

Sie haben Ihr Remote-Objekt an die Registrierung gebunden. Für DGC-Zwecke macht das die Registrierung zu einem Client Ihres Remote-Objekts, das es am Leben erhält.

+0

Kann ich die Registrierung über UnicastRemoteObject.exportObject exportieren? –

+0

Nein, weil Sie kein Objekt der erforderlichen Klasse erstellen und ihm die erforderliche RMI-Objekt-ID zuweisen können. – EJP

+0

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? –