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

简介: 最近项目里遇到一个问题,就是在wildfly-8.1.0的同一个server上布署多个war,且这几个war中都依赖了netty3,导致只能有一个war包成功,经过排查,发现是jboss服务器本身的一个bug(https://issues.

最近项目里遇到一个问题,就是在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>
        <!--  -->
        <exclude-subsystems>
            <subsystem name="pojo" />
        </exclude-subsystems>
        <!-- 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的重复冲突问题


目录
相关文章
|
2月前
|
弹性计算 网络安全 数据安全/隐私保护
ECS热门应用 | 解决Guestosssh异常
通过ECS实例快速发现操作系统内部的问题,并给出对应的修复方案。
129299 5
|
2月前
|
弹性计算 人工智能 安全
带你读《从基础到应用云上安全航行指南》——阿里云产品专家教你如何全方位构建ECS安全体系(3)
带你读《从基础到应用云上安全航行指南》——阿里云产品专家教你如何全方位构建ECS安全体系(3)
431 0
|
2月前
|
存储 弹性计算 安全
带你读《从基础到应用云上安全航行指南》——九大提升ECS实例操作系统安全性的技巧(1)
带你读《从基础到应用云上安全航行指南》——九大提升ECS实例操作系统安全性的技巧(1)
335 1
|
2月前
|
弹性计算 安全 网络安全
带你读《从基础到应用云上安全航行指南》——阿里云产品专家教你如何全方位构建ECS安全体系(2)
带你读《从基础到应用云上安全航行指南》——阿里云产品专家教你如何全方位构建ECS安全体系(2)
478 0
|
2月前
|
存储 弹性计算 安全
带你读《从基础到应用云上安全航行指南》——九大提升ECS实例操作系统安全性的技巧(2)
带你读《从基础到应用云上安全航行指南》——九大提升ECS实例操作系统安全性的技巧(2)
662 1
带你读《从基础到应用云上安全航行指南》——九大提升ECS实例操作系统安全性的技巧(2)
|
1月前
|
弹性计算 人工智能 物联网
挖掘阿里云ECS的潜力:创意应用和未来可能性
在云厂商中,我觉得开发者更信赖阿里云的云产品,而且随着阿里云最近宣布云产品降价的消息,会有更多的开发者和企业选择阿里云的云产品。这里拿阿里云的云服务器来做说明,阿里云的云服务器ECS为用户提供了强大的计算资源和灵活的扩展性,使其成为搭建各种有趣和创意应用的理想平台。除了已知的小游戏、小程序和个人网盘等应用案例之外,本文还会进一步探讨ECS在特定场景下的实践经验,并挖掘其在其他领域的潜力,为大家带来更多创意和启发。
556 3
挖掘阿里云ECS的潜力:创意应用和未来可能性
|
1月前
|
弹性计算 网络安全 文件存储
ECS热门应用 | 安装家用内网穿透服务
使用云服务器ECS,让家庭网络可以被外部网络访问。不在家时,也可以读取备份资料。
|
1月前
|
开发框架 Java .NET
JavaWeb概念、应用、服务器
静态网站是指在服务器上预先准备好的网页内容,用户访问时服务器直接将这些静态页面发送给用户浏览器,没有经过额外的处理或数据库查询。
12 0
|
2月前
|
移动开发 编解码 网络协议
用Java的BIO和NIO、Netty来实现HTTP服务器(三) 用Netty实现
用Java的BIO和NIO、Netty来实现HTTP服务器(三) 用Netty实现
|
2月前
|
编解码 网络协议 Java
用Java的BIO和NIO、Netty实现HTTP服务器(一) BIO与绪论
用Java的BIO和NIO、Netty实现HTTP服务器(一) BIO与绪论

热门文章

最新文章