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/09/11 06:08:43 UTC

[incubator-servicecomb-saga] 06/07: SCB-820 Clean up the tcc-spring-demo

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 b2263b934d395ee116e3c3a176955a69586dcaa0
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Tue Sep 11 11:58:27 2018 +0800

    SCB-820 Clean up the tcc-spring-demo
---
 .../saga/demo/pack/booking/BookingController.java  |  1 -
 .../saga/demo/pack/car/CarBookingService.java      |  1 +
 saga-demo/tcc-spring-demo/inventory/pom.xml        |  4 ++++
 .../demo/pack/ordering/OrderingController.java     | 15 ++++++--------
 .../saga/demo/pack/payment/PaymentService.java     |  5 +++--
 .../demo/pack/payment/TccPaymentApplication.java   | 12 +++++++++++
 .../saga/demo/pack/payment/PaymentServiceTest.java | 24 ++++++++++++++++++++++
 7 files changed, 50 insertions(+), 12 deletions(-)

diff --git a/saga-demo/saga-spring-demo/booking/src/main/java/org/apache/servicecomb/saga/demo/pack/booking/BookingController.java b/saga-demo/saga-spring-demo/booking/src/main/java/org/apache/servicecomb/saga/demo/pack/booking/BookingController.java
index f44abd9..5091321 100644
--- a/saga-demo/saga-spring-demo/booking/src/main/java/org/apache/servicecomb/saga/demo/pack/booking/BookingController.java
+++ b/saga-demo/saga-spring-demo/booking/src/main/java/org/apache/servicecomb/saga/demo/pack/booking/BookingController.java
@@ -39,7 +39,6 @@ public class BookingController {
 
   @SagaStart
   @PostMapping("/booking/{name}/{rooms}/{cars}")
-
   public String order(@PathVariable String name,  @PathVariable Integer rooms, @PathVariable Integer cars) {
     template.postForEntity(
         carServiceUrl + "/order/{name}/{cars}",
diff --git a/saga-demo/saga-spring-demo/car/src/main/java/org/apache/servicecomb/saga/demo/pack/car/CarBookingService.java b/saga-demo/saga-spring-demo/car/src/main/java/org/apache/servicecomb/saga/demo/pack/car/CarBookingService.java
index 3be4d36..e225280 100644
--- a/saga-demo/saga-spring-demo/car/src/main/java/org/apache/servicecomb/saga/demo/pack/car/CarBookingService.java
+++ b/saga-demo/saga-spring-demo/car/src/main/java/org/apache/servicecomb/saga/demo/pack/car/CarBookingService.java
@@ -24,6 +24,7 @@ import java.util.Collection;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
+
 @Service
 class CarBookingService {
   private Map<Integer, CarBooking> bookings = new ConcurrentHashMap<>();
diff --git a/saga-demo/tcc-spring-demo/inventory/pom.xml b/saga-demo/tcc-spring-demo/inventory/pom.xml
index 6c2a218..ca43065 100644
--- a/saga-demo/tcc-spring-demo/inventory/pom.xml
+++ b/saga-demo/tcc-spring-demo/inventory/pom.xml
@@ -47,6 +47,10 @@
       <artifactId>spring-boot-starter-data-jpa</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.servicecomb.saga</groupId>
+      <artifactId>omega-transport-resttemplate</artifactId>
+    </dependency>
+    <dependency>
       <groupId>com.h2database</groupId>
       <artifactId>h2</artifactId>
     </dependency>
diff --git a/saga-demo/tcc-spring-demo/ordering/src/main/java/org/apache/servicecomb/saga/demo/pack/ordering/OrderingController.java b/saga-demo/tcc-spring-demo/ordering/src/main/java/org/apache/servicecomb/saga/demo/pack/ordering/OrderingController.java
index 2859793..a19da78 100644
--- a/saga-demo/tcc-spring-demo/ordering/src/main/java/org/apache/servicecomb/saga/demo/pack/ordering/OrderingController.java
+++ b/saga-demo/tcc-spring-demo/ordering/src/main/java/org/apache/servicecomb/saga/demo/pack/ordering/OrderingController.java
@@ -23,6 +23,7 @@ import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.client.RestTemplate;
 
 @Controller
@@ -39,25 +40,21 @@ public class OrderingController {
 
   @TccStart
   @PostMapping("/order/{userName}/{productName}/{productUnit}/{unitPrice}")
+  @ResponseBody
   public String ordering(
       @PathVariable String userName,
       @PathVariable String productName, @PathVariable Integer productUnit, @PathVariable Integer unitPrice) {
 
     restTemplate.postForEntity(
-        inventoryServiceUrl + "/products/order/{userName}/{producetName}/{productUnit}",
+        inventoryServiceUrl + "/products/order/{userName}/{productName}/{productUnit}",
         null, String.class, userName, productName, productUnit);
 
-
+    int amount = productUnit * unitPrice;
+    
     restTemplate.postForEntity(paymentServiceUrl + "/payments/pay/{userName}/{amount}",
-        null, String.class, userName, productUnit * unitPrice);
+        null, String.class, userName, amount);
 
     return userName + " ordering " + productName + " with " + productUnit + " OK";
   }
 
-  @Autowired
-  public void setRestTemplate(RestTemplate restTemplate) {
-    this.restTemplate = restTemplate;
-  }
-
-
 }
diff --git a/saga-demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentService.java b/saga-demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentService.java
index d6c5d06..b10d72f 100644
--- a/saga-demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentService.java
+++ b/saga-demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentService.java
@@ -34,8 +34,8 @@ public class PaymentService {
 
   private Map<Integer, Payment> payments = new ConcurrentHashMap<>();
 
-  @Transactional
   @Participate(confirmMethod = "confirm", cancelMethod = "cancel")
+  @Transactional
   public void pay(Payment payment) {
     Account account = getAccount(payment);
     if (account.getCredit() >= payment.getAmount()) {
@@ -59,11 +59,12 @@ public class PaymentService {
   @Transactional
   public void confirm(Payment payment) {
     Account account = getAccount(payment);
-    accountDao.saveAndFlush(account);
     payment.setConfirmed(true);
     payment.setCancelled(false);
     account.setBalance(account.getBalance() - payment.getAmount());
     payment.setBalance(account.getBalance());
+    accountDao.saveAndFlush(account);
+
 
   }
 
diff --git a/saga-demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/TccPaymentApplication.java b/saga-demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/TccPaymentApplication.java
index ade5b2b..40f67c4 100644
--- a/saga-demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/TccPaymentApplication.java
+++ b/saga-demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/TccPaymentApplication.java
@@ -18,8 +18,10 @@
 package org.apache.servicecomb.saga.demo.pack.payment;
 
 import org.apache.servicecomb.saga.omega.spring.EnableOmega;
+import org.springframework.boot.CommandLineRunner;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Profile;
 
 @SpringBootApplication
@@ -29,4 +31,14 @@ public class TccPaymentApplication {
   public static void main(String[] args) {
     SpringApplication.run(TccPaymentApplication.class, args);
   }
+
+  @Bean
+  CommandLineRunner kickOff(AccountDao accountDao) {
+    return args -> {
+      // Set up the account information
+      accountDao.save(new Account("UserA", 100, 90));
+      accountDao.save(new Account("UserB", 10, 10));
+      accountDao.save(new Account("UserC", 1, 1));
+    };
+  }
 }
diff --git a/saga-demo/tcc-spring-demo/payment/src/test/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentServiceTest.java b/saga-demo/tcc-spring-demo/payment/src/test/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentServiceTest.java
index 77d0b9e..9807aa1 100644
--- a/saga-demo/tcc-spring-demo/payment/src/test/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentServiceTest.java
+++ b/saga-demo/tcc-spring-demo/payment/src/test/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentServiceTest.java
@@ -18,9 +18,13 @@
 package org.apache.servicecomb.saga.demo.pack.payment;
 
 import static org.hamcrest.MatcherAssert.assertThat;
+
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.fail;
 
+
+import org.hamcrest.core.IsNull;
+
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -76,6 +80,26 @@ public class PaymentServiceTest {
   }
 
   @Test
+  public void testPaymentServicePaymentJustAsCredit() {
+    payment.setId(1);
+    payment.setUserName("UserB");
+    payment.setAmount(10);
+    paymentService.pay(payment);
+    assertThat(payment.getBalance(), IsNull.nullValue());
+    assertThat(paymentService.getAccount(payment).getCredit(), is(0));
+    assertThat(paymentService.getAccount(payment).getBalance(), is(10));
+    assertThat(paymentService.getAllTransactions().size(), is(1));
+
+    paymentService.confirm(payment);
+    assertThat(payment.isCancelled(), is(false));
+    assertThat(payment.isConfirmed(), is(true));
+    assertThat(paymentService.getAccount(payment).getCredit(), is(0));
+    assertThat(paymentService.getAccount(payment).getBalance(), is(0));
+    assertThat(payment.getBalance(), is(0));
+  }
+
+
+  @Test
   public void getNoExitUserFromPaymentService() {
     payment.setId(1);
     payment.setAmount(10);