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/10 03:43:12 UTC
[incubator-servicecomb-saga] 01/02: SCB-785 Support to get the
globalTxId and localTxId when the componsation method is called.
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 279fd30f9027f52814780e946d99ed031103ace7
Author: jeremy-xu <je...@gmail.com>
AuthorDate: Sun Jul 29 23:03:51 2018 +0800
SCB-785 Support to get the globalTxId and localTxId when the
componsation method is called.
1. 补偿方法里通过omegaContext.globalTxId()和omegaContext.localTxId()可得到当前分布式事务的全局事务ID及本地事务ID
---
omega/omega-connector/omega-connector-grpc/pom.xml | 5 +++++
.../servicecomb/saga/omega/context/CompensationContext.java | 12 ++++++++++++
.../servicecomb/saga/omega/spring/OmegaSpringConfig.java | 4 ++--
.../transaction/spring/TransactionInterceptionTest.java | 4 ++--
4 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/omega/omega-connector/omega-connector-grpc/pom.xml b/omega/omega-connector/omega-connector-grpc/pom.xml
index 7a14097..9569514 100644
--- a/omega/omega-connector/omega-connector-grpc/pom.xml
+++ b/omega/omega-connector/omega-connector-grpc/pom.xml
@@ -39,6 +39,11 @@
</dependency>
<dependency>
<groupId>io.grpc</groupId>
+ <artifactId>grpc-stub</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>io.grpc</groupId>
<artifactId>grpc-netty</artifactId>
</dependency>
<dependency>
diff --git a/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/CompensationContext.java b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/CompensationContext.java
index cf16888..0823240 100644
--- a/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/CompensationContext.java
+++ b/omega/omega-context/src/main/java/org/apache/servicecomb/saga/omega/context/CompensationContext.java
@@ -30,6 +30,11 @@ public class CompensationContext {
private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private final Map<String, CompensationContextInternal> contexts = new ConcurrentHashMap<>();
+ private final OmegaContext omegaContext;
+
+ public CompensationContext(OmegaContext omegaContext) {
+ this.omegaContext = omegaContext;
+ }
public void addCompensationContext(Method compensationMethod, Object target) {
compensationMethod.setAccessible(true);
@@ -39,7 +44,11 @@ public class CompensationContext {
public void apply(String globalTxId, String localTxId, String compensationMethod, Object... payloads) {
CompensationContextInternal contextInternal = contexts.get(compensationMethod);
+ String oldGlobalTxId = omegaContext.globalTxId();
+ String oldLocalTxId= omegaContext.localTxId();
try {
+ omegaContext.setGlobalTxId(globalTxId);
+ omegaContext.setLocalTxId(localTxId);
contextInternal.compensationMethod.invoke(contextInternal.target, payloads);
LOG.info("Compensated transaction with global tx id [{}], local tx id [{}]", globalTxId, localTxId);
} catch (IllegalAccessException | InvocationTargetException e) {
@@ -47,6 +56,9 @@ public class CompensationContext {
"Pre-checking for compensation method " + contextInternal.compensationMethod.toString()
+ " was somehow skipped, did you forget to configure compensable method checking on service startup?",
e);
+ } finally {
+ omegaContext.setGlobalTxId(oldGlobalTxId);
+ omegaContext.setLocalTxId(oldLocalTxId);
}
}
diff --git a/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/saga/omega/spring/OmegaSpringConfig.java b/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/saga/omega/spring/OmegaSpringConfig.java
index afa6443..51324e7 100644
--- a/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/saga/omega/spring/OmegaSpringConfig.java
+++ b/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/saga/omega/spring/OmegaSpringConfig.java
@@ -52,8 +52,8 @@ class OmegaSpringConfig {
}
@Bean
- CompensationContext compensationContext() {
- return new CompensationContext();
+ CompensationContext compensationContext(OmegaContext omegaContext) {
+ return new CompensationContext(omegaContext);
}
@Bean
diff --git a/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java
index 75d5864..5f3f708 100644
--- a/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java
+++ b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java
@@ -408,8 +408,8 @@ public class TransactionInterceptionTest {
private final List<String> messages = new ArrayList<>();
@Bean
- CompensationContext recoveryContext() {
- return new CompensationContext();
+ CompensationContext recoveryContext(OmegaContext omegaContext) {
+ return new CompensationContext(omegaContext);
}
@Bean