Mojarra 2.1.0 - FCS funktioniert nicht mit Tomcat 7
Frage
Ich verwende JSF 2.1 (Mojarra 2.1.0 - FCS) mit Tomcat 7 wie folgt:
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.1.0-b11</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.1.0-b11</version>
<scope>compile</scope>
</dependency>
Als ich versuchte, es auf Tomcat 7 auszuführen, bekam ich die folgende Ausnahme:
java.lang.InstantiationException: com.sun.faces.application.ServletContextSensitiveSingletonStore
at java.lang.Class.newInstance0(Class.java:340)
at java.lang.Class.newInstance(Class.java:308)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4268)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4771)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:138)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:785)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:763)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:558)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:674)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:599)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:538)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1390)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:355)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:89)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:312)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:292)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:998)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:772)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:138)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:990)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:275)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:138)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:424)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:138)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:648)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:138)
at org.apache.catalina.startup.Catalina.start(Catalina.java:576)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:415)
Irgendwelche Ideen, warum ich diese Ausnahme bekomme und wie ich sie lösen kann?
Lösung
Das ist ein Bekanntes Problem. Dies wird tatsächlich durch verursacht durch Ausgabe 1937. Kurz gesagt, der Annotationsscanner enthält einen unfallglasfischspezifischen Code, der dazu führt, dass er nicht auf grundlegenden ServletContainern funktioniert, die nicht mit gebauten Annotations-Scannern wie Tomcat und Steg versandt. Dies ist in 2.1.1 festgelegt.
Um Ihr Problem zu lösen, müssen Sie auf mindestens 2.1.1 aktualisieren. Die aktuell neueste Version ist 2.1.3, ich empfehle, die neueste zu entscheiden. Siehe auch die Mojarra Download -Seite Für alle Informationen von Maven Pom.
Eine völlig andere Alternative besteht darin, Tomcat durch einen mehr gefluteten Behälter wie Glasfische zu ersetzen. Dies bietet Ihnen unter anderem den Vorteil des EJB/JPA -Supports der Box, damit Sie gut und einfach Business Services erstellen, Hintergrundjobs ausführen, mit Datenbank mit Oneliners usw. interagieren können.