RMI 프로그램을 실행하니, 다음과 같은 예외가 발생하였다.

ComputeEngine exception:
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
 java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
 java.lang.ClassNotFoundException: compute.Compute
 at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:396)
 at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
 at sun.rmi.transport.Transport$1.run(Transport.java:159)
 at java.security.AccessController.doPrivileged(Native Method)
 at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
 at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
 at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
 at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
 at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
 at java.lang.Thread.run(Thread.java:619)
 at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
 at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
 at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:359)
 at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
 at engine.ComputeEngine.main(ComputeEngine.java:32)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
 java.lang.ClassNotFoundException: compute.Compute
 at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
 at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:386)
 at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
 at sun.rmi.transport.Transport$1.run(Transport.java:159)
 at java.security.AccessController.doPrivileged(Native Method)
 at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
 at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
 at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
 at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
 at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
 at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.ClassNotFoundException: compute.Compute
 at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
 at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
 at java.lang.Class.forName0(Native Method)
 at java.lang.Class.forName(Class.java:247)
 at sun.rmi.server.LoaderHandler.loadProxyInterfaces(LoaderHandler.java:711)
 at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:655)
 at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:592)
 at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:628)
 at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:294)
 at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:238)
 at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1531)
 at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1493)
 at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
 at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
 at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
 ... 12 more


일단 긴 예외 메시지에 압도되었다.

침착하게 예외의 시작점을 확인해보면,

java.lang.ClassNotFoundException에 의해 발생했음을 확인할 수 있다.

갑자기 웬 클래스 못 찾겠다는 예외지?

당혹스러웠다.

하지만 역시 침착하게 누가 못 찾겠다고 하는지를 고민해보면,

RMI 레지스트리가 그 범인임을 알 수 있다.

RMI 레지스트리를 위해

실행하려는 프로그램의 클래스들이 위치하는 클래스패스를

환경변수로 잡아주는 등의 방법으로

RMI 레지스트리가 해당 클래스들을 찾을 수 있도록 도와줌으로써 해결할 수 있다.

신고

Posted by izeye


티스토리 툴바