2012-08-07 3 views
1

우리는 거의 24x7 온라인 온라인 웹 응용 프로그램을 가지고 있습니다. 이 응용 프로그램은 JMS를 사용하여 다른 시스템과 메시지를주고받습니다. 대부분의 경우 모든 것이 예상대로 작동합니다. 그러나 때로는 네트워크에 장애가 발생하거나 백엔드 JMS 공급자 (JBOSS 5.1.0.GA)가 중지되어 다시 시작해야하는 문제가 있습니다. 그래서 다양한 이유로 웹 애플리케이션이 JMS 공급자와의 연결을 잃어 버린다. 우리가 연결을 다시 설정할 수 있었던 유일한 방법은 서블릿 컨테이너 (tomcat)를 다시 시작하는 것입니다.런타임시 Spring에서 빈을 다시 초기화 할 수 있습니까?

런타임에 ConnectionFactory Bean을 다시 초기화 할 수있는 방법이 있습니까? 우리는 우리의 applicationContext.xml에서 다음 빈을 정의했습니다 :

 <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> 

빈을 다시 init를 방법이 있나요 있도록 빈 다시 설정 공급자에 대한 연결을? 응용 프로그램이 실행되는 동안이 작업을 수행하고 응용 프로그램이나 서블릿을 다시 시작하지 않아야합니다.

봄에도 가능합니까?

미리 감사드립니다.

답변

0

이 연결을 감쌀 수 있습니다. 봄 주변의 팩토리는 자동 연결 복구를 지원하는 ConnectionFactory - CachingConnectionFactory을 제공합니다.

<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory"> 
    <property name="targetConnectionFactory" ref="jmsConnectionFactory"/> 
    <property name="sessionCacheSize" value="5"/> 
</bean> 
+0

제안 해 주셔서 감사합니다. 아쉽게도 ConnectionFactory는 이미 Spring의 CachingConnectionFactory를 감싸고 있습니다. 그러나 오류로 인해 연결이 복구되지 않습니다. 우리는 보내거나받는 모든 메시지가있는 연결을 만들고 찢어 버리는 것을 피하기 위해 그렇게했습니다. 할 수있는 다른 것이 있습니까? – groovenarula

관련 문제