Details
Description
When programmatically ending a session by calling HttpSession.invalidate(), we need to support the same behaviour as stock JSF if possible. Currently, calling invalidate() on the session is resulting in the following NullPointerException (very similar to the issue experienced by the customer in the related case):
java.lang.NullPointerException
at org.icefaces.event.WindowAndViewIDSetup$1.encode(WindowAndViewIDSetup.java:66)
at org.icefaces.event.UIOutputWriter.encodeBegin(UIOutputWriter.java:32)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1641)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:164)
at org.icefaces.render.RendererWrapper.encodeChildren(RendererWrapper.java:54)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:849)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1643)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1646)
at org.icefaces.context.DOMPartialViewContext.processPartial(DOMPartialViewContext.java:151)
at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:968)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1643)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:378)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:127)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:117)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:135)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:309)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:637)
java.lang.NullPointerException
at org.icefaces.event.WindowAndViewIDSetup$1.encode(WindowAndViewIDSetup.java:66)
at org.icefaces.event.UIOutputWriter.encodeBegin(UIOutputWriter.java:32)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1641)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:164)
at org.icefaces.render.RendererWrapper.encodeChildren(RendererWrapper.java:54)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:849)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1643)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1646)
at org.icefaces.context.DOMPartialViewContext.processPartial(DOMPartialViewContext.java:151)
at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:968)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1643)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:378)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:127)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:117)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:135)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:309)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:637)
Activity
Ken Fyten
made changes -
Status | Resolved [ 5 ] | Closed [ 6 ] |
Assignee Priority | P2 |
Ken Fyten
made changes -
Fix Version/s | 2.0.0 [ 10230 ] |
Arran Mccullough
made changes -
Salesforce Case | [5007000000D5BlN] |
Repository | Revision | Date | User | Message |
ICEsoft Public SVN Repository | #22223 | Mon Aug 23 09:49:37 MDT 2010 | deryk.sinotte | |
Files Changed | ||||
MODIFY
/icefaces2/trunk/icefaces/core/src/main/java/org/icefaces/context/SessionExpiredListener.java
|
Deryk Sinotte
made changes -
Status | Open [ 1 ] | Resolved [ 5 ] |
Affects | [Compatibility/Configuration] | |
Resolution | Fixed [ 1 ] |
Repository | Revision | Date | User | Message |
ICEsoft Public SVN Repository | #22217 | Fri Aug 20 14:35:03 MDT 2010 | deryk.sinotte | |
Files Changed | ||||
ADD
/icefaces2/trunk/icefaces/core/src/main/java/org/icefaces/context/SessionExpiredException.java
ADD /icefaces2/trunk/icefaces/core/src/main/java/org/icefaces/context/SessionExpiredListener.java |
Repository | Revision | Date | User | Message |
ICEsoft Public SVN Repository | #22216 | Fri Aug 20 14:33:38 MDT 2010 | deryk.sinotte | |
Files Changed | ||||
ADD
/icefaces2/trunk/icefaces/samples/test/invalidate/src/main/webapp/sessionExpired.xhtml
MODIFY /icefaces2/trunk/icefaces/samples/test/invalidate/src/main/webapp/stock.xhtml MODIFY /icefaces2/trunk/icefaces/samples/test/invalidate/src/main/webapp/viewExpired.xhtml MODIFY /icefaces2/trunk/icefaces/samples/test/invalidate/src/main/webapp/WEB-INF/web.xml |
Repository | Revision | Date | User | Message |
ICEsoft Public SVN Repository | #22213 | Fri Aug 20 13:17:59 MDT 2010 | deryk.sinotte | |
Files Changed | ||||
ADD
/icefaces2/trunk/icefaces/samples/test/invalidate/src/main/java/org/icefaces/test/invalidate/SessionInvalidationFilter.java
MODIFY /icefaces2/trunk/icefaces/samples/test/invalidate/src/main/webapp/error-handler.js MODIFY /icefaces2/trunk/icefaces/samples/test/invalidate/src/main/java/org/icefaces/test/invalidate/TestBean.java |
Repository | Revision | Date | User | Message |
ICEsoft Public SVN Repository | #22212 | Fri Aug 20 13:17:29 MDT 2010 | deryk.sinotte | |
Files Changed | ||||
MODIFY
/icefaces2/trunk/icefaces/core/src/main/javascript/application.js
MODIFY /icefaces2/trunk/icefaces/compat/core/src/main/javascript/status.js MODIFY /icefaces2/trunk/icefaces/core/src/main/javascript/status.js |
Repository | Revision | Date | User | Message |
ICEsoft Public SVN Repository | #22211 | Fri Aug 20 12:49:45 MDT 2010 | deryk.sinotte | |
Files Changed | ||||
MODIFY
/icefaces2/trunk/icefaces/core/src/main/java/org/icefaces/application/WindowScopeManager.java
|
Repository | Revision | Date | User | Message |
ICEsoft Public SVN Repository | #22207 | Thu Aug 19 09:58:22 MDT 2010 | deryk.sinotte | |
Files Changed | ||||
MODIFY
/icefaces2/trunk/icefaces/compat/core/src/main/javascript/status.js
MODIFY /icefaces2/trunk/icefaces/core/src/main/java/org/icefaces/application/WindowScopeManager.java |
Deryk Sinotte
made changes -
Salesforce Case | [] | |
Fix Version/s | 2.0-Beta2 [ 10242 ] | |
Assignee Priority | P2 |
Deryk Sinotte
made changes -
Assignee | Deryk Sinotte [ deryk.sinotte ] |
Deryk Sinotte
made changes -
Field | Original Value | New Value |
---|---|---|
Attachment | invalidation.html [ 12503 ] |
Deryk Sinotte
created issue -
I've made more improvements to the test case as well as checked in some change to help with some of the inconsistencies. There is now a SessionExpiredListener that listens for sessionDestroyed() events and, if they were caused programmatically via session.invalidate() will push a SessionExpiredException onto the queue which is in turn delivered to the client in our standard popup. This is more accurate than the ViewExpiredException and occurs before the WindowScope has a chance to complain which makes it fail faster (a good thing).
When a session times out, the next interaction with the application will throw the ViewExpiredException. This is because there is no FacesContext available when this occurs (it's doesn't happen during a request) and the ViewExpiredException occurs when the view is being restored and still under JSF control.
I've also changed how the compat versions of the "Server Internal Error" popups are being restrained. It's now wired to a NOOP rather than disabling them altogether which would have interfered with the status component.