jakarta-ee - 在 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>
完整的代码在这里。
运行测试代码时。我有一个超时异常。
在此处查看详细信息。
更新:更新了可行的迷你配置。
解决方案
不应在 jndiName 属性的值中配置 java:comp 名称。在这种情况下,因为您尝试配置默认 JMS 连接工厂 java:comp/DefaultJMSConnectionFactory,所以您根本不应该使用 jndiName,并且您还需要使用 jmsConnectionFactory 元素而不是 jmsQueueConnectionFactory 元素。例如:
<jmsConnectionFactory id="DefaultJMSConnectionFactory">
<properties.wasJms remoteServerAddress="localhost:7276:BootStrapBasicMessaging" />
</jmsQueueConnectionFactory>
您可能还需要解决其他错误以解决超时问题,但是一旦您解决了超时问题,上述内容至少应该有助于纠正您的默认 JMS 连接工厂配置。
推荐阅读
- node.js - express-subdomain 不解析任何子域
- javascript - Angular嵌套ngFor,从父循环中获取价值?
- bash - 如何在 bash 中将字符串附加到数组(列表)的末尾?
- python - for循环和生成器表达式之间的差异
- vue-native - Vue-native:动态创建的 touchable-opacity 一开始都被按下
- android - 按钮离开屏幕android布局
- c# - 防止 httpClient 发起新的调用
- c - 如何在C中的两个字符串之间添加空格
- amazon-s3 - aws s3 cp错误“分配前引用的变量'current_index'”
- python - 如何使用 termcolor 更改字体颜色