我们有一个全天候在线的Spring网络应用程序。此应用程序使用JMS发送和接收来自其他系统的消息。在大多数情况下,一切都按预期工作。但是,偶尔我们遇到的问题是网络出现故障或后端JMS提供程序(JBOSS 5.1.0.GA)挂起并且必须重新启动。因此,由于各种原因,Web应用程序失去了与JMS提供程序的连接。我们能够重新建立连接的唯一方法是重新启动servlet容器(tomcat)。
有没有办法在运行时重新启动ConnectionFactory bean?我们在applicationContext.xml中定义了以下bean:
<bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="lookupOnStartup" value="false" />
<property name="cache" value="false" />
<property name="proxyInterface" value="javax.jms.ConnectionFactory" />
<property name="jndiTemplate">
<ref bean="jndiTemplate" />
</property>
<property name="jndiName">
<value>ConnectionFactory</value>
</property>
</bean>
有没有办法重新启动bean,以便bean重新建立与提供者的连接?我们希望在应用程序处于活动状态时执行此操作,并避免重新启动应用程序或servlet。
这在春天是否可能?
提前致谢。
答案 0 :(得分:0)
您可以将此connectionFactory包装在Spring提供的ConnectionFactory - CachingConnectionFactory周围,它支持自动恢复连接。
<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="jmsConnectionFactory"/>
<property name="sessionCacheSize" value="5"/>
</bean>