【发布时间】:2017-06-07 22:22:08
【问题描述】:
我正在尝试使用 Spring 的 SingleConnectionFactory,其中有 2 个连接工厂,一次应该只有一个能够连接。
<bean id="connectionFactory1" class="org.springframework.jms.connection.SingleConnectionFactory102">
<property name="targetConnectionFactory">
<bean class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
<property name="username" value="LOGIN" />
<property name="password" value="PASS" />
<property name="targetConnectionFactory">
<bean class="com.tibco.tibjms.TibjmsQueueConnectionFactory">
<constructor-arg value="URL" />
<constructor-arg value="CLIENT_ID" />
</bean>
</property>
</bean>
</property>
<property name="reconnectOnException" value="true" />
</bean>
<bean id="connectionFactory2" class="org.springframework.jms.connection.SingleConnectionFactory102">
<property name="targetConnectionFactory">
<bean class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
<property name="username" value="LOGIN" />
<property name="password" value="PASS" />
<property name="targetConnectionFactory">
<bean class="com.tibco.tibjms.TibjmsQueueConnectionFactory">
<constructor-arg value="URL" />
<constructor-arg value="CLIENT_ID" />
</bean>
</property>
</bean>
</property>
<property name="reconnectOnException" value="true" />
</bean>
通过在两个工厂(CLIENT_ID)中使用相同的客户端 ID,我确保当我从一个工厂创建连接时,我无法从另一个工厂创建另一个连接(抛出 InvalidClientIDException,所以这是预期的)。但问题是,当我关闭从第一个工厂获得的连接并尝试从第二个工厂获得连接时,我仍然遇到异常。
使用以下 Java 代码:
Connection connection1 = connectionFactory1.createConnection();
connection1.close();
Connection connection2 = connectionFactory2.createConnection();
关闭第一个连接的正确方法是什么,以便我可以使用第二个工厂创建连接?
另外,请注意我在这里没有使用队列。我必须在没有队列的情况下实现这一点。
【问题讨论】:
-
检测到你打开第一个连接抛出错误的逻辑是什么?
-
factory.resetConnection() -
@MinhKieu,我在两个工厂中使用相同的 CLIENT_ID,因此尝试从不同的工厂创建另一个连接会导致异常。
标签: java jms spring-jms