[ARIES-1885] End coordination in case of exception in JpaInterceptor
diff --git a/jpa-blueprint/src/main/java/org/apache/aries/jpa/blueprint/impl/JpaInterceptor.java b/jpa-blueprint/src/main/java/org/apache/aries/jpa/blueprint/impl/JpaInterceptor.java
index a6d5bf2..009908d 100644
--- a/jpa-blueprint/src/main/java/org/apache/aries/jpa/blueprint/impl/JpaInterceptor.java
+++ b/jpa-blueprint/src/main/java/org/apache/aries/jpa/blueprint/impl/JpaInterceptor.java
@@ -81,7 +81,9 @@
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);
+ Coordination coordination = (Coordination)preCallToken;
+ coordination.fail(ex);
+ safeEndCoordination(coordination);
}
}
@@ -90,7 +92,7 @@
throws Exception {
LOG.debug("PostCallWithReturn for bean {}, method {}", cm.getId(), m.getName());
if (preCallToken != null) {
- ((Coordination)preCallToken).end();
+ safeEndCoordination((Coordination)preCallToken);
}
}
@@ -110,4 +112,14 @@
.get(PersistenceUnitTransactionType.class.getName());
return transactionType == PersistenceUnitTransactionType.RESOURCE_LOCAL;
}
+
+ private void safeEndCoordination(final Coordination coordination) {
+ try {
+ if (coordination != null) {
+ coordination.end();
+ }
+ } catch (Exception e){
+ LOG.debug(e.getMessage(), e);
+ }
+ }
}