Repository: tomee Updated Branches: refs/heads/master 64704e8fb -> 982610c38
TOMEE-2049 fixing @Transactional priority rules Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/982610c3 Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/982610c3 Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/982610c3 Branch: refs/heads/master Commit: 982610c386f03683a8062146b866331f109c00ee Parents: 64704e8 Author: rmannibucau <[email protected]> Authored: Fri Jun 2 11:39:55 2017 +0200 Committer: rmannibucau <[email protected]> Committed: Fri Jun 2 11:39:55 2017 +0200 ---------------------------------------------------------------------- .../openejb/cdi/transactional/InterceptorBase.java | 8 ++++---- .../openejb/cdi/transactional/TransactionalTest.java | 13 +++++++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/982610c3/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 21f0878..c928805 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 @@ -158,11 +158,11 @@ public abstract class InterceptorBase implements Serializable { return OpenEJB.getTransactionManager(); } - private static final class ExceptionPriotiryRules { + protected static final class ExceptionPriotiryRules { private final Class<?>[] includes; private final Class<?>[] excludes; - private ExceptionPriotiryRules(final Class<?>[] includes, final Class<?>[] excludes) { + protected ExceptionPriotiryRules(final Class<?>[] includes, final Class<?>[] excludes) { this.includes = includes; this.excludes = excludes; } @@ -176,9 +176,9 @@ public abstract class InterceptorBase implements Serializable { final int excludeScore = contains(excludes, e); if (excludeScore < 0) { - return includeScore >= 0 || isNotChecked(e, exceptionTypes); + return includeScore > 0 || isNotChecked(e, exceptionTypes); } - return includeScore - excludeScore >= 0; + return includeScore - excludeScore > 0; } private static int contains(final Class<?>[] list, final Exception e) { http://git-wip-us.apache.org/repos/asf/tomee/blob/982610c3/container/openejb-core/src/test/java/org/apache/openejb/cdi/transactional/TransactionalTest.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/test/java/org/apache/openejb/cdi/transactional/TransactionalTest.java b/container/openejb-core/src/test/java/org/apache/openejb/cdi/transactional/TransactionalTest.java index c5362c0..a0745bb 100644 --- a/container/openejb-core/src/test/java/org/apache/openejb/cdi/transactional/TransactionalTest.java +++ b/container/openejb-core/src/test/java/org/apache/openejb/cdi/transactional/TransactionalTest.java @@ -21,6 +21,7 @@ import org.apache.openejb.jee.EjbJar; import org.apache.openejb.junit.ApplicationComposer; import org.apache.openejb.testing.Classes; import org.apache.openejb.testing.Module; +import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -37,6 +38,8 @@ import javax.transaction.TransactionSynchronizationRegistry; import javax.transaction.Transactional; import javax.transaction.TransactionalException; import javax.transaction.UserTransaction; +import java.sql.SQLException; +import java.sql.SQLWarning; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; @@ -46,8 +49,10 @@ import static javax.transaction.Transactional.TxType.NOT_SUPPORTED; import static javax.transaction.Transactional.TxType.REQUIRED; import static javax.transaction.Transactional.TxType.REQUIRES_NEW; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @RunWith(ApplicationComposer.class) @@ -62,6 +67,14 @@ public class TransactionalTest { private TxBean bean; @Test + public void exceptionPriorityRules() { + assertFalse(new InterceptorBase.ExceptionPriotiryRules(new Class[] {IllegalArgumentException.class}, new Class[]{IllegalArgumentException.class}) + .accept(new IllegalArgumentException(""), new Class[0])); + assertTrue(new InterceptorBase.ExceptionPriotiryRules(new Class[] {SQLException.class}, new Class[]{SQLWarning.class}) + .accept(new SQLWarning(""), new Class[0])); + } + + @Test public void dontRollbackCommits() throws SystemException { assertNull(OpenEJB.getTransactionManager().getTransaction()); try {
