Pregunta

Quiero usar OmniFaces 1.7 en mi aplicación Jave EE 7.Mi aplicación es un EAR que contiene JAR y un guerra flaca.Algunos de mis JAR dependen de OmniFaces, por lo que el artefacto OmniFaces debe estar en el EAR pero no en WEB-INF/lib En la guerra.

Así es como se ve mi EAR:

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

Dicho de esta manera, los convertidores OmniFaces (como GenericEnumConverter) no están registrados con JSF y no funcionarán.La razón de esto se discute. aquí y aquí.Básicamente según el Especificaciones JSF 2.0 (sección 11.5.1 Requisitos para el escaneo de clases para anotaciones), sólo las GUERRAS WEB-INF/lib Se escanea el directorio.

Entonces mi pregunta es: ¿Cómo debo incluir OmniFaces en mi aplicación??

Incluyéndolo dos veces (en EAR/lib y GUERRAS WEB-INF/lib) posiblemente podría funcionar pero se siente torpe.Lo probé hace algún tiempo con RichFaces 4.3.5 (mismo problema) que no funcionó pero me llevó a IllegalArgumentException: duplicate key: class javax.faces.convert.ByteConverter.

¿Fue útil?

Solución

OmniFaces es una biblioteca de utilidades JSF con dependencias de las API JSF, EL y Servlet, que normalmente solo están disponibles dentro de un WAR, no de un EAR.Aún más, se supone que sus EJB (servicios comerciales en general) no dependen de API de front-end específicas, como JSF, EL y Servlet API.Los haría irreutilizables en otras interfaces como JAX-RS, Spring MVC, etc.

Debe colocar las bibliotecas de componentes y utilidades JSF, como OmniFaces y PrimeFaces, en WAR, no en EAR.Ver también Instalación sección de la página de inicio de OmniFaces:

OmniFaces está diseñado como una biblioteca WAR (biblioteca de fragmentos web) y, por lo tanto, no se puede colocar en ningún otro lugar del classpath de ejecución de la aplicación web fuera del propio WAR. /WEB-INF/lib, como el de EAR /lib o incluso el del servidor o el propio JRE /lib.Cuando el archivo JAR de OmniFaces se extravía de esta manera, la aplicación web no podrá encontrar las clases anotadas JSF/CDI incluidas en OmniFaces y generará excepciones relacionadas con esto durante la implementación o el tiempo de ejecución.Para solucionarlo, vuelva a colocar OmniFaces en WAR. /WEB-INF/lib.

Ver también:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top