Question

Résumé

Est-ce possible pour les applications Web déployées sur linux + tomcat5.5 d'utiliser / voir tous les /usr/share/java/ fichiers jar automatiquement?

Détails

Je suis en train d’empaqueter ma webapp java pour Ubuntu (mais la question est liée à une distribution basée sur Linux) et je vais la faire dépendre de tomcat.

Je vais mettre un descripteur de contexte (un fichier xml) sur /usr/share/tomcat5.5/conf/Catalina/localhost/ pour que mon application soit déployée. Ayant mon répertoire Web ici: /usr/share/<appname>/web Comment puis-je autoriser mon application à utiliser les bibliothèques java jar installées sur le système (/usr/share/java)?

Je ne peux pas simplement créer un lien symbolique /usr/share/java -> <webdir>/WEB-INF/lib car mes bocaux personnalisés doivent être placés dans lib rép.

.

Mauvaise solution

La solution que j'ai trouvée jusqu'à présent consiste à faire un lien symbolique vers chaque fichier JAR requis vers <webdir>/WEB-INF/lib/.

Cela n’est pas très bon, car je dois créer un lien symbolique pour un grand nombre de fichiers jar, et pire encore pour tous les fichiers jar que ma dépendance directe requiert (et ainsi de suite). Au cas où ma dépendance directe lib changerait la liste des fichiers JAR requis, je devrai conserver ces liens symboliques.

Était-ce utile?

La solution

Vous ne devriez pas faire ça. Les applications Java EE sont supposées être autonomes et ne dépendent d'aucune ressource en dehors du package de déploiement autre que celles fournies par le conteneur. Vous devriez donc prendre les bibliothèques dont vous avez besoin dans ce répertoire et les ajouter à votre paquet war ou ear.

Cela garantit que votre application se comportera de la même manière où que vous la déployiez et que vous ne fassiez pas l'objet de modifications inattendues dans les versions des bibliothèques dans / usr / share / java ....

Autres conseils

Selon la documentation sur le chargement de classe Tomcat , vous devez placer toutes les bibliothèques partagées qui devraient être disponibles pour toutes les applications Tomcat dans la bibliothèque $ CATALINA_BASE / shared / lib - une façon de faire ce que vous cherchez à faire est donc de déplacer vos bibliothèques de / usr / share / java. dans $ CATALINA_BASE / shared / lib.

Mais si je ne comprends pas mal la même documentation, Tomcat met également le contenu de la variable CLASSPATH à la portée du système à la disposition du chargeur de classes lors du lancement. Ainsi, si votre répertoire - / usr / share / java - est inclus dans le système variable globale CLASSPATH, alors cela devrait fonctionner aussi. Je n'ai jamais fait cela, cependant; Méthode de Tomcat pour rendre le contenu de $ CATALINA_BASE / shared / lib disponible Tomcat-wide m'a toujours parfaitement servi.

La réponse de

entzik m'a conduit à la solution suivante.

Je vais utiliser la & modification modifiée & "; (voir question).

Les modifications sont les suivantes:

     
  1. Dépend de la version du paquet spécifique pour toutes les dépendances (affecte le fichier & "control &" pendant le conditionnement pour deb). Exemple: libcommons-io-java (= 1.3.1) au lieu de simplement libcommons-io-java  
  2. Lien symbolique vers les fichiers jar actuels dans `/ usr / share / java` et non " généralisé " ones
    example:
    rép_web / WEB-INF / lib / commons-io.jar - > /usr/share/java/commons-io-1.3.1.jar
    et non
    rép_web / WEB-INF / lib / commons-io.jar - > /usr/share/java/commons-io.jar

Ces modifications garantissent que l'application Web n'est pas endommagée si l'administrateur a installé la nouvelle version d'une bibliothèque (commons-io par exemple).

L'inconvénient est que cette approche gonfle clairement le système avec des versions de bibliothèques utilisées par une seule application et peut entraîner des problèmes qu'une autre application / bibliothèque ne peut pas installer en raison d'un conflit de versions. Je suppose que les deux problèmes potentiels sont mineurs si nous parlons de bibliothèques.

Vous avez deux options: laisser le chargeur de classe fournir les bibliothèques à tous les programmes java et laisser le chargeur de classe fournir les bibliothèques à tous les contextes Tomcat.

Ajoutez vos liens symboliques dans /usr/lib/jvm/java-1.5.0-sun-1.5.0.11/jre/lib (notez que vous devrez peut-être spécifier une version différente dans ce chemin) pour permettre à tous les programmes java d'accéder à Ajoutez ces bibliothèques ou ajoutez-les aux bibliothèques partagées de Tomcat dans var / lib / tomcat5.5 / shared / libs (là encore, le numéro de version peut être différent) pour l’accès à tous les contextes Tomcat.

Je dois également noter que ces emplacements de répertoire ont été empruntés à Ubuntu & "Feisty &";.

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top