【问题标题】:How do I ignore/upgrade a module in JBoss Wildfly 9?如何忽略/升级 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

【问题讨论】:

    标签: jboss module wildfly bouncycastle


    【解决方案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 提供的要老得多。

    【讨论】:

      猜你喜欢
      • 2016-11-06
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多