본문 바로가기
Development/Java

RMI 실행시 오류 발생 대처법.

by 버들도령 2019. 6. 14.
728x90

RMI 실행시 오류 발생 대처법.

 

1. Port already in use: xxxx; nested exception is:   <- xxxx는 포트번호

RMI를 실행하였는데 다음과 같은 오류가 발생한다면.. 이는 Exception 문구에도 나오듯이 해당 Port를 누군가 먼저 사용중인 경우이다.
java.rmi.server.ExportException: Port already in use: xxxx; nested exception is:
        java.net.BindException: Address already in use: JVM_Bind

 

2. Connection refused to host: xxx.xxx.xxx.xxx  <--- xxx.xxx.xxx.xxx는 IP Address

RMI를 실행하였는데 다음과 같은 오류가 발생한다면..  다음과 같은 경우일 가능성이 크다.
  - RMI 서버가 xxx.xxx.xxx.xxx 의 IP Address에 정상적으로 실행되어 있지 않은 경우
  - RMI서버가 정상적으로 실행되어 있지 않은 경우
  - 해당 IP Address 
java.rmi.ConnectException: Connection refused to host: xxx.xxx.xxx.xxx; nested exception is: 
        java.net.ConnectException: Connection refused: connect

 

3. unrecognized method hash: method not supported by remote object

서버에서 정의된 Interface와 클라이언트에서 정의된 Interface가 서로 다른 경우에 다음과 같은 에러를 발생할 수 있다.

예를 들어 클라이언트에서는 Interface에 정의된 void write(Object message) 메소드를 호출하였지만...서버쪽에서는 return값이 void가 아닌 String으로 설정된 경우 아래와 같은 에러 발생. 이런 경우는 극히 드문 경우일 수 있지만, 서버와 클라이언트의 소스가 공통된 Interface를 사용하지 않았을 경우에 발생할 수 있다.
 java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
        java.rmi.UnmarshalException: unrecognized method hash: method not supported by remote object

 

4. xxxxxxxxxxxxx_Stub (no security manager: RMI class loader disabled    <- xxxxxxxxxxxxx_Stub 파일은 서버의 Stub 파일

해당 클라이언트에 xxxxxxxxxxxxx_Stub 클래스 파일이 존재하지 않기 때문에 발생한다. 클라이언트에도 xxxxxxxxxxxxx_Stub 파일을 생성시켜주기 위해서 rmic 로 컴파일해서 위치시켜주어야 한다..

java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
      java.lang.ClassNotFoundException: RMIServerManager_Stub (no security manager: RMI class loader disabled)

 

5. error unmarshalling arguments; nested exception is:

예를 들어. 서버에서 클라이언트로부터 전송받은 Object를 Unmarshalling 하는 과정에서 Unmarshal 하고자하는 Object를 서버측에서 찾을 수 없는 경우에 발생한다. 서버측에 Unmarshal하기 위한 클래스 파일이 존재하는지 확인한다.

클라이언트에서 write(Object) 메소드를 호출하면서 Object에 SHINHAN_STRUCTURE라는 Structure를 넣어 전송했을 경우 서버쪽에서는 해당 Object인 SHINHAN_STRUCTURE를 Unmarshalling하기 위해 SHINHAN_STRUCTURE 클래스가 존재하여야 한다.

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
      java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
      java.lang.ClassNotFoundException: com.xxx.xxxxxx (no security manager: RMI class loader disabled)  <----- com.xxx.xxxxxx 는 Object 클래스

728x90

댓글