由于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>
完整的代码在这里。
运行测试代码时。我遇到了超时异常。
在此处查看详细信息。
更新:更新了可行的迷你配置。
java: comp名称不应配置在jndiName属性的值中。在这种情况下,因为您正在尝试配置默认的JMS连接工厂java:comp/DefaultJMSConnectionFactory,所以您根本不应该使用jndiName,并且您还需要使用jmsConnectionFactory元素而不是jmsQueueConnectionFactory元素。例如:
<jmsConnectionFactory id="DefaultJMSConnectionFactory">
<properties.wasJms remoteServerAddress="localhost:7276:BootStrapBasicMessaging" />
</jmsQueueConnectionFactory>
您可能还需要解决其他错误来解决超时问题,但一旦您解决了超时问题,上述至少应该有助于更正您的默认JMS连接工厂配置。