java - JBoss AS 5 中的共享库放在哪里?

标签 java jboss jboss5.x jboss-portal

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

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

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

最佳答案

类加载:

你是对的,把.jar s 至 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 :

WEB/lib 中的库与您的 WAR 一起出现,并且仅在该 WAR 中可见。 如果您有其他模块,例如EJB JAR,它们从中不可见,你会得到 ClassNotFoundException或者(如果你在多个地方上课)ClassCastException .

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

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

静态数据:

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

关于java - JBoss AS 5 中的共享库放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2108975/

相关文章:

jakarta-ee - 我可以把我的 jar 放在哪里?耳朵与 Jboss 5.1

java - 如何为 TriggerListener 设置名称?

java - java - 如何在Java中构建时使用注释动态生成代码?

java - 通过查找邻域点来连接点的集合

java - @EJB注解为空

jboss - 玩! war 命令 - 是否可以从 application/lib 文件夹中排除某些 jar

java - 如何通过循环获取用户的输入以获取 2 到 10 之间的数字而不是字符串?

java - 可以将我的本地主机网络服务与模拟器连接,但不能与我的手机连接

javax.persistence.PersistenceException : [PersistenceUnit: sapo] class or package not found

java - org.hibernate.ejb.HibernatePersistence 无法转换为 javax.persistence.spi.PersistenceProvider