類加載:
你說得對,把.jar
s到JBOSS/server/<configuration>/lib
,或JBOSS/lib
。
JBoss AS附帶捆綁的Hibernate庫,它們使用該版本進行測試。
見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
和之間:
WEB/lib
中的庫隨WAR一起提供,僅在WAR中可見。 如果您有其他模塊,例如EJB JAR,它們將不可見,您將獲得ClassNotFoundException
或(如果您在多個位置有班級)ClassCastException
。
JBOSS-AS/server/<config>/lib
中的庫對整個服務器都是可見的,因此所有已部署的應用程序及其模塊都可見。但是(IIRC)它們沒有優先權,所以如果你帶上這個庫,例如在WAR中,但不在EJB jar中,最終可能會使用兩個不同的版本,這是不受歡迎的(可能會導致上述ClassCastException
)。
類加載行爲可以調整幾種方式,請參閱JBoss wiki。
靜態數據:
不要依賴於Java EE中,帶來的麻煩靜態字段。例如,。同一個類可以被不同的類加載器加載,所以這些靜態值會有多個實例。
如果您想在更多的WAR之間共享數據,請使用外部存儲 - 數據庫,文件(如果您要寫入同步文件),JBoss Cache等。
+1我更喜歡我自己的共享JAR的一個自己專用的目錄這使得它更容易維護 – stacker 2010-01-21 12:35:03