【问题标题】:What is the trick for making jboss-client.jar available to the WAR applications in JBoss EAP 6在 JBoss EAP 6 中使 jboss-client.jar 可用于 WAR 应用程序的技巧是什么
【发布时间】:2016-12-20 01:26:35
【问题描述】:

在 JBoss EAP 6.1 中,有一个文件

JBOSS/bin/client/jboss-client.jar

它包含 Web 应用程序所需的所有客户端类。但是,当我们安装 WAR 文件时,它看不到这些类可用。

为了解决这个问题,我们一直在战争文件WEB-INF/lib 文件夹中包含此 JAR 的副本。这些副本是一种浪费,但更重要的是,这意味着我们必须为要安装到的每个应用服务器拥有不同的 WAR 文件。

是否有一个技巧可以让 WAR 文件中的应用程序加载和使用该库中的类,而无需将其复制到应用程序的 WEB-INF/lib 文件夹中?或者,我们是否可以复制此 jar 以便所有 WAR 应用程序都可以使用它?

【问题讨论】:

  • 在你的war文件中使用这个库的目的是什么?
  • 你从中使用了哪些类?您可能只需要在部署中添加一个模块依赖项。这仅取决于您使用的类,因此您知道要添加哪个模块dependenc(y|ies)。
  • 此 JAR 文件包含应用程序与 JBoss 服务器通信所需的类。可能需要每一堂课。真正的问题是:为什么我的应用程序看不到这个 JAR 中的类? jar 的唯一目的是让应用程序与 JBoss 对话。我对我在每个应用程序中做错了什么感到困惑,以至于我无法访问这些类。

标签: configuration jboss shared-libraries jboss-eap-6


【解决方案1】:

解决方案是在 WEB-INF 文件夹中放置一个名为 jboss-deployment-structure.xml 的文件。该文件的内容是:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
  <deployment>
    <!-- Excluding conflicting JBoss-6 Implicit Modules so that jars bundled within war file is used. -->
    <exclusions>
        <module name="org.apache.log4j" />
        <module name="org.apache.commons.logging" />
    </exclusions>
    <!-- Defining additional dependencies for JMS usage in model API -->
    <dependencies>
        <module name="org.jboss.remote-naming" />
        <module name="org.hornetq" />
    </dependencies>
  </deployment>
</jboss-deployment-structure>

这使我们能够使用 JBoss 中的 JMS 类,而无需安装正在安装的应用程序中包含的客户端库的副本。似乎前段时间,一位程序员将应用程序移植到 JBoss,并遇到了一个通过将客户端库放入“解决”(黑客攻击)的问题,但这是一个更好的解决方案。

【讨论】:

  • 非常感谢。
【解决方案2】:

【讨论】:

  • 如果我正在扩展服务器以拥有一个额外的模块来提供功能,这非常有意义。我不明白为什么我需要为 jboss-client.jar 执行此操作,其中包含用于访问 JBoss 功能本身的类。仅仅为了访问您正在运行的 JBoss 服务器而必须创建一个模块似乎真的很奇怪?我在这里错过了什么?
  • @AgilePro 你知道为什么 JBOSS 让你通过模块明确地包含这些关键功能(jboss-client.jar),而不是默认提供它们吗?
  • @Daud 查看描述我们解决方案的新答案
猜你喜欢
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多