Use of a Spring SingleConnectionFactory
without enabling the reconnectOnException
setting will prevent automatic
connection recovery when the connection goes bad.
That’s because the reconnectOnException
property defaults to false
. As a result, even if the code that uses this
connection factory (Spring’s DefaultMessageListenerContainer
or your own code) has reconnect logic, that code won’t work because the
SingleConnectionFactory
will act like a single-connection pool by preventing connection close
calls from actually closing
anything. As a result, subsequent factory create
operations will just hand back the original broken Connection
.
Noncompliant code example
<bean id="singleCF" class="org.springframework.jms.connection.SingleConnectionFactory"> <!-- Noncompliant -->
<constructor-arg ref="dummyConnectionFactory" />
</bean>
Compliant solution
<bean id="singleCF" class="org.springframework.jms.connection.SingleConnectionFactory" p:reconnectOnException="true">
<constructor-arg ref="dummyConnectionFactory" />
</bean>
or
<bean id="singleCF" class="org.springframework.jms.connection.SingleConnectionFactory">
<constructor-arg ref="dummyConnectionFactory" />
<property name="reconnectOnException"><value>true</value></property>
</bean>