Frage

Ich möchte benutzen OmniFaces 1.7 in meiner Jave EE 7-Anwendung.Meine Anwendung ist eine EAR, die JARs und a enthält dünner KRIEG.Einige meiner JARs sind von OmniFaces abhängig, daher muss sich das OmniFaces-Artefakt im EAR befinden, aber nicht in WEB-INF/lib im Krieg.

So sieht mein OHR aus:

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

Wenn ich es so ausdrücke: OmniFaces-Konverter (wie GenericEnumConverter) sind nicht bei JSF registriert und funktionieren nicht.Der Grund dafür wird diskutiert Hier Und Hier.Grundsätzlich gemäß der JSF 2.0-Spez (Abschnitt 11.5.1 Anforderungen für das Scannen von Klassen nach Anmerkungen), nur die WARs WEB-INF/lib Verzeichnis wird gescannt.

Meine Frage ist also: Wie soll ich OmniFaces in meine Bewerbung einbinden??

Einschließlich zweimal (in EAR/lib und WARs WEB-INF/lib) könnte möglicherweise funktionieren, fühlt sich aber ungeschickt an.Ich habe es vor einiger Zeit mit RichFaces 4.3.5 versucht (gleiches Problem), was nicht funktionierte, aber dazu führte IllegalArgumentException: duplicate key: class javax.faces.convert.ByteConverter.

War es hilfreich?

Lösung

OmniFaces ist eine JSF-Dienstprogrammbibliothek mit Abhängigkeiten von JSF-, EL- und Servlet-APIs, die normalerweise nur in einem WAR und nicht in einem EAR verfügbar sind.Darüber hinaus sollten Ihre EJBs (Geschäftsdienste im Allgemeinen) keine Abhängigkeiten von bestimmten Front-End-APIs wie JSF-, EL- und Servlet-APIs aufweisen.Dies würde sie auf anderen Frontends wie JAX-RS, Spring MVC usw. unbrauchbar machen.

Sie müssen JSF-Dienstprogramm- und Komponentenbibliotheken wie OmniFaces und PrimeFaces in WAR und nicht in EAR ablegen.Siehe auch Installation Abschnitt der OmniFaces-Homepage:

OmniFaces ist als WAR-Bibliothek (Webfragmentbibliothek) konzipiert und kann daher nicht an anderer Stelle im Laufzeitklassenpfad der Webanwendung außerhalb des WAR-Klassenpfads platziert werden /WEB-INF/lib, wie z. B. EARs /lib oder sogar server- oder JRE-eigene /lib.Wenn die OmniFaces-JAR-Datei auf diese Weise verlegt wird, ist die Webanwendung nicht in der Lage, mit OmniFaces gebündelte JSF/CDI-annotierte Klassen zu finden und während der Bereitstellung oder Laufzeit keine damit verbundenen Ausnahmen auszulösen.Um das Problem zu lösen, setzen Sie OmniFaces wieder in WARs ein /WEB-INF/lib.

Siehe auch:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top