Frage

Zusammenfassung

Ist das möglich eingesetzt Webapps auf Linux + tomcat5.5 verwenden / sehen alle /usr/share/java/ Gläser automatisch?

Details

Ich bin Verpackung meines Java-Webapp für Ubuntu (noch die Frage auf jede Linux-basierte Distribution verwendet ist) und werde es auf tomcat abhängig machen.

Ich werde Kontext Descriptor setzen (eine XML-Datei) /usr/share/tomcat5.5/conf/Catalina/localhost/ meine Anwendung bereitgestellt zu machen. Mit meinem Web-dir hier: /usr/share/<appname>/web, wie kann ich aktiviere meine app java jar Libs im System (/usr/share/java) installiert verwenden

?

Ich kann nicht nur Symlink /usr/share/java -> <webdir>/WEB-INF/lib, da ich meine benutzerdefinierten Gläser haben müssen lib dir platziert werden.

Bad Lösung

Die Lösung, die ich bisher gefunden habe ist, jeden erforderlichen jar einen Symlink <webdir>/WEB-INF/lib/.

Das ist nicht so gut, weil ich eine Menge Gläser Symlink habe und schlimmer noch alle Gläser meine direkte Abhängigkeit lib (jar) erfordert (und so weiter) Symlink. Im Fall ändert sich meine direkte Abhängigkeit lib seine Liste der erforderlichen Gläser Ich werde diese Symlinks halten müssen.

War es hilfreich?

Lösung

Sie sollten das nicht tun. Java EE-Anwendungen sind die vermeintliche autark und nicht andere außerhalb des Bereitstellungspaket auf alle Ressourcen abhängig sein, als die von dem Behälter vorgesehen. So sollten Sie die Libs nehmen Sie aus diesem Verzeichnis benötigen und fügen Sie sie Krieg oder Ohr-Paket.

Damit ist gewährleistet, dass Ihre Anwendung verhält sich das gleiche, wo Sie es einsetzen und Sie werden nicht auf unerwartete Änderungen in den Versionen der Bibliotheken in / usr / share / java unterliegen ....

Andere Tipps

Nach der Tomcat Classloading Dokumentation , Sie müssen alle freigegebenen libs setzen, die für alle Tomcat Anwendungen im $ CATALINA_BASE / shared / lib Bibliothek verfügbar sein sollten - so eine Möglichkeit, Ihre Bibliotheken, was Sie suchen, um zu tun, zu tun zu bewegen, ist von / usr / share / java auf $ CATALINA_BASE / shared / lib.

Aber wenn ich nicht die gleiche Dokumentation Mißverständnis bin, Tomcat macht auch die systemweite CLASSPATH Variable Inhalte zur Verfügung, die Classloader beim Start, also, wenn Ihr Verzeichnis - / usr / share / java - wurde in dem System einbezogen -weite Variable CLASSPATH auch das sollte dann funktionieren. Ich habe noch nie getan, obwohl; Tomcat-Methode den Inhalt von $ CATALINA_BASE / shared / lib verfügbar Tomcat weit machen perfekt mich immer gedient hat.

entzik Antwort mich zu folgenden Lösung führen.

Ich werde geändert „schlechte Lösung“ verwenden (siehe Frage).

Änderungen sind folgende:

     
  1. Verlassen Sie sich auf bestimmte Paketversion für alle Abhängigkeiten (betrifft "Kontrolle" Datei während Verpackung für deb)
    Beispiel: libcommons-io-java (= 1.3.1) , anstatt nur libcommons-io-java  
  2. Symlink zu aktuellen JAR-Dateien in `/ usr / share / java` und nicht "verallgemeinern" Einsen
    Beispiel:
    webdir / WEB-INF / lib / commons-io. jar -> /usr/share/java/commons-io-1.3.1.jar und nicht
    webdir / WEB-INF / lib / commons-io.jar -> / usr / share / java / commons-io.jar

gewährleisten Diese Änderungen Webapp ist nicht gebrochen, wenn Administrator neue Version einer Bibliothek (commons-io zum Beispiel) installiert ist.

Der Nachteil ist dieser Ansatz deutlich System mit verwendet-by-only-one-App-Versionen von Bibliotheken aufbläst und kann Problem eine andere Anwendung / Bibliothek führen kann Versionskonflikt nicht installieren fällig. Ich denke, beide potenzielle Probleme gering sind, wenn wir über Bibliotheken sprechen.

Sie haben zwei Möglichkeiten, eine ist die Classloader die Bibliotheken bieten für alle Java-Programme zu lassen und die andere ist die Classloader bieten die Bibliotheken zu allen tomcat Kontexten zu lassen.

Fügen Sie Ihre Symlinks /usr/lib/jvm/java-1.5.0-sun-1.5.0.11/jre/lib (beachten Sie, eine andere Version in diesem Pfad angeben müssen) alle Java-Programme zu ermöglichen, Zugang zu diese Bibliotheken oder fügen sie sie in var / lib / tomcat5.5 / shared / libs zu Tomcat Shared Libraries (auch hier kann die Versionsnummer unterschiedlich sein) für den Zugriff von allen Tomcat Kontexten.

Ich sollte auch beachten, dass diese Verzeichnispositionen wurden von Ubuntu „Feisty“ genommen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top