13

我是 Jboss 的新手,但我有多个 Web 应用程序,每个应用程序都使用 spring-hibernate 和其他开源库和 portlet,所以现在基本上每个 war 文件都包含这些 jar 文件。如何将这些 jar 移动到一个公共位置,这样我就不必将它们放在每个 war 文件中?我猜位置是server/default/lib,但我不确定。

另外,将这些罐子放在WEB-INF/lib vs.有什么不同JBOSS/server/default/lib?我会面临任何类加载器问题吗?

此外,我将静态数据存储在静态字段中,例如Singleton,这些数据会在所有 WAR 文件中共享吗?

4

4 回答 4

19

类加载:

你是对的,把.jars 放到JBOSS/server/<configuration>/lib, 或JBOSS/lib.

JBoss AS 带有捆绑的 Hibernate 库,这些库使用该 AS 版本进行了测试。

jboss-6.0.0-SNAPSHOT\server\default\conf\jboss-service.xml

<server>
  <!-- Load all jars from the JBOSS_HOME/server/<config>/lib directory and
       the shared JBOSS_HOME/common/lib directory. This can be restricted to
       specific jars by specifying them in the archives attribute.
       TODO: Move this configuration elsewhere
  -->
  <classpath codebase="${jboss.server.lib.url}" archives="*"/>
  <classpath codebase="${jboss.common.lib.url}" archives="*"/>
</server>

另见:

WEB-INF/lib和之间的区别JBOSS/server/default/lib

您的WARWEB/lib中的库仅在该 WAR 中可见。如果您有其他模块,例如 EJB JAR,它们将不可见,您将获得ClassNotFoundExceptionor (如果您在多个地方有该类)ClassCastException

整个JBOSS-AS/server/<config>/lib服务器都可以看到其中的库,因此所有部署的应用程序及其模块都是可见的。但是(IIRC)它们没有优先权,因此如果您将该 lib 例如放在 WAR 中,而不是 EJB jar 中,您最终可能会使用两个不同的版本,这是不可取的(可能会导致前面提到的ClassCastException.

类加载行为可以通过多种方式进行调整,参见例如JBoss wiki

静态数据:

不要依赖 Java EE 中的静态字段,那样会带来麻烦。例如,。同一个类可以被不同的类加载器加载,所以这些静态值会有多个实例。
如果您想在更多 WAR 之间共享数据,请使用外部存储 - 数据库、文件(如果您向其写入数据,则需要同步)、JBoss Cache 等。

于 2010-01-21T12:08:15.590 回答
2

http://www.mastertheboss.com/en/jboss-server/211-configuring-jboss-shared-libs.html

于 2010-05-27T09:40:52.943 回答
0

JBOSS/server/default/lib 工作正常。

该文件夹中的所有 jar 都将加载到 JBoss 中。

于 2010-01-21T12:05:18.813 回答
0
  1. 转到 %JBOSS_HOME%\server\default\conf 目录
  2. 打开文件 jboss-service.xml
  3. 在标签下你会发现

如下添加一个新的类路径标记,以在本地计算机上包含 sharedlib 文件夹

注意:请确保在代码库中包含文件协议

于 2016-12-26T06:59:01.397 回答