Domanda

Riepilogo

È possibile che per webapps distribuito su linux + tomcat5.5/vedi tutti /usr/share/java/ vasi automaticamente?

Dettagli

Sto imballaggio java webapp per Ubuntu (ma la questione relativa a linux basata su ubuntu) e andare a fare dipende da tomcat.

Ho intenzione di mettere contesto (descrittore di un file xml) per /usr/share/tomcat5.5/conf/Catalina/localhost/ per rendere la mia applicazione distribuita.Avendo il mio web dir qui: /usr/share/<appname>/web, come faccio ad attivare la mia app per l'utilizzo di java jar libs installato nel sistema (/usr/share/java)?

Non posso symlink /usr/share/java -> <webdir>/WEB-INF/lib, da quando ho la mia custom barattoli devono essere collocati in lib dir.

Cattiva Soluzione

La soluzione che ho trovato finora è il collegamento simbolico per ogni jar necessari per <webdir>/WEB-INF/lib/.

Questo non è così buono, perché devo symlink un sacco di barattoli e ancor peggio symlink tutti i barattoli mia dipendenza diretta lib (jar), richiede (e così via).Nel caso la mia dipendenza diretta lib cambia la sua lista di richieste vasetti dovrò mantenere i collegamenti simbolici.

È stato utile?

Soluzione

Non dovresti farlo. Le applicazioni Java EE dovrebbero essere autosufficienti e non dipendere da risorse esterne al pacchetto di distribuzione diverse da quelle fornite dal contenitore. Quindi dovresti prendere le librerie di cui hai bisogno da quella directory e aggiungerle al tuo pacchetto war o ear.

Ciò garantisce che la vostra applicazione si comporterà allo stesso modo ovunque la distribuiate e non sarete soggetti a cambiamenti imprevisti nelle versioni delle librerie in / usr / share / java ....

Altri suggerimenti

Secondo la documentazione di caricamento della classe Tomcat , devi inserire tutte le librerie condivise che dovrebbero essere disponibili per tutte le app Tomcat nella libreria $ CATALINA_BASE / shared / lib - quindi un modo per fare ciò che stai cercando di fare è spostare le tue librerie da / usr / share / java a $ CATALINA_BASE / shared / lib.

BUt se non fraintendo quella stessa documentazione, Tomcat rende anche i contenuti della variabile CLASSPATH a livello di sistema disponibili al classloader all'avvio, quindi se la tua directory - / usr / share / java - fosse inclusa nel sistema su tutta la variabile CLASSPATH, quindi dovrebbe funzionare anche questo. Non l'ho mai fatto, però; Il metodo di Tomcat di rendere disponibili i contenuti di $ CATALINA_BASE / shared / lib Tomcat in tutto il mondo mi ha sempre servito perfettamente.

entzik risposta mi portano alla seguente soluzione.

Ho intenzione di utilizzare modificato "cattiva soluzione" (vedi domanda).

Le modifiche sono le seguenti:

  1. Esiste una specifica versione del pacchetto per tutte le dipendenze (colpisce "controllo" file mentre la confezione per deb)
    esempio: libcommons-io-java ( = 1.3.1) invece di libcommons-io-java
  2. Collegamento simbolico al reale i file jar in `/usr/share/java " e non "generalizzata" quelli
    esempio:
    webdir/WEB-INF/lib/commons-io.jar -> /usr/share/java/commons-io-1.3.1.jar
    e non
    webdir/WEB-INF/lib/commons-io.jar -> /usr/share/java/commons-io.jar

Queste modifiche garantire la webapp è rotto e non se l'amministratore ha installato la nuova versione di una libreria (commons-io per esempio).

Il rovescio della medaglia è che questo approccio, chiaramente, si gonfia sistema utilizzato-dalla-solo-un-app versioni di librerie e può portare a problemi di qualche altra applicazione/library non è possibile installare a causa di conflitti di versione.Credo che i potenziali problemi sono minori, se stiamo parlando di librerie.

Hai due opzioni, una è lasciare che il classloader fornisca le librerie a tutti i programmi java e l'altro è lasciare che il classloader fornisca le librerie a tutti i contesti tomcat.

Aggiungi i tuoi collegamenti simbolici a /usr/lib/jvm/java-1.5.0-sun-1.5.0.11/jre/lib (nota che potrebbe essere necessario specificare una versione diversa in questo percorso) per consentire a tutti i programmi java di accedere a queste librerie o aggiungerle alle librerie condivise di Tomcat su var / lib / tomcat5.5 / shared / libs (di nuovo, il numero di versione potrebbe essere diverso) per l'accesso da parte di tutti i contesti Tomcat.

Dovrei anche notare che questi percorsi di directory sono stati presi da Ubuntu " Feisty " ;.

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