RmiProxyFactoryBean + Autowired(required = false)

时间:2011-09-20 11:23:18

标签: java spring rmi dependency-management spring-remoting

我有5个项目 - 其中4个在控制台上运行(例如A,B,C和D),java -jar A.jar等和1个Web应用程序(E)。 Web应用程序部署在多个隔离的服务器上,其中一些服务器还运行A,B,C和D的组合。

在Web应用程序的spring配置文件中,我有4个RmiProxyFactoryBean声明,每个项目A,B,C和D一个,其中每个项目都有1 RmiServiceExporter

我的问题是,如果其中一个项目(A-D)没有运行,Web应用程序会在启动时抛出异常。我尝试使用这些服务在控制器中使用@Autowired(required=false)无济于事。为了使其工作,我必须编辑Web应用程序弹簧文件以注释掉RmiProxyFactoryBean未运行的项目。有没有办法告诉RmiProxyFactoryBean尝试检索bean,如果失败则不要担心 - 与required=false使用autowire的方式类似?

我的配置目前看起来像这样:

<bean class="org.springframework.remoting.rmi.RmiServiceExporter">
    <property name="service"          ref="diagramAssociationService" />
    <property name="serviceName"      value="diagramAssociationService"/>
    <property name="serviceInterface" value="com.act.xv.service.IDiagramAssociationService"/>
</bean>

<bean id="diagramAssociationService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
    <property name="serviceUrl" value="rmi://${xv.deploy.location}/diagramAssociationService"/>
    <property name="serviceInterface" value="com.act.xv.service.IDiagramAssociationService"/>
    <property name="refreshStubOnConnectFailure" value="true" />
</bean>

1 个答案:

答案 0 :(得分:3)

在RmiProxyFactoryBean中还将lookupStubOnStartup属性设置为“false”。这应该可以防止客户端代理在启动时抛出异常。