JBoss EAP 7.4部署含jolokia的EAR包启动报WFLYCTL0030错误如何解决
JBoss EAP 7.4 Jolokia 轮询 ActiveMQ RAR 报错解决方案
根因说明
JBoss EAP 7.x 相对 6.x 调整了跨部署单元的加载优先级逻辑,默认独立部署的 RAR 包加载顺序晚于 EAR 内的 Web 模块,所以内置在 something.ear 中的 Jolokia 会在 activemq-rar.rar 完成资源注册之前就启动 MBean 轮询,触发资源不存在的报错。
可选解决方案
- 方案1:配置部署依赖强制控制启动顺序(最稳定,优先推荐)
在 something.ear 的META-INF/jboss-deployment-structure.xml中添加以下配置,强制 Jolokia 等待 ActiveMQ RAR 部署完成后再加载:
<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <!-- 对整个EAR生效的依赖配置 --> <deployment> <dependencies> <module name="deployment.activemq-rar.rar" export="true" optional="false"/> </dependencies> </deployment> <!-- 也可以仅针对jolokia子部署配置,粒度更细 --> <sub-deployment name="jolokia-1.6.2.war"> <dependencies> <module name="deployment.activemq-rar.rar" export="true" optional="false"/> </dependencies> </sub-deployment> </jboss-deployment-structure>
该配置会通知 JBoss 容器,必须先完成 activemq-rar.rar 的全量部署、资源适配器注册流程,才会开始加载 something.ear 及内部的 Jolokia 模块。
- 方案2:调整 Jolokia 启动延迟
如果不想修改 JBoss 部署配置,可以修改 jolokia-1.6.2.war 内的WEB-INF/web.xml,添加初始化参数延迟 Jolokia 的启动时间:
<servlet> <servlet-name>jolokia</servlet-name> <servlet-class>org.jolokia.http.AgentServlet</servlet-class> <init-param> <param-name>initDelaySeconds</param-name> <param-value>30</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
可根据实际部署的耗时调整参数值,确保 Jolokia 启动轮询时所有资源都已完成注册。
- 方案3:屏蔽 Jolokia 对 ActiveMQ RAR 相关 MBean 的扫描
如果无需监控 ActiveMQ RAR 的相关指标,可以配置 Jolokia 的 MBean 扫描排除规则,屏蔽jboss.as:subsystem=resource-adapters,resource-adapter=activemq-rar.rar*路径的 MBean 轮询,避免访问不存在的资源。
排查前置检查
注意报错日志中出现了 resource-adapter" => "activemq-rar.rarr"(多了一个r后缀),先检查 standalone.xml/domain.xml 中 resource-adapters 子系统的配置是否存在拼写错误,排除配置写错导致的资源找不到问题。
内容的提问来源于stack exchange,提问作者JMBA
相关产品推荐
相关产品推荐

