类加载:
你是对的,把.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
:
您的WARWEB/lib
中的库仅在该 WAR 中可见。如果您有其他模块,例如 EJB JAR,它们将不可见,您将获得ClassNotFoundException
or (如果您在多个地方有该类)ClassCastException
。
整个JBOSS-AS/server/<config>/lib
服务器都可以看到其中的库,因此所有部署的应用程序及其模块都是可见的。但是(IIRC)它们没有优先权,因此如果您将该 lib 例如放在 WAR 中,而不是 EJB jar 中,您最终可能会使用两个不同的版本,这是不可取的(可能会导致前面提到的ClassCastException
.
类加载行为可以通过多种方式进行调整,参见例如JBoss wiki。
静态数据:
不要依赖 Java EE 中的静态字段,那样会带来麻烦。例如,。同一个类可以被不同的类加载器加载,所以这些静态值会有多个实例。
如果您想在更多 WAR 之间共享数据,请使用外部存储 - 数据库、文件(如果您向其写入数据,则需要同步)、JBoss Cache 等。