Thread: [Winstone-devel] Apache MyFaces ExtensionsFilter
Status: Beta
Brought to you by:
rickknowles
From: Matthias W. <mw...@te...> - 2007-02-20 23:22:43
|
Hi! The Apache MyFaces ExtensionsFilter works with Tomcat 5, but I'm afraid there seems to be a problem with Winstone. As soon as I declare the filter in the web.xml file, Winstone just returns an empty page. The rest of Java ServerFaces / MyFaces works very well and without problems with Winstone. It seems there was a similar problem with Jetty, please compare http://issues.apache.org/jira/browse/MYFACES-1126. Here is an excerpt of my web.xml file: <web-app> <context-param> <param-name>facelets.LIBRARIES</param-name> <param-value>/WEB-INF/tomahawk.taglib.xml</param-value> </context-param> <filter> <filter-name>MyFacesExtensionsFilter</filter-name> <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class> <init-param> <param-name>maxFileSize</param-name> <param-value>20m</param-value> </init-param> </filter> <filter-mapping> <filter-name>MyFacesExtensionsFilter</filter-name> <!--<servlet-name>Faces Servlet</servlet-name>--> <url-pattern>*.jsf</url-pattern> </filter-mapping> <filter-mapping> <filter-name>MyFacesExtensionsFilter</filter-name> <url-pattern>/faces/myFacesExtensionResource/*</url-pattern> </filter-mapping> <listener> <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class> </listener> <!-- Faces Servlet --> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <!-- Faces Servlet Mapping --> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.jsf</url-pattern> </servlet-mapping> </web-app> The purpose of this filter is - to add URLs for resources needed by Tomahawk components to the response - to deliver this resources from the tomahawk.jar file to the user (http://myfaces.apache.org/tomahawk/extensionsFilter.html) Thanks for any help and best regards, Matthias |
From: Rick K. <ri...@kn...> - 2007-02-23 07:10:34
|
Matthias, Thanks for this. I'm crazy busy right now (4 concurrent client projects with major releases in the next month) in my consulting job, so Winstone support will need to take a back seat for a short time. Apologies - hopefully someone else on the list can help you. I suspect you're right about it being a use of stream vs writer issue though. No time to check out the hypothesis though. Rick Matthias Wuttke wrote: > Hi! > > The Apache MyFaces ExtensionsFilter works with Tomcat 5, but I'm afraid > there seems to be a problem with Winstone. As soon as I declare the > filter in the web.xml file, Winstone just returns an empty page. The > rest of Java ServerFaces / MyFaces works very well and without problems > with Winstone. It seems there was a similar problem with Jetty, please > compare http://issues.apache.org/jira/browse/MYFACES-1126. > > Here is an excerpt of my web.xml file: > > <web-app> > > <context-param> > <param-name>facelets.LIBRARIES</param-name> > <param-value>/WEB-INF/tomahawk.taglib.xml</param-value> > </context-param> > > <filter> > <filter-name>MyFacesExtensionsFilter</filter-name> > > <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class> > <init-param> > <param-name>maxFileSize</param-name> > <param-value>20m</param-value> > </init-param> > </filter> > > <filter-mapping> > <filter-name>MyFacesExtensionsFilter</filter-name> > <!--<servlet-name>Faces Servlet</servlet-name>--> > <url-pattern>*.jsf</url-pattern> > </filter-mapping> > > <filter-mapping> > <filter-name>MyFacesExtensionsFilter</filter-name> > <url-pattern>/faces/myFacesExtensionResource/*</url-pattern> > </filter-mapping> > > <listener> > > <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class> > </listener> > > <!-- Faces Servlet --> > <servlet> > <servlet-name>Faces Servlet</servlet-name> > <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> > <load-on-startup>1</load-on-startup> > </servlet> > > <!-- Faces Servlet Mapping --> > <servlet-mapping> > <servlet-name>Faces Servlet</servlet-name> > <url-pattern>*.jsf</url-pattern> > </servlet-mapping> > > </web-app> > > The purpose of this filter is > - to add URLs for resources needed by Tomahawk components to the response > - to deliver this resources from the tomahawk.jar file to the user > (http://myfaces.apache.org/tomahawk/extensionsFilter.html) > > Thanks for any help and best regards, > Matthias > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys-and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Winstone-devel mailing list > Win...@li... > https://lists.sourceforge.net/lists/listinfo/winstone-devel > |
From: Matthias W. <mw...@te...> - 2007-03-05 21:20:46
|
Hi, Regarding the "empty response" problem: The method RequestDispatcher.forward() seems to close the response stream (by calling WinstoneOutputStream.setClosed) too early at a time when the servlet filter has not finished (in fact, has not even begun) writing its output. This is because the filter calls the "inner" FilterChain.doFilter method for invoking the servlet (supplying a wrapped response object), but writes the actual output afterwards after the return from the servlet. Winstone already flushes and closes the response stream after the servlet call (but the stream is still empty) and does not wait for further filter output that is written by the filter after the execution of the actual servlet. This behaviour does not allow servlet filters to capture the servlet output, modify it and write it afterwards. I'm not quite sure where it is the best place to close the output stream, but I think it has to remain open just until the execution of all the filters has finished. Best regards, Matthias |
From: Rick K. <ri...@kn...> - 2007-03-06 00:27:16
|
Matthias, Agreed about the below. My main nervousness comes from some rather painful experiences with shifting some of these stream flush/closes around before. You're absolutely right about this being a bug and a spec violation, but it's a bug that doesn't cause a failure in the TCK because they don't test for it. I'm worried that removing the flush that's there now will cause a failure in something that is tested by the TCK. That's a much more serious bug. Running the TCK takes a long time (2 to 3 hours each time), and debugging a stream problem like that takes longer still. I'm completely flooded with paid work right now, so this one is going to have to wait a few weeks. Please log it formally as a bug if you like - I completely agree it's a wrong behaviour. Sorry I can't be more responsive at the moment, Rick Matthias Wuttke wrote: > Hi, > > Regarding the "empty response" problem: > > The method RequestDispatcher.forward() seems to close the response > stream (by calling WinstoneOutputStream.setClosed) too early at a time > when the servlet filter has not finished (in fact, has not even begun) > writing its output. > > This is because the filter calls the "inner" FilterChain.doFilter > method for invoking the servlet (supplying a wrapped response object), > but writes the actual output afterwards after the return from the > servlet. Winstone already flushes and closes the response stream after > the servlet call (but the stream is still empty) and does not wait for > further filter output that is written by the filter after the > execution of the actual servlet. > > This behaviour does not allow servlet filters to capture the servlet > output, modify it and write it afterwards. > > I'm not quite sure where it is the best place to close the output > stream, but I think it has to remain open just until the execution of > all the filters has finished. > > Best regards, > Matthias |
From: Matthias W. <mw...@te...> - 2007-03-08 19:48:12
|
Hi Rick, commenting out the last three lines of RequestDispatcher.forward() solved the problem for me - the MyFaces filter is working properly now. I haven't tried Winstone with the Shale, Ajax4jsf and Trinidad filters yet, but I do not expect any problems here. Best regards, Matthias |
From: Rick K. <ri...@kn...> - 2007-04-23 08:02:09
|
Matthias, A courtesy note to let you know that this should be fixed in the newly released version. For the record, the fix you mentioned was close, but slightly dangerous ... it allows a forwarding servlet to write to the response after forwarding. Instead, I moved the commented section to the outside of the filter execution, inside the forward block which should be safe. Thanks, Rick Matthias Wuttke wrote: > Hi Rick, > > commenting out the last three lines of RequestDispatcher.forward() > solved the problem for me - the MyFaces filter is working properly now. > I haven't tried Winstone with the Shale, Ajax4jsf and Trinidad filters > yet, but I do not expect any problems here. > > Best regards, > Matthias > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys-and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Winstone-devel mailing list > Win...@li... > https://lists.sourceforge.net/lists/listinfo/winstone-devel > |