2011-11-27 61 views
26

在JBoss-as-7.0.x独立部署中加载第三方JAR的最佳实践是什么?在JBoss AS7独立部署中加载第三方JAR的最佳实践?

我曾尝试:

  1. 部署每个JAR与它自己的module.xml desriptor一个独立的模块;
  2. 在WAR的WEB-INF/lib目录中部署JAR;
  3. 和跨多个WAR共享的任何JAR的foo.ear/lib目录。

上述方法1的明显优势是在部署时减少了内存占用2和方法3。但是,由于JAR需要明确每个依赖关系,因此它的维护似乎非常艰巨在module.xml中定义,这对大量的第三方库来说似乎不太可维护。

+0

我想迁移到JBoss7并不断获取类路径输入错误,例如。 “不指向一个有效的类路径引用jar” - 似乎你解决/没遇到这样的错误。这可能与JBoss7 Class加载有关,不少人遇到同样的问题,但没有解决方案 - 你有什么想法吗? –

+0

听起来像你的问题要么在你的module.xml文件中(如果你正在将JAR加载为模块)或者你的jboss-deploment-structure.xml文件。引用静态库JAR的最好方法是将它们放在modules目录的子目录中。如果您试图引用“org.foo.bar.FooBar;”在你的FooBarJar.jar文件中,你的目录结构想成为“JBOSS_HOME/modules/org/foo/bar/main/FooBarJar.jar”,你需要包含你的“JBOSS_HOME/modules/org/foo/bar/main /modle.xml“文件来定义映射到jar以及它可能具有的任何依赖关系... – travega

+1

...(继续)您的模块。xml文件将如下所示: <! - - 在此插入资源 - > <依赖性> <! - 在此处插入依赖 - > ”。然后,您可以将模块引用添加到位于WAR的WEB-INF目录中的jboss-deploment-structure.xml文件。这会看起来像这样:“”...... – travega

回答

16

对于较小的依赖关系,这对于部署是私有的,请将WEB-INF/lib保留在您的.war中,这就是它的用途。如果您使用的Maven对于范围内的任何内容都应该是非常自动和透明的。

对于大的,复杂的依赖关系或依赖性那将几个应用程序之间共享,使用选项(4):

部署每个逻辑库(如“OpenJPA的”或“Log4J的”)作为一个模块,包括它的api和impl jars以及其他AS7模块尚未提供的依赖JAR。如果已经有一个模块添加了对它的依赖关系,而不是添加JAR到你的模块。如果几个不同的库共享一些常见的依赖关系,请将它们拆分为模块并将其作为模块依赖关系添加到module.xml中。

使用jboss-deployment-structure.xml进行部署.war/.ear /任何声明模块的依赖关系,如果它不是自动检测和自动加载。

我觉得这是一个中等到低调的方法,效果很好。在部署中将所有东西都转储到WEB-INF/lib更麻烦,这是Java EE标准要做的事情。它加速了重新部署,并通过减少类别/版本冲突来节省大量的部署/测试时间。

如果您愿意做一些工作,您可以使用Maven和maven-dependency-plugin生成已包含传递依赖项的模块。你可以在module I wrote for EclipseLink integration in AS 7中看到一个例子。我尽可能自动创建AS7模块。

+0

在群集(域)环境中,您是否可以将模块打包到.war或其他容器中,并将其部署到域控制器中的所有从服务器?或者,你是否手动将模块复制到每个slavedirectory/modules/...? – Gregor

+0

@Gregor我还没有使用集群模式,所以我不知道。我怀疑你可能需要手动复制,但自从我对JBoss AS和Java EE做了任何事情(幸好)已经过去了几年。对不起,我忍不住。尝试发布一个新问题并将其链接回上下文。 –

+0

@Gregor找到了域模式的解决方法。我的域也不会在重新启动时加载模块 – Aadam