如何忽略/升级 JBoss Wildfly 9 中的模块?

Posted

技术标签:

【中文标题】如何忽略/升级 JBoss Wildfly 9 中的模块?【英文标题】:How do I ignore/upgrade a module in JBoss Wildfly 9? 【发布时间】:2015-10-06 00:11:33 【问题描述】:

我刚刚在 Mac 10.9.5 上下载了带有 Java 7 的 Wildfly 9.0.0.CR2。我注意到默认情况下,Wildfly 9 包含一个 bouncycastle 模块 (modules/system/layers/base/org/bouncycastle/main/bcprov-jdk15on-1.52.jar)。我想在 Wildfly (bcprov-jdk16-1.46.jar) 中安装另一个 bouncycastle 模块。有没有办法可以禁用 JBoss 包含的那个?当我尝试删除包含的模块 Jboss(modules/system/layers/base/org/bouncycastle/ 文件夹)时,JBoss 启动时出现错误

08:36:19,086 ERROR [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0055: Caught exception during boot:    org.jboss.as.controller.persistence.ConfigurationPersistenceException: WFLYCTL0085: Failed to parse configuration
    at org.jboss.as.controller.persistence.XmlConfigurationPersister.load(XmlConfigurationPersister.java:131)
    at org.jboss.as.server.ServerService.boot(ServerService.java:350)
    at org.jboss.as.controller.AbstractControllerService$1.run(AbstractControllerService.java:271)
    at java.lang.Thread.run(Thread.java:745)
Caused by: javax.xml.stream.XMLStreamException: WFLYCTL0083: Failed to load module org.jboss.as.weld
    at org.jboss.as.controller.parsing.ExtensionXml.parseExtensions(ExtensionXml.java:155)
    at org.jboss.as.server.parsing.StandaloneXml.readServerElement_1_4(StandaloneXml.java:433)
    at org.jboss.as.server.parsing.StandaloneXml.readElement(StandaloneXml.java:144)
    at org.jboss.as.server.parsing.StandaloneXml.readElement(StandaloneXml.java:106)
    at org.jboss.staxmapper.XMLMapperImpl.processNested(XMLMapperImpl.java:110)
    at org.jboss.staxmapper.XMLMapperImpl.parseDocument(XMLMapperImpl.java:69)
    at org.jboss.as.controller.persistence.XmlConfigurationPersister.load(XmlConfigurationPersister.java:123)
    ... 3 more

【问题讨论】:

【参考方案1】:

您可能会看一下这个讨论,这几乎是您想做的事情(与版本相反): BouncyCastle 1.51 loading in war on Wildfly 8.0

总而言之,您可以创建一个自定义模块(或者,我认为,现有模块的另一个插槽?)并在 jboss-deployment-structure.xml 中引用该模块而不是默认模块Wildfly 带来了它。

如果您不想/不需要将 BC 作为模块,您也可以将其包含在 EAR/WAR 的 lib 文件夹中,并且可以从那里加载。

我们的部署结构基本上是这样的:

my.ear
  + lib/ <-- dependencies for multi-submodule deployment
  + META-INF/ <-- application.xml defines submodule(s) e.g. web.war, 
              <-- also jboss-deployment-structure.xml to include/export wildfly core modules for your EAR
  + web.war <-- our core deployment

我们包括例如与wildfly不同版本的hibernate。我希望您也可以在耳朵中加入不同的 BC 版本。

另请参阅: https://docs.jboss.org/author/display/WFLY8/Class+Loading+in+WildFly

自定义模块教程: http://middlewaremagic.com/jboss/?p=1933

与解决方案类似的问题:https://developer.jboss.org/thread/175395

【讨论】:

我添加了自己的 bouncycastle 模块并相应地调整了 jboss-deployment-structure.xml,但是 JBoss 绝对没有机会不读取自己的 bouncycastle 模块吗?有没有办法禁用它?不能将 bouncycastle JAR 打包到我的 WEB-INF/lib 目录中。 wildfly 中的 BC 部门是用 resteasy 引入的,issues.jboss.org/plugins/servlet/mobile#issue/WFLY-1570,但我认为其他几个模块现在希望它在那里(picketlink?)【参考方案2】:

WildFly 使用模块化类加载,因此并非所有内容都在每个模块的类路径中。 部署本身只是另一个模块,它根据部署描述符告诉服务器应该添加的内容来获得额外的依赖项。

谈到 bouncycastle,有些模块本身需要它,但这并不意味着它们会将这种依赖关系暴露给您的部署。

8.0 中有一个错误导致 BC 暴露给用户部署,以防用户部署使用 Web 服务。从那以后,这个问题就得到了解决。 鉴于您使用 WildFly 9,这应该不再是问题了。

正如其他建议的那样,您可以创建具有不同名称或至少不同插槽名称的新模块,然后您可以通过 jboss-deployment-structure.xml 包含这些模块

顺便说一句,bcprov-jdk16-1.46 比 WildFly 提供的要老得多。

【讨论】:

以上是关于如何忽略/升级 JBoss Wildfly 9 中的模块?的主要内容,如果未能解决你的问题,请参考以下文章

jboss升级到WIldfly后fd限制警告

如何在 JBoss Wildfly 9 中关闭 Hibernate 调试日志记录?

从 JBoss 7 迁移到 WildFly 9 时使用 CMT 的 EJB

JBoss Wildfly 9,JNDI 异常

WildFly 12:错误 jboss.remoting.management.channel.registry

在 JBoss / Wildfly 9 上使用 JAX-RS 项目设置 Swagger.io 问题