在 OpenLiberty 中为 Arquillian 测试配置默认 JMS 连接工厂和队列

问题描述

从 Java EE6 和 Java EE 7 开始,有一些认资源可用于创建可移植的企业应用程序。

在兼容 Jakarta EE 8 的应用服务器中,它应该通过 jndiName java:comp/DefaultJMSConnectionFactory 认提供一个认的 JMS 连接工厂。

但是在 OpenLiberty 21.0.0.1 中激活这样一个认的 JMS 连接工厂似乎并不容易。

我使用以下 server.xml 为我的示例代码提供 JMS 服务。

...
    <messagingEngine>
        <queue id="HelloQueue" />
    </messagingEngine>

    <!--<jmsQueueConnectionFactory jndiName="java:comp/DefaultJMSConnectionFactory">
        <properties.wasJms remoteServerAddress="localhost:7276:BootStrapBasicmessaging" />
    </jmsQueueConnectionFactory>-->

    <jmsQueue id="jms/HelloQueue" jndiName="java:app/jms/HelloQueue">
        <properties.wasJms queueName="HelloQueue" />
    </jmsQueue>

    <jmsActivationSpec id="test/HelloConsumer">
        <properties.wasJms
                destinationRef="jms/HelloQueue"
                destinationType="javax.jms.Queue"
                />
    </jmsActivationSpec>
                  
    <!-- Automatically expand WAR files and EAR files -->
    <applicationManager autoExpand="true"/>

</server>

完整代码here

运行测试代码时。我收到超时异常。

查看详情here

更新:更新了可用的迷你配置。

解决方法

不应在 jndiName 属性的值中配置 java:comp 名称。在这种情况下,因为您正在尝试配置默认的 JMS 连接工厂 java:comp/DefaultJMSConnectionFactory,所以您根本不应该使用 jndiName,并且您还需要使用 jmsConnectionFactory 元素而不是 jmsQueueConnectionFactory 元素。例如:

<jmsConnectionFactory id="DefaultJMSConnectionFactory">
  <properties.wasJms remoteServerAddress="localhost:7276:BootStrapBasicMessaging" />
</jmsQueueConnectionFactory>

您可能还需要解决其他错误以解决超时问题,但是一旦您解决超时问题,上述内容至少应该有助于纠正您的默认 JMS 连接工厂配置。