问题描述
从 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。
更新:更新了可用的迷你配置。
解决方法
不应在 jndiName 属性的值中配置 java:comp 名称。在这种情况下,因为您正在尝试配置默认的 JMS 连接工厂 java:comp/DefaultJMSConnectionFactory,所以您根本不应该使用 jndiName,并且您还需要使用 jmsConnectionFactory 元素而不是 jmsQueueConnectionFactory 元素。例如:
<jmsConnectionFactory id="DefaultJMSConnectionFactory">
<properties.wasJms remoteServerAddress="localhost:7276:BootStrapBasicMessaging" />
</jmsQueueConnectionFactory>
您可能还需要解决其他错误以解决超时问题,但是一旦您解决超时问题,上述内容至少应该有助于纠正您的默认 JMS 连接工厂配置。