티스토리 뷰


RMI Server 프로그램을 작성 후 Server 실행시 아래와 같은 에러가 발생
 
 java.rmi.ServerException: RemoteException occurred in server
 thread; nested exception is:
        java.rmi.UnmarshalException: error unmarshalling arguments; nested excep
tion is:
        java.lang.ClassNotFoundException:
Stub클래스파일_Stub  <-- 자신의 클래스 파일에 따라 다를 수 있음.
 
 
위와 같은 에러가 발생했다면
1. 우선적으로 점검 할 것이 RMI시 사용할 Interface를 이용하여 생성한 클래스 파일의 Skeleton과 Stub 파일을 정상적으로 생성하여 존재하는지를 체크
 
2. RMI Server 실행시 codebase를 올바르게 지정해주었는가를 체크.
 codebase 지정시에는 . 문자로 지정하지 않도록 주의한다.
-Djava.rmi.server.codebase=file:/./
 위와 같이 . 문자로 지정시 rmiregistry 를 실행한 Directory Path가 codebase로 등록되게 되며, 등록된 Path를 기준으로 interface와 Skel, Stub 파일을 찾게 된다.
그러므로 ClassNotFoundException 이 발생하게 되는 것이고, 결과적으로 UnmarshalException이 발생한다.
따라서 codebase를 지정시에는 절대패스로 설정하여주거나 rmiregistry 를 interface와 Skel, Stub 파일의 위치에서 실생시켜주는 것이 문제 발생의 소지를 없애는 지름길이다.
 
RMI 서버 실행시 codebase를 굳이 "." 으로 설정하겠다고 고집피우는 프로그래머가 있다면... ㅡ.ㅡa 최소한 rmiregistry 를 실행시 RMI Server의 interface와 Skel, Stub 파일이 위치한 곳에서 실행시켜주도록 하자. ㅡ.ㅡa