- - PR -
LinuxによるRMIサーバ起動時のException
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2005-01-18 21:08
現在RedHat Linux9にてRMIの実験をしております。
まず「RMI 入門」 http://java.sun.com/j2se/1.3/ja/docs/ja/guide/rmi/getstart.doc.html に従いサンプルコードを実行するところからはじめましたが、早くも行き詰ってしまいました。 WindowsXP環境では実行例通りうまくいったのですが、RedHat Linux9ではうまくいきません。 OS:RedHat Linux 9 Server:Tomcat5 SDK:J2SDK1.4.2_06 RPMパッケージ rmiregistry & を実行した後 サーバを起動する段階 [root@tdb1 classes]# java -Djava.rmi.server.codebase=file:/usr/tomcat/tomcat5/webapps/ROOT/WEB-INF/classes/ -Djava.security.policy=/usr/tomcat/tomcat5/webapps/ROOT/WEB-INF/classes/examples/hello/policy examples.hello.HelloImpl を実行すると以下のExceptionが発生します。 java.rmi.UnmarshalException: Error unmarshaling return header; nested exception is: java.net.SocketException: Connection reset at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:203) at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:350) at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source) at java.rmi.Naming.rebind(Naming.java:160) at examples.hello.HelloImpl.main(HelloImpl.java:28) Caused by: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:168) at java.io.BufferedInputStream.fill(BufferedInputStream.java:183) at java.io.BufferedInputStream.read1(BufferedInputStream.java:222) at java.io.BufferedInputStream.read(BufferedInputStream.java:277) at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2150) at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2163) at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2631) at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:734) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:253) at sun.rmi.server.MarshalInputStream.<init>(MarshalInputStream.java:110) at sun.rmi.transport.ConnectionInputStream.<init>(ConnectionInputStream.java:38) at sun.rmi.transport.StreamRemoteCall.getInputStream(StreamRemoteCall.java:111) at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:197) ... 4 more HelloImplのソースコードは以下の通りです。 package examples.hello; import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.RMISecurityManager; import java.rmi.server.UnicastRemoteObject; public class HelloImpl extends UnicastRemoteObject implements Hello { public HelloImpl() throws RemoteException { super(); } public String sayHello() { return "Hello World!"; } public static void main(String args[]) { // Create and install a security manager if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); } try { HelloImpl obj = new HelloImpl(); // Bind this object instance to the name "HelloServer" Naming.rebind("//localhost/HelloServer", obj); System.out.println("HelloServer bound in registry"); } catch (Exception e) { e.printStackTrace(); // System.out.println("HelloImpl err: " + e.getMessage()); // e.printStackTrace(); } } } なにか少しでもわかる事がございましたら、ご教示ください。 お願いいたします。 |
|
投稿日時: 2005-01-19 06:22
おちゃさん、こんにちは。
あまり詳しくないのですが、 Namingはいきなり rebind()するものなのでしょうか。 bind()でなくて良いのですか? |
|
投稿日時: 2005-01-19 12:31
rmiregistryがポート1099で待機していることは確認できてますか?
1099ポートの使用権限の無いユーザーでrmiregistryを起動しちゃった とか、あるいは他のプロセスが使用中だったとか… rmiregistryが使用するポート番号は変更可能ですので、変更して みても良いかと思います。 そのときは、bind()する側でNamingのstaticメソッドを使用せず、 LocateRegistry.getRegistry(ポート番号).rebind() としてください。 |
|
投稿日時: 2005-01-19 16:10
Kissingerさん、ご返答ありがとうございます。
念のためbind()で実行してみましたが、状態は変わりませんでした。 シュンさん、ご返答ありがとうございます。 Linuxにはroot権限で入っています。 クライアントとして使っているWindows機からSuperScan4というポートスキャンソフトで Linuxサーバ側に1099にRMI Serverが待機していることを確認いたしました。 rmiregistryの使用するポート番号を変更してみました。 LocateRegistry.getRegistry(8088).rebind("//localhost/HelloServer", obj); とか LocateRegistry.getRegistry(8088).rebind("/HelloServer", obj); をやってみましたが変化はありませんでした。 |
|
投稿日時: 2005-01-19 18:28
なんだか環境のほうを疑い始めています。
glibcのバージョン依存とかってあるのですか? |
|
投稿日時: 2005-01-19 18:53
あう、ぜんぜん分かりませんです。
あとありえそうなのは、rmiregistryモジュールのバージョンとbind操作を行う側のJREのバージョンが合っていないか何かで、バインド操作の通信プロトコルがかみ合ってないとか… |
|
投稿日時: 2005-01-19 19:29
シュンさん、ありがとうございます。
java -version で調べたところ build1.4.2_06_b03 です。 古いJREが走っている形跡はありませんでした。 |
|
投稿日時: 2005-01-19 19:31
NPTLって関係ないでしょうか?
http://java.sun.com/developer/technicalArticles/JavaTechandLinux/RedHat/ |
