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

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

另外,在WEB-INF/libJBOSS/server/default/lib放置这些jar有什么不同? 我会面对任何类加载器问题吗?

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

类加载:

你是对的,把.jar放到JBOSS/server//libJBOSS/lib

JBoss AS附带了捆绑的Hibernate库,它们使用该AS版本进行测试。

请参阅jboss-6.0.0-SNAPSHOT\server\default\conf\jboss-service.xml

      

另见:

WEB-INF/libJBOSS/server/default/lib之间的区别:

WEB/lib随WAR一起提供,并且只在该WAR中可见。 如果您有其他模块,例如EJB JAR,它们将无法从中看到它们,您将获得ClassNotFoundException或(如果您在多个位置具有该类) ClassCastException

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

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

静态数据:

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

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

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

  1. 转到%JBOSS_HOME%\ server \ default \ conf目录
  2. 打开文件jboss-service.xml
  3. 在标签下你会发现

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

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