欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于spring的rmi缓存问题

程序员文章站 2022-07-11 17:56:16
...
今天看了看spring提供的各种远程服务功能,动手从最简单的rmi搞起,上来就遇到了问题,我用的是eclipse3.6,JEE版本身集成的server的整合和自动部署,感觉比原来一直用的myeclipse并不缺少什么,ssh那些自动的支持工具本身也用不上,速度还不是一般的快,以后打算一直用eclipse了,当修改rmi服务方法的内容,web容器自动重新启动时
[quote]
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'messageService' defined in class path resource [config/spring-rmi.xml]: Invocation of init method failed; nested exception is org.springframework.remoting.RemoteLookupFailureException: Lookup of RMI stub failed; nested exception is java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.io.EOFException
[/quote]

主要配置文件为

<!-- 服务端配置 -->
<bean id="rmiMessageService" class="com.app.rmi.RmiMessageServiceImpl" />

<bean class="org.springframework.remoting.rmi.RmiServiceExporter">
<property name="service" ref="rmiMessageService"/>
<property name="serviceName" value="messageService"/>
<property name="serviceInterface" value="com.app.rmi.RmiMessageService"/>
</bean>

<!-- 客户端配置 -->
<bean id="messageService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl" value="rmi://localhost/messageService"/>
<property name="serviceInterface" value="com.app.rmi.RmiMessageService"/>
</bean>


RmiProxyFactoryBean替我们完成了很多rmi的繁琐事,比如生成桩和骨架bean,注册rmi,将RemoteException一类异常转化成未受查异常等等,看来是客户端访问时,留下了缓存stub,解决很简单,messageService那个bean设置一条property:


<property name="lookupStubOnStartup" value="false"/>


上网查了一下,有的也提到了设置其它属性,如cacheStub,refreshStubOnConnectFailure,不过不设置也正常了,最后让我们为rmi和ejb默哀