1

我们有一个几乎 24x7 在线的 Spring Web 应用程序。此应用程序使用 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。

这在春天甚至可能吗?

提前致谢。

4

1 回答 1

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>
于 2012-08-07T23:13:25.387 回答