1. 程式人生 > >關於RMI的幾個問題解決

關於RMI的幾個問題解決

作者:fbysss
QQ:溜酒酒吧酒吧吾散
blog:blog.csdn.net/fbysss
宣告:本文由fbysss原創,轉載請註明出處

1.多網絡卡導致的RMI連線問題:

Caused by: java.rmi.ConnectException: Connection refused to host: xx.xx.xx.xxx; nested exception is:  java.net.ConnectException: Connection timed out: connect        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(
 TCPEndpoint.java:619) ~[na:1.7.0_79] 網上也有很多解決方案,其中一個是修改hosts和network檔案的。曾經在一個環境下OK,但另一個環境死活不行。 最有效的,不用改程式碼的,就是在伺服器端,指定server ip. 辦法: 伺服器程式啟動的時候,java命令加一個引數:-Djava.rmi.server.hostname=伺服器real ip 2.伺服器重啟之後,客戶端再連線就報錯了。 在客戶端的配置檔案中,新增一行:        <property name="refreshStubOnConnectFailure" value="true"/>即可。
樣例如下:     <bean id="userService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean" >  
        <property name= "serviceUrl" value="rmi://${rmi.ip}:${rmi.port}/userService" />  
        <property name= "serviceInterface" value="com.xxx.xxxx.resource.service.XxxxxService" />       
        <property name="refreshStubOnConnectFailure" value="true"/>

    </bean>
3.如果RMI服務有問題,客戶端應用啟動會報錯。服務啟動後,只能重啟應用伺服器 解決:在上面的程式碼段中,再新增一個屬性:  <property name="lookupStubOnStartup" value="false"/> 這樣,客戶端應用服務的啟動,不會受到RMI服務狀態的影響。因為設定了重連屬性,等解決RMI服務的問題之後,重新整理客戶端請求即可重連。