gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 19:55:13 25 4
gpt4 key购买 nike

我是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com