提问者:小点点

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


由于JavaEE6和JavaEE7,有一些默认资源可用于创建便携式企业应用程序。

在JakartaEE8兼容的应用程序服务器中,默认情况下应该通过jndiNamejava: comp/DefaultJMSConnectionFactory提供默认的JMS连接工厂。

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

完整的代码在这里。

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

在此处查看详细信息。

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


共1个答案

匿名用户

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

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

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