2013-01-24 3 views
0



RMI 연결 응용 프로그램을 통해 두 개를 개발 중입니다. 의사 소통은 양방향이며 모든 것이 잘 돌아갈 때까지 윈도우에서 실행됩니다. 데비안에 jar 파일을 가져 가면 java.rmi.NoSuchObjectException으로 연결이 실패합니다.

리눅스의 차이점과 그 차이점은 무엇입니까?Linux의 java.rmi.NoSuchObjectException

편집 : 내 코드 :
서버 측 :

static Registrator clientRegistrator = null; // static field, interface extending java.rmi.Remote 
... 
Registry rmiRegistry = LocateRegistry.createRegistry(RmiConstants.RMI_REGISTRY_PORT); 
clientRegistrator = (Registrator) UnicastRemoteObject.exportObject(new RmiClientRegistrator(networkListeners), RmiConstants.RMI_REGISTRY_PORT); // RmiClientRegistrator implements Registrator interface 
rmiRegistry.bind(RmiConstants.RMI_SERVER_MARK, clientRegistrator); 


클라이언트 측 :

static Registrator serverRegistrator = null; 
String rmiConnectionString = "rmi://localhost:" + RmiConstants.RMI_REGISTRY_PORT + "/" + RmiConstants.RMI_SERVER_MARK; 
serverRegistrator = (Registrator) Naming.lookup(rmiConnectionString); 
serverRegistrator.registerClient(dataReceiver); // fails here, with mentioned exception 

답변

2

unexportObject의 방법에 의해 슬로우 스텁에 의해 더 이상 존재하지 않습니다. 더 정확히 말하면 더 이상 내보낼 수 없습니다. 사용자가 직접 내 보내지 않는 한 또는 네트워크 파티션에서 DGC 오류가 발생한 경우가 아니라면 클라이언트에 여전히 라이브 스텁이있는 동안에는 발생하지 않아야합니다.

가장 확실한 해결책은 내 보낸 JVM에서 원격 객체에 대한 정적 참조를 유지하는 것입니다.

+0

이 실행 중이며 참조가 존재합니다. 즉, 하나의 응용 프로그램을 시작하고, 두 번째 응용 프로그램 인 immediatly를 localhost에서 시작합니다. 나는 정적 인 레퍼런스를 만들려고 노력할지도 모르지만, 존재하지 않는 레퍼런스는 문제가되지 않는다. – Kousalik

+0

지금 나는 정적 레퍼런스를 항상보고있다. 조회는 참조를 찾았지만 즉시 메소드를 호출하면 실패합니다. – Kousalik

+0

@Kousalik new()에 의해 작성된 원격 객체에 대한 참조입니까, exportObject()에 의해 반환 된 스텁에 대한 참조입니까? 그리고 별도의 레지스트리 또는 in-process 레지스트리를 사용하고 있습니까? 후자의 경우 정적 참조를 보유하고 있습니까? LocateRegistry(). createRegistry()에 의해 반환됩니다. – EJP

-1

당신이 여기 봤어
:

java.rmi.NoSuchObjectException: no such object in table

,

Java RMI NoSuchObjectException

here : 시도가 더 이상 원격 가상 머신에 존재하는 객체의 메소드를 호출하려고했을 경우 NoSuchObjectException

가 발생합니다. NoSuchObjectException가 발생 해 리모트 객체의 메소드를 호출하려고했을 경우, 호출은 재발행되어 RMI의 「한 번만」의 호출 시멘틱스를 보관 유지할 수 있습니다. NoSuchObjectException 또한 상기 방법에 의해 java.rmi.server.RemoteObject.toStub 원격 개체 라 java.rmi.server.UnicastRemoteObject 및 java.rmi.activation.Activatable 클래스 및

+0

네, 그렇습니다. 그러나 나는 그것이 어떻게 관련되어 있는지 보지 못합니다. 내 응용 프로그램은 Windows에서 잘 작동합니다. 문제는 Linux에서 실행 중일 때입니다. 둘 다 Oracle JVM – Kousalik