Ci sono ragioni per posizionare una dipendenza nella directory lib di un server Web anziché includerla nel file War?

StackOverflow https://stackoverflow.com/questions/1438738

Domanda

Se ho un Jar di dipendenza per la mia applicazione, è meglio posizionarlo nella directory lib dei file di guerra o posizionarlo nella directory lib del server delle applicazioni globale (come Tomcat)? Cosa ottengo usando un approccio piuttosto che un altro?

Diskspace viene in mente, ma viviamo in un'epoca in cui lo spazio su disco è economico. C'è una differenza nell'utilizzo della memoria? Qualcuno con più esperienza di me può elencare i pro e i contro di entrambe le opzioni?

È stato utile?

Soluzione

In generale, è molto meglio avere WAR indipendente in modo da non dover fare affidamento sulla configurazione del contenitore. Rende anche molto più semplice la distribuzione. Quindi, se puoi, prova a mettere la libreria in WAR.

Tuttavia, mi sono imbattuto in casi quando l'installazione di librerie nel contenitore ha senso. Ad esempio,

  1. Abbiamo alcune librerie interne utilizzate da ogni webapp e sono enormi. Li installiamo nel container in modo che tutte le webapp utilizzino la stessa versione e risparmi anche su memoria e spazio su disco.

  2. Le librerie installate in WEB-INF / lib non sono disponibili per il contenitore. Se è necessario fare riferimento a questi in context.xml (come il driver JDBC definito in Risorse), è necessario inserirli in server / lib.

  3. Se vuoi inviare i log di log4j da tutte le webapp allo stesso file, devi mettere il jar log4j nel server / lib. Altrimenti, ogni webapp utilizza il proprio logger.

Altri suggerimenti

Se si desidera utilizzare le funzionalità di gestione delle risorse del contenitore, ad es. connettersi a un database SQL e fornire una ricerca JNDI e un pool di connessioni per esso - quindi il software contenitore stesso dovrà accedere alle librerie e ai driver per gestire le risorse.

Altrimenti probabilmente non vorrai installarli nella directory server / lib e presumere che siano lì e funzioneranno, poiché diverse applicazioni web potrebbero avere requisiti di versione sottilmente diversi.

Per una descrizione approfondita della gerarchia del caricatore di classi implementata da Catalina, è necessario controllare Tomcat's HOW TO-TO dei caricatori di classe . Questo ti aiuterà a capire quando rendere i vasetti disponibili per il contenitore, per tutte le webapp, solo per una singola webapp ... e dove metterli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top