java RMI 실행관련 질문드립니다.
글쓴이: hyunuck / 작성시간: 금, 2004/06/25 - 1:30오전
리눅스에서 원격지RMI를 실행하면 아래와 같이 익셉션이 발생합니다.
윈도우에서 java -Djava.security.policy=C:\rmi\rmi.policy -Djava.rmi.server.codebase=file:C:\rmi/ HelloImpl
해줬을때는 아무 문제가 없었거든요....
CLASSPATH 는 정상인것 같습니다.
골때리는게 skeleton 을 찾으면 이해가 가는데 왜 remote 에서 stub 을 찾는지 모르겠습니다.
물론 skeleton 파일은 같은 디렉토리안에 있습니다.
또 윈도우에서 성공한 코든데 뭐가 문제인지도 모르겠구요...
java -Djava.security.policy=/home/wheel/hyunuck/java/rmi.policy -Djava.rmi.server.codebase=file:/home/wheel/hyunuck/java/ HelloImpl
결과.
예외 발생: Stub class not found: HelloImpl_Stub; nested exception is: java.lang.ClassNotFoundException: HelloImpl_Stub java.rmi.StubNotFoundException: Stub class not found: HelloImpl_Stub; nested exception is: java.lang.ClassNotFoundException: HelloImpl_Stub at sun.rmi.server.RemoteProxy.getStub(RemoteProxy.java:98) at sun.rmi.server.RemoteProxy.getStub(RemoteProxy.java:55) at sun.rmi.server.UnicastServerRef.setSkeleton(UnicastServerRef.java:179) at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:142) at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:129) at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:275) at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:178) at java.rmi.server.UnicastRemoteObject.<init>(UnicastRemoteObject.java:75) at java.rmi.server.UnicastRemoteObject.<init>(UnicastRemoteObject.java:61) at HelloImpl.<init>(HelloImpl.java:9) at HelloImpl.main(HelloImpl.java:28) Caused by: java.lang.ClassNotFoundException: HelloImpl_Stub at java.net.URLClassLoader$1.run(URLClassLoader.java:199) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:187) at java.lang.ClassLoader.loadClass(ClassLoader.java:289) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274) at java.lang.ClassLoader.loadClass(ClassLoader.java:235) at sun.rmi.server.RemoteProxy.loadClassFromClass(RemoteProxy.java:191) at sun.rmi.server.RemoteProxy.getStub(RemoteProxy.java:93) ... 10 more -bash-2.05b$
도움 부탁드립니다.
Forums:
질문 추가인데요..위에 안되는거 연구하다가 혹시 플랫폼이 바뀌면 스텁
질문 추가인데요..
위에 안되는거 연구하다가 혹시 플랫폼이 바뀌면 스텁과 스켈레톤을 다시 생성해야 하나 싶어서 리눅스에서 rmic컴파일을 다시 했거든요?
근데 윈도우에서는 멀쩡히 잘되던 HelloImpl.class rmic컴파일이 리눅스에서는
아래와 같은 에러를 뿌리네요...
휴.. 감을 못잡겠군요.. 도와주세용~~
-bash-2.05b$ rmic HelloImpl
JAVA_HOME/bin에 있는 rmic 대신에 /usr/bin에 있는
JAVA_HOME/bin에 있는 rmic 대신에 /usr/bin에 있는 rmic가 실행이 되는것 같군요. 전자를 실행시켜 보세요.
----
I paint objects as I think them, not as I see them.
atie's minipage
답변 감사합니다.ㅋㅋ말씀하신대로 참고해서 하니깐 잘 되는군요....
답변 감사합니다.ㅋㅋ
말씀하신대로 참고해서 하니깐 잘 되는군요....
근데 자바 이거 완전 실망인걸요....
플랫폼에따라 rmic컴파일을 다시해야 한다니... 느므느므 실망했습니다.
자바의 장점하나가 제 머릿속에서 사라지는 순간이군요...
혹시 제가 뭘 잘못해서 그런지.. 아무튼...... 맘이 느므느므 아픕니다. ㅜ.ㅜ
글쎄요 ?
플랫폼에 따라 rmic 컴파일을 새로해야한다는 것은 잘못 알고 계신것 같아서요..
그렇다면 rmi를 사용한다는 의미가 무척 퇴색되겠죠.
다른게 원인이 아니고.. 기본으로 깔려있는 rmic 와 사용하시려는 자바버전이 안맞은.. 단지 그 원인으로 생각됩니다만.
그리고 원격객체의 프록시역할을 하는 것을 보통 stub 으로 부르지 않나요?
감사합니다.
Re: 글쎄요 ?
아 그런가 보군요... 답변 감사합니다.
그리고 원격객체의 프록시 역할이 스켈레톤이고 로컬이 스텁 이던데요..:-)
Re: 글쎄요 ?
musik님의 답변이 맞습니다. stub이 원격객체의 프록시 역할을 하죠. 그런데 원격객체를 참조한다는 것은 결국 로컬의 stub을 참조하는 것이므로 혼동하시는 듯 하군요. 그리고, 참고로 gcj의 rmic는 클래스패스를 인지하나 무시하기 때문에 에러가 났던 것 같고, jdk의 rmic와는 완벽히 호환이 되지는 않습니다.
----
I paint objects as I think them, not as I see them.
atie's minipage
댓글 달기