web-dev-qa-db-fra.com

Meilleures pratiques pour le chargement de fichiers JAR tiers dans un déploiement autonome JBoss AS7?

Quelle est la meilleure pratique pour charger des fichiers JAR tiers dans un déploiement autonome JBoss-as-7.0.x?

J'ai essayé:

  1. déployer chaque JAR en tant que module indépendant avec son propre descripteur module.xml;
  2. déployer les fichiers JAR dans le répertoire WEB-INF/lib d'un WAR;
  3. et le répertoire foo.ear/lib pour tous les fichiers JAR partagés sur plusieurs fichiers WAR.

L'avantage évident de l'approche 1. ci-dessus est l'encombrement mémoire réduit au moment du déploiement par rapport à apprach 2. et à l'approche 3. Cependant, il semble assez difficile à maintenir car chaque dépendance qu'un JAR a doit être explicitement définie dans le module.xml ce qui ne semble pas très maintenable avec un grand nombre de bibliothèques tierces.

26
travega

Pour les petites dépendances privées à un déploiement, conservez-les dans WEB-INF/lib dans votre .war, c'est pour ça. Si vous utilisez Maven, cela devrait être à peu près automatique et transparent pour tout ce qui se trouve dans la portée <compile />.

Pour les grandes dépendances complexes ou les dépendances qui seront partagées entre plusieurs applications, utilisez l'option (4):

Déployez chaque bibliothèque logique (comme "OpenJPA" ou "Log4J") en tant que module, y compris ses jars api et impl et tous les fichiers JAR de dépendance qui ne sont pas déjà fournis par d'autres modules AS7. S'il existe déjà un module, ajoutez une dépendance plutôt que d'ajouter un JAR à votre module. Si plusieurs bibliothèques différentes partagent des dépendances communes, divisez-les en modules et ajoutez-les en tant que dépendances de module dans module.xml.

Utilisez jboss-deployment-structure.xml pour que votre déploiement .war/.ear/quel que soit déclarer une dépendance sur le module s'il n'est pas détecté et chargé automatiquement.

Je trouve que c'est une approche moyenne à faible qui fonctionne bien. C'est plus compliqué que de tout jeter dans WEB-INF/lib à l'intérieur du déploiement, ce qui est la chose standard à faire Java EE. Il accélère les redéploiements et économise beaucoup de temps de déploiement/test en réduisant les conflits de classe/version.

Vous pouvez utiliser Maven et le plugin maven-dependency-plugin pour produire des modules avec les dépendances transitives déjà incluses si vous êtes prêt à faire un peu de travail. Vous pouvez voir un exemple de cela dans un module que j'ai écrit pour l'intégration d'EclipseLink dans AS 7 . J'automatise la création de modules AS7 autant que possible.

16
Craig Ringer