이 스레드는 데몬이 아니므로 모든 프로그램을 종료 할 수없는 RMI Reaper 스레드에 문제가 있습니다. 이 스레드는 모든 개체가 안배되지 않은 경우에만 중지된다는 정보를 발견했습니다. 그래서 rmi serer를 만들려면 다음과 같은 코드가 있습니다.RMI : RMI 리퍼 스레드, UnicastRemoteObject 및 레지스트리
registry = LocateRegistry.createRegistry(2525);
Server stub = (Server) UnicastRemoteObject.exportObject(defaultServer, 2525);
registry.rebind("//localhost/server", stub);
그리고 "unexporting"의 두 가지 버전이 있습니다.
버전 1 :
UnicastRemoteObject.unexportObject(defaultServer, true);
버전 2 : 나는 버전 2를 사용하는 경우
UnicastRemoteObject.unexportObject(registry, true);
- RMI 리퍼 스레드가 종료되지 않는 모든 프로그램이 종료되지 않습니다. 버전 1을 사용하면 모두 괜찮습니다.
UnicastRemoteObject.unexportObject(rmiRegistry, true); // Stop the RMI registry
사람이 왜 레지스트리가 UnicastRemoteObject의와 연결하는 방법을 설명 할 수 그러나, 많은 곳에서 나는 다음과 같은 코드를 발견했다.
UnicastRemoteObject.exportObject를 통해 레지스트리를 내보낼 수 있습니까? –
아니요, 필수 클래스의 객체를 생성하고 필요한 RMI 객체 ID를 제공 할 수 없기 때문입니다. – EJP
하지만 왜 내가 레지스트리를 unexport하지 않으면 RMI 사신 스레드에 문제가 없는지? 해당 레지스트리가 자동으로 내 보낸 후 내 보낸 것을 의미합니까? –