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

2022-09-04 01:39:37

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

另外,将这些罐子放在vs.上有什么不同?我会遇到任何类装入器问题吗?WEB-INF/libJBOSS/server/default/lib

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


答案 1

类加载:

你是对的,把 s 放到 , 或 ..jarJBOSS/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 之间的区别:

中的 Libs 随你的 WAR 一起提供,并且只在 WAR 中可见。如果你有其他模块,例如EJB JAR,它们将不可见,你会得到或(如果你在多个地方有这个类)。WEB/libClassNotFoundExceptionClassCastException

中的 Lib 对于整个服务器都是可见的,因此所有已部署的应用程序及其模块都是可见的。但是(IIRC)它们没有优先级,因此,如果您将该库(例如在WAR中,但不在EJB jar中)带来,则最终可以使用两个不同的版本,这是不希望的(可能会导致上述)。JBOSS-AS/server/<config>/libClassCastException

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

静态数据:

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


推荐