2016-03-22 8 views
2

Ich bin mit einem Tomcat 8 (8.0.30), OpenWebBeans 1.6.2, JSF Mojarra 2.2.12 und OmniFaces 1.8. Ich entschied, dass ich OmniFaces auf eine spätere Version aktualisieren wollte. Nach 2.0 scheint CDI zu benötigen, aber beim Starten des Tomcat (mit OmniFaces 2.2) erhalte ich den Fehler unten. Gemäß OmniFaces Kompatibilitätsmatrix sollte Tomcat + Mojarra + OWB mit 8.0.30 + 2.2.12 + 1.6.2 funktionieren.OmniFaces erkennt nicht OpenWebBean als CDI nach 2,0

Ich habe auch mit 2.0 versucht, mit dem gleichen Fehler. In 2.1 habe ich ein anderes Problem, aber ich habe einfach angenommen, dass es etwas für 2.2 behoben wurde, da das Verhalten dort dasselbe ist wie in 2.0. Ich bekomme auch das gleiche Problem mit dem 2.3-RC1.

Gibt es etwas Bestimmtes, die getan werden muss, um OmniFaces zu bekommen, um zu erkennen, dass ich CDI renne? Ist es wahrscheinlich ein Fehler in OmniFaces?

Ich habe eine sehr kleine Beispielanwendung erstellt, dieses Problem zu replizieren, so dass ich bin sicher, es gibt nichts anderes in unserer Anwendung, die stören wird. Hier

mar 22, 2016 10:57:46 FM org.apache.webbeans.lifecycle.AbstractLifeCycle bootstrapApplication 
INFO: OpenWebBeans Container has started, it took [447] ms. 
mar 22, 2016 10:57:46 FM org.omnifaces.ApplicationListener checkCDIAvailable 
SEVERE: 
???????????????????????????????????????????????????????????????????????????????? 
?       ??  ?            ? 
? ?     ????? ? OmniFaces failed to initialize!    ? 
? ????    ?????? ?            ? 
? ??????   ??????? ? This OmniFaces version requires CDI, but ? 
? ???????   ???????  ? none was found on this environment.   ? 
? ???????????????????????  ?            ? 
? ???????????????????????  ? OmniFaces 2.x requires a minimum of JSF 2.2.? 
?  ?????????????????????  ? Since this JSF version, the JSF managed bean? 
?  ?????????????????????  ? facility @ManagedBean is semi-official  ? 
?  ??????????????????????  ? deprecated in favour of CDI. JSF 2.2 users ? 
?  ??????????????????????  ? are strongly encouraged to move to CDI.  ? 
?  ??????????????????????  ?            ? 
? ???????????????????????  ? OmniFaces goes a step further by making CDI ? 
? ???????????????????????? ? a REQUIRED dependency next to JSF 2.2. This ? 
? ???????????????????????? ? not only ensures that your web application ? 
? ???????????????? ???????? ? represents the state of art, but this also ? 
? ????????????????????????? ? makes for us easier to develop OmniFaces, ? 
? ?????????????????????????? ? without the need for all sorts of hacks in ? 
? ?????????????????????????? ? in order to get OmniFaces to deploy on  ? 
? ???????????????????????????? ? environments without CDI.     ? 
? ???????????????????????????? ?            ? 
? ???????????????????????????? ? You have 3 options:       ? 
?????????????????????????????????? 1. Downgrade to OmniFaces 1.x.    ? 
?????????????????????????????????? 2. Install CDI in this environment.   ? 
?????????????????????????????????? 3. Switch to a CDI capable environment.  ? 
??????????????????????????????????            ? 
?????????????????????????????????? For additional instructions, check   ? 
?????????????????????????????????? http://omnifaces.org/cdi     ? 
??????????????????????????????????            ? 
???????????????????????????????????????????????????????????????????????????????? 
mar 22, 2016 10:57:46 FM org.apache.catalina.core.StandardContext listenerStart 
SEVERE: Exception sending context initialized event to listener instance of class org.omnifaces.ApplicationListener 
java.lang.ExceptionInInitializerError 
    at org.omnifaces.ApplicationListener.checkCDIAvailable(ApplicationListener.java:74) 
    at org.omnifaces.ApplicationListener.contextInitialized(ApplicationListener.java:58) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4791) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask.run(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.IllegalStateException: CDI BeanManager instance is not available in JNDI. 
    at org.omnifaces.config.BeanManager.<init>(BeanManager.java:99) 
    at org.omnifaces.config.BeanManager.<clinit>(BeanManager.java:49) 
    ... 11 more 
Caused by: java.lang.IllegalStateException: javax.naming.NamingException: Cannot create resource instance 
    at org.omnifaces.util.JNDI.lookup(JNDI.java:95) 
    at org.omnifaces.config.BeanManager.<init>(BeanManager.java:95) 
    ... 12 more 
Caused by: javax.naming.NamingException: Cannot create resource instance 
    at org.apache.naming.factory.ResourceEnvFactory.getObjectInstance(ResourceEnvFactory.java:117) 
    at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:843) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:154) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:831) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:154) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:831) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:168) 
    at org.apache.naming.SelectorContext.lookup(SelectorContext.java:158) 
    at javax.naming.InitialContext.lookup(Unknown Source) 
    at org.omnifaces.util.JNDI.lookup(JNDI.java:90) 
    ... 13 more 

ist die pom.xml Ich verwende:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 
    <groupId>se.app.testapp</groupId> 
    <artifactId>sampleapp</artifactId> 
    <packaging>war</packaging> 
    <version>1.0-SNAPSHOT</version> 

    <dependencies> 
     <dependency> 
      <groupId>javax.enterprise</groupId> 
      <artifactId>cdi-api</artifactId> 
      <version>1.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.openwebbeans</groupId> 
      <artifactId>openwebbeans-impl</artifactId> 
      <version>1.6.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.openwebbeans</groupId> 
      <artifactId>openwebbeans-jsf</artifactId> 
      <version>1.6.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.openwebbeans</groupId> 
      <artifactId>openwebbeans-el22</artifactId> 
      <version>1.6.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.openwebbeans</groupId> 
      <artifactId>openwebbeans-web</artifactId> 
      <version>1.6.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish</groupId> 
      <artifactId>javax.faces</artifactId> 
      <version>2.2.12</version> 
     </dependency> 
     <dependency> 
      <groupId>org.omnifaces</groupId> 
      <artifactId>omnifaces</artifactId> 
      <version>2.2</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.validation</groupId> 
      <artifactId>validation-api</artifactId> 
      <version>1.0.0.GA</version> 
      <type>jar</type> 
      <classifier>sources</classifier> 
     </dependency> 
     <dependency> 
      <groupId>javax.validation</groupId> 
      <artifactId>validation-api</artifactId> 
      <version>1.0.0.GA</version> 
      <type>jar</type> 
     </dependency> 

    </dependencies> 
</project> 
+0

Funktioniert OWB ohne OmniFaces? Root Cause Tells CDI BeanManager kann nicht in JNDI gefunden werden, was passieren würde, wenn Sie ihn nicht im Kontext registrieren würden.XML für Tomcat, aber dann könnten Sie CDI auch ohne OmniFaces nicht vollständig verwenden. Wenn Sie die Freiheit haben, CDI impl zu wählen, können Sie für Weld vollständige Anweisungen in dem Link in der Fehlermeldung finden. – BalusC

+0

Ja, OWB funktioniert ansonsten gut, seit dem Wechsel von Weld läuft es seit geraumer Zeit. Keine Probleme. Ich habe keinen BeanManager in einer context.xml registriert. Soll das nötig sein? Ich kann immer noch meine Beispielanwendung und unsere vollständige Anwendung mit OWB ohne Probleme ausführen. – Robin

+0

FYI: Ich habe gerade einen erfolgreichen Test bestanden für OmniFaces 2.3 auf Tomcat 8.0.32 + OWB 1.6.2, ich bemerkte, dass ich diese in [Kompatibilitätsmatrix] vergessen habe (https://github.com/omnifaces/omnifaces/wiki/Compatibility -Matrix). Danke für den Kopf! – BalusC

Antwort

0

Ursache Ihrer Ausnahme ist:

java.lang.IllegalStateException: CDI BeanManager Instanz nicht verfügbar ist in JNDI.

Mit anderen Worten, CDI BeanManager ist nicht in JNDI während Kontextinitialisierung von OmniFaces registriert. Normalerweise verfügt Tomcat über Nur-Lese-JNDI und alle neuen JNDI-Ressourcen müssen über die Webapp-Adresse /META-INF/context.xml bereitgestellt werden. Für Weld, ist diese detaillierte How to install CDI in Tomcat? und für OpenWebBeans benötigen Sie die folgenden ein:

<Context> 
    <Resource name="BeanManager" 
     auth="Container" 
     type="javax.enterprise.inject.spi.BeanManager" 
     factory="org.apache.webbeans.container.ManagerObjectFactory" /> 
</Context> 

Zusätzlich für OWB Sie müssen auch explizit Zuhörer seinen Kontext in Webapp der /WEB-INF/web.xml registrieren, um zu gewährleisten, dass es vor OmniFaces initialisiert wird.

<listener> 
    <listener-class>org.apache.webbeans.servlet.WebBeansConfigurationListener</listener-class> 
</listener> 

Ansonsten können Sie eine Ausnahme erhalten, die wie unten aussieht, wenn OmniFaces @Eager startet die Anwendung Bohnen scoped zu initialisieren:

java.lang.IllegalStateException: Es ist nicht erlaubt getBeans anrufen (Type, Annotation ...) vor AfterBeanDiscovery

Auch wenn Sie bereits OmniFaces 2.2 angegeben ich eine Notiz für zukünftige Leser hinzufügen möchten, dass ein minimum von OmniFaces 2.1 ist in ord erforderlich er friedlich arbeiten zusammen mit OWB manuell installiert Tomcat (OmniFaces 2.0 arbeitet auf TomEE) auch issue 133 die 2 wichtigsten behobenen Probleme wie Bestellung der Initialisierung und @Inject nicht verfügbar sind in @WebListener.


aktualisieren: die "How to install CDI in Tomcat?" Artikel wurde für OpenWebBeans mit Anweisungen gerade aktualisiert wurde.

+0

Sorry, dass ich ein bisschen spät bin, aber wollte nur sagen, dass dies das Problem behoben und es als gelöst markiert! – Robin

Verwandte Themen