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

最近项目里遇到一个问题,就是在wildfly-8.1.0的同一个server上布署多个war,且这几个war中都依赖了netty3,导致只能有一个war包成功,经过排查,发现是jboss服务器本身的一个bug(https://issues.jboss.org/browse/IMMUTANT-144),原因是jboss本身对相同的"拓展"只能注册一次,而netty3中的jboss-beans.xml是提供插件服务的,多次扫描注册的话就会报DuplicateServiceException。

具体分析过程如下

启动过程的异常:

Internal Server Error
{
    "outcome" => "failed",
    "result" => undefined,
    "failure-description" => "JBAS010839: Operation failed or was rolled back on all servers.",
    "rolled-back" => true,
    "server-groups" => {"main-server-group" => {"host" => {"master" => {"server-one" =>
	{"response" => {
        "outcome" => "failed",
        "failure-description" => {"JBAS014671: Failed services" => {"jboss.deployment.unit.
	\"wd-web-in.war\".INSTALL" => "org.jboss.msc.service.StartException in service
	jboss.deployment.unit.\"wd-web-in.war\".INSTALL: JBAS018733: Failed to process
	phase INSTALL of deployment \"wd-web-in.war\"
    Caused by: org.jboss.msc.service.DuplicateServiceException: Service jboss.pojo.
	\"org.jboss.netty.internal.LoggerConfigurator\".DESCRIBED is already registered"}},
        "rolled-back" => true
    }}}}}}
}

根据异常里的

org.jboss.netty.internal.LoggerConfigurator

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

中文解释是"错误发生在部署两个应用程序都依赖于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中多了一个jboss-beans.xml文件,这里有一个问题,netty3.5中jboss-beans.xml的作用是什么?

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

<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_2_0.xsd"
            xmlns="urn:jboss:bean-deployer:2.0">

  <bean name="org.jboss.netty.internal.LoggerConfigurator"
        class="org.jboss.netty.container.microcontainer.NettyLoggerConfigurator" />

</deployment>

也就是因为这个被重复注册的Bug,这个bug在是由于安装的extension
<extension module="org.jboss.as.pojo"/>
导致的,可以从这个pojo切入解决,也可以直接把依赖的netty3 Jar包里的jboss-beans.xml删除,将删除的包放在webapp\WEB-INF\lib目录下

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

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

设置Profile

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

启动服务

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

内容如下:

<jboss-deployment-structure>
    <deployment>
        <!-- Exclusions allow you to prevent the server from automatically adding some dependencies     -->
        <exclusions>
            <module name="org.slf4j" />
	        <module name="org.sl4j.jcl-over-slf4j" />
	        <module name="org.slf4j.impl" />
	        <module name="org.jboss.logging.jul-to-slf4j-stub" />
	        <module name="io.netty" />
	        <module name="org.jboss.netty" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

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

时间: 2024-08-04 18:56:46

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

Maven依赖版本冲突的分析及解决小结

1:前言 做软件开发这几年遇到了许多的问题,也总结了一些问题的解决之道,之后慢慢的再遇到的都是一些重复性的问题了,当然,还有一些自己没有完全弄明白的问题.如果做的事情是重复的,遇到重复性问题的概率也就会比较多了,如果是在一个新的领域里玩,遇到的问题又都是新的,自己从来没有见过的,但是问题的解决思路基本是类似的.下面这个问题,我觉得值得一记,因为以后还会再遇到类似的,我希望自己能很快的将其解决掉. 2:报错信息 如下是更新项目后,启动项目时抛出的部分错误信息. 十二月 14, 2016 7:52:

maven(android-maven-plugin3.8.0)打包apk无法启动,apklib依赖包的资源索引出错(R文件与主模块冲突)问题解析

近期在用maven,遇到了一个问题,用maven打出的apk有问题无法启动,但是用idea打包的就是正常的. 日志中显示的问题是,一个apklib形式的依赖包中的一个资源出现了问题.反编译对比maven包和idea包,找到了问题所在. 假设: 主模块包名为com.android.main apklib依赖包包名为com.android.apklib 出问题的资源(layout)名为MyView 问题: apk打包后apklib依赖包的资源文件会与主模块的资源整合到一起,依赖包引用资源实际上是在主

依赖冲突的原因以及解决办法

原创 鸭血粉丝 Java极客技术 0x00. 前言 依赖冲突是日常开发中经常碰到的过程,如果运气好,并不会有什么问题.偏偏阿粉有点背,碰到好几次生产问题,排查一整晚,最后发现却是依赖冲突的引起的问题. 没碰到过这个问题同学可能没什么感觉,阿粉举两个最近碰到例子,让大家感受一些. 例子 1: 我们公司有个古老的业务基础包 A.B,C 业务依赖这个包.某个团队拷贝 A 的部分代码进行重构,类名与路径完全一样,然后重新打包成 D 发布. 一次业务改动,B 业务也引入了 D 包,测试环境运行的时候,一切

同一个ASP.NET页面放置多个UpdatePanel分别刷新的解决办法。.

原文:同一个ASP.NET页面放置多个UpdatePanel分别刷新的解决办法.. ScriptManager添加EnablePartialRending属性 <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"> </asp:ScriptManager> 所有的UpdatePanel需要设置UpdateMod

输出redis cluster 主从的对应关系,如果同一个主从关系的master和slave在同一个node节点上,在输出的对应关系末尾输出提示

需求:输出redis cluster 主从的对应关系,如果同一个主从关系的master和slave在同一个node节点上,在输出的对应关系末尾输出提示. 为什么会有这样的需求呢?在重新搭建redis cluster的时候,创建集群期间,发现: redis-trib.rb create --replicas 1 \5.5.5.101:29001 5.5.5.102:29002 5.5.5.103:29003 \5.5.5.102:29001 5.5.5.103:29002 5.5.5.101:29

两个springboot项目如何部署在同一个服务上,两个spring启动应用程序部署在同一台服务器上

现在有两个spring boot的maven项目,需要部署到同一个外部的服务上(tomcat),他们都包含spring-boot-starter-actuator(健康检查)的依赖,但是出现下面的异常 我有多个spring引导应用程序(maven项目),其中包含“spring-boot-starter-actuator”依赖项,用于检查每个应用程序的运行状况.在tomcat服务器中部署这两个应用程序时,我会得到以下异常 2016-05-02 22:30:44.627 ERROR 12734 --

egret中通过判断不同的类型来使同一个UI面板上显示不同的效果

点击不同按钮弹出同一个面板上的不同效果,通过传入类型来判断: this.btnRight.addEventListener(egret.TouchEvent.TOUCH_TAP,this.onUpgradeforgift,this); this.btnLeft.addEventListener(egret.TouchEvent.TOUCH_TAP,this.onPayforgift,this); private onUpgradeforgift(evt:egret.TouchEvent){ ma

正确配置jstl的maven依赖,jar包冲突的问题终于解决啦

困扰了两天的问题,非常头疼,今天终于有了解决思路了,说到底,还是对maven不够了解吧.总是抱怨maven不好用,出现各种无厘头的问题,原来这些都是归于对它不够了解不够熟悉,它提供了很好的解决思路,只是我们通常都不知道. 问题背景: 配置jstl依赖惹的祸, <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <ve

Office 365实现多人在线编辑同一个文档(上)

首选需要您有一个Office 365的商业版或者商业高级版,因为需要用到OneDrive,因为文档存放在OneDrive中,我们在可以实现多人在线编辑同一个文档文件,那么我的环境中准备了2台Win7的系统,准备好了2个Office365的账户A和B,2台分别登录各自账户下载安装最新的Office 365应用软件(也就是我们的Office组件,如Word,Excel,PPT等) 会弹出下载一个小安装程序,点击运行即可 点击运行后会自动启动Office最新版本的安装 接下来点击登录账户页面下的One