在JBoss AS 5中放置共享库的位置?

时间:2010-01-21 11:59:04

标签: java jboss jboss5.x jboss-portal

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

此外,将这些广告素材放在WEB-INF/libJBOSS/server/default/lib之间有何不同?我会遇到任何类加载器问题吗?

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

4 个答案:

答案 0 :(得分:19)

<强>类加载:

你是对的,将.jar放到JBOSS/server/<configuration>/libJBOSS/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/libJBOSS/server/default/lib之间的差异:

WEB/lib中的Libs带有你的WAR,只能在那个WAR中看到。 如果你有其他模块,例如EJB JAR,它们将无法显示,您将获得ClassNotFoundException或(如果您有多个地方的课程)ClassCastException

JBOSS-AS/server/<config>/lib中的Libs对于整个服务器是可见的,因此所有部署的应用程序及其模块都可见。但是(IIRC)他们没有优先权,所以如果你带上这个例子,例如在WAR中,但在EJB jar中,最终可能会使用两个不同的版本,这是不可取的(可能导致上述ClassCastException)。

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

静态数据:

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

答案 1 :(得分:2)

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

  1. 转到%JBOSS_HOME%\ server \ default \ conf目录
  2. 打开文件jboss-service.xml
  3. 在标记下,您会找到

  4. 添加一个新的classpath标记,如下所示,以包含本地计算机上的sharedlib文件夹

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