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)