2

RMI接続の「テスト」機能を追加する必要があります(反対側のサーバーが使用可能/存在するかどうかを確認します)。私はこのクラス/Beanを作成しました:

 public class MyRmiClientSocketFactory implements RMIClientSocketFactory {

private int timeout;

public void setTimeout(int timeout) {
    this.timeout = timeout;
}

@Override
public Socket createSocket(String host, int port) throws IOException {
    final Socket socket = new Socket();
    socket.setSoTimeout(timeout);
            socket.setSoLinger(false, 0);
            socket.connect(new InetSocketAddress(host, port), timeout);
    return socket;
}

 }

 <bean id="myRmiClientSocketFactory" class="org.myapp.MyRmiClientSocketFactory">
    <property name="timeout" value="2000"/>
</bean>

 <bean id="myExecutor" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
    <property name="serviceInterface" value="org.myapp.MyExecutor"/>
    <property name="serviceUrl" value="rmi://localhost:1099/myExecutor"/>
<!--        <property name="refreshStubOnConnectFailure" value="true"/> -->
<!--        <property name="lookupStubOnStartup" value="false"/> -->
    <property name="registryClientSocketFactory" ref="myRmiClientSocketFactory"/>
</bean>

「serviceUrl」に「間違った」URLを設定すると、2秒後に「接続タイムアウト」が発生することが予想されますが、それは発生しません。それを可能にする方法はありますか?

4

1 に答える 1

1

接続タイムアウトではなく、読み取りタイムアウトを設定しました。connect()を呼び出すと、接続タイムアウトが発生します。

于 2012-05-09T23:21:51.333 に答える