Tus*_*nar 13 java jboss jboss-portal jboss5.x
我是Jboss的新手,但我有多个web应用程序,每个都使用spring-hibernate和其他开源库和portlet,所以基本上现在每个war文件都包含那些jar文件.如何将这些罐子移动到一个公共位置,这样我就不必将它们放在每个war文件中?我想位置是server/default/lib,但我不确定.
此外,它是如何的不同有那些罐子WEB-INF/lib 主场迎战JBOSS/server/default/lib?我会遇到任何类加载器问题吗?
我还有静态数据存储在静态字段中Singleton,这些数据是否会在所有WAR文件中共享?
Ond*_*žka 19
类加载:
你说得对,把.jars到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>
Run Code Online (Sandbox Code Playgroud)
另见:
WEB-INF/lib和之间的区别JBOSS/server/default/lib:
在库WEB/lib来与你的战场,只是WAR中可见.如果您有其他模块,例如EJB JAR,它们将无法从中看到,您将获得ClassNotFoundException或(如果您在多个位置拥有该类)ClassCastException.
Libs in JBOSS-AS/server/<config>/lib对整个服务器都是可见的,因此所有部署的应用程序及其模块都可见.但是(IIRC)它们没有优先权,所以如果你把这个lib放在一个WAR中,而不是在EJB jar中,你最终可能会使用两个不同的版本,这是不可取的(可能导致上述内容ClassCastException).
类加载行为可以通过多种方式进行调整,例如参见JBoss wiki.
静态数据:
不要依赖Java EE中的静态字段,这会带来麻烦.例如,.同一个类可以由不同的类加载器加载,因此这些静态值将有多个实例.
如果要在更多WAR之间共享数据,请使用外部存储 - 数据库,文件(如果写入,则为同步),JBoss Cache等.