天天看点

多个依赖Netty3的应用在同一个Wildfly服务器上的布署冲突问题分析与解决

具体分析过程如下

启动过程的异常:

根据异常里的

关键词查询到Jboss的bug单 https://issues.jboss.org/browse/IMMUTANT-144

多个依赖Netty3的应用在同一个Wildfly服务器上的布署冲突问题分析与解决

中文解释是"错误发生在部署两个应用程序都依赖于io.netty/netty"

Jim Crossley在下面给出的解决方案是“Removed the pojo subsystem from standalone.xml. This prevents random jboss-beans.xml files from being discovered/deployed. The netty jar contains one.”中文意思就是“从standalone.xml删除pojo subsystem,这可以防止任意的jboss-beans.xml文件被发现/部署,netty的jar包含一个”。

这里给出Netty3的Jar包与Netty4的Jar的一个对比:

多个依赖Netty3的应用在同一个Wildfly服务器上的布署冲突问题分析与解决
多个依赖Netty3的应用在同一个Wildfly服务器上的布署冲突问题分析与解决

很明显netty3中多了一个jboss-beans.xml文件,这里有一个问题,netty3.5中jboss-beans.xml的作用是什么?

查了资料说是类似于plugin.xml一样的作用,也就是插件的加载,netty3中的jboss-beans.xml内容如下:

也就是因为这个被重复注册的Bug,这个bug在是由于安装的extension<extension module="org.jboss.as.pojo"/>

导致的,可以从这个pojo切入解决,也可以直接把依赖的netty3 Jar包里的jboss-beans.xml删除,将删除的包放在webapp\WEB-INF\lib目录下

多个依赖Netty3的应用在同一个Wildfly服务器上的布署冲突问题分析与解决

问题是这个pojo的作用是什么?官方文档的解释如下

多个依赖Netty3的应用在同一个Wildfly服务器上的布署冲突问题分析与解决

使应用程序的部署包含JBoss Microcontainer服务,支持的早期版本的JBoss应用程序服务器,也就是说可有可无。那就删除吧,在对应的模式(profile)下找到<subsystem xmlns="urn:jboss:domain:pojo:1.0"/> 然后删除,重启server,发现可以布署了。

设置Profile

多个依赖Netty3的应用在同一个Wildfly服务器上的布署冲突问题分析与解决

设置布署在同一个逻辑服务结点上:

多个依赖Netty3的应用在同一个Wildfly服务器上的布署冲突问题分析与解决

启动服务

多个依赖Netty3的应用在同一个Wildfly服务器上的布署冲突问题分析与解决

jboss-deployment-structure.xml的作用:防止服务器自动添加一些依赖关系

内容如下:

可以避免应用中引用了Netty导致的和Jboss的重复冲突问题