You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2018/08/27 01:03:11 UTC

[incubator-servicecomb-saga] 01/02: [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.

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 <im...@outlook.com>
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"));