为什么在上下文查找中找不到我的队列?
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 documentation,queueName
属性实际上应该是baseQueueName
。此外,如果空字符串的默认 qmgr 值对您的连接无效,您可能需要在连接工厂上指定 queueManager
或在 jmsQueue
属性上指定 baseQueueManagerName
。
我们有一项服务可以将消息发送到 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 documentation,queueName
属性实际上应该是baseQueueName
。此外,如果空字符串的默认 qmgr 值对您的连接无效,您可能需要在连接工厂上指定 queueManager
或在 jmsQueue
属性上指定 baseQueueManagerName
。