Question

Je veux utiliser OmniFaces 1.7 dans mon Java EE 7 application.Ma demande est une OREILLE qui contient les Pots et un skinny GUERRE.Certains de mes Pots ont une dépendance à OmniFaces, de sorte que le OmniFaces artefact doit être dans l'OREILLE, mais pas dans WEB-INF/lib dans la GUERRE.

Voici comment mon OREILLE ressemble à:

EAR
 +-- lib
 |    +-- [some 3rd party JARs]
 |    `-- omnifaces.jar
 +-- myEJBs.jar
 `-- myWAR.war

Quand je l'ai mis de cette façon, OmniFaces convertisseurs (comme GenericEnumConverter) ne sont pas enregistrés avec JSF et ne fonctionne pas.La raison pour cela est discuté ici et ici.Fondamentalement, selon le JSF 2.0 Spec (section 11.5.1 les Exigences pour la numérisation des classes pour les annotations), seules les Guerres WEB-INF/lib le répertoire est numérisée.

Donc ma question est: comment dois-je inclure OmniFaces dans mon application?

Y compris deux fois (en EAR/lib et les Guerres WEB-INF/lib) pourrait éventuellement fonctionner, mais se sent maladroit.Je l'ai essayé il y a quelques temps avec RichFaces 4.3.5 (même problème), qui n'a pas fonctionné, mais conduit à IllegalArgumentException: duplicate key: class javax.faces.convert.ByteConverter.

Était-ce utile?

La solution

OmniFaces est un JSF bibliothèque utilitaire avec dépendances sur JSF, EL et Servlet Api, qui ne sont normalement disponibles à l'intérieur d'une GUERRE, pas une OREILLE.Même plus, votre Ejb (entreprise de services en général) ne sont pas censés avoir toutes les dépendances spécifiques avant la fin de l'Api comme JSF, EL et Servlet Api.Il ferait unreusable sur d'autres front-end comme JAX-RS, Spring MVC, etc.

Vous avez besoin de mettre de l'ACI de l'utilitaire et des bibliothèques de composants tels que OmniFaces et PrimeFaces dans la GUERRE, pas dans l'OREILLE.Voir aussi Installation la section de OmniFaces page d'accueil:

OmniFaces est conçu comme une GUERRE de bibliothèque (fragment web de la bibliothèque) et par conséquent ne peut pas être placé ailleurs dans la webapp d'exécution du chemin de classe à l'extérieur de la GUERRE propre /WEB-INF/lib, comme l'OREILLE /lib ou même du serveur ou de la JRE propre /lib.Lorsque OmniFaces fichier JAR est mal placée de cette façon, puis de la webapp sera incapable de trouver OmniFaces-livré à l'ACI/CDI annoté de classes et de lancer des exceptions liées à ce cours de déployer ou de l'exécution.Pour le résoudre, remettre OmniFaces dans la GUERRE /WEB-INF/lib.

Voir aussi:

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