2010-03-10 2 views
1

나는 꽤 기본적인 RMI에 노력하고 있습니다 :Java RMI InitialContext : LocateRegistry.createRegistry (int)와 동일합니까?

차질없이 작동하지만, 미래의 목적을 위해, 내가 InitialContext를 사용할 필요가
// Context namingContext = new InitialContext(); 
     Registry reg = LocateRegistry.createRegistry(9999); 
     for (int i = 0; i < objs.length; i++) { 
      int id = objs[i].getID(); 
//   namingContext.bind("rmi:CustomObj" + id , objs[i]); 
      reg.bind("CustomObj" + id , objs[i]); 
     } 

.

  Context namingContext = new InitialContext(); 
     for (int i = 0; i < objs.length; i++) { 
      int id = objs[i].getID(); 
      namingContext.bind("rmi:CustomObj" + id , objs[i]); 
     } 

하지만이 기능을 사용할 수 없습니다. 명령 줄에서 rmiregistry을 시작했습니다. LocateRegistry.createRegistry(int)과 동일한 항목이 있습니까? 또는 내 수업에서 InitialContext에 의해 사용 된 RMI 레지스트리/레지스트리를 시작하는 다른 방법은 없을까요?


(대신 명령 행의) 스택 추적 :

javax.naming.CommunicationException [Root exception is java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
     java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
     java.lang.ClassNotFoundException: bguiz.scratch.network.eg.Student] 
     at com.sun.jndi.rmi.registry.RegistryContext.bind(RegistryContext.java:126) 
     at com.sun.jndi.toolkit.url.GenericURLContext.bind(GenericURLContext.java:208) 
     at javax.naming.InitialContext.bind(InitialContext.java:400) 
     at bguiz.scratch.RMITest.main(RMITest.java:29) 
Caused by: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
     java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
     java.lang.ClassNotFoundException: bguiz.scratch.CustomObj 
     at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:396) 
     at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250) 
     ....(truncated) 

편집 : 이것에 아무 대답도 할 수없는 것으로 보인다 나는 몇 일에서 내 자신의 질문을 삭제합니다 (나 자신을 알아낼 수 없었다). 어떤 비터에 대한 마지막 호출!

답변

1

많은 문제가 발생한 후에 문제를 해결했습니다. 참고하시기 바랍니다 :

ClassNotFoundException은 고유 한 클래스 경로가 있기 때문에 ClassNotFoundException이 던져지고 있습니다. InitialContext을 포함하는 클래스가 해당 클래스 경로에 사용자 정의 객체를 가지고 있는지 여부는 중요하지 않습니다. - 사용자 정의 객체가 클래스 경로 인에 있도록 RMI 레지스트리를 초기화해야합니다.

이 작업을 수행하려면 rmiregistry을 시작하기 전에 comman 줄의 classpath 환경 값을 설정하십시오. 이 클래스 경로에 사용자 정의 객체 클래스가 포함되어 있으면 ClassNotFoundException이 던져지지 않고이어서 ServerException 및`CommunicationException '이 발생하지 않습니다.

0

LocateRegistry.createRegistry(int)이 있습니까?

번호

또는 내 클래스 내부에서의 InitialContext가 사용하는 RMI 레지스트리/레지스트리를 시작하는 다른 방법은?

LocateRegistry.createRegistry().

URL에 호스트 이름을 지정해야합니다. 어떤 예외가 발생 했습니까? & 오류 메시지가 나타 납니까?

+0

@EJP 스택 추적을 내 질문에 추가했습니다. 또한이 클래스는 서버에서 실행되므로 URL을 지정할 필요가 없습니다 (로컬 호스트). 클라이언트는 URL을 지정해야하고 동일한 컴퓨터에서 샌드 박싱을하고 있기 때문에''rmi : // localhost : 1099/"'를 지정하지만이 클래스는 실행에 실패하므로 아직 멀었습니다 . – bguiz

0
java.lang.ClassNotFoundException: bguiz.scratch.network.eg.Student caused by 
java.lang.ClassNotFoundException: bguiz.scratch.CustomObj 

이 클래스가 사용 가능한지 확인하십시오.

+0

네, 가장 확실한 것은 - 제가 처음 확인한 것 중 하나입니다. 실제로 배열'objs []'는 매우 동일한 클래스에 의해 사용되는'CustomObj'의 배열입니다. 나는 그것이 클래스 패스에 있음을 확인했다. – bguiz