java.rmi.NoSuchObjectException: no such object in table异常问题解析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pengchang_1981/article/details/8069124

                近日部署发送短信程序的服务器发生了宕机的事情,短信服务是采用JAVA RMI的形式供需要发送短信的客户端程序调用来发送短信,在客户端的配置文件中作如下配置。

               

<!-- 发送接口告警短信 -->
	<bean id="smsSender" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
		<property name="serviceUrl">
			<value>rmi://10.25.2.120:9000/SMSService</value>
		</property>
		<property name="serviceInterface">
			<value>com.imcs.sms.cmpp.SmsSender</value>
		</property>
	</bean>

               宕掉的服务器恢复后维护人员重启了RMI服务端程序,但我们有个调用短信的平台却仍未发送短信,检查平台短信发送日志出现如下异常: org.springframework.remoting.RemoteConnectFailureException: Cannot connect to remote service [rmi://10.25.2.120:9000/SMSService]; nested exception is java.rmi.NoSuchObjectException: no such object in table。由此异常分析,调用短信接口的平台仍然调用的是宕机前的rmi服务端,但这时候已经 NoSuchObjectException: no such object in table,但这时候已经找不到这个rmi服务对象了,因为宕机后该rmi服务接口被Java gc销毁了,而客户端此时不会找到重启服务后的RMI服务,所以客户端调用就会找不到该RMI服务对象了,解决办法很简单,因为RMI服务端重启后重新注册了RMI服务,将客户端平台重启即可,这样就可以正常发送短信了。

              总结:对于RMI服务的C(客户端)或者S(服务端),如果服务端重启,则必须相应重启所有调用客户端,不然就会出现如上所述的java.rmi.NoSuchObjectException: no such object in table异常。


猜你喜欢

转载自blog.csdn.net/pengchang_1981/article/details/8069124