Problem running MyFaces under JBoss 4.2.1.GA
basrutten Oct 5, 2007 8:57 AMHello,
I have a problem I hope you can help me with. I'm trying to deplay an EAR under JBoss 4.2.1.GA. The ear contains Seam 2.0.0.CR1, richfaces 3.1.1 and Facelets 1.1.12.
Instead of using the Sun RI 1.2 implementation that ships with JBoss I want to use the MyFaces JSF implementation (1.1.4) that we used before migrating to JBoss 4.2.
I have included the JSF libraries in my WAR file and have included the
org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL param in my web.xml
web.xml looks like this:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>@Investor</display-name> <context-param> <param-name>javax.faces.DEFAULT_SUFFIX</param-name> <param-value>.xhtml</param-value> </context-param> <context-param> <param-name>facelets.DEVELOPMENT</param-name> <param-value>false</param-value> </context-param> <context-param> <param-name>org.jboss.seam.core.init.debug</param-name> <param-value>false</param-value> </context-param> <context-param> <param-name>org.ajax4jsf.SKIN</param-name> <param-value>blueSky</param-value> </context-param> <context-param> <param-name>facelets.LIBRARIES</param-name> <param-value>/META-INF/nxp.taglib.xml</param-value> </context-param> <context-param> <param-name>facelets.SKIP_COMMENTS</param-name> <param-value>true</param-value> </context-param> <context-param> <param-name>javax.faces.STATE_SAVING_METHOD</param-name> <param-value>client</param-value> </context-param> <context-param> <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name> <param-value> org.jboss.seam.ui.facelet.SeamFaceletViewHandler </param-value> </context-param> <context-param> <param-name>org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL</param-name> <param-value>true</param-value> </context-param> <listener> <listener-class> org.jboss.seam.servlet.SeamListener </listener-class> </listener> <listener> <listener-class> org.apache.myfaces.webapp.StartupServletContextListener </listener-class> </listener> <filter> <filter-name>Seam Filter</filter-name> <filter-class>org.jboss.seam.web.SeamFilter</filter-class> </filter> <filter-mapping> <filter-name>Seam Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- <filter> <display-name>Ajax4jsf Filter</display-name> <filter-name>ajax4jsf</filter-name> <filter-class>org.ajax4jsf.Filter</filter-class> </filter> <filter-mapping> <filter-name>ajax4jsf</filter-name> <url-pattern>*.faces</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> </filter-mapping> --> <session-config> <session-timeout>15</session-timeout> </session-config> <!-- <filter> <filter-name>Seam Redirect Filter</filter-name> <filter-class> org.jboss.seam.servlet.SeamRedirectFilter </filter-class> </filter> <filter-mapping> <filter-name>Seam Redirect Filter</filter-name> <url-pattern>*.faces</url-pattern> </filter-mapping> <filter> <filter-name>Seam Exception Filter</filter-name> <filter-class> org.jboss.seam.servlet.SeamExceptionFilter </filter-class> </filter> <filter-mapping> <filter-name>Seam Exception Filter</filter-name> <url-pattern>*.faces</url-pattern> </filter-mapping> --> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>Seam Resource Servlet</servlet-name> <servlet-class> org.jboss.seam.servlet.ResourceServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.faces</url-pattern> </servlet-mapping> <!-- <servlet-mapping> <servlet-name>Seam Resource Servlet</servlet-name> <url-pattern>/faces/resource/*</url-pattern> </servlet-mapping> --> <servlet> <servlet-name>jasperreportspdf</servlet-name> <servlet-class> net.sf.jasperreports.j2ee.servlets.PdfServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>jasperreportspdf</servlet-name> <url-pattern>/reportpdf/*</url-pattern> </servlet-mapping> <servlet> <servlet-name>jasperreportsxls</servlet-name> <servlet-class> net.sf.jasperreports.j2ee.servlets.XlsServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>jasperreportsxls</servlet-name> <url-pattern>/reportxls/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
faces-config.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd"> <faces-config> <lifecycle> <phase-listener> org.jboss.seam.jsf.TransactionalSeamPhaseListener </phase-listener> </lifecycle> <converter> <converter-id>userConverter</converter-id> <converter-class> com.nxp.atinvestor.web.controller.UserConverter </converter-class> </converter> <converter> <converter-id>emptyStringToNullConverter</converter-id> <converter-class>com.nxp.atinvestor.web.controller.EmptyStringToNullConverter</converter-class> </converter> <application> <locale-config> <default-locale>en</default-locale> </locale-config> </application> </faces-config>
When I try to deploy my EAR I get the following stack trace
14:51:00,000 ERROR [[/atinvestor]] Exception starting filter Seam Filter java.lang.ClassCastException: org.jboss.seam.web.SeamFilter at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:2 55) at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.jav a:397) at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108) at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3720) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4365) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:761) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:741) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:553) 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:585) at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:297) at org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:164) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659) at org.apache.catalina.core.StandardContext.init(StandardContext.java:5310) 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:585) at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:297) at org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:164) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659) at org.jboss.web.tomcat.service.TomcatDeployer.performDeployInternal(TomcatDeployer.java:301 ) etc...
My guess is that somehow JBoss is not using the JSF libraries I want it to use; I'm currently at a loss about how to solve it though.
I don't know if it matters but my jboss-app.xml reads:
<jboss-app> <loader-repository>seam.jboss.org:loader=atinvestor</loader-repository> </jboss-app>
What am I missing here?