7

Java RMI の Hello World の例を実行しています

1)空のフォルダーでレジストリを実行します

motta@motta-laptop ~/tmp $ rmiregistry

2) HTTP サーバーを起動して、実行時にクラスを取得します。ダウンロードフォルダーには、クライアントサーバー用のリモートインターフェースが含まれています

motta@motta-laptop ~/download $ java NanoHTTPD 8080

3) Java RMI チュートリアルで提案されているように、java.rmi.server.codebase プロパティを渡してサーバーを起動します。

motta@motta-laptop ~/server $ java -Djava.rmi.server.codebase="http://localhost:8080" WarehouseServer

RMI レジストリが HTTP サーバーに接続しておらず、例外をスローしています (質問の後の詳細を参照してください)。 しかし、私が次のことをすると

1) java.rmi.server.codebase プロパティを使用して rmi レジストリを開始します。

motta@motta-laptop ~/tmp $ rmiregistry -J-Djava.rmi.server.codebase="http://localhost:8080/"

2) 前と同じように HTTP サーバーを起動します。

3) オプションなしでサーバーを起動する

motta@motta-laptop ~/server $ java WarehouseServer

それは機能しますが、なぜですか?最初の手順では、RMI レジストリが java.rmi.server.codebase プロパティを無視しているようです。

ありがとうございました

=================================

私は走っています

java version "1.7.0_21"
Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)

RMI レジストリからの例外

Constructing server implementation...
Binding server implementation to registry...
Exception in thread "main" java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
java.lang.ClassNotFoundException: Warehouse
at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:419)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267)
at sun.rmi.transport.Transport$1.run(Transport.java:177)
at sun.rmi.transport.Transport$1.run(Transport.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:273)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:251)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:377)
at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
at WarehouseServer.main(WarehouseServer.java:14)
4

1 に答える 1