12 Stimmen

Verbinde RMI-Client nach dem Neustart des Servers erneut

Ich habe einen RMI-Server und einen Desktop-RMI-Client. Wenn ich den Server neu starte, erhalte ich Fehler im Client. Ist es möglich, die RMI-Verbindung neu zu starten, ohne den Client neu zu starten?

[EDIT] Hier ist der Stacktrace:

java.rmi.ConnectException: Verbindung mit Host xxx.xxx.xxx.xxx abgelehnt; Innere Ausnahme ist: 
    java.net.ConnectException: Verbindungsaufbau abgelehnt: connect
    at ...Benutzercode...
Verursacht durch: java.rmi.ConnectException: Verbindung mit Host xxx.xxx.xxx.xxx abgelehnt; Innere Ausnahme ist: 
    java.net.ConnectException: Verbindungsaufbau abgelehnt: connect
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:574)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:185)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:94)
    at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:179)
    at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132)
    at $Proxy0.search(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:592)
    at org.springframework.remoting.rmi.RmiClientInterceptorUtils.invokeRemoteMethod(RmiClientInterceptorUtils.java:108)
    at org.springframework.remoting.rmi.RmiClientInterceptor.doInvoke(RmiClientInterceptor.java:362)
    at org.springframework.remoting.rmi.RmiClientInterceptor.invoke(RmiClientInterceptor.java:258)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    at $Proxy1.search(Unknown Source)
    ... 3 more
Verursacht durch: java.net.ConnectException: Verbindungsaufbau abgelehnt: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:367)
    at java.net.Socket.connect(Socket.java:524)
    at java.net.Socket.connect(Socket.java:474)
    at java.net.Socket.(Socket.java:371)
    at java.net.Socket.(Socket.java:184)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:569)
    ... 20 more

23voto

Aaron Digulla Punkte 308693

Wenn Sie Spring verwenden (insbesondere RmiProxyFactoryBean), können Sie einfach die Eigenschaft refreshStubOnConnectFailure auf true setzen und das Bean wird einen Neustart des Servers überleben.

5voto

tangens Punkte 37853

Wenn der Server beendet wird, erhalten Sie eine ConnectException. Danach können Sie einfach Naming.lookup verwenden, um ein neues Serverobjekt zu erhalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X