java RMI 실행관련 질문드립니다.

hyunuck의 이미지

리눅스에서 원격지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$

도움 부탁드립니다.

hyunuck의 이미지

질문 추가인데요..
위에 안되는거 연구하다가 혹시 플랫폼이 바뀌면 스텁과 스켈레톤을 다시 생성해야 하나 싶어서 리눅스에서 rmic컴파일을 다시 했거든요?

근데 윈도우에서는 멀쩡히 잘되던 HelloImpl.class rmic컴파일이 리눅스에서는
아래와 같은 에러를 뿌리네요...

휴.. 감을 못잡겠군요.. 도와주세용~~

-bash-2.05b$ rmic HelloImpl

java.lang.NullPointerException
   at 0x40268de4: java.lang.Throwable.Throwable() (/usr/lib/./libgcj.so.3)
   at 0x4025bcaf: java.lang.Exception.Exception() (/usr/lib/./libgcj.so.3)
   at 0x4025f56f: java.lang.RuntimeException.RuntimeException() (/usr/lib/./libgcj.so.3)
   at 0x4025ec67: java.lang.NullPointerException.NullPointerException() (/usr/lib/./libgcj.so.3)
   at 0x4021b627: _Jv_ThrowNullPointerException (/usr/lib/./libgcj.so.3)
   at 0x403202cb: ?? (??:0)
   at 0x4031c817: gnu.java.rmi.rmic.RMIC.generateStub() (/usr/lib/./libgcj.so.3)
   at 0x4031b6ed: gnu.java.rmi.rmic.RMIC.processClass(java.lang.String) (/usr/lib/./libgcj.so.3)
   at 0x4031b644: gnu.java.rmi.rmic.RMIC.run() (/usr/lib/./libgcj.so.3)
   at 0x4031b507: gnu.java.rmi.rmic.RMIC.main(java.lang.String[]) (/usr/lib/./libgcj.so.3)
   at 0x40242dd8: gnu.gcj.runtime.FirstThread.call_main() (/usr/lib/./libgcj.so.3)
   at 0x402ad02d: gnu.gcj.runtime.FirstThread.run() (/usr/lib/./libgcj.so.3)
   at 0x4024fc4c: _Jv_ThreadRun(java.lang.Thread) (/usr/lib/./libgcj.so.3)
   at 0x4021c8ac: _Jv_RunMain(java.lang.Class, byte const, int, byte const, boolean) (/usr/lib/./libgcj.so.3)
   at 0x4021c9cd: JvRunMain (/usr/lib/./libgcj.so.3)
   at 0x080485a8: ?? (??:0)
   at 0x42015574: __libc_start_main (/lib/tls/libc.so.6)
   at 0x080484f5: ?? (??:0)
atie의 이미지

JAVA_HOME/bin에 있는 rmic 대신에 /usr/bin에 있는 rmic가 실행이 되는것 같군요. 전자를 실행시켜 보세요.

----
I paint objects as I think them, not as I see them.
atie's minipage

hyunuck의 이미지

답변 감사합니다.ㅋㅋ
말씀하신대로 참고해서 하니깐 잘 되는군요....

근데 자바 이거 완전 실망인걸요....
플랫폼에따라 rmic컴파일을 다시해야 한다니... 느므느므 실망했습니다.
자바의 장점하나가 제 머릿속에서 사라지는 순간이군요...

혹시 제가 뭘 잘못해서 그런지.. 아무튼...... 맘이 느므느므 아픕니다. ㅜ.ㅜ

musik의 이미지

플랫폼에 따라 rmic 컴파일을 새로해야한다는 것은 잘못 알고 계신것 같아서요..
그렇다면 rmi를 사용한다는 의미가 무척 퇴색되겠죠.
다른게 원인이 아니고.. 기본으로 깔려있는 rmic 와 사용하시려는 자바버전이 안맞은.. 단지 그 원인으로 생각됩니다만.

그리고 원격객체의 프록시역할을 하는 것을 보통 stub 으로 부르지 않나요?

감사합니다.

hyunuck의 이미지

musik wrote:
플랫폼에 따라 rmic 컴파일을 새로해야한다는 것은 잘못 알고 계신것 같아서요..
그렇다면 rmi를 사용한다는 의미가 무척 퇴색되겠죠.
다른게 원인이 아니고.. 기본으로 깔려있는 rmic 와 사용하시려는 자바버전이 안맞은.. 단지 그 원인으로 생각됩니다만.

그리고 원격객체의 프록시역할을 하는 것을 보통 stub 으로 부르지 않나요?

감사합니다.

아 그런가 보군요... 답변 감사합니다.
그리고 원격객체의 프록시 역할이 스켈레톤이고 로컬이 스텁 이던데요..:-)

atie의 이미지

hyunuck wrote:
musik wrote:
플랫폼에 따라 rmic 컴파일을 새로해야한다는 것은 잘못 알고 계신것 같아서요..
그렇다면 rmi를 사용한다는 의미가 무척 퇴색되겠죠.
다른게 원인이 아니고.. 기본으로 깔려있는 rmic 와 사용하시려는 자바버전이 안맞은.. 단지 그 원인으로 생각됩니다만.

그리고 원격객체의 프록시역할을 하는 것을 보통 stub 으로 부르지 않나요?

감사합니다.

아 그런가 보군요... 답변 감사합니다.
그리고 원격객체의 프록시 역할이 스켈레톤이고 로컬이 스텁 이던데요..:-)


musik님의 답변이 맞습니다. stub이 원격객체의 프록시 역할을 하죠. 그런데 원격객체를 참조한다는 것은 결국 로컬의 stub을 참조하는 것이므로 혼동하시는 듯 하군요. 그리고, 참고로 gcj의 rmic는 클래스패스를 인지하나 무시하기 때문에 에러가 났던 것 같고, jdk의 rmic와는 완벽히 호환이 되지는 않습니다.

----
I paint objects as I think them, not as I see them.
atie's minipage

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.