[
https://issues.apache.org/jira/browse/SCB-865?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16593090#comment-16593090
]
ASF GitHub Bot commented on SCB-865:
------------------------------------
WillemJiang closed pull request #272: [SCB-865] Refactoring the Omega
Interceptors
URL: https://github.com/apache/incubator-servicecomb-saga/pull/272
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
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 285d5498..b542222c 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 00000000..46d6a30d
--- /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 b264096d..b0b2de4b 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 @@
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 compensationMethod, Throwable throwable) {
String globalTxId = omegaContext.globalTxId();
- sender.send(new TxAbortedEvent(globalTxId, omegaContext.localTxId(), null,
compensationMethod, throwable));
+ sender.send(
+ new TxAbortedEvent(globalTxId, omegaContext.localTxId(), null,
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 e2cd7170..0dc3279e 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 @@
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,20 +46,20 @@ Object advise(ProceedingJoinPoint joinPoint, SagaStart
sagaStart) throws Throwab
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;
} catch (Throwable throwable) {
// We don't need to handle the OmegaException here
if (!(throwable instanceof OmegaException)) {
- sagaStartAnnotationProcessor.onError(context.globalTxId(),
method.toString(), throwable);
+ sagaStartAnnotationProcessor.onError(method.toString(), throwable);
LOG.error("Transaction {} failed.", context.globalTxId());
}
throw throwable;
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 39fcf5f9..6d50e6f8 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 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 AlphaResponse send(TxEvent event) {
@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 void setUp() throws Exception {
@Test
public void sendsSagaStartedEvent() {
- sagaStartAnnotationProcessor.preIntercept(null, null, 0, null, 0);
+ sagaStartAnnotationProcessor.preIntercept(0);
TxEvent event = messages.get(0);
@@ -102,7 +102,7 @@ public void sendsSagaStartedEvent() {
@Test
public void sendsSagaEndedEvent() {
- sagaStartAnnotationProcessor.postIntercept(null, null);
+ sagaStartAnnotationProcessor.postIntercept(null);
TxEvent event = messages.get(0);
@@ -117,12 +117,13 @@ public void sendsSagaEndedEvent() {
@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"));
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
> Refactoring the Omega Interceptors
> ----------------------------------
>
> Key: SCB-865
> URL: https://issues.apache.org/jira/browse/SCB-865
> Project: Apache ServiceComb
> Issue Type: Improvement
> Components: Saga
> Reporter: Willem Jiang
> Priority: Major
>
> Current Omega transaction has two saga interceptors, one is for SagaStart,
> the other is for Compensable. As these two interceptor has different context
> to deal with, they are not supposed to share the same interface.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)