Problem in Weld and Seam 3 in Tomcat 6
hantsy Jul 19, 2011 12:49 AMI create a serlvet based project from the weld servlet archetype.
And updated the dependencies to the latest version(weld 1.1.1Final), it works well.
But when I tried to added the Seam3 dependencies, and run application via mvn tomcat:run
, I encountered a exception.
严重: Exception sending context initialized event to listener instance of class org.jboss.weld.environment.servlet.Listener java.lang.RuntimeException: Error instantiating class org.jboss.seam.xml.bootstr ap.XmlExtension at org.jboss.weld.util.ServiceLoader.prepareInstance(ServiceLoader.java: 282) at org.jboss.weld.util.ServiceLoader.loadService(ServiceLoader.java:238) at org.jboss.weld.util.ServiceLoader.loadServiceFile(ServiceLoader.java: 194) at org.jboss.weld.util.ServiceLoader.reload(ServiceLoader.java:157) at org.jboss.weld.util.ServiceLoader.iterator(ServiceLoader.java:346) at org.jboss.weld.bootstrap.ExtensionBeanDeployer.addExtensions(Extensio nBeanDeployer.java:93) at org.jboss.weld.bootstrap.WeldBootstrap.startInitialization(WeldBootst rap.java:340) at org.jboss.weld.environment.servlet.Listener.contextInitialized(Listen er.java:170) at org.apache.catalina.core.StandardContext.listenerStart(StandardContex t.java:4135) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4 630) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardHost.start(StandardHost.java:785) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445 ) at org.apache.catalina.startup.Embedded.start(Embedded.java:825) at org.codehaus.mojo.tomcat.AbstractRunMojo.startContainer(AbstractRunMo jo.java:558) at org.codehaus.mojo.tomcat.AbstractRunMojo.execute(AbstractRunMojo.java :255) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(Default BuildPluginManager.java:101) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor .java:209) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor .java:153) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
but when I remove the weld listener in web.xml, and browsed the home page, and another exception in the page.
java.lang.IllegalStateException: Singleton is not set at org.jboss.weld.bootstrap.api.helpers.IsolatedStaticSingletonProvider$IsolatedStaticSingleton.get(IsolatedStaticSingletonProvider.java:52) at org.jboss.weld.Container.instance(Container.java:58) at org.jboss.weld.jsf.WeldPhaseListener.instance(WeldPhaseListener.java:145) at org.jboss.weld.jsf.WeldPhaseListener.activateConversations(WeldPhaseListener.java:102) at org.jboss.weld.jsf.WeldPhaseListener.beforePhase(WeldPhaseListener.java:84) at com.sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:228) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:99) at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.dna.bifincan.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:28) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:662)
Some of my configuration.
web.xml
<servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <!-- Tell the context which URLs to process with JSF --> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.jsf</url-pattern> </servlet-mapping> <!-- This section is optional. We are allowing index.jsf to handle the root URL (i.e., /). --> <welcome-file-list> <!-- Add additional files here, if desired, for example: <welcome-file>index.html</welcome-file> --> <welcome-file>index.jsf</welcome-file> </welcome-file-list> <listener> <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class> </listener> <resource-env-ref> <description>Object factory for the CDI Bean Manager</description> <resource-env-ref-name>BeanManager</resource-env-ref-name> <resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type> </resource-env-ref>
And beans.xml content
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:s="urn:java:ee" xmlns:t="urn:java:org.jboss.seam.transaction" xsi:schemaLocation=" http://java.sun.com/xml/ns/javaee http://docs.jboss.org/cdi/beans_1_0.xsd"> <interceptors> <class>org.jboss.seam.transaction.TransactionInterceptor</class> </interceptors> <t:SeSynchronizations> <s:modifies/> </t:SeSynchronizations> <t:EntityTransaction> <s:modifies /> </t:EntityTransaction> </beans>
And the seam3 dependencies added in pom.
<!-- Seam 3 Persistence--> <dependency> <groupId>org.jboss.seam.persistence</groupId> <artifactId>seam-persistence-api</artifactId> <version>${seam.persistence.version}</version> </dependency> <dependency> <groupId>org.jboss.seam.persistence</groupId> <artifactId>seam-persistence-impl</artifactId> <version>${seam.persistence.version}</version> </dependency> <dependency> <groupId>org.jboss.seam.solder</groupId> <artifactId>seam-solder</artifactId> <version>${seam.solder.version}</version> </dependency> <dependency> <groupId>org.jboss.seam.xml</groupId> <artifactId>seam-xml-config</artifactId> <version>${seam.xml.version}</version> </dependency>
How to overcome the barrier? Thanks.