From ed943d55c299631490c9cdd8bbd5740def1fb639 Mon Sep 17 00:00:00 2001 From: gytis Date: Thu, 19 Mar 2015 15:44:39 +0000 Subject: [PATCH] JBTM-2353 Compensation handler should not throw exception, if there is no transaction --- .../compensations/impl/ParticipantInterceptor.java | 7 +++++++ .../compensations/impl/TxCompensateInterceptor.java | 9 +-------- .../compensations/impl/TxConfirmInterceptor.java | 9 +-------- .../narayana/compensations/impl/TxLoggedInterceptor.java | 9 +-------- .../narayana/compensations/functional/BasicTest.java | 7 +------ .../functional/compensatable/CompensatableBean.java | 9 +++++++++ 6 files changed, 20 insertions(+), 30 deletions(-) diff --git a/compensations/src/main/java/org/jboss/narayana/compensations/impl/ParticipantInterceptor.java b/compensations/src/main/java/org/jboss/narayana/compensations/impl/ParticipantInterceptor.java index 0f45a1027f..a9553ae6b0 100644 --- a/compensations/src/main/java/org/jboss/narayana/compensations/impl/ParticipantInterceptor.java +++ b/compensations/src/main/java/org/jboss/narayana/compensations/impl/ParticipantInterceptor.java @@ -22,6 +22,9 @@ package org.jboss.narayana.compensations.impl; +import org.jboss.narayana.compensations.api.NoTransactionException; +import org.jboss.narayana.compensations.api.TxLogged; + import javax.interceptor.AroundInvoke; import javax.interceptor.InvocationContext; import java.lang.reflect.Method; @@ -35,6 +38,10 @@ public abstract class ParticipantInterceptor { @AroundInvoke public Object intercept(InvocationContext ic) throws Exception { + if (!BAControllerFactory.getInstance().isBARunning()) { + return ic.proceed(); + } + ParticipantManager participantManager = enlistParticipant(ic.getMethod()); Object result; diff --git a/compensations/src/main/java/org/jboss/narayana/compensations/impl/TxCompensateInterceptor.java b/compensations/src/main/java/org/jboss/narayana/compensations/impl/TxCompensateInterceptor.java index 3cc959eb64..7d5863adb4 100644 --- a/compensations/src/main/java/org/jboss/narayana/compensations/impl/TxCompensateInterceptor.java +++ b/compensations/src/main/java/org/jboss/narayana/compensations/impl/TxCompensateInterceptor.java @@ -23,7 +23,6 @@ package org.jboss.narayana.compensations.impl; import org.jboss.narayana.compensations.api.CompensationHandler; -import org.jboss.narayana.compensations.api.NoTransactionException; import org.jboss.narayana.compensations.api.TxCompensate; import javax.annotation.Priority; @@ -50,14 +49,8 @@ public Object intercept(InvocationContext ic) throws Exception { @Override protected ParticipantManager enlistParticipant(Method method) throws Exception { - BAControler baControler = BAControllerFactory.getInstance(); - - if (!baControler.isBARunning()) { - throw new NoTransactionException("Methods annotated with '" + TxCompensate.class.getName() + "' must be invoked in the context of a compensation based transaction"); - } - Class compensationHandler = getCompensationHandler(method); - return baControler.enlist(compensationHandler, null, null); + return BAControllerFactory.getInstance().enlist(compensationHandler, null, null); } private Class getCompensationHandler(Method method) { diff --git a/compensations/src/main/java/org/jboss/narayana/compensations/impl/TxConfirmInterceptor.java b/compensations/src/main/java/org/jboss/narayana/compensations/impl/TxConfirmInterceptor.java index dded9d5d7a..490cd302a2 100644 --- a/compensations/src/main/java/org/jboss/narayana/compensations/impl/TxConfirmInterceptor.java +++ b/compensations/src/main/java/org/jboss/narayana/compensations/impl/TxConfirmInterceptor.java @@ -23,7 +23,6 @@ package org.jboss.narayana.compensations.impl; import org.jboss.narayana.compensations.api.ConfirmationHandler; -import org.jboss.narayana.compensations.api.NoTransactionException; import org.jboss.narayana.compensations.api.TxConfirm; import javax.annotation.Priority; @@ -50,14 +49,8 @@ public Object intercept(InvocationContext ic) throws Exception { @Override protected ParticipantManager enlistParticipant(Method method) throws Exception { - BAControler baControler = BAControllerFactory.getInstance(); - - if (!baControler.isBARunning()) { - throw new NoTransactionException("Methods annotated with '" + TxConfirm.class.getName() + "' must be invoked in the context of a compensation based transaction"); - } - Class confirmationHandler = getConfirmationHandler(method); - return baControler.enlist(null, confirmationHandler, null); + return BAControllerFactory.getInstance().enlist(null, confirmationHandler, null); } private Class getConfirmationHandler(Method method) { diff --git a/compensations/src/main/java/org/jboss/narayana/compensations/impl/TxLoggedInterceptor.java b/compensations/src/main/java/org/jboss/narayana/compensations/impl/TxLoggedInterceptor.java index f4a711aabf..c6420346c7 100644 --- a/compensations/src/main/java/org/jboss/narayana/compensations/impl/TxLoggedInterceptor.java +++ b/compensations/src/main/java/org/jboss/narayana/compensations/impl/TxLoggedInterceptor.java @@ -22,7 +22,6 @@ package org.jboss.narayana.compensations.impl; -import org.jboss.narayana.compensations.api.NoTransactionException; import org.jboss.narayana.compensations.api.TransactionLoggedHandler; import org.jboss.narayana.compensations.api.TxLogged; @@ -50,14 +49,8 @@ public Object intercept(InvocationContext ic) throws Exception { @Override protected ParticipantManager enlistParticipant(Method method) throws Exception { - BAControler baControler = BAControllerFactory.getInstance(); - - if (!baControler.isBARunning()) { - throw new NoTransactionException("Methods annotated with '" + TxLogged.class.getName() + "' must be invoked in the context of a compensation based transaction"); - } - Class transactionLogHandler = getTransactionLoggedHandler(method); - return baControler.enlist(null, null, transactionLogHandler); + return BAControllerFactory.getInstance().enlist(null, null, transactionLogHandler); } private Class getTransactionLoggedHandler(Method method) { diff --git a/compensations/src/test/java/org/jboss/narayana/compensations/functional/BasicTest.java b/compensations/src/test/java/org/jboss/narayana/compensations/functional/BasicTest.java index 2be601f92f..1dc0c7c861 100644 --- a/compensations/src/test/java/org/jboss/narayana/compensations/functional/BasicTest.java +++ b/compensations/src/test/java/org/jboss/narayana/compensations/functional/BasicTest.java @@ -164,12 +164,7 @@ public void testAlternativeThenFail() throws Exception { @Test public void testNoTransaction() throws Exception { - try { - singleService.noTransactionPresent(); - Assert.fail(); - } catch (NoTransactionException e) { - //expected - } + singleService.noTransactionPresent(); Assert.assertEquals(false, DummyCompensationHandler1.getCalled()); Assert.assertEquals(false, DummyConfirmationHandler1.getCalled()); diff --git a/compensations/src/test/java/org/jboss/narayana/compensations/functional/compensatable/CompensatableBean.java b/compensations/src/test/java/org/jboss/narayana/compensations/functional/compensatable/CompensatableBean.java index 34f2088797..a737b7f604 100644 --- a/compensations/src/test/java/org/jboss/narayana/compensations/functional/compensatable/CompensatableBean.java +++ b/compensations/src/test/java/org/jboss/narayana/compensations/functional/compensatable/CompensatableBean.java @@ -117,6 +117,9 @@ public void invokeWithMandatory(final Object expectedTransaction) throws Excepti } @Compensatable(CompensationTransactionType.SUPPORTS) + @TxCompensate(DummyCompensationHandler1.class) + @TxConfirm(DummyConfirmationHandler1.class) + @TxLogged(DummyTransactionLoggedHandler1.class) public void invokeWithSupports() throws Exception { Utills.assertTransactionActive(false); @@ -134,12 +137,18 @@ public void invokeWithSupports(final Object expectedTransaction) throws Exceptio } @Compensatable(CompensationTransactionType.NOT_SUPPORTED) + @TxCompensate(DummyCompensationHandler1.class) + @TxConfirm(DummyConfirmationHandler1.class) + @TxLogged(DummyTransactionLoggedHandler1.class) public void invokeWithNotSupported() throws Exception { Utills.assertTransactionActive(false); } @Compensatable(CompensationTransactionType.NEVER) + @TxCompensate(DummyCompensationHandler1.class) + @TxConfirm(DummyConfirmationHandler1.class) + @TxLogged(DummyTransactionLoggedHandler1.class) public void invokeWithNever() throws Exception { Utills.assertTransactionActive(false);