如何解决读取 MQ 消息导致 commit/rollback 出错的问题?

How can I solve reading MQ messages resulting in error on commit/rollback?

在努力使 MQ 连接在 Liberty 中工作时,我遇到了以下问题。

收到消息后,出现如下错误: JMSCC0014: 在非事务性会话上调用 'commit' 方法无效。

我进行了一些搜索,发现了一些关于需要使用连接工厂的 XA 版本的信息,但我不知道这是否确实是解决方案,而且我还没有找到任何明确的示例来说明如何使用在我的配置中实现。

这里是 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/incomingRequestQueue" jndiName="jms/incomingRequestQueue">
    <properties.mqJms baseQueueName="QUEUEIN"/>
</jmsQueue>

在代码中通过 JNDI 检索 queueConnectionFactory。

如有任何帮助,我们将不胜感激。

解决方案最终是在收到 MQ 消息后不执行提交/回滚,有关详细信息,请参见此处:Websphere Liberty : JMS Sessions don't work