1

i am using JSF 2.1 ( Mojarra 2.1.0 - FCS ) with tomcat 7 as follows:

<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>

when i tried to run it on tomcat 7 i got the following exception:

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)

any ideas why i am getting this exception, and how to solve it?

Mahmoud Saleh
  • 33,303
  • 119
  • 337
  • 498
  • possible duplicate of [JSF 2 setup issue in Tomcat 7 (java.lang.InstantiationException: com.sun.faces.application.ServletContextSensitiveSingletonStore)](http://stackoverflow.com/questions/5364377/jsf-2-setup-issue-in-tomcat-7-java-lang-instantiationexception-com-sun-faces-a) – Buhake Sindi Nov 01 '11 at 09:10

1 Answers1

5

This is a known problem. This is actually caused by issue 1937. In a nutshell, the annotation scanner contains by accident Glassfish-specific code which causes that it doesn't work on basic servletcontainers which doesn't ship with builtin annotation scanners, such as Tomcat and Jetty. This is fixed in 2.1.1.

So, to solve your problem, you need to upgrade to at least 2.1.1. The currently latest version is 2.1.3, I recommend to go for the latest. See also the Mojarra download page for all Maven pom information.

A completely different alternative is to replace Tomcat by a more full fledged container such as Glassfish. This will give you among others the benefit of EJB/JPA support out the box so that you can nicely and easily build business services, execute background jobs, interact with database with oneliners, etc.

BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
  • should i replace me old dependencies with only this api : ` javax.faces javax.faces-api 2.1` with no provided, should i make it compile or not (remember that i am using tomcat) – Mahmoud Saleh Oct 18 '11 at 11:57
  • Just try it yourself or ask a new question. I'm no Maven guy. I can at least tell that Tomcat **does not** ship with JSF out the box. So those libs definitely needs to end up in webapp's `/WEB-INF/lib`. – BalusC Oct 18 '11 at 12:06