2010-01-21 5 views
12

Sono nuovo di Jboss, ma ho più applicazioni Web ognuna usando spring-hibernate e altre librerie e portlet open source, quindi sostanzialmente ora ogni file war include quei file jar. Come posso spostare questi vasi in una posizione comune in modo da non doverli inserire in ogni file di guerra? Immagino che la posizione sia server/default/lib, ma non ne sono sicuro.Dove mettere una libreria condivisa in JBoss AS 5?

Inoltre, in che modo è diverso avere questi vasi a WEB-INF/lib rispetto a JBOSS/server/default/lib? Affronterò qualsiasi problema con il classloader?

Inoltre, ho dati statici memorizzati in campi statici come Singleton, saranno condivisi tra tutti i file WAR?

risposta

18

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

+1 preferisco una propria directory dedicata per il mio vaso condiviso di questo lo rende più facile da mantenere – stacker

0

JBOSS/server/default/lib funziona correttamente.

Tutti i vasi di quella cartella verranno caricati in JBoss.

0
  1. Vai% JBOSS_HOME% \ directory conf default \ \ server
  2. Aprire il file jboss-service.xml
  3. Sotto tag troverete

Aggiungi una ne w tag classpath, come di seguito per includere la cartella sharedlib sul computer locale

Nota: Assicurati di includere il protocollo file da base di codice