为什么在上下文查找中找不到我的队列?

Why can my queue not be found in context lookup?

我们有一项服务可以将消息发送到 IBM MQ 队列。

我试图让它在 Liberty 中工作,但是当服务 class 在 postConstruct 中时,我得到一个 NullPointerException,它通过它的 JNDI 名称查找队列。

这里是 server.xml 配置的相关部分:

<resourceAdapter id="mqJms" location="/etc/liberty/wmq/wmq.jmsra.rar"/>
<authData id="mqJms.auth" user="user" password="password"/>

<jmsQueueConnectionFactory jndiName="jms/queueConnectionFactory" connectionManagerRef="ConMgr4" containerAuthDataRef="mqJms.auth">
    <properties.mqJms transportType="CLIENT"
        hostName="server" port="1234"
        channel="CHANNEL"/>
</jmsQueueConnectionFactory>

<connectionManager id="ConMgr4"
    connectionTimeout="30s"
    maxPoolSize="50" minPoolSize="1"
    reapTime="60s" agedTimeout="0"/>

    <jmsQueue id="jms/outgoingRequestQueue" jndiName="jms/outgoingRequestQueue">
        <properties.mqJms queueName="QUEUEOUT"/>
    </jmsQueue>

    <jmsActivationSpec id="earname/warname/JMSService" authDataRef="mqJms.auth">
        <properties.mqJms destinationRef="jms/outgoingRequestQueue" destinationType="javax.jms.Queue"/>
    </jmsActivationSpec>

这是我得到的错误:

J2CA8500E: An error occurred while attempting to configure a property queueName of configuration element com.ibm.ws.jca.adminObject.supertype[jms/incomingResponseQueue] on the class com.ibm.mq.connector.outbound.MQQueueProxy: java.lang.NullPointerException
        at com.ibm.ws.jca.internal.BootstrapContextImpl.configure(BootstrapContextImpl.java:471)

这让我觉得 server.xml 中可能缺少某些东西,但我无法弄清楚它是什么。

根据MQ resource adapter documentationqueueName属性实际上应该是baseQueueName。此外,如果空字符串的默认 qmgr 值对您的连接无效,您可能需要在连接工厂上指定 queueManager 或在 jmsQueue 属性上指定 baseQueueManagerName