This is an automated email from the ASF dual-hosted git repository. ningjiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git
commit 9487ac2274edf74d8553b61dd44dd2490cc55ed8 Author: imlijinting <[email protected]> AuthorDate: Sat Aug 25 11:42:10 2018 +0800 [SCB-865] Refactoring the Omega Interceptors 1.Remove the inheritance hierarchy between SagaStartAnnotationProcessor and EventAwareInterceptor. 2.Remove the NO_OP_INTERCEPTOR from the interface EventAwareInterceptor. Turning the NoOp Implementation into a class of static singleton pattern. --- .../omega/transaction/EventAwareInterceptor.java | 18 ++--------------- .../transaction/NoOpEventAwareInterceptor.java | 23 ++++++++++++++++++++++ .../transaction/SagaStartAnnotationProcessor.java | 23 +++++++++++----------- .../saga/omega/transaction/SagaStartAspect.java | 5 ++--- .../SagaStartAnnotationProcessorTest.java | 17 ++++++++-------- 5 files changed, 47 insertions(+), 39 deletions(-) diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/EventAwareInterceptor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/EventAwareInterceptor.java index 285d549..b542222 100644 --- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/EventAwareInterceptor.java +++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/EventAwareInterceptor.java @@ -18,23 +18,9 @@ package org.apache.servicecomb.saga.omega.transaction; public interface EventAwareInterceptor { - EventAwareInterceptor NO_OP_INTERCEPTOR = new EventAwareInterceptor() { - @Override - public AlphaResponse preIntercept(String parentTxId, String compensationMethod, int timeout, String retriesMethod, - int retries, Object... message) { - return new AlphaResponse(false); - } - @Override - public void postIntercept(String parentTxId, String compensationMethod) { - } - - @Override - public void onError(String parentTxId, String compensationMethod, Throwable throwable) { - } - }; - - AlphaResponse preIntercept(String parentTxId, String compensationMethod, int timeout, String retriesMethod, + AlphaResponse preIntercept(String parentTxId, String compensationMethod, int timeout, + String retriesMethod, int retries, Object... message); void postIntercept(String parentTxId, String compensationMethod); diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/NoOpEventAwareInterceptor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/NoOpEventAwareInterceptor.java new file mode 100644 index 0000000..46d6a30 --- /dev/null +++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/NoOpEventAwareInterceptor.java @@ -0,0 +1,23 @@ +package org.apache.servicecomb.saga.omega.transaction; + +public class NoOpEventAwareInterceptor implements EventAwareInterceptor { + + public static final NoOpEventAwareInterceptor INSTANCE = new NoOpEventAwareInterceptor(); + + @Override + public AlphaResponse preIntercept(String parentTxId, String compensationMethod, int timeout, + String retriesMethod, + int retries, Object... message) { + return new AlphaResponse(false); + } + + @Override + public void postIntercept(String parentTxId, String compensationMethod) { + // NoOp + } + + @Override + public void onError(String parentTxId, String compensationMethod, Throwable throwable) { + // NoOp + } +} diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessor.java index b264096..066db09 100644 --- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessor.java +++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessor.java @@ -18,10 +18,9 @@ package org.apache.servicecomb.saga.omega.transaction; import javax.transaction.TransactionalException; - import org.apache.servicecomb.saga.omega.context.OmegaContext; -class SagaStartAnnotationProcessor implements EventAwareInterceptor { +class SagaStartAnnotationProcessor { private final OmegaContext omegaContext; private final MessageSender sender; @@ -31,27 +30,27 @@ class SagaStartAnnotationProcessor implements EventAwareInterceptor { this.sender = sender; } - @Override - public AlphaResponse preIntercept(String parentTxId, String compensationMethod, int timeout, String retriesMethod, - int retries, Object... message) { + AlphaResponse preIntercept(int timeout) { try { - return sender.send(new SagaStartedEvent(omegaContext.globalTxId(), omegaContext.localTxId(), timeout)); + return sender + .send(new SagaStartedEvent(omegaContext.globalTxId(), omegaContext.localTxId(), timeout)); } catch (OmegaException e) { throw new TransactionalException(e.getMessage(), e.getCause()); } } - @Override - public void postIntercept(String parentTxId, String compensationMethod) { - AlphaResponse response = sender.send(new SagaEndedEvent(omegaContext.globalTxId(), omegaContext.localTxId())); + void postIntercept(String parentTxId) { + AlphaResponse response = sender + .send(new SagaEndedEvent(omegaContext.globalTxId(), omegaContext.localTxId())); if (response.aborted()) { throw new OmegaException("transaction " + parentTxId + " is aborted"); } } - @Override - public void onError(String parentTxId, String compensationMethod, Throwable throwable) { + void onError(String parentTxId, String compensationMethod, Throwable throwable) { String globalTxId = omegaContext.globalTxId(); - sender.send(new TxAbortedEvent(globalTxId, omegaContext.localTxId(), null, compensationMethod, throwable)); + sender.send( + new TxAbortedEvent(globalTxId, omegaContext.localTxId(), parentTxId, compensationMethod, + throwable)); } } diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAspect.java index e2cd717..5fb2fef 100644 --- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAspect.java +++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAspect.java @@ -19,7 +19,6 @@ package org.apache.servicecomb.saga.omega.transaction; import java.lang.invoke.MethodHandles; import java.lang.reflect.Method; - import org.apache.servicecomb.saga.omega.context.OmegaContext; import org.apache.servicecomb.saga.omega.context.annotations.SagaStart; import org.aspectj.lang.ProceedingJoinPoint; @@ -47,13 +46,13 @@ public class SagaStartAspect { initializeOmegaContext(); Method method = ((MethodSignature) joinPoint.getSignature()).getMethod(); - sagaStartAnnotationProcessor.preIntercept(context.globalTxId(), method.toString(), sagaStart.timeout(), "", 0); + sagaStartAnnotationProcessor.preIntercept(sagaStart.timeout()); LOG.debug("Initialized context {} before execution of method {}", context, method.toString()); try { Object result = joinPoint.proceed(); - sagaStartAnnotationProcessor.postIntercept(context.globalTxId(), method.toString()); + sagaStartAnnotationProcessor.postIntercept(context.globalTxId()); LOG.debug("Transaction with context {} has finished.", context); return result; diff --git a/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessorTest.java b/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessorTest.java index 39fcf5f..6d50e6f 100644 --- a/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessorTest.java +++ b/omega/omega-transaction/src/test/java/org/apache/servicecomb/saga/omega/transaction/SagaStartAnnotationProcessorTest.java @@ -29,9 +29,7 @@ import static org.mockito.Mockito.mock; import java.util.ArrayList; import java.util.List; import java.util.UUID; - import javax.transaction.TransactionalException; - import org.apache.servicecomb.saga.common.EventType; import org.apache.servicecomb.saga.omega.context.IdGenerator; import org.apache.servicecomb.saga.omega.context.OmegaContext; @@ -75,9 +73,11 @@ public class SagaStartAnnotationProcessorTest { @SuppressWarnings("unchecked") private final IdGenerator<String> generator = mock(IdGenerator.class); private final OmegaContext context = new OmegaContext(generator); - private final OmegaException exception = new OmegaException("exception", new RuntimeException("runtime exception")); + private final OmegaException exception = new OmegaException("exception", + new RuntimeException("runtime exception")); - private final SagaStartAnnotationProcessor sagaStartAnnotationProcessor = new SagaStartAnnotationProcessor(context, + private final SagaStartAnnotationProcessor sagaStartAnnotationProcessor = new SagaStartAnnotationProcessor( + context, sender); @Before @@ -88,7 +88,7 @@ public class SagaStartAnnotationProcessorTest { @Test public void sendsSagaStartedEvent() { - sagaStartAnnotationProcessor.preIntercept(null, null, 0, null, 0); + sagaStartAnnotationProcessor.preIntercept(0); TxEvent event = messages.get(0); @@ -102,7 +102,7 @@ public class SagaStartAnnotationProcessorTest { @Test public void sendsSagaEndedEvent() { - sagaStartAnnotationProcessor.postIntercept(null, null); + sagaStartAnnotationProcessor.postIntercept(null); TxEvent event = messages.get(0); @@ -117,12 +117,13 @@ public class SagaStartAnnotationProcessorTest { @Test public void transformInterceptedException() { MessageSender sender = mock(MessageSender.class); - SagaStartAnnotationProcessor sagaStartAnnotationProcessor = new SagaStartAnnotationProcessor(context, sender); + SagaStartAnnotationProcessor sagaStartAnnotationProcessor = new SagaStartAnnotationProcessor( + context, sender); doThrow(exception).when(sender).send(any(TxEvent.class)); try { - sagaStartAnnotationProcessor.preIntercept(null, null, 0, null, 0); + sagaStartAnnotationProcessor.preIntercept(0); expectFailing(TransactionalException.class); } catch (TransactionalException e) { assertThat(e.getMessage(), is("exception"));
