classloading:
Hai ragione, mettere i .jar
s per JBOSS/server/<configuration>/lib
o JBOSS/lib
.
JBoss AS viene fornito con librerie Hibernate in bundle testate con tale versione AS.
Vedi 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>
Vedi anche:
Differenza tra WEB-INF/lib
e JBOSS/server/default/lib
:
I codici in WEB/lib
vengono forniti con la GUERRA e sono visibili solo all'interno di WAR. Se si dispone di un altro modulo, ad es. EJB JAR, non saranno visibili da esso e avrai ClassNotFoundException
o (se hai la classe in più posti) ClassCastException
.
I numeri in JBOSS-AS/server/<config>/lib
sono visibili per l'intero server, quindi tutte le app distribuite ei relativi moduli. Tuttavia (IIRC) non hanno la precedenza, quindi se porti quella lib, per es. in un WAR, ma non nel jar EJB, si può finire con l'uso di due versioni diverse, il che è indesiderabile (probabilmente porterà al sopracitato ClassCastException
).
Il comportamento di caricamento della classe può essere ottimizzato in diversi modi, vedere ad es. JBoss wiki.
dati statici:
non si basano su campi statici in Java EE, che porta guai. Per esempio,. la stessa classe può essere caricata da diversi classloader, quindi ci saranno più istanze di questi valori statici.
Se si desidera condividere i dati tra più WAR, utilizzare una memoria esterna: un database, un file (con sincronizzazione se si scrive su di esso), JBoss Cache, ecc.
+1 preferisco una propria directory dedicata per il mio vaso condiviso di questo lo rende più facile da mantenere – stacker