Spring 3.0 で作成された RMI クライアント/サーバー構成があります。
クライアントとサーバーが同じマシンで次の URL で実行されている場合:
rmi://localhost:1099/myService
全て大丈夫。別のマシンでクライアントを実行すると (サーバーは現在 192.168.1.67 で実行されています)、クライアントは次のように「ポイント」します。
rmi://192.168.1.67:1099/myService
クライアントから次のエラー メッセージが表示されます。
org.spring...RmiClientInterceptor handlerRemoteConnectFailure.
Could not connect to Rmi Service [rmi://192.1681.67:1099/myService]
サーバーは次のように構成されます。
<bean id="myService" class="org.springframework.remoting.rmi.RmiServiceExporter">
<property name="service" ref="myService"/>
<property name="serviceInterface" value="org.myapp.MyService"/>
<property name="serviceName" value="myService"/>
<property name="alwaysCreateRegistry" value="true"/>
</bean>
<bean id="myService" class="org.myapp.MyServiceImpl" />
そしてクライアント:
RmiProxyFactoryBean rpfb = new RmiProxyFactoryBean();
rpfb.setServiceInterface(MyService.class);
rpfb.setLookupStubOnStartup(true);
rpfb.setRefreshStubOnConnectFailure(true);
RMICustomClientSocketFactory socketFactory = new RMICustomClientSocketFactory();
socketFactory.setTimeout(5000);
rpfb.setRegistryClientSocketFactory(socketFactory);
rpfb.setServiceUrl(getRmiUrl(address, port));
rpfb.afterPropertiesSet();
サーバーのポート 1099 をスニファで確認したところ、クライアントがプロセスを開始すると、サーバー側で「ディスパッチ」されたデータが表示されます。
JRMI..K
...192.168.1.65..
..192.168.1.65....
P....w"..........................D.M...;.t..myService
Q....w.....e...7B+@5..s}.....5org.springframework.remoting.rmi.RmiInvocationHandlerpxr..java.lang.reflect.Proxy.'. ..C....L..ht.%Ljava/lang/reflect/InvocationHandler;pxpsr.-java.rmi.server.RemoteObjectInvocationHandler...........pxr..java.rmi.server.RemoteObject.a...a3....pxpw2.
UnicastRef..127.0.1.1..../.T~.X.....e...7B+@5...x
R
S
T...e...7B+@5..
私の質問は、クライアントとサーバーが同じマシンで実行されている場合、すべて問題ないのに、別のマシンでこの問題が発生するのはなぜですか? そしてそれを修正する方法は?