类加载:
你说得对,把.jar
s to JBOSS/server/<configuration>/lib
, or JBOSS/lib
.
JBoss AS 附带捆绑的 Hibernate 库,这些库已使用该 AS 版本进行了测试。
See 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>
另请参阅:
- http://community.jboss.org/wiki/classloadingconfiguration http://community.jboss.org/wiki/classloadingconfiguration
- http://community.jboss.org/wiki/JbossClassLoadingUseCases http://community.jboss.org/wiki/JbossClassLoadingUseCases
之间的区别WEB-INF/lib
and JBOSS/server/default/lib
:
Libs in WEB/lib
与您的 WAR 一起提供,并且仅在该 WAR 中可见。
如果您有其他模块,例如EJB JAR,它们不会从中可见,你会得到ClassNotFoundException
或(如果您在多个地方上课)ClassCastException
.
Libs in JBOSS-AS/server/<config>/lib
对整个服务器可见,因此所有已部署的应用程序及其模块都是可见的。然而(IIRC)它们没有优先级,所以如果你带那个库,例如在 WAR 中,但不在 EJB jar 中,您最终可能会使用两个不同的版本,这是不可取的(可能会导致前面提到的ClassCastException
).
类加载行为可以通过多种方式进行调整,请参见例如JBoss 维基 http://community.jboss.org/wiki/ClassLoadingConfiguration.
静态数据:
不要依赖 Java EE 中的静态字段,这会带来麻烦。例如,。同一个类可以由不同的类加载器加载,因此这些静态值会有多个实例。
如果您想在多个 WAR 之间共享数据,请使用外部存储 - 数据库、文件(如果写入则需要同步)、JBoss Cache 等。