2009-06-30 2 views
6

Ho quattro progetti diversi e sto utilizzando Weblogic per distribuire i miei progetti. Esistono diverse librerie (file jar) comuni per tutti i progetti. Attualmente ognuno dei miei progetti ha la directory lib e ha quasi lo stesso set di librerie. Ora, è possibile avere questa directory lib fuori dai file WAR e accedervi.Come utilizzare le librerie comuni per più progetti Web Java

risposta

8

Resistere alla tentazione di inserire i file jar nella cartella "condivisa" del contenitore. È meglio mantenere i file jar dove sono ora. Potrebbe sembrare una buona idea utilizzare una cartella condivisa ora, ma in futuro potrebbe essere necessario distribuire un'applicazione che richiede una libreria condivisa, ma una versione diversa.

Detto questo, non ho esperienza con WebLogic. In Tomcat è presente una cartella condivisa con librerie comuni a tutte le applicazioni distribuite. Non è una buona idea usare questo. Se WebLogic può essere configurato per utilizzare una cartella condivisa per un insieme di applicazioni (e non per tutte le applicazioni distribuite) si può fare a meno.

+1

Buon consiglio! C'è poco overhead nell'avere una copia extra di un file jar, mentre, dovendo fondere due versioni di una libreria comune dalla stessa posizione o forzare tutte le app a eseguire l'aggiornamento a una nuova versione nello stesso momento è un vero dolore . –

+0

In realtà dopo la compilazione la dimensione del progetto è di circa 1,5 mb (senza librerie) e 20 mb (con librerie) –

+0

È possibile utilizzare la cartella condivisa nel proprio computer di sviluppo per rendere più veloce la distribuzione. In un ambiente di produzione, non importa molto, quindi preferisci un grosso file WAR con tutti i vasi all'interno. Se lo fai, devi fare due test (entrambi per WAR piccoli e grandi). – kgiannakakis

0

Beh, prima di tutto puoi mettere tutte le tue librerie tutte nello stesso posto e fare in modo che il tuo processo di costruzione importi quelle necessarie.

Ha per distribuire il nuovo Weblogic 10 ha una cartella lib in ogni dominio in cui è possibile inserire librerie condivise. non penso che sia possibile prima Weblogic 10

+1

Il supporto per la libreria condivisa è disponibile nella versione 9: http://e-docs.bea.com/wls/docs92/programming/libraries.html – McDowell

-1

Attualmente sto usando un altro approccio.

  1. Creare una cartella di repository centrale e inserire tutte le librerie comuni.
  2. In ogni progetto è possibile creare un riferimento a tutte le librerie necessarie. In Subversion funziona con externals

Ogni volta, la copia di lavoro locale viene aggiornato, gli esterni vengono aggiornati per, quindi non vi resta che impegnarsi per la cartella centrale ed è distribuito automaticamente a tutti i progetti.

3

Vuoi farlo? A meno che tu non sia bloccato per lo spazio di distribuzione, vorrei (forse) sconsigliarlo.

Perché? Al momento hai 4 soluzioni che scappano da queste librerie. Se devi aggiornare una delle librerie (ad esempio, se scopri un bug o se hai bisogno di una nuova funzionalità), dovrai verificare la compatibilità e la funzionalità di tutte e 4 le soluzioni. Se ciascuna soluzione ha il proprio set di librerie, allora sono in modalità sandbox e non è necessario spostare tutte e 4 le fasi.

Nota che tutto ciò dipende dalla facilità con cui regredisci le tue soluzioni. Potresti trovarlo facile, nel qual caso è possibile utilizzare lo stesso set di librerie.

2

Non farlo.

L'intera idea dei file WAR è che sono unità autonome. Ciò rende l'implementazione molto più semplice.

Oltre ai possibili conflitti di versione che altri hanno evidenziato, l'inserimento di file jar in/shared può avere conseguenze molto nidificate per la visibilità della classe. Saranno su un classloader separato e non saranno in grado di vedere le classi nel file WAR. Se si utilizzano librerie che fanno affidamento su Class.forName() per funzionare (e ce ne sono molte), ciò potrebbe diventare molto doloroso.

Se davvero, davvero non può permettersi lo spazio su disco e la memoria in più su OSGi o Spring DM.Hanno risolto questo problema, ma al prezzo di una maggiore complessità.

1

Inserire tutti i file jar condivisi nella cartella \ lib di weblogic comune. common \ lib è accessibile da tutte le app distribuite.

0

È possibile inserire i vasi nel proprio file ear e distribuirlo come libreria condivisa.

È inoltre possibile inserire le guerre in un orecchio e aggiungere i vasi condivisi a APP-INF/lib. Questa è un'estensione Weblogic di J2EE, quindi non funzionerà su altri server.