java - Spring应用到MQ认证问题

标签 java spring jms ibm-mq

我正在编写一个带有监听器的 Java 应用程序,用于从 WebSphere MQ 读取消息。

这是我的 applicationContext.xml:

<bean id="transactionManager"
    class="org.springframework.jms.connection.JmsTransactionManager">
    <property name="connectionFactory" ref="mqQueueConnectionFactory" />
</bean>

<bean id="mqMessageListener" class="ru.mos.notification.controller.MQNotificationListener">
    <property name="mqwsUrl" value="${mqws.url}" />
    <property name="mqwsSoapAction" value="${mqws.soapAction}" />
    <property name="mqwsSoapStart" value="${mqws.soapStart}" />
    <property name="mqwsSoapEnd" value="${mqws.soapEnd}" />
</bean>

<bean id="mqQueueConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
    <property name="hostName" value="${mq.hostName}" />
    <property name="port" value="${mq.port}" />
    <property name="queueManager" value="${mq.queueManager}" />
    <property name="transportType" value="1" />
    <property name="channel" value="${mq.channel}" />
</bean>

<bean id="jmsConnectionFactory"
    class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
    <property name="targetConnectionFactory" ref="mqQueueConnectionFactory" />
    <property name="username" value="${mq.username}" />
    <property name="password" value="${mq.password}" />
</bean>

<bean
    class="org.springframework.jms.listener.DefaultMessageListenerContainer">       
    <property name="destinationName" value="${mq.destinationName}" />
    <property name="destinationResolver">
        <bean
            class="org.springframework.jms.support.destination.DynamicDestinationResolver" />
    </property>
    <property name="sessionAcknowledgeModeName" value="AUTO_ACKNOWLEDGE" />
    <property name="sessionTransacted" value="true" />
    <property name="messageListener" ref="mqMessageListener" />
    <property name="transactionManager" ref="transactionManager"/>
    <property name="connectionFactory" ref="jmsConnectionFactory" />
</bean>

这就是导致问题的原因:

<property name="transactionManager" ref="transactionManager"/>

如果我删除此属性,一切都会正常工作。我的队列中的消息已被读取。但如果我放置此属性,则会出现以下错误:

17:54:20,468  WARN DefaultMessageListenerContainer:821 - Setup of JMS message listener invoker failed for destination 'asurtst1qu' - trying to recover. Cause: Could not create JMS transaction; nested exception is com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: The security authentication was not valid that was supplied for QueueManager 'asurtst1mgr' with connection mode 'Client' and host name '172.31.197.247(1414)'. Please check if the supplied username and password are correct on the QueueManager you are connecting.

如果出现任何错误,我需要事务管理器将消息放回队列。但由于这个异常,我无法使用它。请帮助我。

最佳答案

您的 transactionManager bean 应该引用 jmsConnectionFactory 而不是 mqQueueConnectionFactory。

关于java - Spring应用到MQ认证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27106762/

相关文章:

java - 如何离线使用缓存,否则使用网络

java - 方法返回 Stream<T> 是否安全?

java - 在 Google App Engine 数据存储上执行大型查询

java - Spring 启动: file upload testing

java - Hornetq 延迟重新传递消息组

java - 我可以使用基于文件的上下文工厂 com.sun.jndi.fscontext.RefFSContextFactory 构建目录结构 (JNDI)

java - "dereferencing"在Java中有正式或权威的定义吗?

java - 在 Java 中从 Excel xlsx 转换为 xls

java - 调用@Cacheable注解的方法(org.springframework.cache.annotation.Cacheable)

java - 使用 JBoss 将消息发布到远程 JMS 队列