首页 > 解决方案 > 在 OpenLiberty 中为 Arquillian 测试配置默认 JMS 连接工厂和队列

问题描述

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

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

但是在 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>

完整的代码在这里

运行测试代码时。我有一个超时异常。

在此处查看详细信息。

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

标签: jakarta-eejmsjboss-arquillianopen-liberty

解决方案


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

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

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


推荐阅读