Details
Description
Need to certify ICEfaces for use on JBoss 5.
I just downloaded and tried JBoss 5 GA. The facelets version of component-showcase ran fine. Auction Monitor (which is a JSP app), failed with the following:
16:18:40,445 ERROR [[jsp]] Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: ICEfaces parser unable to determine JSF implementation ViewTag class.
at com.icesoft.faces.webapp.parser.Parser.parse(Parser.java:154)
at com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:501)
at com.icesoft.faces.application.D2DViewHandler.renderView(D2DViewHandler.java:156)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at com.icesoft.faces.webapp.http.core.JsfLifecycleExecutor.apply(JsfLifecycleExecutor.java:17)
at com.icesoft.faces.context.View$2$1.respond(View.java:42)
at com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.respondWith(ServletRequestResponse.java:167)
at com.icesoft.faces.webapp.http.servlet.ThreadBlockingAdaptingServlet$ThreadBlockingRequestResponse.respondWith(ThreadBlockingAdaptingServlet.java:36)
at com.icesoft.faces.context.View$2.serve(View.java:62)
at com.icesoft.faces.context.View.servePage(View.java:119)
at com.icesoft.faces.webapp.http.core.MultiViewServer.service(MultiViewServer.java:53)
at com.icesoft.faces.webapp.http.common.ServerProxy.service(ServerProxy.java:11)
at com.icesoft.faces.webapp.http.servlet.MainSessionBoundServlet$4.service(MainSessionBoundServlet.java:114)
at com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer.service(PathDispatcherServer.java:24)
at com.icesoft.faces.webapp.http.servlet.MainSessionBoundServlet.service(MainSessionBoundServlet.java:160)
at com.icesoft.faces.webapp.http.servlet.SessionDispatcher$1.service(SessionDispatcher.java:30)
at com.icesoft.faces.webapp.http.servlet.ThreadBlockingAdaptingServlet.service(ThreadBlockingAdaptingServlet.java:19)
at com.icesoft.faces.webapp.http.servlet.EnvironmentAdaptingServlet.service(EnvironmentAdaptingServlet.java:63)
at com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:50)
at com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
at com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:94)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:638)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:444)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:382)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:310)
at org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:696)
at org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:667)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:60)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:322)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:249)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
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:235)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:601)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:613)
This failure is identical to the problem with Glassfish v3. Since JBoss 5 is also based on a micro-kernel architecture, I imagine we'll have to a apply a similar fix.
The related Glassfish v3 issue is here: http://jira.icefaces.org/browse/ICE-3902.
Also note that I didn't use the modified build.xml file to build the Component Showcase - Facelets version. It deployed and ran normally on my machine.
Committed fix as revision 18177.
I had to add some additional logic to JspPageToDocument.getTldInputStream() where we have all of our strategies for finding .tld files in the container. JBoss 5 has it's own Micro Container (MC) and a custom Virtual File System (VFS). The location of the .tld files returned a URL that looked like this:
vfszip:/Users/deryk/Apps/jboss-5.0.0.GA/server/default/deploy/jbossweb.sar/jsf-libs/jsf-impl.jar/com/sun/faces/taglib/jsf_core/ViewTag.class
So I had to parse out the .jar location and append the appropriate tld path. It would probably do this class some good to be refactored.
Tested sample apps on trunk revision 18179 + Jboss5.0.0.GA with the jboss4.2 build target
Browsers tested: Opera9.27, IE7, FF2
1) Address: tested successfully
2) Auction Monitor: passed on all browsers, but saw the following on the server while testing it on Opera:
14:42:21,459 ERROR [lifecycle] JSF1054: (Phase ID: RESTORE_VIEW 1, View ID: ) Ex
ception thrown during phase execution: javax.faces.event.PhaseEvent[source=com.s
un.faces.lifecycle.LifecycleImpl@15dac13]
3) Component Showcase: the default build.xml file was used for all versions. The issues below apply to all versions (JSP, Facelets, Facelets-Enh)
For all browsers: Table Columns: the column widths are not even. The first column is much wider than the others
For Opera only: the Windows option of Media does not have anything showing up
We do not have a build target for JBoss5 server. When tried to test it with jboss4.2 target got following errors:
13:42:37,793 ERROR [JspPageToDocument] Can't find TLD for location http://java.sun.com/jsf/core. JAR containing the TLD may not be in the classpath
13:42:38,309 ERROR [JspPageToDocument] Can't find TLD for location http://java.sun.com/jsf/html. JAR containing the TLD may not be in the classpath
2008-10-27 13:42:49,496 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/component-showcase].[Persistent Faces Servlet]] (http-127.0.0.1-8080-1) Servlet.service() for servlet Persistent Faces Servlet threw exception
javax.faces.FacesException: Can't parse stream for /showcase.jspx Failed to execute JSP lifecycle.
at com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:533)
at com.icesoft.faces.application.D2DViewHandler.renderView(D2DViewHandler.java:165)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:109)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at com.icesoft.faces.webapp.http.core.JsfLifecycleExecutor.apply(JsfLifecycleExecutor.java:17)
at com.icesoft.faces.context.View$2$1.respond(View.java:40)
Caused by: javax.faces.FacesException: Failed to execute JSP lifecycle.
at com.icesoft.faces.webapp.parser.Parser.parse(Parser.java:181)
at com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:527)
... 39 more
Caused by: java.lang.IllegalStateException: ICEfaces parser unable to determine JSF implementation ViewTag class.
at com.icesoft.faces.webapp.parser.Parser.parse(Parser.java:154)
... 40 more
2008-10-27 13:42:56,762 DEBUG [com.arjuna.ats.arjuna.logging.arjLogger] (Thread-12) Periodic recovery - second pass <Mon, 27 Oct 2008 13:42:56>
2008-10-27 13:42:56,762 DEBUG [com.arjuna.ats.arjuna.logging.arjLogger] (Thread-12) AtomicActionRecoveryModule: Second pass
2008-10-27 13:42:56,762 DEBUG [com.arjuna.ats.txoj.logging.txojLoggerI18N] (Thread-12) [com.arjuna.ats.internal.txoj.recovery.TORecoveryModule_6] - TORecoveryModule - second pass
2008-10-27 13:42:56,762 DEBUG [com.arjuna.ats.jta.logging.loggerI18N] (Thread-12) [com.arjuna.ats.internal.jta.recovery.info.secondpass] Local XARecoveryModule - second pass