I need some help with the best way to handle updating the dummy
request/response objects that we use for system event listeners kicked
off when there isn't a request context. Currently, we're implementing
ServletRequest and ServletResponse directly. This is broken when using
a servlet 3.0 runtime though since we're not implementing the new
methods added by the servlet 3.0 spec.
I tried already updating the classes to extend the request/response
wrapper classes, but that turned out to be problematic since the
constructor requires a request/response object to be passed. Since we
don't have access to that as we're outside of a request I hit an NPE try
to use FacesContext that wasn't there.
I've come up with a couple of potential solutions on this and would like
some input as to the best way to go.
1) We could also extend the wrapper classes, but add a no-arg
constructor to the dummy classes that would just call super(null). This
would be fine in most cases, but if an application tried to call any of
the new ServletContext methods from Servlet 3.0 we'd get an NPE instead
of a runtime exception (not ideal)
2) We can simply add the new methods from the Servlet 3.0 API to our
dummy classes. I think as long as we don't include the @Override
annotation it should build and run in either a 2.5 or 3.0 environment.
3) We could implement a dynamic proxy to handle the calls. Would be a
little more complex to implement, but might be the most elegant
solution. Not fully sure if there are performance implications here
though.
Personally, I'd lean towards (2), I'd like to here from Werner as well
since he was the one that initially implemented this. Any additional
feedback from others in the community is of course welcome.
Thanks,
Mike
- [MyFaces 2.0] how to handle _SystemEventServletRequest... Michael Concini
-