You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebSphere Liberty连接Apache TomEE Plume的JMS阻塞问题求助

问题:WebSphere Liberty通过activemq-rar-5.16.3连接TomEE Plume MDB时,createContext()挂起无响应

场景描述

需从WebSphere Liberty运行的代码连接到Apache TomEE Plume中的MDB,使用activemq-rar-5.16.3组件。代码执行到jmsFactory.createContext()时挂起,无任何异常抛出。TomEE日志显示ActiveMQ监听器已在tcp://127.0.0.1:61616创建,netstat验证端口处于监听状态。Wireshark未捕获到数据,修改Liberty连接工厂指向61615也无变化,推测createContext()尚未发起与broker的连接。代码运行在Liberty的异步CDI事件处理器中,Liberty日志无异常、无FFDC事件。因新版本RAR依赖Java 11,无法升级组件。

Java代码

public void notifyListeners(String caseId) { 
    logger.debug("+notifyListeners");
    int timeToLive = 15 * 1000; // 15 seconds
    try {
        logger.debug("Creating context");
        InitialContext ic = new InitialContext();
        logger.debug("Got Initial context");
        ConnectionFactory jmsFactory = (ConnectionFactory)ic.lookup("jndi/JMS_BASE_QCF");
        logger.debug("Got Factory");
        JMSContext context = jmsFactory.createContext(); 
        logger.debug("Creating text message");
        TextMessage msg = context.createTextMessage(caseId);
        logger.debug("Sending text message");
        context.createProducer().setTimeToLive(timeToLive).send(jmsSendQueue, msg);
        logger.debug("Text message sent");
    } catch (Throwable e) {
        logger.error("Caught Exception sending ActiveMQ Message : " + e, e);
    }
    logger.debug("-notifyListeners");
}

环境信息

  • Liberty: WebSphere Application Server 21.0.0.1 (wlp-1.0.48.cl210120210113-1459)
  • Apache TomEE: Apache Tomcat (TomEE)/9.0.52 (8.0.8)

Liberty server.xml相关配置

<!-- Liberty to TomEE JMS over ActiveMQ Config    -->
<featureManager>
    <feature>ejbLite-3.2</feature>
    <feature>jaxws-2.2</feature>
    <feature>jndi-1.0</feature>
    <feature>jpa-2.2</feature>
    <feature>jpaContainer-2.2</feature>
    <feature>jsp-2.3</feature>
    <feature>localConnector-1.0</feature>
    <feature>mdb-3.2</feature>
    <feature>microProfile-3.3</feature>
    <feature>monitor-1.0</feature>
    <feature>wasJmsClient-2.0</feature>
    <feature>wasJmsSecurity-1.0</feature>
    <feature>wasJmsServer-1.0</feature>
    <feature>wmqJmsClient-2.0</feature>
    <feature>jms-2.0</feature>
</featureManager>

<resourceAdapter id="activemq" location="C:\apps\liberty\ActiveMQRAR\activemq-rar-5.16.3.rar">
    <properties.activemq ServerUrl="tcp://127.0.0.1:61616"/>
</resourceAdapter>

<jmsQueueConnectionFactory jndiName="jndi/JMS_BASE_QCF"> 
    <properties.activemq serverUrl="tcp://127.0.0.1:61616"/> 
</jmsQueueConnectionFactory> 

<jmsQueue jndiName="jndi/worklistQueue"> 
    <properties.activemq PhysicalName="jms/worklistQueue"/> 
</jmsQueue> 

调试思路

1. 排查JMS特性冲突

server.xml中同时启用了wasJmsClient-2.0、wasJmsServer-1.0与jms-2.0特性,WebSphere自有JMS实现会干扰第三方ActiveMQ RAR的加载。建议:

  • 移除wasJmsClient-2.0、wasJmsSecurity-1.0、wasJmsServer-1.0、wmqJmsClient-2.0特性,仅保留jms-2.0及业务必要特性
  • 重启Liberty后重新测试

2. 开启ActiveMQ RAR调试日志

添加日志配置捕获连接细节:

<logging traceSpecification="com.ibm.ws.jms*=all, org.apache.activemq*=all"/>

重启Liberty后触发代码执行,查看logs/trace.log,定位挂起环节(如连接池初始化、broker握手等)。

3. 修正RAR配置参数

resourceAdapter中使用了大写开头的ServerUrl,而ActiveMQ 5.16.3 RAR的标准参数名为小写serverUrl,可能导致配置未生效。统一修正为:

<resourceAdapter id="activemq" location="C:\apps\liberty\ActiveMQRAR\activemq-rar-5.16.3.rar">
    <properties.activemq serverUrl="tcp://127.0.0.1:61616"/>
</resourceAdapter>

同时通过Liberty管理控制台(http://localhost:9080/admin)验证连接工厂是否正确关联ActiveMQ RAR。

4. 测试同步环境下的连接

异步CDI线程可能存在上下文权限问题,编写同步Servlet/JSP调用相同JMS代码:

  • 若同步环境正常,说明问题出在异步CDI线程的上下文配置
  • 检查Liberty的CDI异步线程权限,确保其拥有JNDI lookup、JMS资源访问权限

5. 验证broker安全配置

若TomEE的ActiveMQ broker启用了认证,需在Liberty连接工厂添加认证信息:

<jmsQueueConnectionFactory jndiName="jndi/JMS_BASE_QCF"> 
    <properties.activemq serverUrl="tcp://127.0.0.1:61616" userName="admin" password="admin"/> 
</jmsQueueConnectionFactory> 

同时确认TomEE的conf/server.xml中broker未启用SSL等额外限制。

6. 分析线程转储

使用Liberty自带命令生成线程转储:

server dump <serverName> --include=threads

分析logs/dump/threaddump文件,找到执行notifyListeners的线程,查看调用栈定位阻塞的具体代码位置(如连接池获取、socket建立等)。

内容的提问来源于stack exchange,提问作者Greycon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 15:33:34