Domanda

Voglio usare OmniFaces 1.7 nella mia applicazione Jave EE 7.La mia applicazione è un EAR che contiene JAR e a GUERRA magra.Alcuni dei miei JAR hanno una dipendenza da OmniFaces, quindi l'artefatto OmniFaces deve trovarsi nell'EAR ma non in WEB-INF/lib nella guerra.

Ecco come appare il mio EAR:

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

Detto in questo modo, i convertitori OmniFaces (come GenericEnumConverter) non sono registrati con JSF e non funzioneranno.Il motivo di ciò è discusso Qui E Qui.Fondamentalmente secondo il Specifiche JSF 2.0 (sezione 11.5.1 Requisiti per la scansione delle classi per le annotazioni), solo le GUERRE WEB-INF/lib la directory viene scansionata.

Quindi la mia domanda è: come dovrei includere OmniFaces nella mia applicazione?

Includendolo due volte (in EAR/lib e GUERRE WEB-INF/lib) potrebbe funzionare ma sembra goffo.L'ho provato qualche tempo fa con RichFaces 4.3.5 (stesso problema) che non ha funzionato ma ha portato a IllegalArgumentException: duplicate key: class javax.faces.convert.ByteConverter.

È stato utile?

Soluzione

OmniFaces è una libreria di utilità JSF con dipendenze dalle API JSF, EL e Servlet, che normalmente sono disponibili solo all'interno di un WAR, non di un EAR.Inoltre, i tuoi EJB (servizi aziendali in generale) non dovrebbero avere alcuna dipendenza da specifiche API front-end come JSF, EL e API Servlet.Li renderebbe inutilizzabili su altri front-end come JAX-RS, Spring MVC, ecc.

È necessario inserire le librerie di componenti e utilità JSF come OmniFaces e PrimeFaces in WAR, non in EAR.Guarda anche Installazione sezione della home page di OmniFaces:

OmniFaces è progettato come libreria WAR (libreria di frammenti web) e pertanto non può essere posizionato altrove nel percorso di classe runtime dell'app web al di fuori di quello di WAR /WEB-INF/lib, come quelli dell'EAR /lib o anche quello del server o di JRE /lib.Quando il file JAR di OmniFaces viene smarrito in questo modo, la webapp non sarà in grado di trovare le classi annotate JSF/CDI in bundle con OmniFaces e generare eccezioni correlate a queste durante la distribuzione o il runtime.Per risolverlo, rimetti OmniFaces in WAR /WEB-INF/lib.

Guarda anche:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top