Nicolas Dutertry created ARIES-1885:
---------------------------------------

             Summary: JpaInterceptor does not properly end coordination in case 
of Exception
                 Key: ARIES-1885
                 URL: https://issues.apache.org/jira/browse/ARIES-1885
             Project: Aries
          Issue Type: Bug
          Components: JPA
    Affects Versions: jpa-2.7.1
            Reporter: Nicolas Dutertry


In class JpaInterceptor the method postCallWithException calls 
Coordination.fail() but not Coordination.end():
{code:java}
@Override
public void postCallWithException(ComponentMetadata cm, Method m, Throwable ex, 
Object preCallToken) {
    LOG.debug("PostCallWithException for bean {}, method {}", cm.getId(), 
m.getName(), ex);
    if (preCallToken != null) {
        ((Coordination)preCallToken).fail(ex);
    }
}

{code}
 

However, the javadoc of Coordination.fail() states:
{code:none}
If this Coordination has been {@link #push() pushed} onto a thread local 
Coordination stack, this Coordination is not removed from the stack. The 
creator of this Coordination must still call {@link #end()} on this 
Coordination to cause it to be removed from the thread local Coordination stack.
{code}
This is causing issues for subsequent calls to jpa service because the 
coordination is not removed from the stack.

The method postCallWithException should be implemented like this:
{code:java}
@Override
public void postCallWithException(ComponentMetadata cm, Method m, Throwable ex, 
Object preCallToken) {
    LOG.debug("PostCallWithException for bean {}, method {}", cm.getId(), 
m.getName(), ex);
    if (preCallToken != null) {
        Coordination coordination = (Coordination)preCallToken;
        coordination.fail(ex);
        coordination.end();
    }
}
{code}
 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to