BridgeImpl incorrectly cleans up after exceptions; retains contexts
-------------------------------------------------------------------

                 Key: PORTLETBRIDGE-214
                 URL: https://issues.apache.org/jira/browse/PORTLETBRIDGE-214
             Project: MyFaces Portlet Bridge
          Issue Type: Bug
          Components: Impl
    Affects Versions: 2.0.0
            Reporter: Scott Oaks
            Assignee: Michael Freedman


The exception handling of BridgeImpl.doFacesRequest() is incorrect, which leads 
to contexts not being released after an exception.

When an exception is thrown to the doFacesRequest() method, it ends up in this 
code:

try {
    ...
} catch (Exception e) {
   ...
   context.getExternalContext().log("Exception thrown in 
doFacesRequest:resource", e);   // line 1168
  ...
} finally {
  ...
  context.release();
  ...
}

The first problem is that whatever error is getting thrown to us is lost 
because line 1168 is generated a NullPointerException from 
context.getExternalContext().log(). So that NPE gets thrown from the exception 
block and the original, actual root-cause, exception is lost.

The reason that this code fails is that context.getExternalContext() returns 
null -- the processing has been redirected, and this context has already been 
released in redirectRender(). Which leads to the much more serious issue -- the 
new context established by redirectRender() is never released in the exception 
handling: the context.release() call in the finally block of doFacesRequest() 
is the original, already released context. 

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to