Вопрос

я хочу использовать OmniFaces 1.7 в моем приложении Jave EE 7.Мое приложение представляет собой EAR, содержащее JAR-файлы и тощая война.Некоторые из моих JAR-файлов зависят от OmniFaces, поэтому артефакт OmniFaces должен находиться в EAR, а не в WEB-INF/lib на войне.

Вот как выглядит мое УХО:

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

Если я так говорю, конвертеры OmniFaces (например, GenericEnumConverter) не зарегистрированы в JSF и не будут работать.Причина этого обсуждается здесь и здесь.В основном согласно Спецификация JSF 2.0 (раздел 11.5.1 Требования к сканированию классов на предмет аннотаций), только ВОЙНЫ WEB-INF/lib каталог сканируется.

Итак, мой вопрос: как мне включить OmniFaces в мое приложение?

Включая его дважды (в EAR/lib и ВОЙНЫ WEB-INF/lib), возможно, могло бы сработать, но кажется неуклюжим.Некоторое время назад я попробовал это с RichFaces 4.3.5 (та же проблема), что не сработало, но привело к IllegalArgumentException: duplicate key: class javax.faces.convert.ByteConverter.

Это было полезно?

Решение

OmniFaces — это служебная библиотека JSF с зависимостями от API-интерфейсов JSF, EL и Servlet, которые обычно доступны только внутри WAR, а не EAR.Более того, ваши EJB (бизнес-сервисы в целом) не должны иметь каких-либо зависимостей от конкретных интерфейсных API, таких как JSF, EL и API сервлетов.Это сделает их непригодными для использования в других интерфейсах, таких как JAX-RS, Spring MVC и т. д.

Вам необходимо поместить утилиту JSF и библиотеки компонентов, такие как OmniFaces и PrimeFaces, в WAR, а не в EAR.Смотрите также Монтаж раздел домашней страницы OmniFaces:

OmniFaces спроектирован как библиотека WAR (библиотека веб-фрагментов) и поэтому не может быть размещен где-либо в пути к классам среды выполнения веб-приложения за пределами собственной библиотеки WAR. /WEB-INF/lib, например, EAR /lib или даже собственный сервер или JRE /lib.Если файл JAR OmniFaces потерян таким образом, веб-приложение не сможет найти аннотированные классы JSF/CDI, связанные с OmniFaces, и выдать связанные с этим исключения во время развертывания или выполнения.Чтобы решить эту проблему, верните OmniFaces в WAR. /WEB-INF/lib.

Смотрите также:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top