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 2017/12/27 04:55:14 UTC

[incubator-servicecomb-saga] 07/11: SCB-97 glued request interception with transaction aop

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 eb79f26d9534ad9228cfd8979dc3cce30ec8d854
Author: seanyinx <se...@huawei.com>
AuthorDate: Tue Dec 26 18:37:52 2017 +0800

    SCB-97 glued request interception with transaction aop
    
    Signed-off-by: seanyinx <se...@huawei.com>
---
 integration-tests/pack-tests/pom.xml                 | 10 +++++++---
 .../integration/pack/tests/GreetingController.java   | 12 +-----------
 .../saga/integration/pack/tests/PackIT.java          | 18 ++++++++++++++++--
 .../servicecomb/saga/omega/context/OmegaContext.java | 20 ++++++++++++++++++++
 .../saga/omega/context}/UniqueIdGenerator.java       |  5 +----
 .../saga/omega/context/OmegaContextTest.java         |  2 +-
 omega/omega-spring-starter/pom.xml                   |  4 ----
 .../saga/omega/spring/OmegaSpringConfig.java         | 13 +++++++++++++
 .../transaction/spring/TransactionAspectConfig.java  |  4 ----
 .../spring/TransactionInterceptionTest.java          |  6 ++++++
 .../transport/resttemplate/RestTemplateConfig.java   | 10 ++--------
 .../TransactionClientHttpRequestInterceptor.java     | 19 +++++++------------
 .../resttemplate/TransactionHandlerInterceptor.java  | 18 +++++++-----------
 .../src/main/resources/META-INF/spring.factories     | 19 +++++++++++++++++++
 .../TransactionClientHttpRequestInterceptorTest.java | 10 +++++-----
 .../TransactionHandlerInterceptorTest.java           |  8 +++++---
 .../resttemplate/UniqueIdGeneratorTest.java          |  2 ++
 17 files changed, 112 insertions(+), 68 deletions(-)

diff --git a/integration-tests/pack-tests/pom.xml b/integration-tests/pack-tests/pom.xml
index bc7717c..41a40d8 100644
--- a/integration-tests/pack-tests/pom.xml
+++ b/integration-tests/pack-tests/pom.xml
@@ -46,6 +46,10 @@
       <artifactId>omega-spring-starter</artifactId>
     </dependency>
     <dependency>
+      <groupId>io.servicecomb.saga</groupId>
+      <artifactId>omega-transport-resttemplate</artifactId>
+    </dependency>
+    <dependency>
       <groupId>commons-logging</groupId>
       <artifactId>commons-logging</artifactId>
       <version>1.2</version>
@@ -193,9 +197,9 @@
             <version>${maven.failsafe.version}</version>
             <configuration>
               <systemPropertyVariables>
-                <saga.address>
-                  http://${docker.hostname}:${alpha.port}
-                </saga.address>
+                <alpha.cluster.address>
+                  ${docker.hostname}:${alpha.port}
+                </alpha.cluster.address>
               </systemPropertyVariables>
               <argLine>${jacoco.failsafe.argLine}</argLine>
             </configuration>
diff --git a/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/GreetingController.java b/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/GreetingController.java
index 11aa0e8..1a6d489 100644
--- a/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/GreetingController.java
+++ b/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/GreetingController.java
@@ -17,8 +17,6 @@
 
 package io.servicecomb.saga.integration.pack.tests;
 
-import java.util.UUID;
-
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
@@ -26,27 +24,19 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 
-import io.servicecomb.saga.omega.context.OmegaContext;
-
 @Controller
 @RequestMapping("/")
 public class GreetingController {
   private final GreetingService greetingService;
-  private final OmegaContext context;
 
   @Autowired
-  public GreetingController(GreetingService greetingService, OmegaContext context) {
+  public GreetingController(GreetingService greetingService) {
     this.greetingService = greetingService;
-    this.context = context;
   }
 
 
   @GetMapping("/greet")
   ResponseEntity<String> greet(@RequestParam String name) {
-    // TODO: 2017/12/26 to be removed when tx id retrieval is done
-    context.setGlobalTxId(UUID.randomUUID().toString());
-    context.setLocalTxId(UUID.randomUUID().toString());
-
     return ResponseEntity.ok(greetingService.greet(name));
   }
 }
diff --git a/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/PackIT.java b/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/PackIT.java
index ad6bed1..3c1d0eb 100644
--- a/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/PackIT.java
+++ b/integration-tests/pack-tests/src/test/java/io/servicecomb/saga/integration/pack/tests/PackIT.java
@@ -17,23 +17,29 @@
 
 package io.servicecomb.saga.integration.pack.tests;
 
+import static io.servicecomb.saga.omega.context.OmegaContext.GLOBAL_TX_ID_KEY;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
+import static org.springframework.http.HttpMethod.GET;
 import static org.springframework.http.HttpStatus.OK;
 
+import java.util.UUID;
+
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
 import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
 import org.springframework.http.ResponseEntity;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import io.servicecomb.saga.omega.context.OmegaContext;
 
 @RunWith(SpringRunner.class)
-@SpringBootTest(classes = GreetingApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT, properties = {"alpha.cluster.address=localhost:32782"})
+@SpringBootTest(classes = GreetingApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT)
 public class PackIT {
   @Autowired
   private TestRestTemplate restTemplate;
@@ -44,7 +50,15 @@ public class PackIT {
 
   @Test
   public void updatesTxStateToAlpha() throws Exception {
-    ResponseEntity<String> entity = restTemplate.getForEntity("/greet?name={name}", String.class, "mike");
+    HttpHeaders headers = new HttpHeaders();
+
+    headers.set(GLOBAL_TX_ID_KEY, UUID.randomUUID().toString());
+
+    ResponseEntity<String> entity = restTemplate.exchange("/greet?name={name}",
+        GET,
+        new HttpEntity<>(headers),
+        String.class,
+        "mike");
 
     assertThat(entity.getStatusCode(), is(OK));
     assertThat(entity.getBody(), is("Greetings, mike"));
diff --git a/omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/OmegaContext.java b/omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/OmegaContext.java
index 17c6246..d8cca65 100644
--- a/omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/OmegaContext.java
+++ b/omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/OmegaContext.java
@@ -23,10 +23,24 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 public class OmegaContext {
+  public static final String GLOBAL_TX_ID_KEY = "X-Pack-Global-Transaction-Id";
+  public static final String LOCAL_TX_ID_KEY = "X-Pack-Local-Transaction-Id";
+
   private final ThreadLocal<String> globalTxId = new ThreadLocal<>();
   private final ThreadLocal<String> localTxId = new ThreadLocal<>();
   private final ThreadLocal<String> parentTxId = new ThreadLocal<>();
   private final Map<String, CompensationContext> compensationContexts = new ConcurrentHashMap<>();
+  private final IdGenerator<String> idGenerator;
+
+  public OmegaContext(IdGenerator<String> idGenerator) {
+    this.idGenerator = idGenerator;
+  }
+
+  public String newGlobalTxId() {
+    String id = idGenerator.nextId();
+    globalTxId.set(id);
+    return id;
+  }
 
   public void setGlobalTxId(String txId) {
     globalTxId.set(txId);
@@ -36,6 +50,12 @@ public class OmegaContext {
     return globalTxId.get();
   }
 
+  public String newLocalTxId() {
+    String id = idGenerator.nextId();
+    localTxId.set(id);
+    return id;
+  }
+
   public void setLocalTxId(String localTxId) {
     this.localTxId.set(localTxId);
   }
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/UniqueIdGenerator.java b/omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/UniqueIdGenerator.java
similarity index 89%
rename from omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/UniqueIdGenerator.java
rename to omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/UniqueIdGenerator.java
index 8cb3eb1..300b522 100644
--- a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/UniqueIdGenerator.java
+++ b/omega/omega-context/src/main/java/io/servicecomb/saga/omega/context/UniqueIdGenerator.java
@@ -13,15 +13,12 @@
  * 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 io.servicecomb.saga.omega.transport.resttemplate;
+package io.servicecomb.saga.omega.context;
 
 import java.util.UUID;
 
-import io.servicecomb.saga.omega.context.IdGenerator;
-
 public class UniqueIdGenerator implements IdGenerator<String> {
   @Override
   public String nextId() {
diff --git a/omega/omega-context/src/test/java/io/servicecomb/saga/omega/context/OmegaContextTest.java b/omega/omega-context/src/test/java/io/servicecomb/saga/omega/context/OmegaContextTest.java
index e890c18..752f0b8 100644
--- a/omega/omega-context/src/test/java/io/servicecomb/saga/omega/context/OmegaContextTest.java
+++ b/omega/omega-context/src/test/java/io/servicecomb/saga/omega/context/OmegaContextTest.java
@@ -29,7 +29,7 @@ import org.junit.Test;
 
 public class OmegaContextTest {
 
-  private final OmegaContext omegaContext = new OmegaContext();
+  private final OmegaContext omegaContext = new OmegaContext(() -> "ignored");
 
   @Test
   public void eachThreadGetsDifferentGlobalTxId() throws Exception {
diff --git a/omega/omega-spring-starter/pom.xml b/omega/omega-spring-starter/pom.xml
index b900a47..59b81f8 100644
--- a/omega/omega-spring-starter/pom.xml
+++ b/omega/omega-spring-starter/pom.xml
@@ -31,10 +31,6 @@
   <dependencies>
     <dependency>
       <groupId>io.servicecomb.saga</groupId>
-      <artifactId>omega-transport-resttemplate</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>io.servicecomb.saga</groupId>
       <artifactId>omega-spring-tx</artifactId>
     </dependency>
     <dependency>
diff --git a/omega/omega-spring-starter/src/main/java/io/servicecomb/saga/omega/spring/OmegaSpringConfig.java b/omega/omega-spring-starter/src/main/java/io/servicecomb/saga/omega/spring/OmegaSpringConfig.java
index ae92123..33a0cbc 100644
--- a/omega/omega-spring-starter/src/main/java/io/servicecomb/saga/omega/spring/OmegaSpringConfig.java
+++ b/omega/omega-spring-starter/src/main/java/io/servicecomb/saga/omega/spring/OmegaSpringConfig.java
@@ -27,6 +27,9 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
 import io.servicecomb.saga.omega.connector.thrift.ThriftMessageSender;
+import io.servicecomb.saga.omega.context.IdGenerator;
+import io.servicecomb.saga.omega.context.OmegaContext;
+import io.servicecomb.saga.omega.context.UniqueIdGenerator;
 import io.servicecomb.saga.omega.format.NativeMessageFormat;
 import io.servicecomb.saga.omega.transaction.MessageSender;
 
@@ -35,6 +38,16 @@ class OmegaSpringConfig {
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
   @Bean
+  IdGenerator<String> idGenerator() {
+    return new UniqueIdGenerator();
+  }
+
+  @Bean
+  OmegaContext omegaContext(IdGenerator<String> idGenerator) {
+    return new OmegaContext(idGenerator);
+  }
+
+  @Bean
   MessageSender messageSender(@Value("${alpha.cluster.address}") String[] addresses) {
     // TODO: 2017/12/26 connect to the one with lowest latency
     for (String address : addresses) {
diff --git a/omega/omega-spring-tx/src/main/java/io/servicecomb/saga/omega/transaction/spring/TransactionAspectConfig.java b/omega/omega-spring-tx/src/main/java/io/servicecomb/saga/omega/transaction/spring/TransactionAspectConfig.java
index 59f7d2e..358ef26 100644
--- a/omega/omega-spring-tx/src/main/java/io/servicecomb/saga/omega/transaction/spring/TransactionAspectConfig.java
+++ b/omega/omega-spring-tx/src/main/java/io/servicecomb/saga/omega/transaction/spring/TransactionAspectConfig.java
@@ -28,10 +28,6 @@ import io.servicecomb.saga.omega.transaction.TransactionAspect;
 @Configuration
 @EnableAspectJAutoProxy
 public class TransactionAspectConfig {
-  @Bean
-  OmegaContext omegaContext() {
-    return new OmegaContext();
-  }
 
   @Bean
   TransactionAspect transactionAspect(MessageSender sender, OmegaContext context) {
diff --git a/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java b/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java
index 5aefb68..67fdff9 100644
--- a/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java
+++ b/omega/omega-spring-tx/src/test/java/io/servicecomb/saga/omega/transaction/spring/TransactionInterceptionTest.java
@@ -41,6 +41,7 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import io.servicecomb.saga.omega.context.OmegaContext;
+import io.servicecomb.saga.omega.context.UniqueIdGenerator;
 import io.servicecomb.saga.omega.transaction.MessageHandler;
 import io.servicecomb.saga.omega.transaction.MessageSender;
 import io.servicecomb.saga.omega.transaction.TxEvent;
@@ -123,6 +124,11 @@ public class TransactionInterceptionTest {
     private final List<byte[]> messages = new ArrayList<>();
 
     @Bean
+    OmegaContext omegaContext() {
+      return new OmegaContext(new UniqueIdGenerator());
+    }
+
+    @Bean
     List<byte[]> messages() {
       return messages;
     }
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/RestTemplateConfig.java b/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/RestTemplateConfig.java
index 34683b1..053e3ff 100644
--- a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/RestTemplateConfig.java
+++ b/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/RestTemplateConfig.java
@@ -25,22 +25,16 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.http.client.ClientHttpRequestInterceptor;
 import org.springframework.web.client.RestTemplate;
 
-import io.servicecomb.saga.omega.context.IdGenerator;
 import io.servicecomb.saga.omega.context.OmegaContext;
 
 @Configuration
 public class RestTemplateConfig {
 
   @Bean
-  IdGenerator<String> idGenerator() {
-    return new UniqueIdGenerator();
-  }
-
-  @Bean
-  public RestTemplate restTemplate(IdGenerator<String> idGenerator, OmegaContext context) {
+  public RestTemplate restTemplate(OmegaContext context) {
     RestTemplate template = new RestTemplate();
     List<ClientHttpRequestInterceptor> interceptors = template.getInterceptors();
-    interceptors.add(new TransactionClientHttpRequestInterceptor(context, idGenerator));
+    interceptors.add(new TransactionClientHttpRequestInterceptor(context));
     template.setInterceptors(interceptors);
     return template;
   }
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptor.java b/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptor.java
index 158fbc8..35bc9d0 100644
--- a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptor.java
+++ b/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptor.java
@@ -18,6 +18,9 @@
 
 package io.servicecomb.saga.omega.transport.resttemplate;
 
+import static io.servicecomb.saga.omega.context.OmegaContext.GLOBAL_TX_ID_KEY;
+import static io.servicecomb.saga.omega.context.OmegaContext.LOCAL_TX_ID_KEY;
+
 import java.io.IOException;
 
 import org.springframework.http.HttpRequest;
@@ -25,20 +28,14 @@ import org.springframework.http.client.ClientHttpRequestExecution;
 import org.springframework.http.client.ClientHttpRequestInterceptor;
 import org.springframework.http.client.ClientHttpResponse;
 
-import io.servicecomb.saga.omega.context.IdGenerator;
 import io.servicecomb.saga.omega.context.OmegaContext;
 
-public class TransactionClientHttpRequestInterceptor implements ClientHttpRequestInterceptor {
-
-  public static final String GLOBAL_TX_ID_KEY = "X-Pack-Global-Transaction-Id";
-  public static final String LOCAL_TX_ID_KEY = "X-Pack-Local-Transaction-Id";
+class TransactionClientHttpRequestInterceptor implements ClientHttpRequestInterceptor {
 
   private final OmegaContext omegaContext;
-  private final IdGenerator<String> idGenerator;
 
-  TransactionClientHttpRequestInterceptor(OmegaContext omegaContext, IdGenerator<String> idGenerator) {
+  TransactionClientHttpRequestInterceptor(OmegaContext omegaContext) {
     this.omegaContext = omegaContext;
-    this.idGenerator = idGenerator;
   }
 
   @Override
@@ -54,8 +51,7 @@ public class TransactionClientHttpRequestInterceptor implements ClientHttpReques
     String globalTxId = omegaContext.globalTxId();
 
     if (globalTxId == null) {
-      globalTxId = idGenerator.nextId();
-      omegaContext.setGlobalTxId(globalTxId);
+      return omegaContext.newGlobalTxId();
     }
     return globalTxId;
   }
@@ -64,8 +60,7 @@ public class TransactionClientHttpRequestInterceptor implements ClientHttpReques
     String localTxId = omegaContext.localTxId();
 
     if (localTxId == null) {
-      localTxId = idGenerator.nextId();
-      omegaContext.setLocalTxId(localTxId);
+      return omegaContext.newLocalTxId();
     }
     return localTxId;
   }
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptor.java b/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptor.java
index 6363e4f..d71c558 100644
--- a/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptor.java
+++ b/omega/omega-transport/omega-transport-resttemplate/src/main/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptor.java
@@ -20,8 +20,8 @@
 
 package io.servicecomb.saga.omega.transport.resttemplate;
 
-import static io.servicecomb.saga.omega.transport.resttemplate.TransactionClientHttpRequestInterceptor.GLOBAL_TX_ID_KEY;
-import static io.servicecomb.saga.omega.transport.resttemplate.TransactionClientHttpRequestInterceptor.LOCAL_TX_ID_KEY;
+import static io.servicecomb.saga.omega.context.OmegaContext.GLOBAL_TX_ID_KEY;
+import static io.servicecomb.saga.omega.context.OmegaContext.LOCAL_TX_ID_KEY;
 
 import java.lang.invoke.MethodHandles;
 
@@ -35,13 +35,13 @@ import org.springframework.web.servlet.ModelAndView;
 
 import io.servicecomb.saga.omega.context.OmegaContext;
 
-public class TransactionHandlerInterceptor implements HandlerInterceptor {
+class TransactionHandlerInterceptor implements HandlerInterceptor {
 
   private static Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
   private final OmegaContext omegaContext;
 
-  public TransactionHandlerInterceptor(OmegaContext omegaContext) {
+  TransactionHandlerInterceptor(OmegaContext omegaContext) {
     this.omegaContext = omegaContext;
   }
 
@@ -49,15 +49,11 @@ public class TransactionHandlerInterceptor implements HandlerInterceptor {
   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
     String globalTxId = request.getHeader(GLOBAL_TX_ID_KEY);
     if (globalTxId == null) {
-      LOG.info("no such header: {}", GLOBAL_TX_ID_KEY);
+      LOG.debug("no such header: {}", GLOBAL_TX_ID_KEY);
     } else {
       omegaContext.setGlobalTxId(globalTxId);
-    }
-    String parentTxId = request.getHeader(LOCAL_TX_ID_KEY);
-    if (parentTxId == null) {
-      LOG.info("no such header: {}", LOCAL_TX_ID_KEY);
-    } else {
-      omegaContext.setParentTxId(parentTxId);
+      omegaContext.newLocalTxId();
+      omegaContext.setParentTxId(request.getHeader(LOCAL_TX_ID_KEY));
     }
     return true;
   }
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/main/resources/META-INF/spring.factories b/omega/omega-transport/omega-transport-resttemplate/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000..7d03c78
--- /dev/null
+++ b/omega/omega-transport/omega-transport-resttemplate/src/main/resources/META-INF/spring.factories
@@ -0,0 +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.
+## ---------------------------------------------------------------------------
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+  io.servicecomb.saga.omega.transport.resttemplate.WebConfig,\
+  io.servicecomb.saga.omega.transport.resttemplate.RestTemplateConfig
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptorTest.java b/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptorTest.java
index 41da9ec..223b56c 100644
--- a/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptorTest.java
+++ b/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionClientHttpRequestInterceptorTest.java
@@ -19,8 +19,8 @@
 package io.servicecomb.saga.omega.transport.resttemplate;
 
 import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
-import static io.servicecomb.saga.omega.transport.resttemplate.TransactionClientHttpRequestInterceptor.GLOBAL_TX_ID_KEY;
-import static io.servicecomb.saga.omega.transport.resttemplate.TransactionClientHttpRequestInterceptor.LOCAL_TX_ID_KEY;
+import static io.servicecomb.saga.omega.context.OmegaContext.GLOBAL_TX_ID_KEY;
+import static io.servicecomb.saga.omega.context.OmegaContext.LOCAL_TX_ID_KEY;
 import static org.hamcrest.Matchers.contains;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
@@ -57,10 +57,10 @@ public class TransactionClientHttpRequestInterceptorTest {
   private final String localTxId = uniquify("local tx id");
   private final IdGenerator<String> idGenerator = Mockito.mock(IdGenerator.class);
 
-  private final OmegaContext omegaContext = new OmegaContext();
+  private final OmegaContext omegaContext = new OmegaContext(idGenerator);
   private final ClientHttpRequestInterceptor clientHttpRequestInterceptor = new TransactionClientHttpRequestInterceptor(
-      omegaContext,
-      idGenerator);
+      omegaContext
+  );
 
   @Before
   public void setUp() throws Exception {
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptorTest.java b/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptorTest.java
index a6c29cb..4aabddd 100644
--- a/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptorTest.java
+++ b/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/TransactionHandlerInterceptorTest.java
@@ -18,9 +18,10 @@
 
 package io.servicecomb.saga.omega.transport.resttemplate;
 
-import static io.servicecomb.saga.omega.transport.resttemplate.TransactionClientHttpRequestInterceptor.GLOBAL_TX_ID_KEY;
-import static io.servicecomb.saga.omega.transport.resttemplate.TransactionClientHttpRequestInterceptor.LOCAL_TX_ID_KEY;
+import static io.servicecomb.saga.omega.context.OmegaContext.GLOBAL_TX_ID_KEY;
+import static io.servicecomb.saga.omega.context.OmegaContext.LOCAL_TX_ID_KEY;
 import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
 import static org.hamcrest.Matchers.nullValue;
 import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.mock;
@@ -43,7 +44,7 @@ public class TransactionHandlerInterceptorTest {
 
   private static final String localTxId = UUID.randomUUID().toString();
 
-  private final OmegaContext omegaContext = new OmegaContext();
+  private final OmegaContext omegaContext = new OmegaContext(() -> "ignored");
 
   private HandlerInterceptor requestInterceptor = new TransactionHandlerInterceptor(omegaContext);
 
@@ -66,6 +67,7 @@ public class TransactionHandlerInterceptorTest {
     requestInterceptor.preHandle(request, response, null);
 
     assertThat(omegaContext.globalTxId(), is(globalTxId));
+    assertThat(omegaContext.localTxId(), is(notNullValue()));
     assertThat(omegaContext.parentTxId(), is(localTxId));
   }
 
diff --git a/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/UniqueIdGeneratorTest.java b/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/UniqueIdGeneratorTest.java
index 87338ea..720eb0b 100644
--- a/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/UniqueIdGeneratorTest.java
+++ b/omega/omega-transport/omega-transport-resttemplate/src/test/java/io/servicecomb/saga/omega/transport/resttemplate/UniqueIdGeneratorTest.java
@@ -34,6 +34,8 @@ import java.util.concurrent.Future;
 
 import org.junit.Test;
 
+import io.servicecomb.saga.omega.context.UniqueIdGenerator;
+
 public class UniqueIdGeneratorTest {
 
   private final UniqueIdGenerator idGenerator = new UniqueIdGenerator();

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.