Repository: tomee Updated Branches: refs/heads/master 0e123386c -> 059945c02
fixing InterceptorBase exception cache + adding openejb.cdi.jta.exception.client-only flag for an easier tx exception handling Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/059945c0 Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/059945c0 Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/059945c0 Branch: refs/heads/master Commit: 059945c028da440c044471b6cdd252649da33f5b Parents: 0e12338 Author: Romain Manni-Bucau <rmannibu...@apache.org> Authored: Tue Apr 21 11:32:52 2015 +0200 Committer: Romain Manni-Bucau <rmannibu...@apache.org> Committed: Tue Apr 21 11:32:52 2015 +0200 ---------------------------------------------------------------------- .../apache/openejb/cdi/transactional/InterceptorBase.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/059945c0/container/openejb-core/src/main/java/org/apache/openejb/cdi/transactional/InterceptorBase.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/transactional/InterceptorBase.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/transactional/InterceptorBase.java index 116660a..f583f25 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/transactional/InterceptorBase.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/transactional/InterceptorBase.java @@ -21,6 +21,7 @@ import org.apache.openejb.OpenEJB; import org.apache.openejb.SystemException; import org.apache.openejb.core.CoreUserTransaction; import org.apache.openejb.core.transaction.TransactionPolicy; +import org.apache.openejb.loader.SystemInstance; import org.apache.webbeans.config.WebBeansContext; import javax.enterprise.inject.spi.AnnotatedMethod; @@ -34,13 +35,15 @@ import java.io.Serializable; import java.lang.reflect.Method; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; import static java.util.Arrays.asList; public abstract class InterceptorBase implements Serializable { private static final IllegalStateException ILLEGAL_STATE_EXCEPTION = new IllegalStateException("Can't use UserTransaction from @Transaction call"); + private static final boolean HANDLE_EXCEPTION_ONLY_FOR_CLIENT = SystemInstance.get().getOptions().get("openejb.cdi.jta.exception.client-only", false); - private transient Map<Class<?>, Boolean> rollback = new ConcurrentHashMap<>(); + private transient ConcurrentMap<Class<?>, Boolean> rollback = new ConcurrentHashMap<>(); protected Object intercept(final InvocationContext ic) throws Exception { Exception error = null; @@ -72,8 +75,8 @@ public abstract class InterceptorBase implements Serializable { } if (policy != null) { - if (error != null) { - final Class<? extends Exception> errorClass = error.getClass(); + if (error != null && (!HANDLE_EXCEPTION_ONLY_FOR_CLIENT || policy.isNewTransaction())) { + final Class<?> errorClass = error.getClass(); Boolean doRollback = rollback.get(errorClass); if (doRollback != null) { if (doRollback) {