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/22 09:17:15 UTC

[incubator-servicecomb-saga] branch SCB-665 updated (7718071 -> 07af536)

This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a change to branch SCB-665
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git.


 discard 7718071  SCB-818 Omega supports of TCC (WIP)
 discard eae940b  SCB-817 Updated the TCC grpc contract file
 discard b70984a  SCB-817 Updated the grpc file of TccEventService
 discard 8c0a63c  SCB-817 Added the License headers
 discard 09cb574  SCB-817 Updated the pack-contracts protocal for TCC
 discard 35d946c  SCB-817 Added TCC events in Omega part (WIP)
 discard 95ad81f  SCB-817 Added TCC events in Omega part (WIP)
     add 11dff7b  Add the debugging method in spring-demo's document.
     add f375c61  Add the ref to debugging in other demos' documents.
     add 4c8b15f  Add the ref to debugging in root document's quick start section.
     new f8cd69c  SCB-817 Added TCC events in Omega part (WIP)
     new 780f324  SCB-817 Added TCC events in Omega part (WIP)
     new 258c2de  SCB-817 Updated the pack-contracts protocal for TCC
     new 8ce5019  SCB-817 Added the License headers
     new a460887  SCB-817 Updated the grpc file of TccEventService
     new d067ce7  SCB-817 Updated the TCC grpc contract file
     new 0cc9678  SCB-818 Omega supports of TCC (WIP)
     new 07af536  SCB-817 Updated the pack-contracts protocal for TCC

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (7718071)
            \
             N -- N -- N   refs/heads/SCB-665 (07af536)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 8 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 README.md                                           |  1 +
 README_ZH.md                                        |  1 +
 .../src/main/proto/GrpcTccEvent.proto               | 21 ++++++++++++++-------
 saga-demo/conditional-transaction-demo/README.md    |  3 +++
 .../dependency-free-transaction-demo/README.md      |  3 +++
 saga-demo/saga-dubbo-demo/README.md                 |  8 ++++++--
 saga-demo/saga-servicecomb-demo/README.md           |  5 ++++-
 saga-demo/saga-spring-demo/README.md                | 18 ++++++++++++++++++
 8 files changed, 50 insertions(+), 10 deletions(-)


[incubator-servicecomb-saga] 03/08: SCB-817 Updated the pack-contracts protocal for TCC

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch SCB-665
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git

commit 258c2de5189d002ff4ee6dc2be5ac4fd1bb3472b
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Thu Aug 16 10:52:19 2018 +0800

    SCB-817 Updated the pack-contracts protocal for TCC
---
 .../proto/{GrpcTxEvent.proto => GrpcCommon.proto}  | 33 +----------------
 .../{GrpcTxEvent.proto => GrpcTccEvent.proto}      | 43 ++++++++++++----------
 .../src/main/proto/GrpcTxEvent.proto               | 11 +-----
 3 files changed, 26 insertions(+), 61 deletions(-)

diff --git a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcCommon.proto
similarity index 58%
copy from pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto
copy to pack-contracts/pack-contract-grpc/src/main/proto/GrpcCommon.proto
index d2c6f77..40a8db7 100644
--- a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto
+++ b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcCommon.proto
@@ -19,15 +19,8 @@ syntax = "proto3";
 
 option java_multiple_files = true;
 option java_package = "org.apache.servicecomb.saga.pack.contract.grpc";
-option java_outer_classname = "TxEventProto";
 
-service TxEventService {
-  rpc OnConnected (GrpcServiceConfig) returns (stream GrpcCompensateCommand) {
-  }
-  rpc OnTxEvent (GrpcTxEvent) returns (GrpcAck) {}
-  rpc OnDisconnected (GrpcServiceConfig) returns (GrpcAck) {
-  }
-}
+// Define the common structs which could be use for TccEventService and SagaEventService
 
 message GrpcServiceConfig {
   string serviceName = 1;
@@ -37,27 +30,3 @@ message GrpcServiceConfig {
 message GrpcAck {
   bool aborted = 1;
 }
-
-message GrpcTxEvent {
-  int64 timestamp = 1;
-  string globalTxId = 2;
-  string localTxId = 3;
-  string parentTxId = 4;
-  string type = 5;
-  string compensationMethod = 6;
-  bytes payloads = 7;
-  string serviceName = 8;
-  string instanceId = 9;
-  int32 timeout = 10;
-  int32 retries = 11;
-  string retryMethod = 12;
-}
-
-message GrpcCompensateCommand {
-  string globalTxId = 1;
-  string localTxId = 2;
-  string parentTxId = 3;
-  string compensationMethod = 4;
-  bytes payloads = 5;
-}
-
diff --git a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
similarity index 60%
copy from pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto
copy to pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
index d2c6f77..1eba5e5 100644
--- a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto
+++ b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
@@ -19,45 +19,48 @@ syntax = "proto3";
 
 option java_multiple_files = true;
 option java_package = "org.apache.servicecomb.saga.pack.contract.grpc";
-option java_outer_classname = "TxEventProto";
+option java_outer_classname = "TccEventProto";
 
-service TxEventService {
-  rpc OnConnected (GrpcServiceConfig) returns (stream GrpcCompensateCommand) {
+import "GrpcCommon.proto";
+
+service TccEventService {
+  rpc participate(GrpcParticipateEvent) returns (GrpcAck) {}
+  rpc OnConnected (GrpcServiceConfig) returns (stream GrpcCordinateCommand) {
   }
-  rpc OnTxEvent (GrpcTxEvent) returns (GrpcAck) {}
+  rpc OnTransactionStarted (GrpcTransactionStartedEvent) returns (GrpcAck) {}
+  rpc OnTransactionEnded (GrpcTransactionEndedEvent) returns (GrpcAck) {}
   rpc OnDisconnected (GrpcServiceConfig) returns (GrpcAck) {
   }
 }
 
-message GrpcServiceConfig {
-  string serviceName = 1;
-  string instanceId = 2;
+message GrpcTransactionStartedEvent {
+  int64 timestamp = 1;
+  string globalTxId = 2;
+  string localTxId = 3;
+  string parentTxId = 4;
 }
 
-message GrpcAck {
-  bool aborted = 1;
+message GrpcParticipateEvent {
+  int64 timestamp = 1;
+  string globalTxId = 2;
+  string localTxId = 3;
+  string parentTxId = 4;
+  string confirmMethod = 6;
+  string cancelMethod = 7;
 }
 
-message GrpcTxEvent {
+message GrpcTransactionEndedEvent {
   int64 timestamp = 1;
   string globalTxId = 2;
   string localTxId = 3;
   string parentTxId = 4;
   string type = 5;
-  string compensationMethod = 6;
-  bytes payloads = 7;
-  string serviceName = 8;
-  string instanceId = 9;
-  int32 timeout = 10;
-  int32 retries = 11;
-  string retryMethod = 12;
 }
 
-message GrpcCompensateCommand {
+message GrpcCordinateCommand {
   string globalTxId = 1;
   string localTxId = 2;
   string parentTxId = 3;
-  string compensationMethod = 4;
-  bytes payloads = 5;
+  string type = 4;
 }
 
diff --git a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto
index d2c6f77..f037b4f 100644
--- a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto
+++ b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTxEvent.proto
@@ -21,6 +21,8 @@ option java_multiple_files = true;
 option java_package = "org.apache.servicecomb.saga.pack.contract.grpc";
 option java_outer_classname = "TxEventProto";
 
+import "GrpcCommon.proto";
+
 service TxEventService {
   rpc OnConnected (GrpcServiceConfig) returns (stream GrpcCompensateCommand) {
   }
@@ -29,15 +31,6 @@ service TxEventService {
   }
 }
 
-message GrpcServiceConfig {
-  string serviceName = 1;
-  string instanceId = 2;
-}
-
-message GrpcAck {
-  bool aborted = 1;
-}
-
 message GrpcTxEvent {
   int64 timestamp = 1;
   string globalTxId = 2;


[incubator-servicecomb-saga] 05/08: SCB-817 Updated the grpc file of TccEventService

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch SCB-665
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git

commit a46088784c43c5d3790bcb1fd886d476d00ad3c4
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Mon Aug 20 19:10:07 2018 +0800

    SCB-817 Updated the grpc file of TccEventService
---
 .../src/main/proto/GrpcTccEvent.proto                  | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
index 1eba5e5..9e1752f 100644
--- a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
+++ b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
@@ -24,23 +24,23 @@ option java_outer_classname = "TccEventProto";
 import "GrpcCommon.proto";
 
 service TccEventService {
-  rpc participate(GrpcParticipateEvent) returns (GrpcAck) {}
-  rpc OnConnected (GrpcServiceConfig) returns (stream GrpcCordinateCommand) {
+  rpc OnConnected (GrpcServiceConfig) returns (stream GrpcTccCordinateCommand) {
   }
-  rpc OnTransactionStarted (GrpcTransactionStartedEvent) returns (GrpcAck) {}
-  rpc OnTransactionEnded (GrpcTransactionEndedEvent) returns (GrpcAck) {}
+  rpc participate(GrpcTccParticipateEvent) returns (GrpcAck) {}
+  rpc OnTccTransactionStarted (GrpcTccTransactionStartedEvent) returns (GrpcAck) {}
+  rpc OnTccTransactionEnded (GrpcTccTransactionEndedEvent) returns (GrpcAck) {}
   rpc OnDisconnected (GrpcServiceConfig) returns (GrpcAck) {
   }
 }
 
-message GrpcTransactionStartedEvent {
+message GrpcTccTransactionStartedEvent {
   int64 timestamp = 1;
   string globalTxId = 2;
   string localTxId = 3;
   string parentTxId = 4;
 }
 
-message GrpcParticipateEvent {
+message GrpcTccParticipateEvent {
   int64 timestamp = 1;
   string globalTxId = 2;
   string localTxId = 3;
@@ -49,7 +49,7 @@ message GrpcParticipateEvent {
   string cancelMethod = 7;
 }
 
-message GrpcTransactionEndedEvent {
+message GrpcTccTransactionEndedEvent {
   int64 timestamp = 1;
   string globalTxId = 2;
   string localTxId = 3;
@@ -57,10 +57,10 @@ message GrpcTransactionEndedEvent {
   string type = 5;
 }
 
-message GrpcCordinateCommand {
+message GrpcTccCordinateCommand {
   string globalTxId = 1;
   string localTxId = 2;
   string parentTxId = 3;
-  string type = 4;
+  string method = 4;
 }
 


[incubator-servicecomb-saga] 08/08: SCB-817 Updated the pack-contracts protocal for TCC

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch SCB-665
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git

commit 07af5366b087f6012adf6f1713cbeecbdadc8393
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Wed Aug 22 16:52:24 2018 +0800

    SCB-817 Updated the pack-contracts protocal for TCC
---
 .../src/main/proto/GrpcTccEvent.proto               | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
index 14801b2..f482a93 100644
--- a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
+++ b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
@@ -26,7 +26,7 @@ import "GrpcCommon.proto";
 service TccEventService {
   rpc OnConnected (GrpcServiceConfig) returns (stream GrpcTccCordinateCommand) {
   }
-  rpc participate(GrpcTccParticipateEvent) returns (GrpcAck) {}
+  rpc participate(GrpcTccParticipatedEvent) returns (GrpcAck) {}
   rpc OnTccTransactionStarted (GrpcTccTransactionStartedEvent) returns (GrpcAck) {}
   rpc OnTccTransactionEnded (GrpcTccTransactionEndedEvent) returns (GrpcAck) {}
   rpc OnDisconnected (GrpcServiceConfig) returns (GrpcAck) {
@@ -38,16 +38,20 @@ message GrpcTccTransactionStartedEvent {
   string globalTxId = 2;
   string localTxId = 3;
   string parentTxId = 4;
+  string serviceName = 5;
+  string instanceId = 6;
 }
 
-message GrpcTccParticipateEvent {
+message GrpcTccParticipatedEvent {
   int64 timestamp = 1;
   string globalTxId = 2;
   string localTxId = 3;
   string parentTxId = 4;
-  string confirmMethod = 6;
-  string cancelMethod = 7;
-  string status = 8;
+  string serviceName = 5;
+  string instanceId = 6;
+  string confirmMethod = 7;
+  string cancelMethod = 8;
+  string status = 9;
 }
 
 message GrpcTccTransactionEndedEvent {
@@ -55,13 +59,16 @@ message GrpcTccTransactionEndedEvent {
   string globalTxId = 2;
   string localTxId = 3;
   string parentTxId = 4;
-  string status = 5;
+  string serviceName = 5;
+  string instanceId = 6;
+  string status = 7;
 }
 
 message GrpcTccCordinateCommand {
   string globalTxId = 1;
   string localTxId = 2;
   string parentTxId = 3;
-  string method = 4;
+  string serviceName = 4;
+  string method = 5;
 }
 


[incubator-servicecomb-saga] 01/08: SCB-817 Added TCC events in Omega part (WIP)

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch SCB-665
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git

commit f8cd69c9acd709426d320e61fb37f6a3c6a6c99b
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Sun Aug 12 11:16:22 2018 +0800

    SCB-817 Added TCC events in Omega part (WIP)
---
 .../saga/omega/context/annotations/TccStart.java   | 15 +++++
 .../saga/omega/transaction/annotations/TCC.java    | 64 ++++++++++++++++++++++
 .../saga/omega/transaction/tcc/TccAspect.java      | 48 ++++++++++++++++
 .../saga/omega/transaction/tcc/TccInterceptor.java |  4 ++
 .../tcc/TccStartAnnotationProcessor.java           | 47 ++++++++++++++++
 .../saga/omega/transaction/tcc/TccStartAspect.java | 60 ++++++++++++++++++++
 .../omega/transaction/tcc/events/CancelEvent.java  | 20 +++++++
 .../omega/transaction/tcc/events/ConfirmEvent.java | 20 +++++++
 .../transaction/tcc/events/ParticipateEvent.java   | 21 +++++++
 .../tcc/events/TransactionEndEvent.java            |  4 ++
 .../tcc/events/TransationStartEvent.java           |  4 ++
 11 files changed, 307 insertions(+)

diff --git a/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/TccStart.java b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/TccStart.java
new file mode 100644
index 0000000..c9154f9
--- /dev/null
+++ b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/TccStart.java
@@ -0,0 +1,15 @@
+package org.apache.servicecomb.saga.omega.context.annotations;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * Indicates the annotated method will start a TCC .
+ */
+@Retention(RUNTIME)
+@Target(METHOD)
+public @interface TccStart {
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/TCC.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/TCC.java
new file mode 100644
index 0000000..a095978
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/TCC.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicecomb.saga.omega.transaction.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD})
+/**
+ * Indicates the annotated method will start a sub-transaction. <br>
+ * A <code>@TCC</code> method should satisfy below requirements:
+ * <ol>
+ *   <li>all parameters are serialized</li>
+ *   <li>is idempotent</li>
+ *   <li>the object instance which @TCC method resides in should be stateless</li>
+ * </ol>
+ */
+public @interface TCC {
+  /**
+   * Confirm method name.<br>
+   * A confirm method should satisfy below requirements:
+   * <ol>
+   *   <li>has same parameter list as @TCC method's</li>
+   *   <li>all parameters are serialized</li>
+   *   <li>is idempotent</li>
+   *   <li>be in the same class as @TCC method is in</li>
+   * </ol>
+   *
+   * @return
+   */
+  String confirmMethod() default "";
+
+  /**
+   * Cancel method name.<br>
+   * A cancel method should satisfy below requirements:
+   * <ol>
+   *   <li>has same parameter list as @TCC method's</li>
+   *   <li>all parameters are serialized</li>
+   *   <li>is idempotent</li>
+   *   <li>be in the same class as @TCC method is in</li>
+   * </ol>
+   *
+   * @return
+   */
+  String cancelMethod() default "";
+
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccAspect.java
new file mode 100644
index 0000000..173cb78
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccAspect.java
@@ -0,0 +1,48 @@
+package org.apache.servicecomb.saga.omega.transaction.tcc;
+
+import java.lang.invoke.MethodHandles;
+import java.lang.reflect.Method;
+
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
+import org.apache.servicecomb.saga.omega.transaction.CompensableInterceptor;
+import org.apache.servicecomb.saga.omega.transaction.MessageSender;
+import org.apache.servicecomb.saga.omega.transaction.RecoveryPolicy;
+import org.apache.servicecomb.saga.omega.transaction.RecoveryPolicyFactory;
+import org.apache.servicecomb.saga.omega.transaction.annotations.Compensable;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Aspect
+public class TccAspect {
+  private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+  private final OmegaContext context;
+
+  private final CompensableInterceptor interceptor;
+
+  public TccAspect(MessageSender sender, OmegaContext context) {
+    this.context = context;
+    this.interceptor = new CompensableInterceptor(context, sender);
+  }
+
+  @Around("execution(@org.apache.servicecomb.saga.omega.transaction.annotations.Compensable * *(..)) && @annotation(compensable)")
+  Object advise(ProceedingJoinPoint joinPoint, Compensable compensable) throws Throwable {
+    Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
+    String localTxId = context.localTxId();
+    context.newLocalTxId();
+    LOG.debug("Updated context {} for compensable method {} ", context, method.toString());
+
+    int retries = compensable.retries();
+    RecoveryPolicy recoveryPolicy = RecoveryPolicyFactory.getRecoveryPolicy(retries);
+    try {
+      return recoveryPolicy.apply(joinPoint, compensable, interceptor, context, localTxId, retries);
+    } finally {
+      context.setLocalTxId(localTxId);
+      LOG.debug("Restored context back to {}", context);
+    }
+  }
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccInterceptor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccInterceptor.java
new file mode 100644
index 0000000..5ada269
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccInterceptor.java
@@ -0,0 +1,4 @@
+package org.apache.servicecomb.saga.omega.transaction.tcc;
+
+public class TccInterceptor {
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java
new file mode 100644
index 0000000..3e708cd
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java
@@ -0,0 +1,47 @@
+package org.apache.servicecomb.saga.omega.transaction.tcc;
+
+import javax.transaction.TransactionalException;
+
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
+import org.apache.servicecomb.saga.omega.transaction.AlphaResponse;
+import org.apache.servicecomb.saga.omega.transaction.EventAwareInterceptor;
+import org.apache.servicecomb.saga.omega.transaction.MessageSender;
+import org.apache.servicecomb.saga.omega.transaction.OmegaException;
+import org.apache.servicecomb.saga.omega.transaction.SagaEndedEvent;
+import org.apache.servicecomb.saga.omega.transaction.SagaStartedEvent;
+import org.apache.servicecomb.saga.omega.transaction.TxAbortedEvent;
+
+public class TccStartAnnotationProcessor implements EventAwareInterceptor {
+
+  private final OmegaContext omegaContext;
+  private final MessageSender sender;
+
+  TccStartAnnotationProcessor(OmegaContext omegaContext, MessageSender sender) {
+    this.omegaContext = omegaContext;
+    this.sender = sender;
+  }
+
+  @Override
+  public AlphaResponse preIntercept(String parentTxId, String compensationMethod, int timeout, String retriesMethod,
+      int retries, Object... message) {
+    try {
+      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()));
+    if (response.aborted()) {
+      throw new OmegaException("transaction " + parentTxId + " is aborted");
+    }
+  }
+
+  @Override
+  public void onError(String parentTxId, String compensationMethod, Throwable throwable) {
+    String globalTxId = omegaContext.globalTxId();
+    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/tcc/TccStartAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java
new file mode 100644
index 0000000..5b380db
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java
@@ -0,0 +1,60 @@
+package org.apache.servicecomb.saga.omega.transaction.tcc;
+
+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.apache.servicecomb.saga.omega.transaction.MessageSender;
+import org.apache.servicecomb.saga.omega.transaction.OmegaException;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Aspect
+public class TccStartAspect {
+  private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+  private final TccStartAnnotationProcessor tccStartAnnotationProcessor;
+
+  private final OmegaContext context;
+
+  public TccStartAspect(MessageSender sender, OmegaContext context) {
+    this.context = context;
+    this.tccStartAnnotationProcessor = new TccStartAnnotationProcessor(context, sender);
+  }
+
+  @Around("execution(@org.apache.servicecomb.saga.omega.context.annotations.TccStart * *(..)) && @annotation(sagaStart)")
+  Object advise(ProceedingJoinPoint joinPoint, SagaStart sagaStart) throws Throwable {
+    initializeOmegaContext();
+    Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
+
+    tccStartAnnotationProcessor.preIntercept(context.globalTxId(), method.toString(), sagaStart.timeout(), "", 0);
+    LOG.debug("Initialized context {} before execution of method {}", context, method.toString());
+
+    try {
+      Object result = joinPoint.proceed();
+
+      tccStartAnnotationProcessor.postIntercept(context.globalTxId(), method.toString());
+      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)) {
+        tccStartAnnotationProcessor.onError(context.globalTxId(), method.toString(), throwable);
+        LOG.error("Transaction {} failed.", context.globalTxId());
+      }
+      throw throwable;
+    } finally {
+      context.clear();
+    }
+  }
+
+  private void initializeOmegaContext() {
+    context.setLocalTxId(context.newGlobalTxId());
+  }
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/CancelEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/CancelEvent.java
new file mode 100644
index 0000000..7659812
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/CancelEvent.java
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicecomb.saga.omega.transaction.tcc.events;
+
+public class CancelEvent {
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ConfirmEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ConfirmEvent.java
new file mode 100644
index 0000000..f01675b
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ConfirmEvent.java
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicecomb.saga.omega.transaction.tcc.events;
+
+public class ConfirmEvent {
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipateEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipateEvent.java
new file mode 100644
index 0000000..83e910b
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipateEvent.java
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicecomb.saga.omega.transaction.tcc.events;
+
+
+public class ParticipateEvent {
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransactionEndEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransactionEndEvent.java
new file mode 100644
index 0000000..9613602
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransactionEndEvent.java
@@ -0,0 +1,4 @@
+package org.apache.servicecomb.saga.omega.transaction.tcc.events;
+
+public class TransactionEndEvent {
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransationStartEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransationStartEvent.java
new file mode 100644
index 0000000..54858c6
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransationStartEvent.java
@@ -0,0 +1,4 @@
+package org.apache.servicecomb.saga.omega.transaction.tcc.events;
+
+public class TransationStartEvent {
+}


[incubator-servicecomb-saga] 06/08: SCB-817 Updated the TCC grpc contract file

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch SCB-665
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git

commit d067ce707b643751dde09dc0530fb76235d2370b
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Tue Aug 21 09:59:02 2018 +0800

    SCB-817 Updated the TCC grpc contract file
---
 .../omega/transaction/tcc/TccEventService.java     |  4 ++++
 .../{TccStartEvent.java => ParticipatedEvent.java} | 22 +++++++++-------------
 .../{TccEndEvent.java => TccEndedEvent.java}       |  9 ++++++---
 .../{TccStartEvent.java => TccStartedEvent.java}   |  9 +++------
 .../servicecomb/saga/common/TransactionStatus.java |  6 ++++--
 .../src/main/proto/GrpcTccEvent.proto              |  3 ++-
 6 files changed, 28 insertions(+), 25 deletions(-)

diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccEventService.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccEventService.java
new file mode 100644
index 0000000..1649620
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccEventService.java
@@ -0,0 +1,4 @@
+package org.apache.servicecomb.saga.omega.transaction.tcc;
+
+public class TccService {
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipatedEvent.java
similarity index 77%
copy from omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java
copy to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipatedEvent.java
index 416c182..73ede9c 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipatedEvent.java
@@ -16,26 +16,22 @@
  */
 package org.apache.servicecomb.saga.omega.transaction.tcc.events;
 
-public class TccStartEvent {
+
+public class ParticipateEvent {
+  
   private final String globalTxId;
   private final String localTxId;
   private final String parentTxId;
+  private final String confirmMethod;
+  private final String cancelMethod;
 
-  public String getGlobalTxId() {
-    return globalTxId;
-  }
-
-  public String getLocalTxId() {
-    return localTxId;
-  }
-
-  public String getParentTxId() {
-    return parentTxId;
-  }
 
-  public TccStartEvent(String globalTxId, String localTxId, String parentTxId) {
+  public ParticipateEvent(String globalTxId, String localTxId, String parentTxId, String confirmMethod,
+      String cancelMethod) {
     this.globalTxId = globalTxId;
     this.localTxId = localTxId;
     this.parentTxId = parentTxId;
+    this.confirmMethod = confirmMethod;
+    this.cancelMethod = cancelMethod;
   }
 }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndedEvent.java
similarity index 82%
rename from omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndEvent.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndedEvent.java
index 541489f..9107ab0 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndEvent.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndedEvent.java
@@ -16,15 +16,18 @@
  */
 package org.apache.servicecomb.saga.omega.transaction.tcc.events;
 
+import org.apache.servicecomb.saga.common.TransactionStatus;
+
 public class TccEndEvent {
   private final String globalTxId;
   private final String localTxId;
-  private final String parentTxId;
+  private final TransactionStatus status;
    
 
-  public TccEndEvent(String globalTxId, String localTxId, String parentTxId) {
+  public TccEndEvent(String globalTxId, String localTxId,
+      TransactionStatus status) {
     this.globalTxId = globalTxId;
     this.localTxId = localTxId;
-    this.parentTxId = parentTxId;
+    this.status = status;
   }
 }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartedEvent.java
similarity index 84%
rename from omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartedEvent.java
index 416c182..64db3ea 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartedEvent.java
@@ -19,7 +19,7 @@ package org.apache.servicecomb.saga.omega.transaction.tcc.events;
 public class TccStartEvent {
   private final String globalTxId;
   private final String localTxId;
-  private final String parentTxId;
+
 
   public String getGlobalTxId() {
     return globalTxId;
@@ -29,13 +29,10 @@ public class TccStartEvent {
     return localTxId;
   }
 
-  public String getParentTxId() {
-    return parentTxId;
-  }
 
-  public TccStartEvent(String globalTxId, String localTxId, String parentTxId) {
+
+  public TccStartEvent(String globalTxId, String localTxId) {
     this.globalTxId = globalTxId;
     this.localTxId = localTxId;
-    this.parentTxId = parentTxId;
   }
 }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipateEvent.java b/pack-common/src/main/java/org/apache/servicecomb/saga/common/TransactionStatus.java
similarity index 89%
rename from omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipateEvent.java
rename to pack-common/src/main/java/org/apache/servicecomb/saga/common/TransactionStatus.java
index 83e910b..ea5a662 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipateEvent.java
+++ b/pack-common/src/main/java/org/apache/servicecomb/saga/common/TransactionStatus.java
@@ -14,8 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.servicecomb.saga.omega.transaction.tcc.events;
 
+package org.apache.servicecomb.saga.common;
 
-public class ParticipateEvent {
+public enum TransactionStatus {
+  Succeed,
+  Failed
 }
diff --git a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
index 9e1752f..14801b2 100644
--- a/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
+++ b/pack-contracts/pack-contract-grpc/src/main/proto/GrpcTccEvent.proto
@@ -47,6 +47,7 @@ message GrpcTccParticipateEvent {
   string parentTxId = 4;
   string confirmMethod = 6;
   string cancelMethod = 7;
+  string status = 8;
 }
 
 message GrpcTccTransactionEndedEvent {
@@ -54,7 +55,7 @@ message GrpcTccTransactionEndedEvent {
   string globalTxId = 2;
   string localTxId = 3;
   string parentTxId = 4;
-  string type = 5;
+  string status = 5;
 }
 
 message GrpcTccCordinateCommand {


[incubator-servicecomb-saga] 02/08: SCB-817 Added TCC events in Omega part (WIP)

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch SCB-665
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git

commit 780f324e7173181cfed6a764377a74735d502d63
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Thu Aug 16 10:44:06 2018 +0800

    SCB-817 Added TCC events in Omega part (WIP)
---
 .../saga/omega/context/annotations/TccStart.java   |  7 +++
 .../annotations/{TCC.java => Participate.java}     | 14 ++---
 .../saga/omega/transaction/tcc/TccAspect.java      | 48 ---------------
 .../saga/omega/transaction/tcc/TccInterceptor.java |  4 --
 .../transaction/tcc/TccParticipatorAspect.java     | 68 ++++++++++++++++++++++
 .../tcc/TccStartAnnotationProcessor.java           |  6 +-
 .../saga/omega/transaction/tcc/TccStartAspect.java |  7 ++-
 .../omega/transaction/tcc/events/CancelEvent.java  | 20 -------
 .../omega/transaction/tcc/events/ConfirmEvent.java | 20 -------
 .../omega/transaction/tcc/events/TccEndEvent.java  | 14 +++++
 .../transaction/tcc/events/TccStartEvent.java      | 25 ++++++++
 .../tcc/events/TransactionEndEvent.java            |  4 --
 .../tcc/events/TransationStartEvent.java           |  4 --
 13 files changed, 129 insertions(+), 112 deletions(-)

diff --git a/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/TccStart.java b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/TccStart.java
index c9154f9..6c8afd2 100644
--- a/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/TccStart.java
+++ b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/annotations/TccStart.java
@@ -12,4 +12,11 @@ import java.lang.annotation.Target;
 @Retention(RUNTIME)
 @Target(METHOD)
 public @interface TccStart {
+  /**
+   * TCC timeout, in seconds. <br>
+   * Default value is 0, which means never timeout.
+   *
+   * @return
+   */
+  int timeout() default 0;
 }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/TCC.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/Participate.java
similarity index 79%
rename from omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/TCC.java
rename to omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/Participate.java
index a095978..8351076 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/TCC.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/annotations/Participate.java
@@ -25,22 +25,22 @@ import java.lang.annotation.Target;
 @Target({ElementType.METHOD})
 /**
  * Indicates the annotated method will start a sub-transaction. <br>
- * A <code>@TCC</code> method should satisfy below requirements:
+ * A <code>@Participate</code> method should satisfy below requirements:
  * <ol>
  *   <li>all parameters are serialized</li>
  *   <li>is idempotent</li>
- *   <li>the object instance which @TCC method resides in should be stateless</li>
+ *   <li>the object instance which @Participate method resides in should be stateless</li>
  * </ol>
  */
-public @interface TCC {
+public @interface Participate {
   /**
    * Confirm method name.<br>
    * A confirm method should satisfy below requirements:
    * <ol>
-   *   <li>has same parameter list as @TCC method's</li>
+   *   <li>has same parameter list as @Participate method's</li>
    *   <li>all parameters are serialized</li>
    *   <li>is idempotent</li>
-   *   <li>be in the same class as @TCC method is in</li>
+   *   <li>be in the same class as @Participate method is in</li>
    * </ol>
    *
    * @return
@@ -51,10 +51,10 @@ public @interface TCC {
    * Cancel method name.<br>
    * A cancel method should satisfy below requirements:
    * <ol>
-   *   <li>has same parameter list as @TCC method's</li>
+   *   <li>has same parameter list as @Participate method's</li>
    *   <li>all parameters are serialized</li>
    *   <li>is idempotent</li>
-   *   <li>be in the same class as @TCC method is in</li>
+   *   <li>be in the same class as @Participate method is in</li>
    * </ol>
    *
    * @return
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccAspect.java
deleted file mode 100644
index 173cb78..0000000
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccAspect.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.apache.servicecomb.saga.omega.transaction.tcc;
-
-import java.lang.invoke.MethodHandles;
-import java.lang.reflect.Method;
-
-import org.apache.servicecomb.saga.omega.context.OmegaContext;
-import org.apache.servicecomb.saga.omega.transaction.CompensableInterceptor;
-import org.apache.servicecomb.saga.omega.transaction.MessageSender;
-import org.apache.servicecomb.saga.omega.transaction.RecoveryPolicy;
-import org.apache.servicecomb.saga.omega.transaction.RecoveryPolicyFactory;
-import org.apache.servicecomb.saga.omega.transaction.annotations.Compensable;
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.annotation.Around;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.reflect.MethodSignature;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Aspect
-public class TccAspect {
-  private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-
-  private final OmegaContext context;
-
-  private final CompensableInterceptor interceptor;
-
-  public TccAspect(MessageSender sender, OmegaContext context) {
-    this.context = context;
-    this.interceptor = new CompensableInterceptor(context, sender);
-  }
-
-  @Around("execution(@org.apache.servicecomb.saga.omega.transaction.annotations.Compensable * *(..)) && @annotation(compensable)")
-  Object advise(ProceedingJoinPoint joinPoint, Compensable compensable) throws Throwable {
-    Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
-    String localTxId = context.localTxId();
-    context.newLocalTxId();
-    LOG.debug("Updated context {} for compensable method {} ", context, method.toString());
-
-    int retries = compensable.retries();
-    RecoveryPolicy recoveryPolicy = RecoveryPolicyFactory.getRecoveryPolicy(retries);
-    try {
-      return recoveryPolicy.apply(joinPoint, compensable, interceptor, context, localTxId, retries);
-    } finally {
-      context.setLocalTxId(localTxId);
-      LOG.debug("Restored context back to {}", context);
-    }
-  }
-}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccInterceptor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccInterceptor.java
deleted file mode 100644
index 5ada269..0000000
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccInterceptor.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.apache.servicecomb.saga.omega.transaction.tcc;
-
-public class TccInterceptor {
-}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccParticipatorAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccParticipatorAspect.java
new file mode 100644
index 0000000..02adac2
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccParticipatorAspect.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.saga.omega.transaction.tcc;
+
+import java.lang.invoke.MethodHandles;
+import java.lang.reflect.Method;
+
+import org.apache.servicecomb.saga.omega.context.OmegaContext;
+import org.apache.servicecomb.saga.omega.transaction.MessageSender;
+import org.apache.servicecomb.saga.omega.transaction.OmegaException;
+import org.apache.servicecomb.saga.omega.transaction.RecoveryPolicy;
+import org.apache.servicecomb.saga.omega.transaction.RecoveryPolicyFactory;
+import org.apache.servicecomb.saga.omega.transaction.annotations.Compensable;
+import org.apache.servicecomb.saga.omega.transaction.annotations.Participate;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Aspect
+public class TccParticipatorAspect {
+  private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+  private final OmegaContext context;
+
+  public TccParticipatorAspect(MessageSender sender, OmegaContext context) {
+    this.context = context;
+  }
+
+  @Around("execution(@org.apache.servicecomb.saga.omega.transaction.annotations.Participate * *(..)) && @annotation(participate)")
+  Object advise(ProceedingJoinPoint joinPoint, Participate participate) throws Throwable {
+    Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
+    String localTxId = context.localTxId();
+    String cancelMethod = participate.cancelMethod();
+    
+    context.newLocalTxId();
+    LOG.debug("Updated context {} for participate method {} ", context, method.toString());
+
+    try {
+      Object result = joinPoint.proceed();
+      // Send the participate message back
+      LOG.debug("Participate Transaction with context {} has finished.", context);
+
+      return result;
+    } catch (Throwable throwable) {
+      // Now we don't handle the error message
+      LOG.error("Participate Transaction with context {} failed.", context, throwable);
+      throw throwable;
+    }
+  }
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java
index 3e708cd..b38d876 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java
@@ -33,14 +33,16 @@ public class TccStartAnnotationProcessor implements EventAwareInterceptor {
 
   @Override
   public void postIntercept(String parentTxId, String compensationMethod) {
-    AlphaResponse response = sender.send(new SagaEndedEvent(omegaContext.globalTxId(), omegaContext.localTxId()));
+    // Send the confirm event
+    /*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) {
+    // Send the cancel event
     String globalTxId = omegaContext.globalTxId();
     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/tcc/TccStartAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java
index 5b380db..c8b7936 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java
@@ -5,6 +5,7 @@ import java.lang.reflect.Method;
 
 import org.apache.servicecomb.saga.omega.context.OmegaContext;
 import org.apache.servicecomb.saga.omega.context.annotations.SagaStart;
+import org.apache.servicecomb.saga.omega.context.annotations.TccStart;
 import org.apache.servicecomb.saga.omega.transaction.MessageSender;
 import org.apache.servicecomb.saga.omega.transaction.OmegaException;
 import org.aspectj.lang.ProceedingJoinPoint;
@@ -27,12 +28,12 @@ public class TccStartAspect {
     this.tccStartAnnotationProcessor = new TccStartAnnotationProcessor(context, sender);
   }
 
-  @Around("execution(@org.apache.servicecomb.saga.omega.context.annotations.TccStart * *(..)) && @annotation(sagaStart)")
-  Object advise(ProceedingJoinPoint joinPoint, SagaStart sagaStart) throws Throwable {
+  @Around("execution(@org.apache.servicecomb.saga.omega.context.annotations.TccStart * *(..)) && @annotation(tccStart)")
+  Object advise(ProceedingJoinPoint joinPoint, TccStart tccStart) throws Throwable {
     initializeOmegaContext();
     Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
 
-    tccStartAnnotationProcessor.preIntercept(context.globalTxId(), method.toString(), sagaStart.timeout(), "", 0);
+    tccStartAnnotationProcessor.preIntercept(context.globalTxId(), method.toString(), tccStart.timeout(), "", 0);
     LOG.debug("Initialized context {} before execution of method {}", context, method.toString());
 
     try {
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/CancelEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/CancelEvent.java
deleted file mode 100644
index 7659812..0000000
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/CancelEvent.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.servicecomb.saga.omega.transaction.tcc.events;
-
-public class CancelEvent {
-}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ConfirmEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ConfirmEvent.java
deleted file mode 100644
index f01675b..0000000
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ConfirmEvent.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.servicecomb.saga.omega.transaction.tcc.events;
-
-public class ConfirmEvent {
-}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndEvent.java
new file mode 100644
index 0000000..1022aee
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndEvent.java
@@ -0,0 +1,14 @@
+package org.apache.servicecomb.saga.omega.transaction.tcc.events;
+
+public class TccEndEvent {
+  private final String globalTxId;
+  private final String localTxId;
+  private final String parentTxId;
+   
+
+  public TccEndEvent(String globalTxId, String localTxId, String parentTxId) {
+    this.globalTxId = globalTxId;
+    this.localTxId = localTxId;
+    this.parentTxId = parentTxId;
+  }
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java
new file mode 100644
index 0000000..c94dbca
--- /dev/null
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java
@@ -0,0 +1,25 @@
+package org.apache.servicecomb.saga.omega.transaction.tcc.events;
+
+public class TccStartEvent {
+  private final String globalTxId;
+  private final String localTxId;
+  private final String parentTxId;
+
+  public String getGlobalTxId() {
+    return globalTxId;
+  }
+
+  public String getLocalTxId() {
+    return localTxId;
+  }
+
+  public String getParentTxId() {
+    return parentTxId;
+  }
+
+  public TccStartEvent(String globalTxId, String localTxId, String parentTxId) {
+    this.globalTxId = globalTxId;
+    this.localTxId = localTxId;
+    this.parentTxId = parentTxId;
+  }
+}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransactionEndEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransactionEndEvent.java
deleted file mode 100644
index 9613602..0000000
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransactionEndEvent.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.apache.servicecomb.saga.omega.transaction.tcc.events;
-
-public class TransactionEndEvent {
-}
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransationStartEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransationStartEvent.java
deleted file mode 100644
index 54858c6..0000000
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TransationStartEvent.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.apache.servicecomb.saga.omega.transaction.tcc.events;
-
-public class TransationStartEvent {
-}


[incubator-servicecomb-saga] 04/08: SCB-817 Added the License headers

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch SCB-665
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git

commit 8ce5019a836ddd7b212e533cdc3d3ec44662e18b
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Mon Aug 20 19:06:20 2018 +0800

    SCB-817 Added the License headers
---
 .../transaction/tcc/TccStartAnnotationProcessor.java     | 16 ++++++++++++++++
 .../saga/omega/transaction/tcc/TccStartAspect.java       | 16 ++++++++++++++++
 .../saga/omega/transaction/tcc/events/TccEndEvent.java   | 16 ++++++++++++++++
 .../saga/omega/transaction/tcc/events/TccStartEvent.java | 16 ++++++++++++++++
 4 files changed, 64 insertions(+)

diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java
index b38d876..b93373f 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.servicecomb.saga.omega.transaction.tcc;
 
 import javax.transaction.TransactionalException;
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java
index c8b7936..90728e3 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.servicecomb.saga.omega.transaction.tcc;
 
 import java.lang.invoke.MethodHandles;
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndEvent.java
index 1022aee..541489f 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndEvent.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndEvent.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.servicecomb.saga.omega.transaction.tcc.events;
 
 public class TccEndEvent {
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java
index c94dbca..416c182 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartEvent.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.servicecomb.saga.omega.transaction.tcc.events;
 
 public class TccStartEvent {


[incubator-servicecomb-saga] 07/08: SCB-818 Omega supports of TCC (WIP)

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch SCB-665
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git

commit 0cc9678d4950062ed04bccef4eeea3b71d570564
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Tue Aug 21 10:25:13 2018 +0800

    SCB-818 Omega supports of TCC (WIP)
---
 .../omega/transaction/tcc/TccEventService.java     | 25 ++++++++++++++++++++-
 .../transaction/tcc/TccParticipatorAspect.java     | 14 ++++++++++--
 .../tcc/TccStartAnnotationProcessor.java           | 26 ++++++++++------------
 .../saga/omega/transaction/tcc/TccStartAspect.java |  4 ++--
 .../transaction/tcc/events/ParticipatedEvent.java  | 10 ++++++---
 .../transaction/tcc/events/TccEndedEvent.java      |  4 ++--
 .../transaction/tcc/events/TccStartedEvent.java    |  4 ++--
 7 files changed, 61 insertions(+), 26 deletions(-)

diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccEventService.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccEventService.java
index 1649620..ae011bc 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccEventService.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccEventService.java
@@ -1,4 +1,27 @@
 package org.apache.servicecomb.saga.omega.transaction.tcc;
 
-public class TccService {
+import org.apache.servicecomb.saga.omega.transaction.AlphaResponse;
+import org.apache.servicecomb.saga.omega.transaction.TxEvent;
+import org.apache.servicecomb.saga.omega.transaction.tcc.events.ParticipatedEvent;
+import org.apache.servicecomb.saga.omega.transaction.tcc.events.TccEndedEvent;
+import org.apache.servicecomb.saga.omega.transaction.tcc.events.TccStartedEvent;
+
+public interface TccEventService {
+
+  void onConnected();
+
+  void onDisconnected();
+
+  void close();
+
+  String target();
+
+  AlphaResponse participate(ParticipatedEvent participateEvent);
+
+  AlphaResponse TccTransactionStart(TccStartedEvent tccStartEvent);
+
+  AlphaResponse TccTransactionStop(TccEndedEvent tccEndEvent);
+
+  AlphaResponse send(TxEvent event);
+  
 }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccParticipatorAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccParticipatorAspect.java
index 02adac2..e64bc2a 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccParticipatorAspect.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccParticipatorAspect.java
@@ -20,6 +20,7 @@ package org.apache.servicecomb.saga.omega.transaction.tcc;
 import java.lang.invoke.MethodHandles;
 import java.lang.reflect.Method;
 
+import org.apache.servicecomb.saga.common.TransactionStatus;
 import org.apache.servicecomb.saga.omega.context.OmegaContext;
 import org.apache.servicecomb.saga.omega.transaction.MessageSender;
 import org.apache.servicecomb.saga.omega.transaction.OmegaException;
@@ -27,6 +28,7 @@ import org.apache.servicecomb.saga.omega.transaction.RecoveryPolicy;
 import org.apache.servicecomb.saga.omega.transaction.RecoveryPolicyFactory;
 import org.apache.servicecomb.saga.omega.transaction.annotations.Compensable;
 import org.apache.servicecomb.saga.omega.transaction.annotations.Participate;
+import org.apache.servicecomb.saga.omega.transaction.tcc.events.ParticipatedEvent;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
@@ -39,9 +41,11 @@ public class TccParticipatorAspect {
   private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
   private final OmegaContext context;
+  private final TccEventService tccEventService;
 
-  public TccParticipatorAspect(MessageSender sender, OmegaContext context) {
+  public TccParticipatorAspect(TccEventService tccEventService, OmegaContext context) {
     this.context = context;
+    this.tccEventService = tccEventService;
   }
 
   @Around("execution(@org.apache.servicecomb.saga.omega.transaction.annotations.Participate * *(..)) && @annotation(participate)")
@@ -49,6 +53,7 @@ public class TccParticipatorAspect {
     Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
     String localTxId = context.localTxId();
     String cancelMethod = participate.cancelMethod();
+    String confirmMethod = participate.confirmMethod();
     
     context.newLocalTxId();
     LOG.debug("Updated context {} for participate method {} ", context, method.toString());
@@ -56,13 +61,18 @@ public class TccParticipatorAspect {
     try {
       Object result = joinPoint.proceed();
       // Send the participate message back
+      tccEventService.participate(new ParticipatedEvent(context.globalTxId(), context.localTxId(), localTxId, cancelMethod, confirmMethod,
+          TransactionStatus.Succeed));
       LOG.debug("Participate Transaction with context {} has finished.", context);
-
       return result;
     } catch (Throwable throwable) {
       // Now we don't handle the error message
+      tccEventService.participate(new ParticipatedEvent(context.globalTxId(), context.localTxId(), localTxId, cancelMethod,
+          confirmMethod, TransactionStatus.Failed));
       LOG.error("Participate Transaction with context {} failed.", context, throwable);
       throw throwable;
+    } finally {
+      context.setLocalTxId(localTxId);
     }
   }
 }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java
index b93373f..26621d1 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAnnotationProcessor.java
@@ -18,30 +18,30 @@ package org.apache.servicecomb.saga.omega.transaction.tcc;
 
 import javax.transaction.TransactionalException;
 
+import org.apache.servicecomb.saga.common.TransactionStatus;
 import org.apache.servicecomb.saga.omega.context.OmegaContext;
 import org.apache.servicecomb.saga.omega.transaction.AlphaResponse;
 import org.apache.servicecomb.saga.omega.transaction.EventAwareInterceptor;
-import org.apache.servicecomb.saga.omega.transaction.MessageSender;
 import org.apache.servicecomb.saga.omega.transaction.OmegaException;
-import org.apache.servicecomb.saga.omega.transaction.SagaEndedEvent;
-import org.apache.servicecomb.saga.omega.transaction.SagaStartedEvent;
 import org.apache.servicecomb.saga.omega.transaction.TxAbortedEvent;
+import org.apache.servicecomb.saga.omega.transaction.tcc.events.TccEndedEvent;
+import org.apache.servicecomb.saga.omega.transaction.tcc.events.TccStartedEvent;
 
 public class TccStartAnnotationProcessor implements EventAwareInterceptor {
 
   private final OmegaContext omegaContext;
-  private final MessageSender sender;
+  private final TccEventService eventService;
 
-  TccStartAnnotationProcessor(OmegaContext omegaContext, MessageSender sender) {
+  TccStartAnnotationProcessor(OmegaContext omegaContext, TccEventService eventService) {
     this.omegaContext = omegaContext;
-    this.sender = sender;
+    this.eventService = eventService;
   }
 
   @Override
   public AlphaResponse preIntercept(String parentTxId, String compensationMethod, int timeout, String retriesMethod,
       int retries, Object... message) {
     try {
-      return sender.send(new SagaStartedEvent(omegaContext.globalTxId(), omegaContext.localTxId(), timeout));
+      return eventService.TccTransactionStart(new TccStartedEvent(omegaContext.globalTxId(), omegaContext.localTxId()));
     } catch (OmegaException e) {
       throw new TransactionalException(e.getMessage(), e.getCause());
     }
@@ -49,17 +49,15 @@ public class TccStartAnnotationProcessor implements EventAwareInterceptor {
 
   @Override
   public void postIntercept(String parentTxId, String compensationMethod) {
-    // Send the confirm event
-    /*AlphaResponse response = sender.send(new SagaEndedEvent(omegaContext.globalTxId(), omegaContext.localTxId()));
-    if (response.aborted()) {
-      throw new OmegaException("transaction " + parentTxId + " is aborted");
-    }*/
+    eventService.TccTransactionStop(new TccEndedEvent(omegaContext.globalTxId(), omegaContext.localTxId(),
+        TransactionStatus.Succeed));
   }
 
   @Override
   public void onError(String parentTxId, String compensationMethod, Throwable throwable) {
     // Send the cancel event
-    String globalTxId = omegaContext.globalTxId();
-    sender.send(new TxAbortedEvent(globalTxId, omegaContext.localTxId(), null, compensationMethod, throwable));
+    // Do we need to wait for the alpha finish all the transaction
+    eventService.TccTransactionStop(new TccEndedEvent(omegaContext.globalTxId(), omegaContext.localTxId(),
+        TransactionStatus.Failed));
   }
 }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java
index 90728e3..f6d1d77 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/TccStartAspect.java
@@ -39,9 +39,9 @@ public class TccStartAspect {
 
   private final OmegaContext context;
 
-  public TccStartAspect(MessageSender sender, OmegaContext context) {
+  public TccStartAspect(TccEventService tccEventServicer, OmegaContext context) {
     this.context = context;
-    this.tccStartAnnotationProcessor = new TccStartAnnotationProcessor(context, sender);
+    this.tccStartAnnotationProcessor = new TccStartAnnotationProcessor(context, tccEventServicer);
   }
 
   @Around("execution(@org.apache.servicecomb.saga.omega.context.annotations.TccStart * *(..)) && @annotation(tccStart)")
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipatedEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipatedEvent.java
index 73ede9c..3372f8e 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipatedEvent.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/ParticipatedEvent.java
@@ -17,21 +17,25 @@
 package org.apache.servicecomb.saga.omega.transaction.tcc.events;
 
 
-public class ParticipateEvent {
+import org.apache.servicecomb.saga.common.TransactionStatus;
+
+public class ParticipatedEvent {
   
   private final String globalTxId;
   private final String localTxId;
   private final String parentTxId;
   private final String confirmMethod;
   private final String cancelMethod;
+  private final TransactionStatus status;
 
 
-  public ParticipateEvent(String globalTxId, String localTxId, String parentTxId, String confirmMethod,
-      String cancelMethod) {
+  public ParticipatedEvent(String globalTxId, String localTxId, String parentTxId, String confirmMethod,
+      String cancelMethod, TransactionStatus status) {
     this.globalTxId = globalTxId;
     this.localTxId = localTxId;
     this.parentTxId = parentTxId;
     this.confirmMethod = confirmMethod;
     this.cancelMethod = cancelMethod;
+    this.status = status;
   }
 }
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndedEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndedEvent.java
index 9107ab0..7c666b2 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndedEvent.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccEndedEvent.java
@@ -18,13 +18,13 @@ package org.apache.servicecomb.saga.omega.transaction.tcc.events;
 
 import org.apache.servicecomb.saga.common.TransactionStatus;
 
-public class TccEndEvent {
+public class TccEndedEvent {
   private final String globalTxId;
   private final String localTxId;
   private final TransactionStatus status;
    
 
-  public TccEndEvent(String globalTxId, String localTxId,
+  public TccEndedEvent(String globalTxId, String localTxId,
       TransactionStatus status) {
     this.globalTxId = globalTxId;
     this.localTxId = localTxId;
diff --git a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartedEvent.java b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartedEvent.java
index 64db3ea..edd0333 100644
--- a/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartedEvent.java
+++ b/omega/omega-transaction/src/main/java/org/apache/servicecomb/saga/omega/transaction/tcc/events/TccStartedEvent.java
@@ -16,7 +16,7 @@
  */
 package org.apache.servicecomb.saga.omega.transaction.tcc.events;
 
-public class TccStartEvent {
+public class TccStartedEvent {
   private final String globalTxId;
   private final String localTxId;
 
@@ -31,7 +31,7 @@ public class TccStartEvent {
 
 
 
-  public TccStartEvent(String globalTxId, String localTxId) {
+  public TccStartedEvent(String globalTxId, String localTxId) {
     this.globalTxId = globalTxId;
     this.localTxId = localTxId;
   }