如何解决JBOSS服务器jms事务失效问题

把JMS的队列连接工厂由JNDI替换成Spring bean的方式

涉及到MQ的jar包版本需要7.0.1.0以上,才支持重连。Maven有最新jar7.0.1.12版本。
dhbcore-7.0.1.12.jar
jmqi-7.0.1.12.jar
mqjms-7.0.1.12.jar

<dependency>
    <groupId>com.ibm.mqjms</groupId>
    <artifactId>mqjms</artifactId>
    <version>7.0.1.12</version>
</dependency>
<dependency>
    <groupId>com.ibm.mq.jmqi</groupId>
    <artifactId>jmqi</artifactId>
    <version>7.0.1.12</version>
</dependency>
<dependency>
    <groupId>com.ibm.mq.dhbcore</groupId>
    <artifactId>dhbcore</artifactId>
    <version>7.0.1.12</version>
</dependency>






第一步:在spring的配置文件中添加以下配置

连接工厂的配置如下:
<bean id="jmsConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
    <property name="queueManager" value="SOA_QM"></property>
    <property name="connectionNameList" value="192.168.0.101(2001),192.168.0.102(2001)"></property>
    <property name="clientReconnectOptions" value="16777216"></property>
<property name="clientReconnectTimeout" value="100"></property>
    	<property name="channel" value="CHANNELTEST"></property>
    	<property name="transportType" value="1"></property>
    <property name="CCSID" value="1208"></property>
</bean>
<!--
注:标红部分为有主备机时的配置属性
-->

<!--
队列配置如下:
-->
<bean id="receiveQueue" class="com.ibm.mq.jms.MQQueue">
    <property name="baseQueueName" value="TestReceiveQueue"></property>
    <property name="CCSID" value="1208"></property>
</bean>

<bean id="sendQueue" class="com.ibm.mq.jms.MQQueue">
    <property name="baseQueueName" value="TestSendQueue"></property>
    <property name="CCSID" value="1208"></property>
</bean>

<!--
注:无论生产或消费都这样配置,如果生产和消费的连接工厂或队列相同,只需配置一遍。
-->




//使用原生springJms的配置
//定义一个类,实现javax.jms.MessageListener接口
public class TestListener implements MessageListener {
    @Override
    public void onMessage(Message message) {
         //具体的业务逻辑
        	System.out.println(message);    }
}









<!--使用原生springJms的配置-->
<!--同非事务标准消费者,更改以下部分:-->
<bean id="testContainer"
      class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="concurrentConsumers" value="1" />
    <property name="maxConcurrentConsumers" value="2" />
    <property name="connectionFactory" ref="jmsConnectionFactory" />
    <property name="destination" ref="receiveQueue" />
    <property name="messageListener" ref="testListener" />
    <property name="sessionTransacted" value="true"></property>
</bean>

connectionFactory:队列连接工厂
destination:队列
messageListener:队列对应的监听器
sessionTransacted:是否启用JMS事务



猜你喜欢

转载自13813962825.iteye.com/blog/2397067