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/12/14 05:59:54 UTC

[servicecomb-pack] branch SCB-976 created (now 18053b6)

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

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


      at 18053b6  SCB-976 Update the maven group to org.apache.servicecomb.pack in the demo module

This branch includes the following new commits:

     new aa97a45  SCB-976 removed the saga-core related modules
     new 825046b  SCB-976 Updated the pom file for removing modules
     new 237fb25  SCB-976 Updated the group id to org.apache.servicecomb.pack
     new 16ac09b  SCB-976 Removed the Saga related name from poms and directories
     new 18053b6  SCB-976 Update the maven group to org.apache.servicecomb.pack in the demo module

The 5 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.



[servicecomb-pack] 04/05: SCB-976 Removed the Saga related name from poms and directories

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

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

commit 16ac09b8c753e1c46e4927eaa486c89001104362
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Fri Dec 14 11:28:40 2018 +0800

    SCB-976 Removed the Saga related name from poms and directories
---
 alpha/alpha-server/pom.xml                                  |   2 +-
 {saga-demo => demo}/pom.xml                                 |   0
 {saga-demo => demo}/saga-dubbo-demo/README.md               |   0
 .../saga-dubbo-demo}/docker-compose-alpha.yaml              |   0
 .../saga-dubbo-demo/docker-compose-demo.yaml                |   0
 .../saga-dubbo-demo/docker-compose.mysql.yaml               |   0
 {saga-demo => demo}/saga-dubbo-demo/docker-compose.yaml     |   0
 {saga-demo => demo}/saga-dubbo-demo/pom.xml                 |   0
 {saga-demo => demo}/saga-dubbo-demo/saga-dubbo-demo.sh      |   0
 {saga-demo => demo}/saga-dubbo-demo/service-api/pom.xml     |   0
 .../apache/servicecomb/saga/demo/dubbo/api/IService.java    |   0
 .../apache/servicecomb/saga/demo/dubbo/api/IServiceA.java   |   0
 .../apache/servicecomb/saga/demo/dubbo/api/IServiceB.java   |   0
 .../apache/servicecomb/saga/demo/dubbo/api/IServiceC.java   |   0
 .../service-api/src/main/resources/dubbo.properties         |   0
 {saga-demo => demo}/saga-dubbo-demo/service-pub/pom.xml     |   0
 .../apache/servicecomb/saga/demo/dubbo/pub/AbsService.java  |   0
 .../apache/servicecomb/saga/demo/dubbo/pub/IInvokeCode.java |   0
 .../servicecomb/saga/demo/dubbo/pub/InvokeContext.java      |   0
 .../apache/servicecomb/saga/demo/dubbo/pub/ServiceVO.java   |   0
 {saga-demo => demo}/saga-dubbo-demo/servicea/pom.xml        |   0
 .../servicecomb/saga/demo/dubbo/servicea/ApplicationA.java  |   0
 .../servicecomb/saga/demo/dubbo/servicea/ServiceA.java      |   0
 .../saga/demo/dubbo/servicea/web/DubboDemoController.java   |   0
 .../saga/demo/dubbo/servicea/web/MvcConfigurer.java         |   0
 .../servicea/src/main/resources/application.yaml            |   0
 .../servicea/src/main/resources/dubbo-context.xml           |   0
 .../saga-dubbo-demo/servicea}/src/main/resources/jdbc.xml   |   0
 .../saga-dubbo-demo/servicea}/src/main/resources/log4j2.xml |   0
 .../servicea/src/main/resources/schema-mysql.sql            |   0
 .../servicea/src/main/resources/schema-postgresql.sql       |   0
 .../servicea/src/main/resources/static/index.html           |   0
 {saga-demo => demo}/saga-dubbo-demo/serviceb/pom.xml        |   0
 .../servicecomb/saga/demo/dubbo/serviceb/ApplicationB.java  |   0
 .../servicecomb/saga/demo/dubbo/serviceb/ServiceB.java      |   0
 .../serviceb/src/main/resources/application.yaml            |   0
 .../serviceb/src/main/resources/dubbo-context.xml           |   0
 .../saga-dubbo-demo/serviceb/src/main/resources/jdbc.xml    |   0
 .../saga-dubbo-demo/serviceb}/src/main/resources/log4j2.xml |   0
 .../serviceb/src/main/resources/schema-mysql.sql            |   0
 .../serviceb/src/main/resources/schema-postgresql.sql       |   0
 {saga-demo => demo}/saga-dubbo-demo/servicec/pom.xml        |   0
 .../servicecomb/saga/demo/dubbo/servicec/ApplicationC.java  |   0
 .../servicecomb/saga/demo/dubbo/servicec/ServiceC.java      |   0
 .../servicec/src/main/resources/application.yaml            |   0
 .../servicec/src/main/resources/dubbo-context.xml           |   0
 .../saga-dubbo-demo/servicec}/src/main/resources/jdbc.xml   |   0
 .../saga-dubbo-demo/servicec}/src/main/resources/log4j2.xml |   0
 .../servicec/src/main/resources/schema-mysql.sql            |   0
 .../servicec/src/main/resources/schema-postgresql.sql       |   0
 {saga-demo => demo}/saga-dubbo-demo/sql/schema-mysql.sql    |   0
 {saga-demo => demo}/saga-k8s-resources/README.md            |   0
 {saga-demo => demo}/saga-k8s-resources/base/alpha.yaml      |   0
 .../saga-k8s-resources/base/jmeter-collector.yaml           |   0
 {saga-demo => demo}/saga-k8s-resources/base/postgresql.yaml |   0
 .../saga-k8s-resources/spring-demo/booking.yaml             |   0
 {saga-demo => demo}/saga-k8s-resources/spring-demo/car.yaml |   0
 .../saga-k8s-resources/spring-demo/hotel.yaml               |   0
 .../spring-demo/test/jmeter.configmap.yaml                  |   0
 .../saga-k8s-resources/spring-demo/test/jmeter.yaml         |   0
 {saga-demo => demo}/saga-servicecomb-demo/README.md         |   0
 .../saga-servicecomb-demo/docker-compose.yaml               |   0
 {saga-demo => demo}/saga-servicecomb-demo/pom.xml           |   0
 .../saga-servicecomb-demo/saga-servicecomb-demo.sh          |   0
 .../saga-servicecomb-demo/scb-booking/pom.xml               |   0
 .../saga/demo/scb/booking/BookingApplication.java           |   0
 .../saga/demo/scb/booking/BookingController.java            |   0
 .../scb-booking}/src/main/resources/application.yaml        |   0
 .../scb-booking}/src/main/resources/log4j2.xml              |   0
 .../scb-booking/src/main/resources/microservice.yaml        |   0
 {saga-demo => demo}/saga-servicecomb-demo/scb-car/pom.xml   |   0
 .../servicecomb/saga/demo/scb/car/CarApplication.java       |   0
 .../apache/servicecomb/saga/demo/scb/car/CarBooking.java    |   0
 .../servicecomb/saga/demo/scb/car/CarBookingController.java |   0
 .../servicecomb/saga/demo/scb/car/CarBookingService.java    |   0
 .../scb-car}/src/main/resources/application.yaml            |   0
 .../scb-car}/src/main/resources/log4j2.xml                  |   0
 .../scb-car/src/main/resources/microservice.yaml            |   0
 {saga-demo => demo}/saga-servicecomb-demo/scb-hotel/pom.xml |   0
 .../servicecomb/saga/demo/scb/hotel/HotelApplication.java   |   0
 .../servicecomb/saga/demo/scb/hotel/HotelBooking.java       |   0
 .../saga/demo/scb/hotel/HotelBookingController.java         |   0
 .../saga/demo/scb/hotel/HotelBookingService.java            |   0
 .../scb-hotel}/src/main/resources/application.yaml          |   0
 .../scb-hotel}/src/main/resources/log4j2.xml                |   0
 .../scb-hotel/src/main/resources/microservice.yaml          |   0
 {saga-demo => demo}/saga-spring-demo/README.md              |   0
 {saga-demo => demo}/saga-spring-demo/booking/pom.xml        |   0
 .../servicecomb/saga/demo/pack/booking/Application.java     |   0
 .../saga/demo/pack/booking/BookingController.java           |   0
 .../servicecomb/saga/demo/pack/booking/MyConfiguration.java |   0
 .../booking}/src/main/resources/application.yaml            |   0
 .../saga-spring-demo/booking}/src/main/resources/log4j2.xml |   0
 .../booking/src/main/resources/static/index.html            |   0
 {saga-demo => demo}/saga-spring-demo/car/pom.xml            |   0
 .../apache/servicecomb/saga/demo/pack/car/Application.java  |   0
 .../apache/servicecomb/saga/demo/pack/car/CarBooking.java   |   0
 .../saga/demo/pack/car/CarBookingController.java            |   0
 .../servicecomb/saga/demo/pack/car/CarBookingService.java   |   0
 .../car}/src/main/resources/application.yaml                |   0
 .../saga-spring-demo/car}/src/main/resources/log4j2.xml     |   0
 .../saga-spring-demo/docker-compose-alpha-perf.yaml         |   0
 .../saga-spring-demo/docker-compose-alpha.yaml              |   0
 .../saga-spring-demo/docker-compose-demo.yaml               |   0
 .../saga-spring-demo}/docker-compose.mysql.yaml             |   0
 {saga-demo => demo}/saga-spring-demo/docker-compose.yaml    |   0
 {saga-demo => demo}/saga-spring-demo/hotel/pom.xml          |   0
 .../servicecomb/saga/demo/pack/hotel/Application.java       |   0
 .../servicecomb/saga/demo/pack/hotel/HotelBooking.java      |   0
 .../saga/demo/pack/hotel/HotelBookingController.java        |   0
 .../saga/demo/pack/hotel/HotelBookingService.java           |   0
 .../hotel}/src/main/resources/application.yaml              |   0
 .../saga-spring-demo/hotel}/src/main/resources/log4j2.xml   |   0
 {saga-demo => demo}/saga-spring-demo/pom.xml                |   0
 {saga-demo => demo}/saga-spring-demo/saga-demo.sh           |   0
 {saga-demo => demo}/tcc-spring-demo/README.md               |   0
 .../tcc-spring-demo}/docker-compose-alpha.yaml              |   0
 .../tcc-spring-demo/docker-compose-demo.yaml                |   0
 .../tcc-spring-demo}/docker-compose.mysql.yaml              |   0
 {saga-demo => demo}/tcc-spring-demo/docker-compose.yaml     |   0
 {saga-demo => demo}/tcc-spring-demo/inventory/pom.xml       |   2 +-
 .../saga/demo/pack/inventory/InventoryService.java          |   0
 .../servicecomb/saga/demo/pack/inventory/Product.java       |   0
 .../saga/demo/pack/inventory/ProductController.java         |   0
 .../servicecomb/saga/demo/pack/inventory/ProductDao.java    |   0
 .../servicecomb/saga/demo/pack/inventory/ProductOrder.java  |   0
 .../saga/demo/pack/inventory/TccInventoryApplication.java   |   0
 .../inventory/src/main/resources/application.yaml           |   0
 .../inventory}/src/main/resources/log4j2.xml                |   0
 .../saga/demo/pack/inventory/InventoryServiceTest.java      |   0
 .../saga/demo/pack/inventory/ProductControllerTest.java     |   0
 .../saga/demo/pack/inventory/TestApplication.java           |   0
 {saga-demo => demo}/tcc-spring-demo/ordering/pom.xml        |   0
 .../saga/demo/pack/ordering/OrderingController.java         |   0
 .../saga/demo/pack/ordering/TccOrderingApplication.java     |   0
 .../ordering/src/main/resources/application.yaml            |   0
 .../tcc-spring-demo/ordering}/src/main/resources/log4j2.xml |   0
 {saga-demo => demo}/tcc-spring-demo/payment/pom.xml         |   2 +-
 .../apache/servicecomb/saga/demo/pack/payment/Account.java  |   0
 .../servicecomb/saga/demo/pack/payment/AccountDao.java      |   0
 .../apache/servicecomb/saga/demo/pack/payment/Payment.java  |   0
 .../saga/demo/pack/payment/PaymentController.java           |   0
 .../servicecomb/saga/demo/pack/payment/PaymentService.java  |   0
 .../saga/demo/pack/payment/TccPaymentApplication.java       |   0
 .../payment/src/main/resources/application.yaml             |   0
 .../tcc-spring-demo/payment}/src/main/resources/log4j2.xml  |   0
 .../saga/demo/pack/payment/PaymentControllerTest.java       |   0
 .../saga/demo/pack/payment/PaymentServiceTest.java          |   0
 .../servicecomb/saga/demo/pack/payment/TestApplication.java |   0
 {saga-demo => demo}/tcc-spring-demo/pom.xml                 |   0
 {saga-demo => demo}/tcc-spring-demo/saga-demo.sh            |   0
 {saga-distribution => distribution}/pom.xml                 |   0
 {saga-distribution => distribution}/src/assembly/bin.xml    |   0
 {saga-distribution => distribution}/src/assembly/src.xml    |   0
 {saga-distribution => distribution}/src/release/LICENSE     |   0
 {saga-distribution => distribution}/src/release/NOTICE      |   0
 .../src/release/licenses/LICENSE-asm                        |   0
 .../src/release/licenses/LICENSE-boringssl                  |   0
 .../src/release/licenses/LICENSE-epl-v10                    |   0
 .../src/release/licenses/LICENSE-esotericsoftware           |   0
 .../src/release/licenses/LICENSE-javax                      |   0
 .../src/release/licenses/LICENSE-logback                    |   0
 .../src/release/licenses/LICENSE-ngxadmin                   |   0
 .../src/release/licenses/LICENSE-openfeign                  |   0
 .../src/release/licenses/LICENSE-postgresql                 |   0
 .../src/release/licenses/LICENSE-protobuf                   |   0
 .../src/release/licenses/LICENSE-slf4j                      |   0
 .../src/release/licenses/NOTICE-grpc                        |   0
 .../src/release/licenses/NOTICE-netty                       |   0
 .../src/release/licenses/NOTICE-netty-tcnative              |   0
 .../src/release/licenses/NOTICE-tomcat                      |   0
 integration-tests/pack-tests/pom.xml                        |   2 +-
 omega/omega-spring-tx/pom.xml                               |   2 +-
 .../persistence-jpa}/pom.xml                                |   3 ++-
 .../saga/persistence/jpa/EclipseLinkJpaConfiguration.java   |   0
 .../src/main/resources/META-INF/spring.factories            |   0
 {saga-persistence => persistence}/pom.xml                   |   5 +++--
 pom.xml                                                     |  12 ++++++------
 {saga-web => web}/pom.xml                                   |   2 +-
 .../org/apache/servicecomb/saga/web/SagaWebApplication.java |   0
 {saga-web => web}/src/main/resources/application.yaml       |   0
 {saga-web => web}/src/main/resources/microservice.yaml      |   0
 .../src/main/resources/saga-frontend/README.md              |   0
 .../src/main/resources/saga-frontend/angular.json           |   0
 .../src/main/resources/saga-frontend/package.json           |   0
 .../resources/saga-frontend/src/app/@core/core.module.ts    |   0
 .../saga-frontend/src/app/@core/data/data.module.ts         |   0
 .../saga-frontend/src/app/@core/data/saga-events.service.ts |   0
 .../saga-frontend/src/app/@core/data/state.service.ts       |   0
 .../saga-frontend/src/app/@core/module-import-guard.ts      |   0
 .../saga-frontend/src/app/@core/utils/analytics.service.ts  |   0
 .../saga-frontend/src/app/@core/utils/util.service.ts       |   0
 .../src/app/@theme/components/footer/footer.component.scss  |   0
 .../src/app/@theme/components/footer/footer.component.ts    |   0
 .../src/app/@theme/components/header/header.component.html  |   0
 .../src/app/@theme/components/header/header.component.scss  |   0
 .../src/app/@theme/components/header/header.component.ts    |   0
 .../saga-frontend/src/app/@theme/components/index.ts        |   0
 .../app/@theme/components/switcher/switcher.component.scss  |   0
 .../app/@theme/components/switcher/switcher.component.ts    |   0
 .../components/theme-settings/theme-settings.component.scss |   0
 .../components/theme-settings/theme-settings.component.ts   |   0
 .../components/theme-switcher/theme-switcher.component.html |   0
 .../components/theme-switcher/theme-switcher.component.scss |   0
 .../components/theme-switcher/theme-switcher.component.ts   |   0
 .../themes-switcher-list/theme-switcher-list.component.scss |   0
 .../themes-switcher-list/themes-switcher-list.component.ts  |   0
 .../src/app/@theme/layouts/default/default.layout.scss      |   0
 .../src/app/@theme/layouts/default/default.layout.ts        |   0
 .../resources/saga-frontend/src/app/@theme/layouts/index.ts |   0
 .../app/@theme/layouts/one-column/one-column.layout.scss    |   0
 .../src/app/@theme/layouts/one-column/one-column.layout.ts  |   0
 .../saga-frontend/src/app/@theme/pipes/capitalize.pipe.ts   |   0
 .../resources/saga-frontend/src/app/@theme/pipes/index.ts   |   0
 .../saga-frontend/src/app/@theme/pipes/no-sanitize.pipe.ts  |   0
 .../src/app/@theme/pipes/number-with-commas.pipe.ts         |   0
 .../saga-frontend/src/app/@theme/pipes/plural.pipe.ts       |   0
 .../saga-frontend/src/app/@theme/pipes/round.pipe.ts        |   0
 .../saga-frontend/src/app/@theme/pipes/timing.pipe.ts       |   0
 .../saga-frontend/src/app/@theme/styles/bootstrap-rtl.scss  |   0
 .../saga-frontend/src/app/@theme/styles/font-size.scss      |   0
 .../saga-frontend/src/app/@theme/styles/pace.theme.scss     |   0
 .../saga-frontend/src/app/@theme/styles/styles.scss         |   0
 .../saga-frontend/src/app/@theme/styles/theme.corporate.ts  |   0
 .../saga-frontend/src/app/@theme/styles/theme.cosmic.ts     |   0
 .../saga-frontend/src/app/@theme/styles/theme.default.ts    |   0
 .../saga-frontend/src/app/@theme/styles/themes.scss         |   0
 .../resources/saga-frontend/src/app/@theme/theme.module.ts  |   0
 .../resources/saga-frontend/src/app/app-routing.module.ts   |   0
 .../main/resources/saga-frontend/src/app/app.component.ts   |   0
 .../src/main/resources/saga-frontend/src/app/app.module.ts  |   0
 .../pages/dashboard/count-cards/count-cards.component.html  |   0
 .../pages/dashboard/count-cards/count-cards.component.scss  |   0
 .../pages/dashboard/count-cards/count-cards.component.ts    |   0
 .../src/app/pages/dashboard/dashboard.component.html        |   0
 .../src/app/pages/dashboard/dashboard.component.scss        |   0
 .../src/app/pages/dashboard/dashboard.component.ts          |   0
 .../src/app/pages/dashboard/dashboard.module.ts             |   0
 .../dashboard/recent-table/recent-table.component.html      |   0
 .../dashboard/recent-table/recent-table.component.scss      |   0
 .../pages/dashboard/recent-table/recent-table.component.ts  |   0
 .../app/pages/miscellaneous/miscellaneous-routing.module.ts |   0
 .../src/app/pages/miscellaneous/miscellaneous.component.ts  |   0
 .../src/app/pages/miscellaneous/miscellaneous.module.ts     |   0
 .../pages/miscellaneous/not-found/not-found.component.html  |   0
 .../pages/miscellaneous/not-found/not-found.component.scss  |   0
 .../pages/miscellaneous/not-found/not-found.component.ts    |   0
 .../resources/saga-frontend/src/app/pages/pages-menu.ts     |   0
 .../saga-frontend/src/app/pages/pages-routing.module.ts     |   0
 .../saga-frontend/src/app/pages/pages.component.ts          |   0
 .../resources/saga-frontend/src/app/pages/pages.module.ts   |   0
 .../src/app/pages/transactions/customRender.component.ts    |   0
 .../app/pages/transactions/findTransaction.component.html   |   0
 .../src/app/pages/transactions/findTransaction.component.ts |   0
 .../src/app/pages/transactions/transactions.component.html  |   0
 .../src/app/pages/transactions/transactions.component.ts    |   0
 .../src/app/pages/transactions/transactions.module.ts       |   0
 .../app/pages/transactions/transactionsTable.component.html |   0
 .../app/pages/transactions/transactionsTable.component.scss |   0
 .../app/pages/transactions/transactionsTable.component.ts   |   0
 .../saga-frontend/src/assets/images/square_pattern.svg      |   0
 .../src/assets/images/square_pattern_cosmic.svg             |   0
 .../saga-frontend/src/environments/environment.prod.ts      |   0
 .../resources/saga-frontend/src/environments/environment.ts |   0
 .../src/main/resources/saga-frontend/src/favicon.ico        | Bin
 .../src/main/resources/saga-frontend/src/favicon.png        | Bin
 .../src/main/resources/saga-frontend/src/index.html         |   0
 .../src/main/resources/saga-frontend/src/main.ts            |   0
 .../src/main/resources/saga-frontend/src/polyfills.ts       |   0
 .../src/main/resources/saga-frontend/src/tsconfig.app.json  |   0
 .../src/main/resources/saga-frontend/src/typings.d.ts       |   0
 .../src/main/resources/saga-frontend/tsconfig.json          |   0
 {saga-web => web}/src/main/resources/static/css/request.css |   0
 {saga-web => web}/src/main/resources/static/css/style.css   |   0
 {saga-web => web}/src/main/resources/static/detail.html     |   0
 {saga-web => web}/src/main/resources/static/index.html      |   0
 {saga-web => web}/src/main/resources/static/js/date.js      |   0
 {saga-web => web}/src/main/resources/static/js/request.js   |   0
 {saga-web => web}/src/main/resources/static/js/table.js     |   0
 {saga-web => web}/src/main/resources/static/request.html    |   0
 {saga-web => web}/src/main/resources/static/result.html     |   0
 281 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/alpha/alpha-server/pom.xml b/alpha/alpha-server/pom.xml
index eb1b49a..ae81145 100644
--- a/alpha/alpha-server/pom.xml
+++ b/alpha/alpha-server/pom.xml
@@ -90,7 +90,7 @@
     </dependency>
     <dependency>
       <groupId>org.apache.servicecomb.pack</groupId>
-      <artifactId>saga-persistence-jpa</artifactId>
+      <artifactId>persistence-jpa</artifactId>
     </dependency>
     <dependency>
       <groupId>org.postgresql</groupId>
diff --git a/saga-demo/pom.xml b/demo/pom.xml
similarity index 100%
rename from saga-demo/pom.xml
rename to demo/pom.xml
diff --git a/saga-demo/saga-dubbo-demo/README.md b/demo/saga-dubbo-demo/README.md
similarity index 100%
rename from saga-demo/saga-dubbo-demo/README.md
rename to demo/saga-dubbo-demo/README.md
diff --git a/saga-demo/tcc-spring-demo/docker-compose-alpha.yaml b/demo/saga-dubbo-demo/docker-compose-alpha.yaml
similarity index 100%
rename from saga-demo/tcc-spring-demo/docker-compose-alpha.yaml
rename to demo/saga-dubbo-demo/docker-compose-alpha.yaml
diff --git a/saga-demo/saga-dubbo-demo/docker-compose-demo.yaml b/demo/saga-dubbo-demo/docker-compose-demo.yaml
similarity index 100%
rename from saga-demo/saga-dubbo-demo/docker-compose-demo.yaml
rename to demo/saga-dubbo-demo/docker-compose-demo.yaml
diff --git a/saga-demo/saga-dubbo-demo/docker-compose.mysql.yaml b/demo/saga-dubbo-demo/docker-compose.mysql.yaml
similarity index 100%
rename from saga-demo/saga-dubbo-demo/docker-compose.mysql.yaml
rename to demo/saga-dubbo-demo/docker-compose.mysql.yaml
diff --git a/saga-demo/saga-dubbo-demo/docker-compose.yaml b/demo/saga-dubbo-demo/docker-compose.yaml
similarity index 100%
rename from saga-demo/saga-dubbo-demo/docker-compose.yaml
rename to demo/saga-dubbo-demo/docker-compose.yaml
diff --git a/saga-demo/saga-dubbo-demo/pom.xml b/demo/saga-dubbo-demo/pom.xml
similarity index 100%
rename from saga-demo/saga-dubbo-demo/pom.xml
rename to demo/saga-dubbo-demo/pom.xml
diff --git a/saga-demo/saga-dubbo-demo/saga-dubbo-demo.sh b/demo/saga-dubbo-demo/saga-dubbo-demo.sh
similarity index 100%
rename from saga-demo/saga-dubbo-demo/saga-dubbo-demo.sh
rename to demo/saga-dubbo-demo/saga-dubbo-demo.sh
diff --git a/saga-demo/saga-dubbo-demo/service-api/pom.xml b/demo/saga-dubbo-demo/service-api/pom.xml
similarity index 100%
rename from saga-demo/saga-dubbo-demo/service-api/pom.xml
rename to demo/saga-dubbo-demo/service-api/pom.xml
diff --git a/saga-demo/saga-dubbo-demo/service-api/src/main/java/org/apache/servicecomb/saga/demo/dubbo/api/IService.java b/demo/saga-dubbo-demo/service-api/src/main/java/org/apache/servicecomb/saga/demo/dubbo/api/IService.java
similarity index 100%
rename from saga-demo/saga-dubbo-demo/service-api/src/main/java/org/apache/servicecomb/saga/demo/dubbo/api/IService.java
rename to demo/saga-dubbo-demo/service-api/src/main/java/org/apache/servicecomb/saga/demo/dubbo/api/IService.java
diff --git a/saga-demo/saga-dubbo-demo/service-api/src/main/java/org/apache/servicecomb/saga/demo/dubbo/api/IServiceA.java b/demo/saga-dubbo-demo/service-api/src/main/java/org/apache/servicecomb/saga/demo/dubbo/api/IServiceA.java
similarity index 100%
rename from saga-demo/saga-dubbo-demo/service-api/src/main/java/org/apache/servicecomb/saga/demo/dubbo/api/IServiceA.java
rename to demo/saga-dubbo-demo/service-api/src/main/java/org/apache/servicecomb/saga/demo/dubbo/api/IServiceA.java
diff --git a/saga-demo/saga-dubbo-demo/service-api/src/main/java/org/apache/servicecomb/saga/demo/dubbo/api/IServiceB.java b/demo/saga-dubbo-demo/service-api/src/main/java/org/apache/servicecomb/saga/demo/dubbo/api/IServiceB.java
similarity index 100%
rename from saga-demo/saga-dubbo-demo/service-api/src/main/java/org/apache/servicecomb/saga/demo/dubbo/api/IServiceB.java
rename to demo/saga-dubbo-demo/service-api/src/main/java/org/apache/servicecomb/saga/demo/dubbo/api/IServiceB.java
diff --git a/saga-demo/saga-dubbo-demo/service-api/src/main/java/org/apache/servicecomb/saga/demo/dubbo/api/IServiceC.java b/demo/saga-dubbo-demo/service-api/src/main/java/org/apache/servicecomb/saga/demo/dubbo/api/IServiceC.java
similarity index 100%
rename from saga-demo/saga-dubbo-demo/service-api/src/main/java/org/apache/servicecomb/saga/demo/dubbo/api/IServiceC.java
rename to demo/saga-dubbo-demo/service-api/src/main/java/org/apache/servicecomb/saga/demo/dubbo/api/IServiceC.java
diff --git a/saga-demo/saga-dubbo-demo/service-api/src/main/resources/dubbo.properties b/demo/saga-dubbo-demo/service-api/src/main/resources/dubbo.properties
similarity index 100%
rename from saga-demo/saga-dubbo-demo/service-api/src/main/resources/dubbo.properties
rename to demo/saga-dubbo-demo/service-api/src/main/resources/dubbo.properties
diff --git a/saga-demo/saga-dubbo-demo/service-pub/pom.xml b/demo/saga-dubbo-demo/service-pub/pom.xml
similarity index 100%
rename from saga-demo/saga-dubbo-demo/service-pub/pom.xml
rename to demo/saga-dubbo-demo/service-pub/pom.xml
diff --git a/saga-demo/saga-dubbo-demo/service-pub/src/main/java/org/apache/servicecomb/saga/demo/dubbo/pub/AbsService.java b/demo/saga-dubbo-demo/service-pub/src/main/java/org/apache/servicecomb/saga/demo/dubbo/pub/AbsService.java
similarity index 100%
rename from saga-demo/saga-dubbo-demo/service-pub/src/main/java/org/apache/servicecomb/saga/demo/dubbo/pub/AbsService.java
rename to demo/saga-dubbo-demo/service-pub/src/main/java/org/apache/servicecomb/saga/demo/dubbo/pub/AbsService.java
diff --git a/saga-demo/saga-dubbo-demo/service-pub/src/main/java/org/apache/servicecomb/saga/demo/dubbo/pub/IInvokeCode.java b/demo/saga-dubbo-demo/service-pub/src/main/java/org/apache/servicecomb/saga/demo/dubbo/pub/IInvokeCode.java
similarity index 100%
rename from saga-demo/saga-dubbo-demo/service-pub/src/main/java/org/apache/servicecomb/saga/demo/dubbo/pub/IInvokeCode.java
rename to demo/saga-dubbo-demo/service-pub/src/main/java/org/apache/servicecomb/saga/demo/dubbo/pub/IInvokeCode.java
diff --git a/saga-demo/saga-dubbo-demo/service-pub/src/main/java/org/apache/servicecomb/saga/demo/dubbo/pub/InvokeContext.java b/demo/saga-dubbo-demo/service-pub/src/main/java/org/apache/servicecomb/saga/demo/dubbo/pub/InvokeContext.java
similarity index 100%
rename from saga-demo/saga-dubbo-demo/service-pub/src/main/java/org/apache/servicecomb/saga/demo/dubbo/pub/InvokeContext.java
rename to demo/saga-dubbo-demo/service-pub/src/main/java/org/apache/servicecomb/saga/demo/dubbo/pub/InvokeContext.java
diff --git a/saga-demo/saga-dubbo-demo/service-pub/src/main/java/org/apache/servicecomb/saga/demo/dubbo/pub/ServiceVO.java b/demo/saga-dubbo-demo/service-pub/src/main/java/org/apache/servicecomb/saga/demo/dubbo/pub/ServiceVO.java
similarity index 100%
rename from saga-demo/saga-dubbo-demo/service-pub/src/main/java/org/apache/servicecomb/saga/demo/dubbo/pub/ServiceVO.java
rename to demo/saga-dubbo-demo/service-pub/src/main/java/org/apache/servicecomb/saga/demo/dubbo/pub/ServiceVO.java
diff --git a/saga-demo/saga-dubbo-demo/servicea/pom.xml b/demo/saga-dubbo-demo/servicea/pom.xml
similarity index 100%
rename from saga-demo/saga-dubbo-demo/servicea/pom.xml
rename to demo/saga-dubbo-demo/servicea/pom.xml
diff --git a/saga-demo/saga-dubbo-demo/servicea/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicea/ApplicationA.java b/demo/saga-dubbo-demo/servicea/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicea/ApplicationA.java
similarity index 100%
rename from saga-demo/saga-dubbo-demo/servicea/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicea/ApplicationA.java
rename to demo/saga-dubbo-demo/servicea/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicea/ApplicationA.java
diff --git a/saga-demo/saga-dubbo-demo/servicea/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicea/ServiceA.java b/demo/saga-dubbo-demo/servicea/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicea/ServiceA.java
similarity index 100%
rename from saga-demo/saga-dubbo-demo/servicea/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicea/ServiceA.java
rename to demo/saga-dubbo-demo/servicea/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicea/ServiceA.java
diff --git a/saga-demo/saga-dubbo-demo/servicea/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicea/web/DubboDemoController.java b/demo/saga-dubbo-demo/servicea/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicea/web/DubboDemoController.java
similarity index 100%
rename from saga-demo/saga-dubbo-demo/servicea/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicea/web/DubboDemoController.java
rename to demo/saga-dubbo-demo/servicea/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicea/web/DubboDemoController.java
diff --git a/saga-demo/saga-dubbo-demo/servicea/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicea/web/MvcConfigurer.java b/demo/saga-dubbo-demo/servicea/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicea/web/MvcConfigurer.java
similarity index 100%
rename from saga-demo/saga-dubbo-demo/servicea/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicea/web/MvcConfigurer.java
rename to demo/saga-dubbo-demo/servicea/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicea/web/MvcConfigurer.java
diff --git a/saga-demo/saga-dubbo-demo/servicea/src/main/resources/application.yaml b/demo/saga-dubbo-demo/servicea/src/main/resources/application.yaml
similarity index 100%
rename from saga-demo/saga-dubbo-demo/servicea/src/main/resources/application.yaml
rename to demo/saga-dubbo-demo/servicea/src/main/resources/application.yaml
diff --git a/saga-demo/saga-dubbo-demo/servicea/src/main/resources/dubbo-context.xml b/demo/saga-dubbo-demo/servicea/src/main/resources/dubbo-context.xml
similarity index 100%
rename from saga-demo/saga-dubbo-demo/servicea/src/main/resources/dubbo-context.xml
rename to demo/saga-dubbo-demo/servicea/src/main/resources/dubbo-context.xml
diff --git a/saga-demo/saga-dubbo-demo/servicec/src/main/resources/jdbc.xml b/demo/saga-dubbo-demo/servicea/src/main/resources/jdbc.xml
similarity index 100%
rename from saga-demo/saga-dubbo-demo/servicec/src/main/resources/jdbc.xml
rename to demo/saga-dubbo-demo/servicea/src/main/resources/jdbc.xml
diff --git a/saga-demo/tcc-spring-demo/payment/src/main/resources/log4j2.xml b/demo/saga-dubbo-demo/servicea/src/main/resources/log4j2.xml
similarity index 100%
rename from saga-demo/tcc-spring-demo/payment/src/main/resources/log4j2.xml
rename to demo/saga-dubbo-demo/servicea/src/main/resources/log4j2.xml
diff --git a/saga-demo/saga-dubbo-demo/servicea/src/main/resources/schema-mysql.sql b/demo/saga-dubbo-demo/servicea/src/main/resources/schema-mysql.sql
similarity index 100%
rename from saga-demo/saga-dubbo-demo/servicea/src/main/resources/schema-mysql.sql
rename to demo/saga-dubbo-demo/servicea/src/main/resources/schema-mysql.sql
diff --git a/saga-demo/saga-dubbo-demo/servicea/src/main/resources/schema-postgresql.sql b/demo/saga-dubbo-demo/servicea/src/main/resources/schema-postgresql.sql
similarity index 100%
rename from saga-demo/saga-dubbo-demo/servicea/src/main/resources/schema-postgresql.sql
rename to demo/saga-dubbo-demo/servicea/src/main/resources/schema-postgresql.sql
diff --git a/saga-demo/saga-dubbo-demo/servicea/src/main/resources/static/index.html b/demo/saga-dubbo-demo/servicea/src/main/resources/static/index.html
similarity index 100%
rename from saga-demo/saga-dubbo-demo/servicea/src/main/resources/static/index.html
rename to demo/saga-dubbo-demo/servicea/src/main/resources/static/index.html
diff --git a/saga-demo/saga-dubbo-demo/serviceb/pom.xml b/demo/saga-dubbo-demo/serviceb/pom.xml
similarity index 100%
rename from saga-demo/saga-dubbo-demo/serviceb/pom.xml
rename to demo/saga-dubbo-demo/serviceb/pom.xml
diff --git a/saga-demo/saga-dubbo-demo/serviceb/src/main/java/org/apache/servicecomb/saga/demo/dubbo/serviceb/ApplicationB.java b/demo/saga-dubbo-demo/serviceb/src/main/java/org/apache/servicecomb/saga/demo/dubbo/serviceb/ApplicationB.java
similarity index 100%
rename from saga-demo/saga-dubbo-demo/serviceb/src/main/java/org/apache/servicecomb/saga/demo/dubbo/serviceb/ApplicationB.java
rename to demo/saga-dubbo-demo/serviceb/src/main/java/org/apache/servicecomb/saga/demo/dubbo/serviceb/ApplicationB.java
diff --git a/saga-demo/saga-dubbo-demo/serviceb/src/main/java/org/apache/servicecomb/saga/demo/dubbo/serviceb/ServiceB.java b/demo/saga-dubbo-demo/serviceb/src/main/java/org/apache/servicecomb/saga/demo/dubbo/serviceb/ServiceB.java
similarity index 100%
rename from saga-demo/saga-dubbo-demo/serviceb/src/main/java/org/apache/servicecomb/saga/demo/dubbo/serviceb/ServiceB.java
rename to demo/saga-dubbo-demo/serviceb/src/main/java/org/apache/servicecomb/saga/demo/dubbo/serviceb/ServiceB.java
diff --git a/saga-demo/saga-dubbo-demo/serviceb/src/main/resources/application.yaml b/demo/saga-dubbo-demo/serviceb/src/main/resources/application.yaml
similarity index 100%
rename from saga-demo/saga-dubbo-demo/serviceb/src/main/resources/application.yaml
rename to demo/saga-dubbo-demo/serviceb/src/main/resources/application.yaml
diff --git a/saga-demo/saga-dubbo-demo/serviceb/src/main/resources/dubbo-context.xml b/demo/saga-dubbo-demo/serviceb/src/main/resources/dubbo-context.xml
similarity index 100%
rename from saga-demo/saga-dubbo-demo/serviceb/src/main/resources/dubbo-context.xml
rename to demo/saga-dubbo-demo/serviceb/src/main/resources/dubbo-context.xml
diff --git a/saga-demo/saga-dubbo-demo/serviceb/src/main/resources/jdbc.xml b/demo/saga-dubbo-demo/serviceb/src/main/resources/jdbc.xml
similarity index 100%
rename from saga-demo/saga-dubbo-demo/serviceb/src/main/resources/jdbc.xml
rename to demo/saga-dubbo-demo/serviceb/src/main/resources/jdbc.xml
diff --git a/saga-demo/tcc-spring-demo/ordering/src/main/resources/log4j2.xml b/demo/saga-dubbo-demo/serviceb/src/main/resources/log4j2.xml
similarity index 100%
rename from saga-demo/tcc-spring-demo/ordering/src/main/resources/log4j2.xml
rename to demo/saga-dubbo-demo/serviceb/src/main/resources/log4j2.xml
diff --git a/saga-demo/saga-dubbo-demo/serviceb/src/main/resources/schema-mysql.sql b/demo/saga-dubbo-demo/serviceb/src/main/resources/schema-mysql.sql
similarity index 100%
rename from saga-demo/saga-dubbo-demo/serviceb/src/main/resources/schema-mysql.sql
rename to demo/saga-dubbo-demo/serviceb/src/main/resources/schema-mysql.sql
diff --git a/saga-demo/saga-dubbo-demo/serviceb/src/main/resources/schema-postgresql.sql b/demo/saga-dubbo-demo/serviceb/src/main/resources/schema-postgresql.sql
similarity index 100%
rename from saga-demo/saga-dubbo-demo/serviceb/src/main/resources/schema-postgresql.sql
rename to demo/saga-dubbo-demo/serviceb/src/main/resources/schema-postgresql.sql
diff --git a/saga-demo/saga-dubbo-demo/servicec/pom.xml b/demo/saga-dubbo-demo/servicec/pom.xml
similarity index 100%
rename from saga-demo/saga-dubbo-demo/servicec/pom.xml
rename to demo/saga-dubbo-demo/servicec/pom.xml
diff --git a/saga-demo/saga-dubbo-demo/servicec/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicec/ApplicationC.java b/demo/saga-dubbo-demo/servicec/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicec/ApplicationC.java
similarity index 100%
rename from saga-demo/saga-dubbo-demo/servicec/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicec/ApplicationC.java
rename to demo/saga-dubbo-demo/servicec/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicec/ApplicationC.java
diff --git a/saga-demo/saga-dubbo-demo/servicec/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicec/ServiceC.java b/demo/saga-dubbo-demo/servicec/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicec/ServiceC.java
similarity index 100%
rename from saga-demo/saga-dubbo-demo/servicec/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicec/ServiceC.java
rename to demo/saga-dubbo-demo/servicec/src/main/java/org/apache/servicecomb/saga/demo/dubbo/servicec/ServiceC.java
diff --git a/saga-demo/saga-dubbo-demo/servicec/src/main/resources/application.yaml b/demo/saga-dubbo-demo/servicec/src/main/resources/application.yaml
similarity index 100%
rename from saga-demo/saga-dubbo-demo/servicec/src/main/resources/application.yaml
rename to demo/saga-dubbo-demo/servicec/src/main/resources/application.yaml
diff --git a/saga-demo/saga-dubbo-demo/servicec/src/main/resources/dubbo-context.xml b/demo/saga-dubbo-demo/servicec/src/main/resources/dubbo-context.xml
similarity index 100%
rename from saga-demo/saga-dubbo-demo/servicec/src/main/resources/dubbo-context.xml
rename to demo/saga-dubbo-demo/servicec/src/main/resources/dubbo-context.xml
diff --git a/saga-demo/saga-dubbo-demo/servicea/src/main/resources/jdbc.xml b/demo/saga-dubbo-demo/servicec/src/main/resources/jdbc.xml
similarity index 100%
rename from saga-demo/saga-dubbo-demo/servicea/src/main/resources/jdbc.xml
rename to demo/saga-dubbo-demo/servicec/src/main/resources/jdbc.xml
diff --git a/saga-demo/tcc-spring-demo/inventory/src/main/resources/log4j2.xml b/demo/saga-dubbo-demo/servicec/src/main/resources/log4j2.xml
similarity index 100%
rename from saga-demo/tcc-spring-demo/inventory/src/main/resources/log4j2.xml
rename to demo/saga-dubbo-demo/servicec/src/main/resources/log4j2.xml
diff --git a/saga-demo/saga-dubbo-demo/servicec/src/main/resources/schema-mysql.sql b/demo/saga-dubbo-demo/servicec/src/main/resources/schema-mysql.sql
similarity index 100%
rename from saga-demo/saga-dubbo-demo/servicec/src/main/resources/schema-mysql.sql
rename to demo/saga-dubbo-demo/servicec/src/main/resources/schema-mysql.sql
diff --git a/saga-demo/saga-dubbo-demo/servicec/src/main/resources/schema-postgresql.sql b/demo/saga-dubbo-demo/servicec/src/main/resources/schema-postgresql.sql
similarity index 100%
rename from saga-demo/saga-dubbo-demo/servicec/src/main/resources/schema-postgresql.sql
rename to demo/saga-dubbo-demo/servicec/src/main/resources/schema-postgresql.sql
diff --git a/saga-demo/saga-dubbo-demo/sql/schema-mysql.sql b/demo/saga-dubbo-demo/sql/schema-mysql.sql
similarity index 100%
rename from saga-demo/saga-dubbo-demo/sql/schema-mysql.sql
rename to demo/saga-dubbo-demo/sql/schema-mysql.sql
diff --git a/saga-demo/saga-k8s-resources/README.md b/demo/saga-k8s-resources/README.md
similarity index 100%
rename from saga-demo/saga-k8s-resources/README.md
rename to demo/saga-k8s-resources/README.md
diff --git a/saga-demo/saga-k8s-resources/base/alpha.yaml b/demo/saga-k8s-resources/base/alpha.yaml
similarity index 100%
rename from saga-demo/saga-k8s-resources/base/alpha.yaml
rename to demo/saga-k8s-resources/base/alpha.yaml
diff --git a/saga-demo/saga-k8s-resources/base/jmeter-collector.yaml b/demo/saga-k8s-resources/base/jmeter-collector.yaml
similarity index 100%
rename from saga-demo/saga-k8s-resources/base/jmeter-collector.yaml
rename to demo/saga-k8s-resources/base/jmeter-collector.yaml
diff --git a/saga-demo/saga-k8s-resources/base/postgresql.yaml b/demo/saga-k8s-resources/base/postgresql.yaml
similarity index 100%
rename from saga-demo/saga-k8s-resources/base/postgresql.yaml
rename to demo/saga-k8s-resources/base/postgresql.yaml
diff --git a/saga-demo/saga-k8s-resources/spring-demo/booking.yaml b/demo/saga-k8s-resources/spring-demo/booking.yaml
similarity index 100%
rename from saga-demo/saga-k8s-resources/spring-demo/booking.yaml
rename to demo/saga-k8s-resources/spring-demo/booking.yaml
diff --git a/saga-demo/saga-k8s-resources/spring-demo/car.yaml b/demo/saga-k8s-resources/spring-demo/car.yaml
similarity index 100%
rename from saga-demo/saga-k8s-resources/spring-demo/car.yaml
rename to demo/saga-k8s-resources/spring-demo/car.yaml
diff --git a/saga-demo/saga-k8s-resources/spring-demo/hotel.yaml b/demo/saga-k8s-resources/spring-demo/hotel.yaml
similarity index 100%
rename from saga-demo/saga-k8s-resources/spring-demo/hotel.yaml
rename to demo/saga-k8s-resources/spring-demo/hotel.yaml
diff --git a/saga-demo/saga-k8s-resources/spring-demo/test/jmeter.configmap.yaml b/demo/saga-k8s-resources/spring-demo/test/jmeter.configmap.yaml
similarity index 100%
rename from saga-demo/saga-k8s-resources/spring-demo/test/jmeter.configmap.yaml
rename to demo/saga-k8s-resources/spring-demo/test/jmeter.configmap.yaml
diff --git a/saga-demo/saga-k8s-resources/spring-demo/test/jmeter.yaml b/demo/saga-k8s-resources/spring-demo/test/jmeter.yaml
similarity index 100%
rename from saga-demo/saga-k8s-resources/spring-demo/test/jmeter.yaml
rename to demo/saga-k8s-resources/spring-demo/test/jmeter.yaml
diff --git a/saga-demo/saga-servicecomb-demo/README.md b/demo/saga-servicecomb-demo/README.md
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/README.md
rename to demo/saga-servicecomb-demo/README.md
diff --git a/saga-demo/saga-servicecomb-demo/docker-compose.yaml b/demo/saga-servicecomb-demo/docker-compose.yaml
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/docker-compose.yaml
rename to demo/saga-servicecomb-demo/docker-compose.yaml
diff --git a/saga-demo/saga-servicecomb-demo/pom.xml b/demo/saga-servicecomb-demo/pom.xml
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/pom.xml
rename to demo/saga-servicecomb-demo/pom.xml
diff --git a/saga-demo/saga-servicecomb-demo/saga-servicecomb-demo.sh b/demo/saga-servicecomb-demo/saga-servicecomb-demo.sh
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/saga-servicecomb-demo.sh
rename to demo/saga-servicecomb-demo/saga-servicecomb-demo.sh
diff --git a/saga-demo/saga-servicecomb-demo/scb-booking/pom.xml b/demo/saga-servicecomb-demo/scb-booking/pom.xml
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/scb-booking/pom.xml
rename to demo/saga-servicecomb-demo/scb-booking/pom.xml
diff --git a/saga-demo/saga-servicecomb-demo/scb-booking/src/main/java/org/apache/servicecomb/saga/demo/scb/booking/BookingApplication.java b/demo/saga-servicecomb-demo/scb-booking/src/main/java/org/apache/servicecomb/saga/demo/scb/booking/BookingApplication.java
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/scb-booking/src/main/java/org/apache/servicecomb/saga/demo/scb/booking/BookingApplication.java
rename to demo/saga-servicecomb-demo/scb-booking/src/main/java/org/apache/servicecomb/saga/demo/scb/booking/BookingApplication.java
diff --git a/saga-demo/saga-servicecomb-demo/scb-booking/src/main/java/org/apache/servicecomb/saga/demo/scb/booking/BookingController.java b/demo/saga-servicecomb-demo/scb-booking/src/main/java/org/apache/servicecomb/saga/demo/scb/booking/BookingController.java
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/scb-booking/src/main/java/org/apache/servicecomb/saga/demo/scb/booking/BookingController.java
rename to demo/saga-servicecomb-demo/scb-booking/src/main/java/org/apache/servicecomb/saga/demo/scb/booking/BookingController.java
diff --git a/saga-demo/saga-spring-demo/booking/src/main/resources/application.yaml b/demo/saga-servicecomb-demo/scb-booking/src/main/resources/application.yaml
similarity index 100%
rename from saga-demo/saga-spring-demo/booking/src/main/resources/application.yaml
rename to demo/saga-servicecomb-demo/scb-booking/src/main/resources/application.yaml
diff --git a/saga-demo/saga-spring-demo/hotel/src/main/resources/log4j2.xml b/demo/saga-servicecomb-demo/scb-booking/src/main/resources/log4j2.xml
similarity index 100%
rename from saga-demo/saga-spring-demo/hotel/src/main/resources/log4j2.xml
rename to demo/saga-servicecomb-demo/scb-booking/src/main/resources/log4j2.xml
diff --git a/saga-demo/saga-servicecomb-demo/scb-booking/src/main/resources/microservice.yaml b/demo/saga-servicecomb-demo/scb-booking/src/main/resources/microservice.yaml
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/scb-booking/src/main/resources/microservice.yaml
rename to demo/saga-servicecomb-demo/scb-booking/src/main/resources/microservice.yaml
diff --git a/saga-demo/saga-servicecomb-demo/scb-car/pom.xml b/demo/saga-servicecomb-demo/scb-car/pom.xml
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/scb-car/pom.xml
rename to demo/saga-servicecomb-demo/scb-car/pom.xml
diff --git a/saga-demo/saga-servicecomb-demo/scb-car/src/main/java/org/apache/servicecomb/saga/demo/scb/car/CarApplication.java b/demo/saga-servicecomb-demo/scb-car/src/main/java/org/apache/servicecomb/saga/demo/scb/car/CarApplication.java
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/scb-car/src/main/java/org/apache/servicecomb/saga/demo/scb/car/CarApplication.java
rename to demo/saga-servicecomb-demo/scb-car/src/main/java/org/apache/servicecomb/saga/demo/scb/car/CarApplication.java
diff --git a/saga-demo/saga-servicecomb-demo/scb-car/src/main/java/org/apache/servicecomb/saga/demo/scb/car/CarBooking.java b/demo/saga-servicecomb-demo/scb-car/src/main/java/org/apache/servicecomb/saga/demo/scb/car/CarBooking.java
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/scb-car/src/main/java/org/apache/servicecomb/saga/demo/scb/car/CarBooking.java
rename to demo/saga-servicecomb-demo/scb-car/src/main/java/org/apache/servicecomb/saga/demo/scb/car/CarBooking.java
diff --git a/saga-demo/saga-servicecomb-demo/scb-car/src/main/java/org/apache/servicecomb/saga/demo/scb/car/CarBookingController.java b/demo/saga-servicecomb-demo/scb-car/src/main/java/org/apache/servicecomb/saga/demo/scb/car/CarBookingController.java
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/scb-car/src/main/java/org/apache/servicecomb/saga/demo/scb/car/CarBookingController.java
rename to demo/saga-servicecomb-demo/scb-car/src/main/java/org/apache/servicecomb/saga/demo/scb/car/CarBookingController.java
diff --git a/saga-demo/saga-servicecomb-demo/scb-car/src/main/java/org/apache/servicecomb/saga/demo/scb/car/CarBookingService.java b/demo/saga-servicecomb-demo/scb-car/src/main/java/org/apache/servicecomb/saga/demo/scb/car/CarBookingService.java
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/scb-car/src/main/java/org/apache/servicecomb/saga/demo/scb/car/CarBookingService.java
rename to demo/saga-servicecomb-demo/scb-car/src/main/java/org/apache/servicecomb/saga/demo/scb/car/CarBookingService.java
diff --git a/saga-demo/saga-spring-demo/car/src/main/resources/application.yaml b/demo/saga-servicecomb-demo/scb-car/src/main/resources/application.yaml
similarity index 100%
rename from saga-demo/saga-spring-demo/car/src/main/resources/application.yaml
rename to demo/saga-servicecomb-demo/scb-car/src/main/resources/application.yaml
diff --git a/saga-demo/saga-spring-demo/car/src/main/resources/log4j2.xml b/demo/saga-servicecomb-demo/scb-car/src/main/resources/log4j2.xml
similarity index 100%
rename from saga-demo/saga-spring-demo/car/src/main/resources/log4j2.xml
rename to demo/saga-servicecomb-demo/scb-car/src/main/resources/log4j2.xml
diff --git a/saga-demo/saga-servicecomb-demo/scb-car/src/main/resources/microservice.yaml b/demo/saga-servicecomb-demo/scb-car/src/main/resources/microservice.yaml
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/scb-car/src/main/resources/microservice.yaml
rename to demo/saga-servicecomb-demo/scb-car/src/main/resources/microservice.yaml
diff --git a/saga-demo/saga-servicecomb-demo/scb-hotel/pom.xml b/demo/saga-servicecomb-demo/scb-hotel/pom.xml
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/scb-hotel/pom.xml
rename to demo/saga-servicecomb-demo/scb-hotel/pom.xml
diff --git a/saga-demo/saga-servicecomb-demo/scb-hotel/src/main/java/org/apache/servicecomb/saga/demo/scb/hotel/HotelApplication.java b/demo/saga-servicecomb-demo/scb-hotel/src/main/java/org/apache/servicecomb/saga/demo/scb/hotel/HotelApplication.java
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/scb-hotel/src/main/java/org/apache/servicecomb/saga/demo/scb/hotel/HotelApplication.java
rename to demo/saga-servicecomb-demo/scb-hotel/src/main/java/org/apache/servicecomb/saga/demo/scb/hotel/HotelApplication.java
diff --git a/saga-demo/saga-servicecomb-demo/scb-hotel/src/main/java/org/apache/servicecomb/saga/demo/scb/hotel/HotelBooking.java b/demo/saga-servicecomb-demo/scb-hotel/src/main/java/org/apache/servicecomb/saga/demo/scb/hotel/HotelBooking.java
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/scb-hotel/src/main/java/org/apache/servicecomb/saga/demo/scb/hotel/HotelBooking.java
rename to demo/saga-servicecomb-demo/scb-hotel/src/main/java/org/apache/servicecomb/saga/demo/scb/hotel/HotelBooking.java
diff --git a/saga-demo/saga-servicecomb-demo/scb-hotel/src/main/java/org/apache/servicecomb/saga/demo/scb/hotel/HotelBookingController.java b/demo/saga-servicecomb-demo/scb-hotel/src/main/java/org/apache/servicecomb/saga/demo/scb/hotel/HotelBookingController.java
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/scb-hotel/src/main/java/org/apache/servicecomb/saga/demo/scb/hotel/HotelBookingController.java
rename to demo/saga-servicecomb-demo/scb-hotel/src/main/java/org/apache/servicecomb/saga/demo/scb/hotel/HotelBookingController.java
diff --git a/saga-demo/saga-servicecomb-demo/scb-hotel/src/main/java/org/apache/servicecomb/saga/demo/scb/hotel/HotelBookingService.java b/demo/saga-servicecomb-demo/scb-hotel/src/main/java/org/apache/servicecomb/saga/demo/scb/hotel/HotelBookingService.java
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/scb-hotel/src/main/java/org/apache/servicecomb/saga/demo/scb/hotel/HotelBookingService.java
rename to demo/saga-servicecomb-demo/scb-hotel/src/main/java/org/apache/servicecomb/saga/demo/scb/hotel/HotelBookingService.java
diff --git a/saga-demo/saga-spring-demo/hotel/src/main/resources/application.yaml b/demo/saga-servicecomb-demo/scb-hotel/src/main/resources/application.yaml
similarity index 100%
rename from saga-demo/saga-spring-demo/hotel/src/main/resources/application.yaml
rename to demo/saga-servicecomb-demo/scb-hotel/src/main/resources/application.yaml
diff --git a/saga-demo/saga-spring-demo/booking/src/main/resources/log4j2.xml b/demo/saga-servicecomb-demo/scb-hotel/src/main/resources/log4j2.xml
similarity index 100%
rename from saga-demo/saga-spring-demo/booking/src/main/resources/log4j2.xml
rename to demo/saga-servicecomb-demo/scb-hotel/src/main/resources/log4j2.xml
diff --git a/saga-demo/saga-servicecomb-demo/scb-hotel/src/main/resources/microservice.yaml b/demo/saga-servicecomb-demo/scb-hotel/src/main/resources/microservice.yaml
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/scb-hotel/src/main/resources/microservice.yaml
rename to demo/saga-servicecomb-demo/scb-hotel/src/main/resources/microservice.yaml
diff --git a/saga-demo/saga-spring-demo/README.md b/demo/saga-spring-demo/README.md
similarity index 100%
rename from saga-demo/saga-spring-demo/README.md
rename to demo/saga-spring-demo/README.md
diff --git a/saga-demo/saga-spring-demo/booking/pom.xml b/demo/saga-spring-demo/booking/pom.xml
similarity index 100%
rename from saga-demo/saga-spring-demo/booking/pom.xml
rename to demo/saga-spring-demo/booking/pom.xml
diff --git a/saga-demo/saga-spring-demo/booking/src/main/java/org/apache/servicecomb/saga/demo/pack/booking/Application.java b/demo/saga-spring-demo/booking/src/main/java/org/apache/servicecomb/saga/demo/pack/booking/Application.java
similarity index 100%
rename from saga-demo/saga-spring-demo/booking/src/main/java/org/apache/servicecomb/saga/demo/pack/booking/Application.java
rename to demo/saga-spring-demo/booking/src/main/java/org/apache/servicecomb/saga/demo/pack/booking/Application.java
diff --git a/saga-demo/saga-spring-demo/booking/src/main/java/org/apache/servicecomb/saga/demo/pack/booking/BookingController.java b/demo/saga-spring-demo/booking/src/main/java/org/apache/servicecomb/saga/demo/pack/booking/BookingController.java
similarity index 100%
rename from saga-demo/saga-spring-demo/booking/src/main/java/org/apache/servicecomb/saga/demo/pack/booking/BookingController.java
rename to demo/saga-spring-demo/booking/src/main/java/org/apache/servicecomb/saga/demo/pack/booking/BookingController.java
diff --git a/saga-demo/saga-spring-demo/booking/src/main/java/org/apache/servicecomb/saga/demo/pack/booking/MyConfiguration.java b/demo/saga-spring-demo/booking/src/main/java/org/apache/servicecomb/saga/demo/pack/booking/MyConfiguration.java
similarity index 100%
rename from saga-demo/saga-spring-demo/booking/src/main/java/org/apache/servicecomb/saga/demo/pack/booking/MyConfiguration.java
rename to demo/saga-spring-demo/booking/src/main/java/org/apache/servicecomb/saga/demo/pack/booking/MyConfiguration.java
diff --git a/saga-demo/saga-servicecomb-demo/scb-booking/src/main/resources/application.yaml b/demo/saga-spring-demo/booking/src/main/resources/application.yaml
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/scb-booking/src/main/resources/application.yaml
rename to demo/saga-spring-demo/booking/src/main/resources/application.yaml
diff --git a/saga-demo/saga-servicecomb-demo/scb-hotel/src/main/resources/log4j2.xml b/demo/saga-spring-demo/booking/src/main/resources/log4j2.xml
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/scb-hotel/src/main/resources/log4j2.xml
rename to demo/saga-spring-demo/booking/src/main/resources/log4j2.xml
diff --git a/saga-demo/saga-spring-demo/booking/src/main/resources/static/index.html b/demo/saga-spring-demo/booking/src/main/resources/static/index.html
similarity index 100%
rename from saga-demo/saga-spring-demo/booking/src/main/resources/static/index.html
rename to demo/saga-spring-demo/booking/src/main/resources/static/index.html
diff --git a/saga-demo/saga-spring-demo/car/pom.xml b/demo/saga-spring-demo/car/pom.xml
similarity index 100%
rename from saga-demo/saga-spring-demo/car/pom.xml
rename to demo/saga-spring-demo/car/pom.xml
diff --git a/saga-demo/saga-spring-demo/car/src/main/java/org/apache/servicecomb/saga/demo/pack/car/Application.java b/demo/saga-spring-demo/car/src/main/java/org/apache/servicecomb/saga/demo/pack/car/Application.java
similarity index 100%
rename from saga-demo/saga-spring-demo/car/src/main/java/org/apache/servicecomb/saga/demo/pack/car/Application.java
rename to demo/saga-spring-demo/car/src/main/java/org/apache/servicecomb/saga/demo/pack/car/Application.java
diff --git a/saga-demo/saga-spring-demo/car/src/main/java/org/apache/servicecomb/saga/demo/pack/car/CarBooking.java b/demo/saga-spring-demo/car/src/main/java/org/apache/servicecomb/saga/demo/pack/car/CarBooking.java
similarity index 100%
rename from saga-demo/saga-spring-demo/car/src/main/java/org/apache/servicecomb/saga/demo/pack/car/CarBooking.java
rename to demo/saga-spring-demo/car/src/main/java/org/apache/servicecomb/saga/demo/pack/car/CarBooking.java
diff --git a/saga-demo/saga-spring-demo/car/src/main/java/org/apache/servicecomb/saga/demo/pack/car/CarBookingController.java b/demo/saga-spring-demo/car/src/main/java/org/apache/servicecomb/saga/demo/pack/car/CarBookingController.java
similarity index 100%
rename from saga-demo/saga-spring-demo/car/src/main/java/org/apache/servicecomb/saga/demo/pack/car/CarBookingController.java
rename to demo/saga-spring-demo/car/src/main/java/org/apache/servicecomb/saga/demo/pack/car/CarBookingController.java
diff --git a/saga-demo/saga-spring-demo/car/src/main/java/org/apache/servicecomb/saga/demo/pack/car/CarBookingService.java b/demo/saga-spring-demo/car/src/main/java/org/apache/servicecomb/saga/demo/pack/car/CarBookingService.java
similarity index 100%
rename from saga-demo/saga-spring-demo/car/src/main/java/org/apache/servicecomb/saga/demo/pack/car/CarBookingService.java
rename to demo/saga-spring-demo/car/src/main/java/org/apache/servicecomb/saga/demo/pack/car/CarBookingService.java
diff --git a/saga-demo/saga-servicecomb-demo/scb-car/src/main/resources/application.yaml b/demo/saga-spring-demo/car/src/main/resources/application.yaml
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/scb-car/src/main/resources/application.yaml
rename to demo/saga-spring-demo/car/src/main/resources/application.yaml
diff --git a/saga-demo/saga-servicecomb-demo/scb-car/src/main/resources/log4j2.xml b/demo/saga-spring-demo/car/src/main/resources/log4j2.xml
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/scb-car/src/main/resources/log4j2.xml
rename to demo/saga-spring-demo/car/src/main/resources/log4j2.xml
diff --git a/saga-demo/saga-spring-demo/docker-compose-alpha-perf.yaml b/demo/saga-spring-demo/docker-compose-alpha-perf.yaml
similarity index 100%
rename from saga-demo/saga-spring-demo/docker-compose-alpha-perf.yaml
rename to demo/saga-spring-demo/docker-compose-alpha-perf.yaml
diff --git a/saga-demo/saga-spring-demo/docker-compose-alpha.yaml b/demo/saga-spring-demo/docker-compose-alpha.yaml
similarity index 100%
rename from saga-demo/saga-spring-demo/docker-compose-alpha.yaml
rename to demo/saga-spring-demo/docker-compose-alpha.yaml
diff --git a/saga-demo/saga-spring-demo/docker-compose-demo.yaml b/demo/saga-spring-demo/docker-compose-demo.yaml
similarity index 100%
rename from saga-demo/saga-spring-demo/docker-compose-demo.yaml
rename to demo/saga-spring-demo/docker-compose-demo.yaml
diff --git a/saga-demo/tcc-spring-demo/docker-compose.mysql.yaml b/demo/saga-spring-demo/docker-compose.mysql.yaml
similarity index 100%
rename from saga-demo/tcc-spring-demo/docker-compose.mysql.yaml
rename to demo/saga-spring-demo/docker-compose.mysql.yaml
diff --git a/saga-demo/saga-spring-demo/docker-compose.yaml b/demo/saga-spring-demo/docker-compose.yaml
similarity index 100%
rename from saga-demo/saga-spring-demo/docker-compose.yaml
rename to demo/saga-spring-demo/docker-compose.yaml
diff --git a/saga-demo/saga-spring-demo/hotel/pom.xml b/demo/saga-spring-demo/hotel/pom.xml
similarity index 100%
rename from saga-demo/saga-spring-demo/hotel/pom.xml
rename to demo/saga-spring-demo/hotel/pom.xml
diff --git a/saga-demo/saga-spring-demo/hotel/src/main/java/org/apache/servicecomb/saga/demo/pack/hotel/Application.java b/demo/saga-spring-demo/hotel/src/main/java/org/apache/servicecomb/saga/demo/pack/hotel/Application.java
similarity index 100%
rename from saga-demo/saga-spring-demo/hotel/src/main/java/org/apache/servicecomb/saga/demo/pack/hotel/Application.java
rename to demo/saga-spring-demo/hotel/src/main/java/org/apache/servicecomb/saga/demo/pack/hotel/Application.java
diff --git a/saga-demo/saga-spring-demo/hotel/src/main/java/org/apache/servicecomb/saga/demo/pack/hotel/HotelBooking.java b/demo/saga-spring-demo/hotel/src/main/java/org/apache/servicecomb/saga/demo/pack/hotel/HotelBooking.java
similarity index 100%
rename from saga-demo/saga-spring-demo/hotel/src/main/java/org/apache/servicecomb/saga/demo/pack/hotel/HotelBooking.java
rename to demo/saga-spring-demo/hotel/src/main/java/org/apache/servicecomb/saga/demo/pack/hotel/HotelBooking.java
diff --git a/saga-demo/saga-spring-demo/hotel/src/main/java/org/apache/servicecomb/saga/demo/pack/hotel/HotelBookingController.java b/demo/saga-spring-demo/hotel/src/main/java/org/apache/servicecomb/saga/demo/pack/hotel/HotelBookingController.java
similarity index 100%
rename from saga-demo/saga-spring-demo/hotel/src/main/java/org/apache/servicecomb/saga/demo/pack/hotel/HotelBookingController.java
rename to demo/saga-spring-demo/hotel/src/main/java/org/apache/servicecomb/saga/demo/pack/hotel/HotelBookingController.java
diff --git a/saga-demo/saga-spring-demo/hotel/src/main/java/org/apache/servicecomb/saga/demo/pack/hotel/HotelBookingService.java b/demo/saga-spring-demo/hotel/src/main/java/org/apache/servicecomb/saga/demo/pack/hotel/HotelBookingService.java
similarity index 100%
rename from saga-demo/saga-spring-demo/hotel/src/main/java/org/apache/servicecomb/saga/demo/pack/hotel/HotelBookingService.java
rename to demo/saga-spring-demo/hotel/src/main/java/org/apache/servicecomb/saga/demo/pack/hotel/HotelBookingService.java
diff --git a/saga-demo/saga-servicecomb-demo/scb-hotel/src/main/resources/application.yaml b/demo/saga-spring-demo/hotel/src/main/resources/application.yaml
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/scb-hotel/src/main/resources/application.yaml
rename to demo/saga-spring-demo/hotel/src/main/resources/application.yaml
diff --git a/saga-demo/saga-servicecomb-demo/scb-booking/src/main/resources/log4j2.xml b/demo/saga-spring-demo/hotel/src/main/resources/log4j2.xml
similarity index 100%
rename from saga-demo/saga-servicecomb-demo/scb-booking/src/main/resources/log4j2.xml
rename to demo/saga-spring-demo/hotel/src/main/resources/log4j2.xml
diff --git a/saga-demo/saga-spring-demo/pom.xml b/demo/saga-spring-demo/pom.xml
similarity index 100%
rename from saga-demo/saga-spring-demo/pom.xml
rename to demo/saga-spring-demo/pom.xml
diff --git a/saga-demo/saga-spring-demo/saga-demo.sh b/demo/saga-spring-demo/saga-demo.sh
similarity index 100%
rename from saga-demo/saga-spring-demo/saga-demo.sh
rename to demo/saga-spring-demo/saga-demo.sh
diff --git a/saga-demo/tcc-spring-demo/README.md b/demo/tcc-spring-demo/README.md
similarity index 100%
rename from saga-demo/tcc-spring-demo/README.md
rename to demo/tcc-spring-demo/README.md
diff --git a/saga-demo/saga-dubbo-demo/docker-compose-alpha.yaml b/demo/tcc-spring-demo/docker-compose-alpha.yaml
similarity index 100%
rename from saga-demo/saga-dubbo-demo/docker-compose-alpha.yaml
rename to demo/tcc-spring-demo/docker-compose-alpha.yaml
diff --git a/saga-demo/tcc-spring-demo/docker-compose-demo.yaml b/demo/tcc-spring-demo/docker-compose-demo.yaml
similarity index 100%
rename from saga-demo/tcc-spring-demo/docker-compose-demo.yaml
rename to demo/tcc-spring-demo/docker-compose-demo.yaml
diff --git a/saga-demo/saga-spring-demo/docker-compose.mysql.yaml b/demo/tcc-spring-demo/docker-compose.mysql.yaml
similarity index 100%
rename from saga-demo/saga-spring-demo/docker-compose.mysql.yaml
rename to demo/tcc-spring-demo/docker-compose.mysql.yaml
diff --git a/saga-demo/tcc-spring-demo/docker-compose.yaml b/demo/tcc-spring-demo/docker-compose.yaml
similarity index 100%
rename from saga-demo/tcc-spring-demo/docker-compose.yaml
rename to demo/tcc-spring-demo/docker-compose.yaml
diff --git a/saga-demo/tcc-spring-demo/inventory/pom.xml b/demo/tcc-spring-demo/inventory/pom.xml
similarity index 98%
rename from saga-demo/tcc-spring-demo/inventory/pom.xml
rename to demo/tcc-spring-demo/inventory/pom.xml
index 8d44906..7bd1d4f 100644
--- a/saga-demo/tcc-spring-demo/inventory/pom.xml
+++ b/demo/tcc-spring-demo/inventory/pom.xml
@@ -48,7 +48,7 @@
     <!-- Added the eclipse link JPA configuration-->
     <dependency>
       <groupId>org.apache.servicecomb.saga</groupId>
-      <artifactId>saga-persistence-jpa</artifactId>
+      <artifactId>persistence-jpa</artifactId>
     </dependency>
     <!-- Added the driver of h2 -->
     <dependency>
diff --git a/saga-demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/InventoryService.java b/demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/InventoryService.java
similarity index 100%
rename from saga-demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/InventoryService.java
rename to demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/InventoryService.java
diff --git a/saga-demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/Product.java b/demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/Product.java
similarity index 100%
rename from saga-demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/Product.java
rename to demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/Product.java
diff --git a/saga-demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/ProductController.java b/demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/ProductController.java
similarity index 100%
rename from saga-demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/ProductController.java
rename to demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/ProductController.java
diff --git a/saga-demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/ProductDao.java b/demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/ProductDao.java
similarity index 100%
rename from saga-demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/ProductDao.java
rename to demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/ProductDao.java
diff --git a/saga-demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/ProductOrder.java b/demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/ProductOrder.java
similarity index 100%
rename from saga-demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/ProductOrder.java
rename to demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/ProductOrder.java
diff --git a/saga-demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/TccInventoryApplication.java b/demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/TccInventoryApplication.java
similarity index 100%
rename from saga-demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/TccInventoryApplication.java
rename to demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/saga/demo/pack/inventory/TccInventoryApplication.java
diff --git a/saga-demo/tcc-spring-demo/inventory/src/main/resources/application.yaml b/demo/tcc-spring-demo/inventory/src/main/resources/application.yaml
similarity index 100%
rename from saga-demo/tcc-spring-demo/inventory/src/main/resources/application.yaml
rename to demo/tcc-spring-demo/inventory/src/main/resources/application.yaml
diff --git a/saga-demo/saga-dubbo-demo/servicec/src/main/resources/log4j2.xml b/demo/tcc-spring-demo/inventory/src/main/resources/log4j2.xml
similarity index 100%
rename from saga-demo/saga-dubbo-demo/servicec/src/main/resources/log4j2.xml
rename to demo/tcc-spring-demo/inventory/src/main/resources/log4j2.xml
diff --git a/saga-demo/tcc-spring-demo/inventory/src/test/java/org/apache/servicecomb/saga/demo/pack/inventory/InventoryServiceTest.java b/demo/tcc-spring-demo/inventory/src/test/java/org/apache/servicecomb/saga/demo/pack/inventory/InventoryServiceTest.java
similarity index 100%
rename from saga-demo/tcc-spring-demo/inventory/src/test/java/org/apache/servicecomb/saga/demo/pack/inventory/InventoryServiceTest.java
rename to demo/tcc-spring-demo/inventory/src/test/java/org/apache/servicecomb/saga/demo/pack/inventory/InventoryServiceTest.java
diff --git a/saga-demo/tcc-spring-demo/inventory/src/test/java/org/apache/servicecomb/saga/demo/pack/inventory/ProductControllerTest.java b/demo/tcc-spring-demo/inventory/src/test/java/org/apache/servicecomb/saga/demo/pack/inventory/ProductControllerTest.java
similarity index 100%
rename from saga-demo/tcc-spring-demo/inventory/src/test/java/org/apache/servicecomb/saga/demo/pack/inventory/ProductControllerTest.java
rename to demo/tcc-spring-demo/inventory/src/test/java/org/apache/servicecomb/saga/demo/pack/inventory/ProductControllerTest.java
diff --git a/saga-demo/tcc-spring-demo/inventory/src/test/java/org/apache/servicecomb/saga/demo/pack/inventory/TestApplication.java b/demo/tcc-spring-demo/inventory/src/test/java/org/apache/servicecomb/saga/demo/pack/inventory/TestApplication.java
similarity index 100%
rename from saga-demo/tcc-spring-demo/inventory/src/test/java/org/apache/servicecomb/saga/demo/pack/inventory/TestApplication.java
rename to demo/tcc-spring-demo/inventory/src/test/java/org/apache/servicecomb/saga/demo/pack/inventory/TestApplication.java
diff --git a/saga-demo/tcc-spring-demo/ordering/pom.xml b/demo/tcc-spring-demo/ordering/pom.xml
similarity index 100%
rename from saga-demo/tcc-spring-demo/ordering/pom.xml
rename to demo/tcc-spring-demo/ordering/pom.xml
diff --git a/saga-demo/tcc-spring-demo/ordering/src/main/java/org/apache/servicecomb/saga/demo/pack/ordering/OrderingController.java b/demo/tcc-spring-demo/ordering/src/main/java/org/apache/servicecomb/saga/demo/pack/ordering/OrderingController.java
similarity index 100%
rename from saga-demo/tcc-spring-demo/ordering/src/main/java/org/apache/servicecomb/saga/demo/pack/ordering/OrderingController.java
rename to demo/tcc-spring-demo/ordering/src/main/java/org/apache/servicecomb/saga/demo/pack/ordering/OrderingController.java
diff --git a/saga-demo/tcc-spring-demo/ordering/src/main/java/org/apache/servicecomb/saga/demo/pack/ordering/TccOrderingApplication.java b/demo/tcc-spring-demo/ordering/src/main/java/org/apache/servicecomb/saga/demo/pack/ordering/TccOrderingApplication.java
similarity index 100%
rename from saga-demo/tcc-spring-demo/ordering/src/main/java/org/apache/servicecomb/saga/demo/pack/ordering/TccOrderingApplication.java
rename to demo/tcc-spring-demo/ordering/src/main/java/org/apache/servicecomb/saga/demo/pack/ordering/TccOrderingApplication.java
diff --git a/saga-demo/tcc-spring-demo/ordering/src/main/resources/application.yaml b/demo/tcc-spring-demo/ordering/src/main/resources/application.yaml
similarity index 100%
rename from saga-demo/tcc-spring-demo/ordering/src/main/resources/application.yaml
rename to demo/tcc-spring-demo/ordering/src/main/resources/application.yaml
diff --git a/saga-demo/saga-dubbo-demo/serviceb/src/main/resources/log4j2.xml b/demo/tcc-spring-demo/ordering/src/main/resources/log4j2.xml
similarity index 100%
rename from saga-demo/saga-dubbo-demo/serviceb/src/main/resources/log4j2.xml
rename to demo/tcc-spring-demo/ordering/src/main/resources/log4j2.xml
diff --git a/saga-demo/tcc-spring-demo/payment/pom.xml b/demo/tcc-spring-demo/payment/pom.xml
similarity index 98%
rename from saga-demo/tcc-spring-demo/payment/pom.xml
rename to demo/tcc-spring-demo/payment/pom.xml
index 9a91dbd..b8aa181 100644
--- a/saga-demo/tcc-spring-demo/payment/pom.xml
+++ b/demo/tcc-spring-demo/payment/pom.xml
@@ -46,7 +46,7 @@
     <!-- Added the eclipse link JPA configuration-->
     <dependency>
       <groupId>org.apache.servicecomb.saga</groupId>
-      <artifactId>saga-persistence-jpa</artifactId>
+      <artifactId>persistence-jpa</artifactId>
     </dependency>
     <!-- Added the driver of h2 -->
     <dependency>
diff --git a/saga-demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/Account.java b/demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/Account.java
similarity index 100%
rename from saga-demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/Account.java
rename to demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/Account.java
diff --git a/saga-demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/AccountDao.java b/demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/AccountDao.java
similarity index 100%
rename from saga-demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/AccountDao.java
rename to demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/AccountDao.java
diff --git a/saga-demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/Payment.java b/demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/Payment.java
similarity index 100%
rename from saga-demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/Payment.java
rename to demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/Payment.java
diff --git a/saga-demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentController.java b/demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentController.java
similarity index 100%
rename from saga-demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentController.java
rename to demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentController.java
diff --git a/saga-demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentService.java b/demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentService.java
similarity index 100%
rename from saga-demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentService.java
rename to demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentService.java
diff --git a/saga-demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/TccPaymentApplication.java b/demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/TccPaymentApplication.java
similarity index 100%
rename from saga-demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/TccPaymentApplication.java
rename to demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/saga/demo/pack/payment/TccPaymentApplication.java
diff --git a/saga-demo/tcc-spring-demo/payment/src/main/resources/application.yaml b/demo/tcc-spring-demo/payment/src/main/resources/application.yaml
similarity index 100%
rename from saga-demo/tcc-spring-demo/payment/src/main/resources/application.yaml
rename to demo/tcc-spring-demo/payment/src/main/resources/application.yaml
diff --git a/saga-demo/saga-dubbo-demo/servicea/src/main/resources/log4j2.xml b/demo/tcc-spring-demo/payment/src/main/resources/log4j2.xml
similarity index 100%
rename from saga-demo/saga-dubbo-demo/servicea/src/main/resources/log4j2.xml
rename to demo/tcc-spring-demo/payment/src/main/resources/log4j2.xml
diff --git a/saga-demo/tcc-spring-demo/payment/src/test/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentControllerTest.java b/demo/tcc-spring-demo/payment/src/test/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentControllerTest.java
similarity index 100%
rename from saga-demo/tcc-spring-demo/payment/src/test/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentControllerTest.java
rename to demo/tcc-spring-demo/payment/src/test/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentControllerTest.java
diff --git a/saga-demo/tcc-spring-demo/payment/src/test/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentServiceTest.java b/demo/tcc-spring-demo/payment/src/test/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentServiceTest.java
similarity index 100%
rename from saga-demo/tcc-spring-demo/payment/src/test/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentServiceTest.java
rename to demo/tcc-spring-demo/payment/src/test/java/org/apache/servicecomb/saga/demo/pack/payment/PaymentServiceTest.java
diff --git a/saga-demo/tcc-spring-demo/payment/src/test/java/org/apache/servicecomb/saga/demo/pack/payment/TestApplication.java b/demo/tcc-spring-demo/payment/src/test/java/org/apache/servicecomb/saga/demo/pack/payment/TestApplication.java
similarity index 100%
rename from saga-demo/tcc-spring-demo/payment/src/test/java/org/apache/servicecomb/saga/demo/pack/payment/TestApplication.java
rename to demo/tcc-spring-demo/payment/src/test/java/org/apache/servicecomb/saga/demo/pack/payment/TestApplication.java
diff --git a/saga-demo/tcc-spring-demo/pom.xml b/demo/tcc-spring-demo/pom.xml
similarity index 100%
rename from saga-demo/tcc-spring-demo/pom.xml
rename to demo/tcc-spring-demo/pom.xml
diff --git a/saga-demo/tcc-spring-demo/saga-demo.sh b/demo/tcc-spring-demo/saga-demo.sh
similarity index 100%
rename from saga-demo/tcc-spring-demo/saga-demo.sh
rename to demo/tcc-spring-demo/saga-demo.sh
diff --git a/saga-distribution/pom.xml b/distribution/pom.xml
similarity index 100%
rename from saga-distribution/pom.xml
rename to distribution/pom.xml
diff --git a/saga-distribution/src/assembly/bin.xml b/distribution/src/assembly/bin.xml
similarity index 100%
rename from saga-distribution/src/assembly/bin.xml
rename to distribution/src/assembly/bin.xml
diff --git a/saga-distribution/src/assembly/src.xml b/distribution/src/assembly/src.xml
similarity index 100%
rename from saga-distribution/src/assembly/src.xml
rename to distribution/src/assembly/src.xml
diff --git a/saga-distribution/src/release/LICENSE b/distribution/src/release/LICENSE
similarity index 100%
rename from saga-distribution/src/release/LICENSE
rename to distribution/src/release/LICENSE
diff --git a/saga-distribution/src/release/NOTICE b/distribution/src/release/NOTICE
similarity index 100%
rename from saga-distribution/src/release/NOTICE
rename to distribution/src/release/NOTICE
diff --git a/saga-distribution/src/release/licenses/LICENSE-asm b/distribution/src/release/licenses/LICENSE-asm
similarity index 100%
rename from saga-distribution/src/release/licenses/LICENSE-asm
rename to distribution/src/release/licenses/LICENSE-asm
diff --git a/saga-distribution/src/release/licenses/LICENSE-boringssl b/distribution/src/release/licenses/LICENSE-boringssl
similarity index 100%
rename from saga-distribution/src/release/licenses/LICENSE-boringssl
rename to distribution/src/release/licenses/LICENSE-boringssl
diff --git a/saga-distribution/src/release/licenses/LICENSE-epl-v10 b/distribution/src/release/licenses/LICENSE-epl-v10
similarity index 100%
rename from saga-distribution/src/release/licenses/LICENSE-epl-v10
rename to distribution/src/release/licenses/LICENSE-epl-v10
diff --git a/saga-distribution/src/release/licenses/LICENSE-esotericsoftware b/distribution/src/release/licenses/LICENSE-esotericsoftware
similarity index 100%
rename from saga-distribution/src/release/licenses/LICENSE-esotericsoftware
rename to distribution/src/release/licenses/LICENSE-esotericsoftware
diff --git a/saga-distribution/src/release/licenses/LICENSE-javax b/distribution/src/release/licenses/LICENSE-javax
similarity index 100%
rename from saga-distribution/src/release/licenses/LICENSE-javax
rename to distribution/src/release/licenses/LICENSE-javax
diff --git a/saga-distribution/src/release/licenses/LICENSE-logback b/distribution/src/release/licenses/LICENSE-logback
similarity index 100%
rename from saga-distribution/src/release/licenses/LICENSE-logback
rename to distribution/src/release/licenses/LICENSE-logback
diff --git a/saga-distribution/src/release/licenses/LICENSE-ngxadmin b/distribution/src/release/licenses/LICENSE-ngxadmin
similarity index 100%
rename from saga-distribution/src/release/licenses/LICENSE-ngxadmin
rename to distribution/src/release/licenses/LICENSE-ngxadmin
diff --git a/saga-distribution/src/release/licenses/LICENSE-openfeign b/distribution/src/release/licenses/LICENSE-openfeign
similarity index 100%
rename from saga-distribution/src/release/licenses/LICENSE-openfeign
rename to distribution/src/release/licenses/LICENSE-openfeign
diff --git a/saga-distribution/src/release/licenses/LICENSE-postgresql b/distribution/src/release/licenses/LICENSE-postgresql
similarity index 100%
rename from saga-distribution/src/release/licenses/LICENSE-postgresql
rename to distribution/src/release/licenses/LICENSE-postgresql
diff --git a/saga-distribution/src/release/licenses/LICENSE-protobuf b/distribution/src/release/licenses/LICENSE-protobuf
similarity index 100%
rename from saga-distribution/src/release/licenses/LICENSE-protobuf
rename to distribution/src/release/licenses/LICENSE-protobuf
diff --git a/saga-distribution/src/release/licenses/LICENSE-slf4j b/distribution/src/release/licenses/LICENSE-slf4j
similarity index 100%
rename from saga-distribution/src/release/licenses/LICENSE-slf4j
rename to distribution/src/release/licenses/LICENSE-slf4j
diff --git a/saga-distribution/src/release/licenses/NOTICE-grpc b/distribution/src/release/licenses/NOTICE-grpc
similarity index 100%
rename from saga-distribution/src/release/licenses/NOTICE-grpc
rename to distribution/src/release/licenses/NOTICE-grpc
diff --git a/saga-distribution/src/release/licenses/NOTICE-netty b/distribution/src/release/licenses/NOTICE-netty
similarity index 100%
rename from saga-distribution/src/release/licenses/NOTICE-netty
rename to distribution/src/release/licenses/NOTICE-netty
diff --git a/saga-distribution/src/release/licenses/NOTICE-netty-tcnative b/distribution/src/release/licenses/NOTICE-netty-tcnative
similarity index 100%
rename from saga-distribution/src/release/licenses/NOTICE-netty-tcnative
rename to distribution/src/release/licenses/NOTICE-netty-tcnative
diff --git a/saga-distribution/src/release/licenses/NOTICE-tomcat b/distribution/src/release/licenses/NOTICE-tomcat
similarity index 100%
rename from saga-distribution/src/release/licenses/NOTICE-tomcat
rename to distribution/src/release/licenses/NOTICE-tomcat
diff --git a/integration-tests/pack-tests/pom.xml b/integration-tests/pack-tests/pom.xml
index f94d2f9..2f2ca9c 100644
--- a/integration-tests/pack-tests/pom.xml
+++ b/integration-tests/pack-tests/pom.xml
@@ -108,7 +108,7 @@
     </dependency>
     <dependency>
       <groupId>org.apache.servicecomb.pack</groupId>
-      <artifactId>saga-persistence-jpa</artifactId>
+      <artifactId>persistence-jpa</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/omega/omega-spring-tx/pom.xml b/omega/omega-spring-tx/pom.xml
index fb51024..f76ac38 100644
--- a/omega/omega-spring-tx/pom.xml
+++ b/omega/omega-spring-tx/pom.xml
@@ -76,7 +76,7 @@
     </dependency>
     <dependency>
       <groupId>org.apache.servicecomb.pack</groupId>
-      <artifactId>saga-persistence-jpa</artifactId>
+      <artifactId>persistence-jpa</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/saga-persistence/saga-persistence-jpa/pom.xml b/persistence/persistence-jpa/pom.xml
similarity index 97%
rename from saga-persistence/saga-persistence-jpa/pom.xml
rename to persistence/persistence-jpa/pom.xml
index b08dc8d..cdc35f3 100644
--- a/saga-persistence/saga-persistence-jpa/pom.xml
+++ b/persistence/persistence-jpa/pom.xml
@@ -26,7 +26,8 @@
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
-  <artifactId>saga-persistence-jpa</artifactId>
+  <name>Pack::Persistence::JPA</name>
+  <artifactId>persistence-jpa</artifactId>
 
   <dependencyManagement>
     <dependencies>
diff --git a/saga-persistence/saga-persistence-jpa/src/main/java/org/apache/servicecomb/saga/persistence/jpa/EclipseLinkJpaConfiguration.java b/persistence/persistence-jpa/src/main/java/org/apache/servicecomb/saga/persistence/jpa/EclipseLinkJpaConfiguration.java
similarity index 100%
rename from saga-persistence/saga-persistence-jpa/src/main/java/org/apache/servicecomb/saga/persistence/jpa/EclipseLinkJpaConfiguration.java
rename to persistence/persistence-jpa/src/main/java/org/apache/servicecomb/saga/persistence/jpa/EclipseLinkJpaConfiguration.java
diff --git a/saga-persistence/saga-persistence-jpa/src/main/resources/META-INF/spring.factories b/persistence/persistence-jpa/src/main/resources/META-INF/spring.factories
similarity index 100%
rename from saga-persistence/saga-persistence-jpa/src/main/resources/META-INF/spring.factories
rename to persistence/persistence-jpa/src/main/resources/META-INF/spring.factories
diff --git a/saga-persistence/pom.xml b/persistence/pom.xml
similarity index 92%
rename from saga-persistence/pom.xml
rename to persistence/pom.xml
index 5f0cd41..990ab84 100644
--- a/saga-persistence/pom.xml
+++ b/persistence/pom.xml
@@ -26,10 +26,11 @@
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
-  <artifactId>saga-persistence</artifactId>
+  <artifactId>persistence</artifactId>
+  <name>Pack::Persistence</name>
   <packaging>pom</packaging>
   <modules>
-    <module>saga-persistence-jpa</module>
+    <module>persistence-jpa</module>
   </modules>
 
 
diff --git a/pom.xml b/pom.xml
index b10dc2c..5c8aa56 100644
--- a/pom.xml
+++ b/pom.xml
@@ -32,13 +32,13 @@
 
   <modules>
     <module>docker-build-config</module>
-    <module>saga-web</module>
     <module>omega</module>
     <module>alpha</module>
     <module>pack-contracts</module>
     <module>pack-common</module>
     <module>integration-tests</module>
-    <module>saga-persistence</module>
+    <module>persistence</module>
+    <module>web</module>
   </modules>
 
   <properties>
@@ -313,7 +313,7 @@
       <!-- TODO rename this artifact -->
       <dependency>
        <groupId>org.apache.servicecomb.pack</groupId>
-       <artifactId>saga-persistence-jpa</artifactId>
+       <artifactId>persistence-jpa</artifactId>
        <version>0.3.0-SNAPSHOT</version>
        </dependency>
       <dependency>
@@ -777,8 +777,8 @@
     <profile>
       <id>release</id>
       <modules>
-        <module>saga-demo</module>
-        <module>saga-distribution</module>
+        <module>demo</module>
+        <module>distribution</module>
       </modules>
       <build>
         <plugins>
@@ -839,7 +839,7 @@
     <profile>
       <id>demo</id>
       <modules>
-        <module>saga-demo</module>
+        <module>demo</module>
         <module>acceptance-tests</module>
       </modules>
     </profile>
diff --git a/saga-web/pom.xml b/web/pom.xml
similarity index 99%
rename from saga-web/pom.xml
rename to web/pom.xml
index 2622563..83d39b5 100644
--- a/saga-web/pom.xml
+++ b/web/pom.xml
@@ -26,7 +26,7 @@
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
-  <artifactId>saga-web</artifactId>
+  <artifactId>pack-web</artifactId>
   <name>Pack::Web</name>
 
   <dependencyManagement>
diff --git a/saga-web/src/main/java/org/apache/servicecomb/saga/web/SagaWebApplication.java b/web/src/main/java/org/apache/servicecomb/saga/web/SagaWebApplication.java
similarity index 100%
rename from saga-web/src/main/java/org/apache/servicecomb/saga/web/SagaWebApplication.java
rename to web/src/main/java/org/apache/servicecomb/saga/web/SagaWebApplication.java
diff --git a/saga-web/src/main/resources/application.yaml b/web/src/main/resources/application.yaml
similarity index 100%
rename from saga-web/src/main/resources/application.yaml
rename to web/src/main/resources/application.yaml
diff --git a/saga-web/src/main/resources/microservice.yaml b/web/src/main/resources/microservice.yaml
similarity index 100%
rename from saga-web/src/main/resources/microservice.yaml
rename to web/src/main/resources/microservice.yaml
diff --git a/saga-web/src/main/resources/saga-frontend/README.md b/web/src/main/resources/saga-frontend/README.md
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/README.md
rename to web/src/main/resources/saga-frontend/README.md
diff --git a/saga-web/src/main/resources/saga-frontend/angular.json b/web/src/main/resources/saga-frontend/angular.json
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/angular.json
rename to web/src/main/resources/saga-frontend/angular.json
diff --git a/saga-web/src/main/resources/saga-frontend/package.json b/web/src/main/resources/saga-frontend/package.json
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/package.json
rename to web/src/main/resources/saga-frontend/package.json
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@core/core.module.ts b/web/src/main/resources/saga-frontend/src/app/@core/core.module.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@core/core.module.ts
rename to web/src/main/resources/saga-frontend/src/app/@core/core.module.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@core/data/data.module.ts b/web/src/main/resources/saga-frontend/src/app/@core/data/data.module.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@core/data/data.module.ts
rename to web/src/main/resources/saga-frontend/src/app/@core/data/data.module.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@core/data/saga-events.service.ts b/web/src/main/resources/saga-frontend/src/app/@core/data/saga-events.service.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@core/data/saga-events.service.ts
rename to web/src/main/resources/saga-frontend/src/app/@core/data/saga-events.service.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@core/data/state.service.ts b/web/src/main/resources/saga-frontend/src/app/@core/data/state.service.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@core/data/state.service.ts
rename to web/src/main/resources/saga-frontend/src/app/@core/data/state.service.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@core/module-import-guard.ts b/web/src/main/resources/saga-frontend/src/app/@core/module-import-guard.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@core/module-import-guard.ts
rename to web/src/main/resources/saga-frontend/src/app/@core/module-import-guard.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@core/utils/analytics.service.ts b/web/src/main/resources/saga-frontend/src/app/@core/utils/analytics.service.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@core/utils/analytics.service.ts
rename to web/src/main/resources/saga-frontend/src/app/@core/utils/analytics.service.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@core/utils/util.service.ts b/web/src/main/resources/saga-frontend/src/app/@core/utils/util.service.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@core/utils/util.service.ts
rename to web/src/main/resources/saga-frontend/src/app/@core/utils/util.service.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/components/footer/footer.component.scss b/web/src/main/resources/saga-frontend/src/app/@theme/components/footer/footer.component.scss
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/components/footer/footer.component.scss
rename to web/src/main/resources/saga-frontend/src/app/@theme/components/footer/footer.component.scss
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/components/footer/footer.component.ts b/web/src/main/resources/saga-frontend/src/app/@theme/components/footer/footer.component.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/components/footer/footer.component.ts
rename to web/src/main/resources/saga-frontend/src/app/@theme/components/footer/footer.component.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/components/header/header.component.html b/web/src/main/resources/saga-frontend/src/app/@theme/components/header/header.component.html
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/components/header/header.component.html
rename to web/src/main/resources/saga-frontend/src/app/@theme/components/header/header.component.html
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/components/header/header.component.scss b/web/src/main/resources/saga-frontend/src/app/@theme/components/header/header.component.scss
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/components/header/header.component.scss
rename to web/src/main/resources/saga-frontend/src/app/@theme/components/header/header.component.scss
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/components/header/header.component.ts b/web/src/main/resources/saga-frontend/src/app/@theme/components/header/header.component.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/components/header/header.component.ts
rename to web/src/main/resources/saga-frontend/src/app/@theme/components/header/header.component.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/components/index.ts b/web/src/main/resources/saga-frontend/src/app/@theme/components/index.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/components/index.ts
rename to web/src/main/resources/saga-frontend/src/app/@theme/components/index.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/components/switcher/switcher.component.scss b/web/src/main/resources/saga-frontend/src/app/@theme/components/switcher/switcher.component.scss
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/components/switcher/switcher.component.scss
rename to web/src/main/resources/saga-frontend/src/app/@theme/components/switcher/switcher.component.scss
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/components/switcher/switcher.component.ts b/web/src/main/resources/saga-frontend/src/app/@theme/components/switcher/switcher.component.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/components/switcher/switcher.component.ts
rename to web/src/main/resources/saga-frontend/src/app/@theme/components/switcher/switcher.component.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/components/theme-settings/theme-settings.component.scss b/web/src/main/resources/saga-frontend/src/app/@theme/components/theme-settings/theme-settings.component.scss
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/components/theme-settings/theme-settings.component.scss
rename to web/src/main/resources/saga-frontend/src/app/@theme/components/theme-settings/theme-settings.component.scss
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/components/theme-settings/theme-settings.component.ts b/web/src/main/resources/saga-frontend/src/app/@theme/components/theme-settings/theme-settings.component.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/components/theme-settings/theme-settings.component.ts
rename to web/src/main/resources/saga-frontend/src/app/@theme/components/theme-settings/theme-settings.component.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/components/theme-switcher/theme-switcher.component.html b/web/src/main/resources/saga-frontend/src/app/@theme/components/theme-switcher/theme-switcher.component.html
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/components/theme-switcher/theme-switcher.component.html
rename to web/src/main/resources/saga-frontend/src/app/@theme/components/theme-switcher/theme-switcher.component.html
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/components/theme-switcher/theme-switcher.component.scss b/web/src/main/resources/saga-frontend/src/app/@theme/components/theme-switcher/theme-switcher.component.scss
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/components/theme-switcher/theme-switcher.component.scss
rename to web/src/main/resources/saga-frontend/src/app/@theme/components/theme-switcher/theme-switcher.component.scss
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/components/theme-switcher/theme-switcher.component.ts b/web/src/main/resources/saga-frontend/src/app/@theme/components/theme-switcher/theme-switcher.component.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/components/theme-switcher/theme-switcher.component.ts
rename to web/src/main/resources/saga-frontend/src/app/@theme/components/theme-switcher/theme-switcher.component.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/components/theme-switcher/themes-switcher-list/theme-switcher-list.component.scss b/web/src/main/resources/saga-frontend/src/app/@theme/components/theme-switcher/themes-switcher-list/theme-switcher-list.component.scss
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/components/theme-switcher/themes-switcher-list/theme-switcher-list.component.scss
rename to web/src/main/resources/saga-frontend/src/app/@theme/components/theme-switcher/themes-switcher-list/theme-switcher-list.component.scss
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/components/theme-switcher/themes-switcher-list/themes-switcher-list.component.ts b/web/src/main/resources/saga-frontend/src/app/@theme/components/theme-switcher/themes-switcher-list/themes-switcher-list.component.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/components/theme-switcher/themes-switcher-list/themes-switcher-list.component.ts
rename to web/src/main/resources/saga-frontend/src/app/@theme/components/theme-switcher/themes-switcher-list/themes-switcher-list.component.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/layouts/default/default.layout.scss b/web/src/main/resources/saga-frontend/src/app/@theme/layouts/default/default.layout.scss
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/layouts/default/default.layout.scss
rename to web/src/main/resources/saga-frontend/src/app/@theme/layouts/default/default.layout.scss
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/layouts/default/default.layout.ts b/web/src/main/resources/saga-frontend/src/app/@theme/layouts/default/default.layout.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/layouts/default/default.layout.ts
rename to web/src/main/resources/saga-frontend/src/app/@theme/layouts/default/default.layout.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/layouts/index.ts b/web/src/main/resources/saga-frontend/src/app/@theme/layouts/index.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/layouts/index.ts
rename to web/src/main/resources/saga-frontend/src/app/@theme/layouts/index.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/layouts/one-column/one-column.layout.scss b/web/src/main/resources/saga-frontend/src/app/@theme/layouts/one-column/one-column.layout.scss
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/layouts/one-column/one-column.layout.scss
rename to web/src/main/resources/saga-frontend/src/app/@theme/layouts/one-column/one-column.layout.scss
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/layouts/one-column/one-column.layout.ts b/web/src/main/resources/saga-frontend/src/app/@theme/layouts/one-column/one-column.layout.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/layouts/one-column/one-column.layout.ts
rename to web/src/main/resources/saga-frontend/src/app/@theme/layouts/one-column/one-column.layout.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/pipes/capitalize.pipe.ts b/web/src/main/resources/saga-frontend/src/app/@theme/pipes/capitalize.pipe.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/pipes/capitalize.pipe.ts
rename to web/src/main/resources/saga-frontend/src/app/@theme/pipes/capitalize.pipe.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/pipes/index.ts b/web/src/main/resources/saga-frontend/src/app/@theme/pipes/index.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/pipes/index.ts
rename to web/src/main/resources/saga-frontend/src/app/@theme/pipes/index.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/pipes/no-sanitize.pipe.ts b/web/src/main/resources/saga-frontend/src/app/@theme/pipes/no-sanitize.pipe.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/pipes/no-sanitize.pipe.ts
rename to web/src/main/resources/saga-frontend/src/app/@theme/pipes/no-sanitize.pipe.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/pipes/number-with-commas.pipe.ts b/web/src/main/resources/saga-frontend/src/app/@theme/pipes/number-with-commas.pipe.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/pipes/number-with-commas.pipe.ts
rename to web/src/main/resources/saga-frontend/src/app/@theme/pipes/number-with-commas.pipe.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/pipes/plural.pipe.ts b/web/src/main/resources/saga-frontend/src/app/@theme/pipes/plural.pipe.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/pipes/plural.pipe.ts
rename to web/src/main/resources/saga-frontend/src/app/@theme/pipes/plural.pipe.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/pipes/round.pipe.ts b/web/src/main/resources/saga-frontend/src/app/@theme/pipes/round.pipe.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/pipes/round.pipe.ts
rename to web/src/main/resources/saga-frontend/src/app/@theme/pipes/round.pipe.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/pipes/timing.pipe.ts b/web/src/main/resources/saga-frontend/src/app/@theme/pipes/timing.pipe.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/pipes/timing.pipe.ts
rename to web/src/main/resources/saga-frontend/src/app/@theme/pipes/timing.pipe.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/styles/bootstrap-rtl.scss b/web/src/main/resources/saga-frontend/src/app/@theme/styles/bootstrap-rtl.scss
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/styles/bootstrap-rtl.scss
rename to web/src/main/resources/saga-frontend/src/app/@theme/styles/bootstrap-rtl.scss
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/styles/font-size.scss b/web/src/main/resources/saga-frontend/src/app/@theme/styles/font-size.scss
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/styles/font-size.scss
rename to web/src/main/resources/saga-frontend/src/app/@theme/styles/font-size.scss
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/styles/pace.theme.scss b/web/src/main/resources/saga-frontend/src/app/@theme/styles/pace.theme.scss
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/styles/pace.theme.scss
rename to web/src/main/resources/saga-frontend/src/app/@theme/styles/pace.theme.scss
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/styles/styles.scss b/web/src/main/resources/saga-frontend/src/app/@theme/styles/styles.scss
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/styles/styles.scss
rename to web/src/main/resources/saga-frontend/src/app/@theme/styles/styles.scss
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/styles/theme.corporate.ts b/web/src/main/resources/saga-frontend/src/app/@theme/styles/theme.corporate.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/styles/theme.corporate.ts
rename to web/src/main/resources/saga-frontend/src/app/@theme/styles/theme.corporate.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/styles/theme.cosmic.ts b/web/src/main/resources/saga-frontend/src/app/@theme/styles/theme.cosmic.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/styles/theme.cosmic.ts
rename to web/src/main/resources/saga-frontend/src/app/@theme/styles/theme.cosmic.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/styles/theme.default.ts b/web/src/main/resources/saga-frontend/src/app/@theme/styles/theme.default.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/styles/theme.default.ts
rename to web/src/main/resources/saga-frontend/src/app/@theme/styles/theme.default.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/styles/themes.scss b/web/src/main/resources/saga-frontend/src/app/@theme/styles/themes.scss
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/styles/themes.scss
rename to web/src/main/resources/saga-frontend/src/app/@theme/styles/themes.scss
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/@theme/theme.module.ts b/web/src/main/resources/saga-frontend/src/app/@theme/theme.module.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/@theme/theme.module.ts
rename to web/src/main/resources/saga-frontend/src/app/@theme/theme.module.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/app-routing.module.ts b/web/src/main/resources/saga-frontend/src/app/app-routing.module.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/app-routing.module.ts
rename to web/src/main/resources/saga-frontend/src/app/app-routing.module.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/app.component.ts b/web/src/main/resources/saga-frontend/src/app/app.component.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/app.component.ts
rename to web/src/main/resources/saga-frontend/src/app/app.component.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/app.module.ts b/web/src/main/resources/saga-frontend/src/app/app.module.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/app.module.ts
rename to web/src/main/resources/saga-frontend/src/app/app.module.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/dashboard/count-cards/count-cards.component.html b/web/src/main/resources/saga-frontend/src/app/pages/dashboard/count-cards/count-cards.component.html
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/dashboard/count-cards/count-cards.component.html
rename to web/src/main/resources/saga-frontend/src/app/pages/dashboard/count-cards/count-cards.component.html
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/dashboard/count-cards/count-cards.component.scss b/web/src/main/resources/saga-frontend/src/app/pages/dashboard/count-cards/count-cards.component.scss
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/dashboard/count-cards/count-cards.component.scss
rename to web/src/main/resources/saga-frontend/src/app/pages/dashboard/count-cards/count-cards.component.scss
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/dashboard/count-cards/count-cards.component.ts b/web/src/main/resources/saga-frontend/src/app/pages/dashboard/count-cards/count-cards.component.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/dashboard/count-cards/count-cards.component.ts
rename to web/src/main/resources/saga-frontend/src/app/pages/dashboard/count-cards/count-cards.component.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/dashboard/dashboard.component.html b/web/src/main/resources/saga-frontend/src/app/pages/dashboard/dashboard.component.html
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/dashboard/dashboard.component.html
rename to web/src/main/resources/saga-frontend/src/app/pages/dashboard/dashboard.component.html
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/dashboard/dashboard.component.scss b/web/src/main/resources/saga-frontend/src/app/pages/dashboard/dashboard.component.scss
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/dashboard/dashboard.component.scss
rename to web/src/main/resources/saga-frontend/src/app/pages/dashboard/dashboard.component.scss
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/dashboard/dashboard.component.ts b/web/src/main/resources/saga-frontend/src/app/pages/dashboard/dashboard.component.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/dashboard/dashboard.component.ts
rename to web/src/main/resources/saga-frontend/src/app/pages/dashboard/dashboard.component.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/dashboard/dashboard.module.ts b/web/src/main/resources/saga-frontend/src/app/pages/dashboard/dashboard.module.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/dashboard/dashboard.module.ts
rename to web/src/main/resources/saga-frontend/src/app/pages/dashboard/dashboard.module.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/dashboard/recent-table/recent-table.component.html b/web/src/main/resources/saga-frontend/src/app/pages/dashboard/recent-table/recent-table.component.html
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/dashboard/recent-table/recent-table.component.html
rename to web/src/main/resources/saga-frontend/src/app/pages/dashboard/recent-table/recent-table.component.html
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/dashboard/recent-table/recent-table.component.scss b/web/src/main/resources/saga-frontend/src/app/pages/dashboard/recent-table/recent-table.component.scss
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/dashboard/recent-table/recent-table.component.scss
rename to web/src/main/resources/saga-frontend/src/app/pages/dashboard/recent-table/recent-table.component.scss
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/dashboard/recent-table/recent-table.component.ts b/web/src/main/resources/saga-frontend/src/app/pages/dashboard/recent-table/recent-table.component.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/dashboard/recent-table/recent-table.component.ts
rename to web/src/main/resources/saga-frontend/src/app/pages/dashboard/recent-table/recent-table.component.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/miscellaneous-routing.module.ts b/web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/miscellaneous-routing.module.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/miscellaneous-routing.module.ts
rename to web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/miscellaneous-routing.module.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/miscellaneous.component.ts b/web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/miscellaneous.component.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/miscellaneous.component.ts
rename to web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/miscellaneous.component.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/miscellaneous.module.ts b/web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/miscellaneous.module.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/miscellaneous.module.ts
rename to web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/miscellaneous.module.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/not-found/not-found.component.html b/web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/not-found/not-found.component.html
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/not-found/not-found.component.html
rename to web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/not-found/not-found.component.html
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/not-found/not-found.component.scss b/web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/not-found/not-found.component.scss
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/not-found/not-found.component.scss
rename to web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/not-found/not-found.component.scss
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/not-found/not-found.component.ts b/web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/not-found/not-found.component.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/not-found/not-found.component.ts
rename to web/src/main/resources/saga-frontend/src/app/pages/miscellaneous/not-found/not-found.component.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/pages-menu.ts b/web/src/main/resources/saga-frontend/src/app/pages/pages-menu.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/pages-menu.ts
rename to web/src/main/resources/saga-frontend/src/app/pages/pages-menu.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/pages-routing.module.ts b/web/src/main/resources/saga-frontend/src/app/pages/pages-routing.module.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/pages-routing.module.ts
rename to web/src/main/resources/saga-frontend/src/app/pages/pages-routing.module.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/pages.component.ts b/web/src/main/resources/saga-frontend/src/app/pages/pages.component.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/pages.component.ts
rename to web/src/main/resources/saga-frontend/src/app/pages/pages.component.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/pages.module.ts b/web/src/main/resources/saga-frontend/src/app/pages/pages.module.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/pages.module.ts
rename to web/src/main/resources/saga-frontend/src/app/pages/pages.module.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/transactions/customRender.component.ts b/web/src/main/resources/saga-frontend/src/app/pages/transactions/customRender.component.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/transactions/customRender.component.ts
rename to web/src/main/resources/saga-frontend/src/app/pages/transactions/customRender.component.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/transactions/findTransaction.component.html b/web/src/main/resources/saga-frontend/src/app/pages/transactions/findTransaction.component.html
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/transactions/findTransaction.component.html
rename to web/src/main/resources/saga-frontend/src/app/pages/transactions/findTransaction.component.html
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/transactions/findTransaction.component.ts b/web/src/main/resources/saga-frontend/src/app/pages/transactions/findTransaction.component.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/transactions/findTransaction.component.ts
rename to web/src/main/resources/saga-frontend/src/app/pages/transactions/findTransaction.component.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/transactions/transactions.component.html b/web/src/main/resources/saga-frontend/src/app/pages/transactions/transactions.component.html
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/transactions/transactions.component.html
rename to web/src/main/resources/saga-frontend/src/app/pages/transactions/transactions.component.html
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/transactions/transactions.component.ts b/web/src/main/resources/saga-frontend/src/app/pages/transactions/transactions.component.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/transactions/transactions.component.ts
rename to web/src/main/resources/saga-frontend/src/app/pages/transactions/transactions.component.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/transactions/transactions.module.ts b/web/src/main/resources/saga-frontend/src/app/pages/transactions/transactions.module.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/transactions/transactions.module.ts
rename to web/src/main/resources/saga-frontend/src/app/pages/transactions/transactions.module.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/transactions/transactionsTable.component.html b/web/src/main/resources/saga-frontend/src/app/pages/transactions/transactionsTable.component.html
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/transactions/transactionsTable.component.html
rename to web/src/main/resources/saga-frontend/src/app/pages/transactions/transactionsTable.component.html
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/transactions/transactionsTable.component.scss b/web/src/main/resources/saga-frontend/src/app/pages/transactions/transactionsTable.component.scss
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/transactions/transactionsTable.component.scss
rename to web/src/main/resources/saga-frontend/src/app/pages/transactions/transactionsTable.component.scss
diff --git a/saga-web/src/main/resources/saga-frontend/src/app/pages/transactions/transactionsTable.component.ts b/web/src/main/resources/saga-frontend/src/app/pages/transactions/transactionsTable.component.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/app/pages/transactions/transactionsTable.component.ts
rename to web/src/main/resources/saga-frontend/src/app/pages/transactions/transactionsTable.component.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/assets/images/square_pattern.svg b/web/src/main/resources/saga-frontend/src/assets/images/square_pattern.svg
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/assets/images/square_pattern.svg
rename to web/src/main/resources/saga-frontend/src/assets/images/square_pattern.svg
diff --git a/saga-web/src/main/resources/saga-frontend/src/assets/images/square_pattern_cosmic.svg b/web/src/main/resources/saga-frontend/src/assets/images/square_pattern_cosmic.svg
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/assets/images/square_pattern_cosmic.svg
rename to web/src/main/resources/saga-frontend/src/assets/images/square_pattern_cosmic.svg
diff --git a/saga-web/src/main/resources/saga-frontend/src/environments/environment.prod.ts b/web/src/main/resources/saga-frontend/src/environments/environment.prod.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/environments/environment.prod.ts
rename to web/src/main/resources/saga-frontend/src/environments/environment.prod.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/environments/environment.ts b/web/src/main/resources/saga-frontend/src/environments/environment.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/environments/environment.ts
rename to web/src/main/resources/saga-frontend/src/environments/environment.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/favicon.ico b/web/src/main/resources/saga-frontend/src/favicon.ico
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/favicon.ico
rename to web/src/main/resources/saga-frontend/src/favicon.ico
diff --git a/saga-web/src/main/resources/saga-frontend/src/favicon.png b/web/src/main/resources/saga-frontend/src/favicon.png
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/favicon.png
rename to web/src/main/resources/saga-frontend/src/favicon.png
diff --git a/saga-web/src/main/resources/saga-frontend/src/index.html b/web/src/main/resources/saga-frontend/src/index.html
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/index.html
rename to web/src/main/resources/saga-frontend/src/index.html
diff --git a/saga-web/src/main/resources/saga-frontend/src/main.ts b/web/src/main/resources/saga-frontend/src/main.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/main.ts
rename to web/src/main/resources/saga-frontend/src/main.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/polyfills.ts b/web/src/main/resources/saga-frontend/src/polyfills.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/polyfills.ts
rename to web/src/main/resources/saga-frontend/src/polyfills.ts
diff --git a/saga-web/src/main/resources/saga-frontend/src/tsconfig.app.json b/web/src/main/resources/saga-frontend/src/tsconfig.app.json
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/tsconfig.app.json
rename to web/src/main/resources/saga-frontend/src/tsconfig.app.json
diff --git a/saga-web/src/main/resources/saga-frontend/src/typings.d.ts b/web/src/main/resources/saga-frontend/src/typings.d.ts
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/src/typings.d.ts
rename to web/src/main/resources/saga-frontend/src/typings.d.ts
diff --git a/saga-web/src/main/resources/saga-frontend/tsconfig.json b/web/src/main/resources/saga-frontend/tsconfig.json
similarity index 100%
rename from saga-web/src/main/resources/saga-frontend/tsconfig.json
rename to web/src/main/resources/saga-frontend/tsconfig.json
diff --git a/saga-web/src/main/resources/static/css/request.css b/web/src/main/resources/static/css/request.css
similarity index 100%
rename from saga-web/src/main/resources/static/css/request.css
rename to web/src/main/resources/static/css/request.css
diff --git a/saga-web/src/main/resources/static/css/style.css b/web/src/main/resources/static/css/style.css
similarity index 100%
rename from saga-web/src/main/resources/static/css/style.css
rename to web/src/main/resources/static/css/style.css
diff --git a/saga-web/src/main/resources/static/detail.html b/web/src/main/resources/static/detail.html
similarity index 100%
rename from saga-web/src/main/resources/static/detail.html
rename to web/src/main/resources/static/detail.html
diff --git a/saga-web/src/main/resources/static/index.html b/web/src/main/resources/static/index.html
similarity index 100%
rename from saga-web/src/main/resources/static/index.html
rename to web/src/main/resources/static/index.html
diff --git a/saga-web/src/main/resources/static/js/date.js b/web/src/main/resources/static/js/date.js
similarity index 100%
rename from saga-web/src/main/resources/static/js/date.js
rename to web/src/main/resources/static/js/date.js
diff --git a/saga-web/src/main/resources/static/js/request.js b/web/src/main/resources/static/js/request.js
similarity index 100%
rename from saga-web/src/main/resources/static/js/request.js
rename to web/src/main/resources/static/js/request.js
diff --git a/saga-web/src/main/resources/static/js/table.js b/web/src/main/resources/static/js/table.js
similarity index 100%
rename from saga-web/src/main/resources/static/js/table.js
rename to web/src/main/resources/static/js/table.js
diff --git a/saga-web/src/main/resources/static/request.html b/web/src/main/resources/static/request.html
similarity index 100%
rename from saga-web/src/main/resources/static/request.html
rename to web/src/main/resources/static/request.html
diff --git a/saga-web/src/main/resources/static/result.html b/web/src/main/resources/static/result.html
similarity index 100%
rename from saga-web/src/main/resources/static/result.html
rename to web/src/main/resources/static/result.html


[servicecomb-pack] 01/05: SCB-976 removed the saga-core related modules

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

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

commit aa97a45a8117d459fc41a533280c6dbdd397a35a
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Fri Dec 14 10:21:44 2018 +0800

    SCB-976 removed the saga-core related modules
---
 docs/api/api.md                                    | 288 --------
 docs/old_saga.md                                   |  53 --
 saga-core-akka/pom.xml                             | 120 ----
 .../saga/core/actors/ActorBasedSaga.java           |  65 --
 .../saga/core/actors/ActorBasedSagaFactory.java    |  83 ---
 .../saga/core/actors/CompletionCallbackActor.java  |  69 --
 .../saga/core/actors/EventContextImpl.java         |  60 --
 .../servicecomb/saga/core/actors/RequestActor.java | 206 ------
 .../saga/core/actors/RequestActorBuilder.java      | 108 ---
 .../saga/core/actors/RequestActorContext.java      |  82 ---
 .../saga/core/actors/messages/AbortMessage.java    |  37 --
 .../core/actors/messages/AbortRecoveryMessage.java |  33 -
 .../core/actors/messages/CompensateMessage.java    |  32 -
 .../messages/CompensationRecoveryMessage.java      |  22 -
 .../saga/core/actors/messages/FailMessage.java     |  33 -
 .../saga/core/actors/messages/Message.java         |  21 -
 .../saga/core/actors/messages/TransactMessage.java |  40 --
 .../messages/TransactionRecoveryMessage.java       |  32 -
 .../ActorBasedSagaExecutionComponentTest.java      |  31 -
 .../core/actors/ActorBasedSagaIntegrationTest.java | 692 -------------------
 .../core/actors/CompletionCallbackActorTest.java   | 140 ----
 .../saga/core/actors/EventContextImplTest.java     |  96 ---
 .../saga/core/actors/RequestActorBuilderTest.java  | 175 -----
 .../saga/core/actors/RequestActorTest.java         | 406 ------------
 saga-core-akka/src/test/resources/application.conf |  21 -
 saga-core-akka/src/test/resources/log4j2.xml       |  30 -
 saga-core/pom.xml                                  | 111 ----
 .../servicecomb/saga/core/BackwardRecovery.java    |  54 --
 .../apache/servicecomb/saga/core/Compensation.java |  55 --
 .../saga/core/CompensationTaskConsumer.java        |  69 --
 .../servicecomb/saga/core/CompositeSagaLog.java    |  40 --
 .../saga/core/CompositeSagaResponse.java           |  63 --
 .../apache/servicecomb/saga/core/Descriptive.java  |  23 -
 .../apache/servicecomb/saga/core/EventContext.java |  28 -
 .../servicecomb/saga/core/EventEnvelope.java       |  47 --
 .../apache/servicecomb/saga/core/EventStore.java   |  25 -
 .../servicecomb/saga/core/FailedSagaResponse.java  |  50 --
 .../org/apache/servicecomb/saga/core/Fallback.java |  45 --
 .../servicecomb/saga/core/FallbackPolicy.java      |  62 --
 .../servicecomb/saga/core/ForwardRecovery.java     |  67 --
 .../servicecomb/saga/core/GraphBasedSaga.java      | 139 ----
 .../apache/servicecomb/saga/core/IdGenerator.java  |  25 -
 .../saga/core/LoggingRecoveryPolicy.java           |  51 --
 .../servicecomb/saga/core/LongIdGenerator.java     |  30 -
 .../servicecomb/saga/core/NoOpSagaRequest.java     | 113 ----
 .../apache/servicecomb/saga/core/Operation.java    |  33 -
 .../servicecomb/saga/core/PersistentLog.java       |  22 -
 .../servicecomb/saga/core/PersistentStore.java     |  26 -
 .../servicecomb/saga/core/RecoveryPolicy.java      |  26 -
 .../servicecomb/saga/core/RequestProcessTask.java  |  67 --
 .../servicecomb/saga/core/RestOperation.java       |  78 ---
 .../apache/servicecomb/saga/core/SQLOperation.java |  65 --
 .../org/apache/servicecomb/saga/core/Saga.java     |  27 -
 .../apache/servicecomb/saga/core/SagaContext.java  |  34 -
 .../servicecomb/saga/core/SagaContextImpl.java     | 144 ----
 .../servicecomb/saga/core/SagaDefinition.java      |  25 -
 .../apache/servicecomb/saga/core/SagaEndTask.java  |  48 --
 .../servicecomb/saga/core/SagaEndedEvent.java      |  38 --
 .../apache/servicecomb/saga/core/SagaEvent.java    |  44 --
 .../servicecomb/saga/core/SagaException.java       |  29 -
 .../org/apache/servicecomb/saga/core/SagaLog.java  |  22 -
 .../apache/servicecomb/saga/core/SagaRequest.java  |  44 --
 .../servicecomb/saga/core/SagaRequestImpl.java     | 153 -----
 .../apache/servicecomb/saga/core/SagaResponse.java |  61 --
 .../saga/core/SagaStartFailedException.java        |  25 -
 .../servicecomb/saga/core/SagaStartTask.java       |  56 --
 .../servicecomb/saga/core/SagaStartedEvent.java    |  46 --
 .../apache/servicecomb/saga/core/SagaState.java    |  27 -
 .../org/apache/servicecomb/saga/core/SagaTask.java |  31 -
 .../servicecomb/saga/core/SagaTaskFactory.java     |  98 ---
 .../saga/core/SuccessfulSagaResponse.java          |  43 --
 .../apache/servicecomb/saga/core/TaskConsumer.java |  29 -
 .../apache/servicecomb/saga/core/TaskRunner.java   |  72 --
 .../apache/servicecomb/saga/core/ToJsonFormat.java |  26 -
 .../apache/servicecomb/saga/core/Transaction.java  |  57 --
 .../saga/core/TransactionAbortedEvent.java         |  57 --
 .../saga/core/TransactionAbortedException.java     |  28 -
 .../saga/core/TransactionCompensatedEvent.java     |  56 --
 .../servicecomb/saga/core/TransactionConsumer.java |   5 -
 .../saga/core/TransactionEndedEvent.java           |  56 --
 .../saga/core/TransactionFailedException.java      |  29 -
 .../saga/core/TransactionStartedEvent.java         |  45 --
 .../saga/core/TransactionTaskConsumer.java         | 126 ----
 .../apache/servicecomb/saga/core/Transport.java    |  22 -
 .../saga/core/TransportFailedException.java        |  28 -
 .../core/application/SagaExecutionComponent.java   |  87 ---
 .../saga/core/application/SagaFactory.java         |  30 -
 .../application/interpreter/FromJsonFormat.java    |  24 -
 .../interpreter/RestRequestChecker.java            |  55 --
 .../saga/core/dag/ByLevelTraveller.java            |  86 ---
 .../saga/core/dag/FromLeafTraversalDirection.java  |  38 --
 .../saga/core/dag/FromRootTraversalDirection.java  |  38 --
 .../saga/core/dag/GraphBasedSagaFactory.java       |  81 ---
 .../servicecomb/saga/core/dag/GraphBuilder.java    | 110 ---
 .../saga/core/dag/GraphCycleDetector.java          |  25 -
 .../saga/core/dag/GraphCycleDetectorImpl.java      |  76 ---
 .../org/apache/servicecomb/saga/core/dag/Node.java |  88 ---
 .../core/dag/SingleLeafDirectedAcyclicGraph.java   |  38 --
 .../servicecomb/saga/core/dag/Traveller.java       |  29 -
 .../saga/core/dag/TraversalDirection.java          |  29 -
 .../infrastructure/ContextAwareEventStore.java     |  56 --
 .../saga/infrastructure/EmbeddedEventStore.java    |  58 --
 .../servicecomb/saga/transports/RestTransport.java |  27 -
 .../servicecomb/saga/transports/SQLTransport.java  |  29 -
 .../saga/transports/TransportFactory.java          |  25 -
 .../saga/core/BackwardRecoveryTest.java            |  57 --
 .../servicecomb/saga/core/CompensationImpl.java    |  32 -
 .../saga/core/CompositeSagaLogTest.java            |  49 --
 .../saga/core/CompositeSagaResponseTest.java       |  81 ---
 .../apache/servicecomb/saga/core/DummyEvent.java   |  31 -
 .../servicecomb/saga/core/FallbackPolicyTest.java  |  91 ---
 .../servicecomb/saga/core/ForwardRecoveryTest.java |  86 ---
 .../servicecomb/saga/core/LongIdGeneratorTest.java |  36 -
 .../servicecomb/saga/core/RestOperationTest.java   |  95 ---
 .../servicecomb/saga/core/RetrySagaLogTest.java    |  89 ---
 .../servicecomb/saga/core/SagaEndTaskTest.java     |  47 --
 .../servicecomb/saga/core/SagaEventMatcher.java    |  68 --
 .../saga/core/SagaExecutionComponentTestBase.java  | 272 --------
 .../servicecomb/saga/core/SagaIntegrationTest.java | 738 ---------------------
 .../servicecomb/saga/core/SagaStartTaskTest.java   |  64 --
 .../servicecomb/saga/core/TransactionImpl.java     |  32 -
 .../dag/DirectedAcyclicGraphTraversalTest.java     | 102 ---
 .../dag/GraphBasedSagaExecutionComponentTest.java  |  33 -
 .../saga/core/dag/GraphBuilderTest.java            | 154 -----
 .../saga/core/dag/GraphCycleDetectorTest.java      |  72 --
 .../apache/servicecomb/saga/core/dag/NodeTest.java |  80 ---
 .../infrastructure/ContextAwareEventStoreTest.java |  43 --
 saga-core/src/test/resources/application.conf      |  21 -
 saga-core/src/test/resources/log4j2.xml            |  30 -
 saga-demo/conditional-transaction-demo/README.md   | 177 -----
 .../conditional-transaction-demo-tests/pom.xml     | 301 ---------
 .../saga/demo/tests/ConditionalTransactionIT.java  | 155 -----
 .../conditional-transaction-demo.sh                |  53 --
 .../docker-compose.yaml                            |  75 ---
 .../conditional-transaction-demo/inventory/pom.xml |  79 ---
 .../inventory/InventoryApplication.java            |  29 -
 .../transaction/inventory/InventoryController.java |  89 ---
 .../inventory/InventoryControllerTest.java         |  79 ---
 .../membership/pom.xml                             |  79 ---
 .../membership/MembershipApplication.java          |  29 -
 .../membership/MembershipController.java           |  62 --
 .../conditional-transaction-demo/payment/pom.xml   |  80 ---
 .../transaction/payment/PaymentApplication.java    |  29 -
 .../transaction/payment/PaymentController.java     |  84 ---
 .../transaction/payment/PaymentControllerTest.java |  61 --
 saga-demo/conditional-transaction-demo/pom.xml     |  40 --
 .../conditional-transaction-demo/supplier/pom.xml  |  79 ---
 .../transaction/supplier/SupplierApplication.java  |  29 -
 .../transaction/supplier/SupplierController.java   |  52 --
 .../src/main/resources/META-INF/LICENSE.txt        | 202 ------
 .../src/main/resources/META-INF/NOTICE.txt         |  11 -
 .../dependency-free-transaction-demo/README.md     | 170 -----
 .../car-rental-service/pom.xml                     |  90 ---
 .../saga/demo/car/rental/CarRentalApplication.java |  32 -
 .../saga/demo/car/rental/CarRentalController.java  | 100 ---
 .../src/main/resources/microservice.yaml           |  30 -
 .../demo-tests/pom.xml                             | 333 ----------
 .../apache/servicecomb/saga/demo/tests/DemoIT.java | 150 -----
 .../dependency-free-transaction-demo.sh            |  53 --
 .../docker-compose.yaml                            | 101 ---
 .../flight-booking-service/pom.xml                 |  90 ---
 .../flight/booking/FlightBookingApplication.java   |  32 -
 .../flight/booking/FlightBookingController.java    |  77 ---
 .../src/main/resources/microservice.yaml           |  30 -
 .../hotel-reservation-service/pom.xml              |  90 ---
 .../reservation/HotelReservationApplication.java   |  32 -
 .../reservation/HotelReservationController.java    |  78 ---
 .../src/main/resources/microservice.yaml           |  30 -
 .../payment-service/pom.xml                        |  90 ---
 .../saga/demo/payment/PaymentApplication.java      |  32 -
 .../saga/demo/payment/PaymentController.java       |  81 ---
 .../src/main/resources/microservice.yaml           |  32 -
 saga-demo/dependency-free-transaction-demo/pom.xml |  62 --
 saga-discovery/pom.xml                             |  37 --
 .../saga-discovery-servicecenter/pom.xml           | 124 ----
 .../center/ServiceCenterDiscoveryConfig.java       |  43 --
 .../src/main/resources/META-INF/spring.factories   |  18 -
 .../src/main/resources/microservice.yaml           |  30 -
 .../discovery/service/center/DummyController.java  |  56 --
 .../center/ServiceCenterDiscoveryApplication.java  |  32 -
 .../ServiceCenterDiscoveryRestTransportTest.java   | 130 ----
 .../src/test/resources/log4j2-test.xml             |  30 -
 .../src/test/resources/registry.yaml               |  23 -
 saga-format/pom.xml                                |  90 ---
 .../saga/core/FailedSagaRequestContext.java        |  40 --
 .../servicecomb/saga/core/JacksonToJsonFormat.java |  65 --
 .../servicecomb/saga/core/SagaRequestContext.java  |  37 --
 .../saga/core/SuccessfulSagaRequestContext.java    |  41 --
 .../servicecomb/saga/format/ChildrenExtractor.java |  59 --
 .../servicecomb/saga/format/JacksonFallback.java   |  81 ---
 .../saga/format/JacksonFromJsonFormat.java         |  58 --
 .../saga/format/JacksonRestCompensation.java       |  44 --
 .../saga/format/JacksonRestFallback.java           |  55 --
 .../saga/format/JacksonRestOperation.java          |  71 --
 .../saga/format/JacksonRestTransaction.java        |  44 --
 .../saga/format/JacksonSQLCompensation.java        |  40 --
 .../saga/format/JacksonSQLOperation.java           |  49 --
 .../saga/format/JacksonSQLTransaction.java         |  40 --
 .../saga/format/JacksonSagaEventFormat.java        | 147 ----
 .../saga/format/JsonFailedSagaResponse.java        |  29 -
 .../saga/format/JsonRestSagaRequest.java           |  73 --
 .../saga/format/JsonSQLSagaRequest.java            |  69 --
 .../saga/format/JsonSagaDefinition.java            |  61 --
 .../servicecomb/saga/format/JsonSagaRequest.java   |  41 --
 .../saga/format/JsonSuccessfulSagaResponse.java    |  30 -
 .../servicecomb/saga/format/SagaEventFormat.java   |  25 -
 .../servicecomb/saga/format/TransportAware.java    |  27 -
 .../saga/format/ChildrenExtractorTest.java         |  75 ---
 .../format/JacksonFromJsonFormatForSQLTest.java    | 232 -------
 .../saga/format/JacksonFromJsonFormatTest.java     | 299 ---------
 .../saga/format/JacksonRestOperationTest.java      |  73 --
 .../saga/format/JsonRestSagaRequestTest.java       | 101 ---
 .../saga/format/JsonSQLSagaRequestTest.java        |  72 --
 .../saga/format/JsonSagaDefinitionTest.java        |  34 -
 .../saga/format/SagaEventFormatTest.java           | 184 -----
 saga-spring/pom.xml                                | 261 --------
 .../saga/spring/JpaPersistentStore.java            |  69 --
 .../servicecomb/saga/spring/SagaController.java    | 222 -------
 .../servicecomb/saga/spring/SagaEventEntity.java   |  85 ---
 .../servicecomb/saga/spring/SagaEventRepo.java     |  44 --
 .../saga/spring/SagaExecutionQueryService.java     | 160 -----
 .../saga/spring/SagaRecoveryListener.java          |  37 --
 .../saga/spring/SagaShutdownListener.java          |  42 --
 .../saga/spring/SagaSpringApplication.java         |  39 --
 .../servicecomb/saga/spring/SagaSpringConfig.java  | 136 ----
 saga-spring/src/main/resources/META-INF/aop.xml    |  25 -
 .../src/main/resources/META-INF/spring.factories   |  20 -
 saga-spring/src/main/resources/application.conf    |  88 ---
 saga-spring/src/main/resources/application.yaml    |  30 -
 saga-spring/src/main/resources/log4j2.xml          |  30 -
 .../src/main/resources/schema-postgresql.sql       |  26 -
 .../ActorBasedSagaSpringApplicationTest.java       |  25 -
 .../GraphBasedSagaSpringApplicationTest.java       |  25 -
 .../saga/spring/GreetingController.java            |  42 --
 .../servicecomb/saga/spring/SagaRecoveryTest.java  | 181 -----
 .../saga/spring/SagaServiceDiscoveryTest.java      | 110 ---
 .../saga/spring/SagaSpringApplicationTestBase.java | 390 -----------
 saga-spring/src/test/resources/data.sql            |  29 -
 saga-spring/src/test/resources/log4j2-test.xml     |  30 -
 saga-spring/src/test/resources/registry.yaml       |  23 -
 transports/pom.xml                                 |  39 --
 transports/transport-httpclient-spring/pom.xml     |  80 ---
 .../saga/transports/HttpClientTransportConfig.java |  40 --
 .../src/main/resources/META-INF/spring.factories   |  19 -
 .../saga/transports/RestTransportTest.java         | 123 ----
 .../src/test/resources/log4j2.xml                  |  30 -
 transports/transport-httpclient/pom.xml            |  63 --
 .../transports/httpclient/HttpClientTransport.java | 121 ----
 .../httpclient/HttpClientTransportTest.java        | 192 ------
 .../src/test/resources/log4j2.xml                  |  30 -
 transports/transport-resttemplate/pom.xml          |  71 --
 .../resttemplate/RestTemplateTransport.java        | 121 ----
 252 files changed, 19148 deletions(-)

diff --git a/docs/api/api.md b/docs/api/api.md
deleted file mode 100755
index 756a75c..0000000
--- a/docs/api/api.md
+++ /dev/null
@@ -1,288 +0,0 @@
-# Saga API
-### Post transaction and compensation requests to Saga
-```
-POST /requests
-```
-
-####  Description
-
-1. Define requests in order and recovery policy by JSON format as below,put them to body.
-```
-{
-  "policy": "",
-  "requests": [
-    {
-      "id": "",
-      "type": "",
-      "serviceName": "",
-      "parents": [
-
-      ],
-      "transaction": {
-        "method": "",
-        "path": "",
-        "retries": "",
-        "params": {
-
-        }
-      },
-      "compensation": {
-        "method": "",
-        "path": "",
-        "retries": "",
-        "params": {
-
-        }
-      }
-    }
-  ]
-}
-```
-JSON parameters:
-- policy - support `BackwardRecovery` or `ForwardRecovery`.
-- requests - transactions array.
-  - id - request id. It should be unique among this collection of requests.
-  - type - support `rest` for now.
-  - serviceName - user-defined service name.
-  - parents - request ids. It means this request is only executed after all requests in the parents field are completed.
-  - transaction - user-defined transaction that executed by the Saga.
-    - method - user-defined, HTTP method.
-    - path - user-defined, HTTP path.
-    - retries - int, optional, default -1. The max retry times for transaction. If this parameter is less than or equal to 0, transaction will retry infinitely.
-    - params - support `form`,`json`,`body`,`query`.
-  - compensation - user-defined compensation that executed by the Saga.
-    - method - user-defined, HTTP method.
-    - path - user-defined, HTTP path.
-    - retries - int, optional, default 3. The max retry times for compensation.
-    - params - support `form`,`json`,`body`,`query`.
-
-2. Set content type to `text/plain`.
-
-3. Send them to Saga service.
-
-####  Example request
-```
-curl -XPOST -H "Content-Type: text/plain" -d @./request.json  http://<docker.host.ip:saga.port>/requests
-```
-
-####  Example response
-```
-success
-```
-
-####  Status codes
--   **200** – no error
--   **400** – bad parameter
--   **500** – server error
-
-
-### Get all the Saga events
-```
-GET /events
-```
-
-####  Description
-Get all the Saga events.
-
-####  Example request
-```
-curl -XGET http://<docker.host.ip:saga.port>/events
-```
-
-####  Example response
-```
-{
-    "88658e73-eff5-4d31-887e-019201d6b560": [
-        {
-            "id": 1,
-            "sagaId": "88658e73-eff5-4d31-887e-019201d6b560",
-            "creationTime": "2017-09-15T01:15:40Z",
-            "type": "SagaStartedEvent",
-            "contentJson": "{\"policy\": \"BackwardRecovery\", \"requests\": [{\"id\": \"request-car\", \"type\": \"rest\", \"serviceName\": \"car-rental-service\", \"transaction\": {\"path\": \"/rentals\", \"method\": \"post\", \"params\": {\"form\": {\"customerId\": \"mike\"}}}, \"compensation\": {\"path\": \"/rentals\", \"method\": \"put\", \"params\": {\"form\": {\"customerId\": \"mike\"}}}}, {\"id\": \"request-hotel\", \"type\": \"rest\", \"serviceName\": \"hotel-reservation-service [...]
-        },
-        {
-            "id": 2,
-            "sagaId": "88658e73-eff5-4d31-887e-019201d6b560",
-            "creationTime": "2017-09-15T01:15:40Z",
-            "type": "TransactionStartedEvent",
-            "contentJson": "{\"id\": \"request-flight\", \"type\": \"rest\", \"parents\": [], \"fallback\": {\"type\": \"NOP\"}, \"serviceName\": \"flight-booking-service\", \"transaction\": {\"path\": \"/bookings\", \"method\": \"post\", \"params\": {\"form\": {\"customerId\": \"mike\"}}}, \"compensation\": {\"path\": \"/bookings\", \"method\": \"put\", \"params\": {\"form\": {\"customerId\": \"mike\"}}, \"retries\": 3}}"
-        },
-        {
-            "id": 3,
-            "sagaId": "88658e73-eff5-4d31-887e-019201d6b560",
-            "creationTime": "2017-09-15T01:15:40Z",
-            "type": "TransactionStartedEvent",
-            "contentJson": "{\"id\": \"request-car\", \"type\": \"rest\", \"parents\": [], \"fallback\": {\"type\": \"NOP\"}, \"serviceName\": \"car-rental-service\", \"transaction\": {\"path\": \"/rentals\", \"method\": \"post\", \"params\": {\"form\": {\"customerId\": \"mike\"}}}, \"compensation\": {\"path\": \"/rentals\", \"method\": \"put\", \"params\": {\"form\": {\"customerId\": \"mike\"}}, \"retries\": 3}}"
-        },
-        {
-            "id": 4,
-            "sagaId": "88658e73-eff5-4d31-887e-019201d6b560",
-            "creationTime": "2017-09-15T01:15:40Z",
-            "type": "TransactionStartedEvent",
-            "contentJson": "{\"id\": \"request-hotel\", \"type\": \"rest\", \"parents\": [], \"fallback\": {\"type\": \"NOP\"}, \"serviceName\": \"hotel-reservation-service\", \"transaction\": {\"path\": \"/reservations\", \"method\": \"post\", \"params\": {\"form\": {\"customerId\": \"mike\"}}}, \"compensation\": {\"path\": \"/reservations\", \"method\": \"put\", \"params\": {\"form\": {\"customerId\": \"mike\"}}, \"retries\": 3}}"
-        },
-        {
-            "id": 5,
-            "sagaId": "88658e73-eff5-4d31-887e-019201d6b560",
-            "creationTime": "2017-09-15T01:15:40Z",
-            "type": "TransactionEndedEvent",
-            "contentJson": "{\"request\": {\"id\": \"request-flight\", \"type\": \"rest\", \"parents\": [], \"fallback\": {\"type\": \"NOP\"}, \"serviceName\": \"flight-booking-service\", \"transaction\": {\"path\": \"/bookings\", \"method\": \"post\", \"params\": {\"form\": {\"customerId\": \"mike\"}}}, \"compensation\": {\"path\": \"/bookings\", \"method\": \"put\", \"params\": {\"form\": {\"customerId\": \"mike\"}}, \"retries\": 3}}, \"response\": {\"body\": \"{\\n  \\\"statusCode\\\" [...]
-        },
-        {
-            "id": 6,
-            "sagaId": "88658e73-eff5-4d31-887e-019201d6b560",
-            "creationTime": "2017-09-15T01:15:40Z",
-            "type": "TransactionEndedEvent",
-            "contentJson": "{\"request\": {\"id\": \"request-hotel\", \"type\": \"rest\", \"parents\": [], \"fallback\": {\"type\": \"NOP\"}, \"serviceName\": \"hotel-reservation-service\", \"transaction\": {\"path\": \"/reservations\", \"method\": \"post\", \"params\": {\"form\": {\"customerId\": \"mike\"}}}, \"compensation\": {\"path\": \"/reservations\", \"method\": \"put\", \"params\": {\"form\": {\"customerId\": \"mike\"}}, \"retries\": 3}}, \"response\": {\"body\": \"{\\n  \\\"stat [...]
-        },
-        {
-            "id": 7,
-            "sagaId": "88658e73-eff5-4d31-887e-019201d6b560",
-            "creationTime": "2017-09-15T01:15:41Z",
-            "type": "TransactionEndedEvent",
-            "contentJson": "{\"request\": {\"id\": \"request-car\", \"type\": \"rest\", \"parents\": [], \"fallback\": {\"type\": \"NOP\"}, \"serviceName\": \"car-rental-service\", \"transaction\": {\"path\": \"/rentals\", \"method\": \"post\", \"params\": {\"form\": {\"customerId\": \"mike\"}}}, \"compensation\": {\"path\": \"/rentals\", \"method\": \"put\", \"params\": {\"form\": {\"customerId\": \"mike\"}}, \"retries\": 3}}, \"response\": {\"body\": \"{\\n  \\\"statusCode\\\": 200,\\n [...]
-        },
-        {
-            "id": 8,
-            "sagaId": "88658e73-eff5-4d31-887e-019201d6b560",
-            "creationTime": "2017-09-15T01:15:41Z",
-            "type": "TransactionStartedEvent",
-            "contentJson": "{\"id\": \"request-payment\", \"type\": \"rest\", \"parents\": [\"request-car\", \"request-flight\", \"request-hotel\"], \"fallback\": {\"type\": \"NOP\"}, \"serviceName\": \"payment-service\", \"transaction\": {\"path\": \"/payments\", \"method\": \"post\", \"params\": {\"form\": {\"customerId\": \"mike\"}}}, \"compensation\": {\"path\": \"/payments\", \"method\": \"put\", \"params\": {\"form\": {\"customerId\": \"mike\"}}, \"retries\": 3}}"
-        },
-        {
-            "id": 9,
-            "sagaId": "88658e73-eff5-4d31-887e-019201d6b560",
-            "creationTime": "2017-09-15T01:15:41Z",
-            "type": "TransactionEndedEvent",
-            "contentJson": "{\"request\": {\"id\": \"request-payment\", \"type\": \"rest\", \"parents\": [\"request-car\", \"request-flight\", \"request-hotel\"], \"fallback\": {\"type\": \"NOP\"}, \"serviceName\": \"payment-service\", \"transaction\": {\"path\": \"/payments\", \"method\": \"post\", \"params\": {\"form\": {\"customerId\": \"mike\"}}}, \"compensation\": {\"path\": \"/payments\", \"method\": \"put\", \"params\": {\"form\": {\"customerId\": \"mike\"}}, \"retries\": 3}}, \"r [...]
-        },
-        {
-            "id": 10,
-            "sagaId": "88658e73-eff5-4d31-887e-019201d6b560",
-            "creationTime": "2017-09-15T01:15:41Z",
-            "type": "SagaEndedEvent",
-            "contentJson": "{}"
-        }
-    ]
-}
-```
-
-####  Status codes
--   **200** – no error
-
-### Invoke embedded Saga to execute SQL transaction
-
-In order to Invoke embedded saga, it is necessary to add dependencies to your applications.
-
-There are a `maven` example
-
-```
-<dependencies>
-
-    ...
-    
-    <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
-        <artifactId>saga-core</artifactId>
-    </dependency>
-    <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
-        <artifactId>saga-format</artifactId>
-    </dependency>
-    
-    ...
-    
-</dependencies>
-```
-
-####  Description
-    
-1. Implement SQLTransport interface in your own applications.
-
-2. Instance `SagaExecutionComponent` and inject it into your own applications.
-
-3. Define requests in order and recovery policy by JSON format as below in your applications.
-
-```
-{
-  "policy": "",
-  "requests": [
-    {
-      "id": "",
-      "type": "",
-      "datasource": "",
-      "parents": [
-
-      ],
-      "transaction": {
-        "sql": "",
-        "retries": "",
-        "params": [
-          []
-        ]
-      },
-      "compensation": {
-        "sql": "",
-        "retries": "",
-        "params": [
-          []
-        ]
-      }
-    }
-  ]
-}
-```
-JSON parameters:
-- policy - support `BackwardRecovery` or `ForwardRecovery`.
-- requests - transactions array.
-  - id - request id. It should be unique among this collection of requests.
-  - type - support `sql` for now.
-  - datasource - user-defined datasource name.
-  - parents - request ids. It means this request is only executed after all requests in the parents field are completed.
-  - transaction - user-defined transaction that executed by the Saga.
-    - sql - user-defined, forward sql.
-    - retries - int, optional, default -1. The max retry times for transaction. If this parameter is less than or equal to 0, transaction will retry infinitely.
-    - params - parameters for forward sql.
-  - compensation - user-defined compensation that executed by the Saga.
-    - sql - user-defined, backward sql.
-    - retries - int, optional, default 3. The max retry times for compensation.
-    - params - parameters for backward sql.
-
-4. Invoke `SagaExecutionComponent.run(String json)` function to execute saga.
-
-#### Example Implement SQLTransport interface
-
-```
-public class ExampleSQLTransport implements SQLTransport {
-  @Override
-  public SagaResponse with(final String datasource, final String sql, final List<String> params) {
-    try {
-      // invoke your own code to execute sql.
-    } catch (Exception e) {
-      throw new TransportFailedException("execute SQL " + sql + " occur exception: ", e);
-    }
-    return new JsonSuccessfulSagaResponse("{}");
-  }
-}
-```
-
-#### Example Instance `SagaExecutionComponent`
-
-```
-  private final SQLTransport sqlTransport = new ExampleSQLTransport;
-
-  private final TransportFactory<SQLTransport> transportFactory = new TransportFactory<SQLTransport>() {
-    @Override
-    public SQLTransport getTransport() {
-      return sqlTransport;
-    }
-  };
-
-  private final SagaExecutionComponent coordinator = new SagaExecutionComponent(
-      new EmbeddedPersistentStore(),
-      new JacksonFromJsonFormat(transportFactory),
-      null,
-      new GraphBasedSagaFactory(500, eventStore, new ChildrenExtractor(), Executors.newFixedThreadPool(5))
-  );
-```
-
diff --git a/docs/old_saga.md b/docs/old_saga.md
deleted file mode 100755
index 171b069..0000000
--- a/docs/old_saga.md
+++ /dev/null
@@ -1,53 +0,0 @@
-# Previous Saga's Documentation
-## Major Architecture of Saga
-* saga-core(transaction and compensation handling logic)
-* saga-format(data serialization and deserialization)
-* saga-transports(communication protocol implementation such as rest or rpc in the future)
-* saga-discovery(service discovery)
-* saga-spring(restful service framework)
-
-![Saga](static_files/saga.png) 
-
-## Prerequisites
-You will need:
-1. [Oracle JDK 1.8+][jdk]
-2. [Maven 3.x][maven]
-3. [Docker][docker]
-4. [PostgreSQL][postgres]
-5. [Service Center(optional)][service_center]
-6. [Docker compose(optional)][docker_compose]
-7. [Docker machine(optional)][docker_machine]
-
-[jdk]: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
-[maven]: https://maven.apache.org/install.html
-[docker]: https://www.docker.com/get-docker
-[postgres]: https://www.postgresql.org/download/
-[service_center]: https://github.com/apache/servicecomb-service-center
-[docker_compose]: https://docs.docker.com/compose/install/
-[docker_machine]: https://docs.docker.com/machine/install-machine/
-
-## Building
-Download the source code.
-```
-git clone https://github.com/apache/servicecomb-saga.git
-```
-
-Enter the Saga root directory,build Saga project by maven command and generate a docker image named saga-spring in local.
-```
-mvn package -DskipTests -Pdocker
-```
-
-## Run Services
-A `docker-compose.yaml` file is provided to start Saga services and its dependencies(Service center and Mysql) as docker containers.
-User also can configure specified Service center or Mysql in `docker-compose.yaml`.
-
-Enter the Saga root directory, run all service images using command,
-```
-docker-compose up
-```
-
-## Reference API
-See [Saga API](docs/api/api.md) for details.
-
-## Example
-See [Saga demo](https://github.com/apache/servicecomb-saga/tree/master/saga-demo) for details.
diff --git a/saga-core-akka/pom.xml b/saga-core-akka/pom.xml
deleted file mode 100644
index a019a25..0000000
--- a/saga-core-akka/pom.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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.
-  -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <parent>
-    <artifactId>saga</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
-    <version>0.3.0-SNAPSHOT</version>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-
-  <artifactId>saga-core-akka</artifactId>
-  <name>Saga::Core::Akka</name>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.lmax</groupId>
-      <artifactId>disruptor</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.logging.log4j</groupId>
-      <artifactId>log4j-slf4j-impl</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.logging.log4j</groupId>
-      <artifactId>log4j-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.logging.log4j</groupId>
-      <artifactId>log4j-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
-      <artifactId>saga-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.typesafe.akka</groupId>
-      <artifactId>akka-actor_2.12</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.typesafe.akka</groupId>
-      <artifactId>akka-slf4j_2.12</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>io.kamon</groupId>
-      <artifactId>kamon-core_2.12</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>io.kamon</groupId>
-      <artifactId>kamon-annotation_2.12</artifactId>
-    </dependency>
-
-    <!-- test dependencies -->
-    <dependency>
-      <groupId>com.typesafe.akka</groupId>
-      <artifactId>akka-testkit_2.12</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.scalatest</groupId>
-      <artifactId>scalatest_2.12</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.hamcrest</groupId>
-      <artifactId>hamcrest-all</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <!-- need to use this version of running the test -->
-      <version>1.10.19</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.awaitility</groupId>
-      <artifactId>awaitility</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.github.seanyinx</groupId>
-      <artifactId>unit-scaffolding</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
-      <artifactId>saga-core</artifactId>
-      <type>test-jar</type>
-      <version>0.3.0-SNAPSHOT</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
-      <artifactId>saga-core</artifactId>
-    </dependency>
-  </dependencies>
-
-</project>
diff --git a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/ActorBasedSaga.java b/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/ActorBasedSaga.java
deleted file mode 100644
index 36fae1f..0000000
--- a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/ActorBasedSaga.java
+++ /dev/null
@@ -1,65 +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.core.actors;
-
-import java.util.concurrent.CompletableFuture;
-
-import org.apache.servicecomb.saga.core.EventContext;
-import org.apache.servicecomb.saga.core.EventStore;
-import org.apache.servicecomb.saga.core.NoOpSagaRequest;
-import org.apache.servicecomb.saga.core.Saga;
-import org.apache.servicecomb.saga.core.SagaEvent;
-import org.apache.servicecomb.saga.core.SagaResponse;
-import org.apache.servicecomb.saga.core.actors.messages.TransactMessage;
-
-import akka.actor.ActorRef;
-
-public class ActorBasedSaga implements Saga {
-  private final ActorRef root;
-  private final ActorRef completionCallback;
-  private final CompletableFuture<SagaResponse> future;
-  private final EventStore sagaLog;
-  private final EventContext sagaContext;
-
-  ActorBasedSaga(ActorRef root, ActorRef completionCallback, CompletableFuture<SagaResponse> future, EventStore sagaLog,
-      EventContext sagaContext) {
-    this.root = root;
-    this.completionCallback = completionCallback;
-    this.future = future;
-    this.sagaLog = sagaLog;
-    this.sagaContext = sagaContext;
-  }
-
-  @Override
-  public SagaResponse run() {
-    root.tell(new TransactMessage(NoOpSagaRequest.SAGA_START_REQUEST, SagaResponse.EMPTY_RESPONSE), completionCallback);
-
-    return future.join();
-  }
-
-  @Override
-  public void play() {
-    gatherEvents(sagaLog);
-  }
-
-  private void gatherEvents(Iterable<SagaEvent> events) {
-    for (SagaEvent event : events) {
-      event.gatherTo(sagaContext);
-    }
-  }
-}
diff --git a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/ActorBasedSagaFactory.java b/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/ActorBasedSagaFactory.java
deleted file mode 100644
index 8ce22fa..0000000
--- a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/ActorBasedSagaFactory.java
+++ /dev/null
@@ -1,83 +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.core.actors;
-
-import static akka.actor.ActorRef.noSender;
-
-import java.util.Set;
-import java.util.concurrent.CompletableFuture;
-
-import org.apache.servicecomb.saga.core.EventStore;
-import org.apache.servicecomb.saga.core.NoOpSagaRequest;
-import org.apache.servicecomb.saga.core.SagaResponse;
-import org.apache.servicecomb.saga.core.application.SagaFactory;
-import org.apache.servicecomb.saga.core.PersistentStore;
-import org.apache.servicecomb.saga.core.SagaDefinition;
-import org.apache.servicecomb.saga.core.SagaTaskFactory;
-import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
-import akka.actor.ActorRef;
-import akka.actor.ActorSystem;
-import scala.concurrent.Await;
-import scala.concurrent.duration.Duration;
-
-public class ActorBasedSagaFactory implements SagaFactory {
-  private final ActorSystem actorSystem = ActorSystem.create("saga");
-  private final RequestActorBuilder actorBuilder;
-  private final SagaTaskFactory sagaTaskFactory;
-
-  public ActorBasedSagaFactory(int retryDelay,
-      PersistentStore persistentStore,
-      FromJsonFormat<Set<String>> childrenExtractor) {
-
-    this.sagaTaskFactory = new SagaTaskFactory(retryDelay, persistentStore);
-    this.actorBuilder = new RequestActorBuilder(actorSystem, childrenExtractor);
-  }
-
-  @Override
-  public ActorBasedSaga createSaga(String requestJson, String sagaId, EventStore sagaLog, SagaDefinition definition) {
-
-    CompletableFuture<SagaResponse> future = new CompletableFuture<>();
-    ActorRef completionCallback = actorSystem.actorOf(CompletionCallbackActor.props(future));
-    RequestActorContext context = actorBuilder.build(
-        definition.requests(),
-        sagaTaskFactory.sagaTasks(sagaId,
-            requestJson,
-            definition.policy(),
-            sagaLog
-        ),
-        completionCallback);
-
-    completionCallback.tell(context, noSender());
-    return new ActorBasedSaga(
-        context.actorOf(NoOpSagaRequest.SAGA_START_REQUEST.id()),
-        completionCallback,
-        future,
-        sagaLog,
-        new EventContextImpl(context));
-  }
-
-  @Override
-  public boolean isTerminated() {
-    return actorSystem.whenTerminated().isCompleted();
-  }
-
-  @Override
-  public void terminate() throws Exception {
-    Await.result(actorSystem.terminate(), Duration.Inf());
-  }
-}
diff --git a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/CompletionCallbackActor.java b/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/CompletionCallbackActor.java
deleted file mode 100644
index 7cee4d3..0000000
--- a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/CompletionCallbackActor.java
+++ /dev/null
@@ -1,69 +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.core.actors;
-
-import java.util.concurrent.CompletableFuture;
-
-import org.apache.servicecomb.saga.core.NoOpSagaRequest;
-import org.apache.servicecomb.saga.core.SagaResponse;
-import org.apache.servicecomb.saga.core.actors.messages.AbortMessage;
-import org.apache.servicecomb.saga.core.actors.messages.CompensateMessage;
-import org.apache.servicecomb.saga.core.actors.messages.FailMessage;
-import org.apache.servicecomb.saga.core.actors.messages.TransactMessage;
-import akka.actor.AbstractLoggingActor;
-import akka.actor.Props;
-
-class CompletionCallbackActor extends AbstractLoggingActor {
-  private final CompletableFuture<SagaResponse> future;
-
-  private CompletionCallbackActor(CompletableFuture<SagaResponse> future) {
-    this.future = future;
-  }
-
-  static Props props(CompletableFuture<SagaResponse> future) {
-    return Props.create(CompletionCallbackActor.class, () -> new CompletionCallbackActor(future));
-  }
-
-  @Override
-  public Receive createReceive() {
-    return receiveBuilder()
-        .match(RequestActorContext.class, this::ready)
-        .build();
-  }
-
-  private void ready(RequestActorContext context) {
-    getContext().become(receiveBuilder()
-        .match(CompensateMessage.class, message -> end(context, message.response()))
-        .match(TransactMessage.class, message -> end(context, message.response()))
-        .match(AbortMessage.class, message -> onAbort(context, message))
-        .match(FailMessage.class, message -> end(context, message.response()))
-        .build());
-  }
-
-  private void onAbort(RequestActorContext context, AbortMessage message) {
-    log().info("saga actor: received abort message of {}", message.response());
-    context.actorOf(NoOpSagaRequest.SAGA_END_REQUEST.id()).tell(new CompensateMessage(message.response()), self());
-  }
-
-  private void end(RequestActorContext context, SagaResponse response) {
-    log().info("saga actor: received response {}", response);
-    future.complete(response);
-    context.forAll(actor -> getContext().stop(actor));
-    getContext().stop(self());
-  }
-}
diff --git a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/EventContextImpl.java b/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/EventContextImpl.java
deleted file mode 100644
index 21a2928..0000000
--- a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/EventContextImpl.java
+++ /dev/null
@@ -1,60 +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.core.actors;
-
-import static akka.actor.ActorRef.noSender;
-
-import org.apache.servicecomb.saga.core.EventContext;
-import org.apache.servicecomb.saga.core.SagaRequest;
-import org.apache.servicecomb.saga.core.SagaResponse;
-import org.apache.servicecomb.saga.core.actors.messages.AbortRecoveryMessage;
-import org.apache.servicecomb.saga.core.actors.messages.CompensationRecoveryMessage;
-import org.apache.servicecomb.saga.core.actors.messages.TransactionRecoveryMessage;
-import org.apache.servicecomb.saga.core.actors.messages.Message;
-
-public class EventContextImpl implements EventContext {
-  private final RequestActorContext context;
-
-  EventContextImpl(RequestActorContext context) {
-    this.context = context;
-  }
-
-  @Override
-  public void beginTransaction(SagaRequest request) {
-
-  }
-
-  @Override
-  public void endTransaction(SagaRequest request, SagaResponse response) {
-    sendMessage(request, new TransactionRecoveryMessage(response));
-  }
-
-  @Override
-  public void abortTransaction(SagaRequest request, SagaResponse response) {
-    sendMessage(request, new AbortRecoveryMessage(response));
-  }
-
-  @Override
-  public void compensateTransaction(SagaRequest request, SagaResponse response) {
-    sendMessage(request, new CompensationRecoveryMessage());
-  }
-
-  private void sendMessage(SagaRequest request, Message message) {
-    context.actorOf(request.id()).tell(message, noSender());
-  }
-}
diff --git a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/RequestActor.java b/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/RequestActor.java
deleted file mode 100644
index 055174e..0000000
--- a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/RequestActor.java
+++ /dev/null
@@ -1,206 +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.core.actors;
-
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.function.Consumer;
-import java.util.function.Supplier;
-
-import org.apache.servicecomb.saga.core.CompositeSagaResponse;
-import org.apache.servicecomb.saga.core.SagaRequest;
-import org.apache.servicecomb.saga.core.SagaResponse;
-import org.apache.servicecomb.saga.core.SagaStartFailedException;
-import org.apache.servicecomb.saga.core.SagaTask;
-import org.apache.servicecomb.saga.core.TransactionFailedException;
-import org.apache.servicecomb.saga.core.actors.messages.AbortMessage;
-import org.apache.servicecomb.saga.core.actors.messages.AbortRecoveryMessage;
-import org.apache.servicecomb.saga.core.actors.messages.CompensationRecoveryMessage;
-import org.apache.servicecomb.saga.core.actors.messages.FailMessage;
-import org.apache.servicecomb.saga.core.actors.messages.Message;
-import org.apache.servicecomb.saga.core.actors.messages.TransactMessage;
-import org.apache.servicecomb.saga.core.actors.messages.TransactionRecoveryMessage;
-import org.apache.servicecomb.saga.core.actors.messages.CompensateMessage;
-
-import akka.actor.AbstractLoggingActor;
-import akka.actor.ActorRef;
-import akka.actor.Props;
-import akka.japi.pf.ReceiveBuilder;
-
-public class RequestActor extends AbstractLoggingActor {
-  private final RequestActorContext context;
-  private final SagaTask task;
-  private final SagaRequest request;
-
-  private final List<SagaResponse> parentResponses;
-  private final List<ActorRef> compensatedChildren;
-
-  private final Receive transacted;
-  private final Receive aborted;
-
-  static Props props(
-      RequestActorContext context,
-      SagaTask task,
-      SagaRequest request) {
-    return Props.create(RequestActor.class, () -> new RequestActor(context, task, request));
-  }
-
-  private RequestActor(
-      RequestActorContext context,
-      SagaTask task,
-      SagaRequest request) {
-    this.context = context;
-    this.task = task;
-    this.request = request;
-    this.parentResponses = new ArrayList<>(request.parents().length);
-    this.compensatedChildren = new LinkedList<>();
-
-    this.aborted = onReceive(ignored -> {
-    }).build();
-
-    this.transacted = onReceive(task::compensate)
-        .match(CompensationRecoveryMessage.class, message -> getContext().become(aborted))
-        .build();
-  }
-
-  @Override
-  public Receive createReceive() {
-    return receiveBuilder()
-        .match(TransactMessage.class,
-            message -> onTransaction(message, () -> task.commit(request, responseOf(parentResponses))))
-        .match(TransactionRecoveryMessage.class, this::onTransactRecovery)
-        .match(AbortRecoveryMessage.class, this::onAbortRecovery)
-        .match(AbortMessage.class, this::onAbort)
-        .build();
-  }
-
-  private void onAbort(AbortMessage message) {
-    log().debug("{}: received abort message of {}", request.id(), message.response());
-    sendToChildrenButSender(message);
-    sendToParentsButSender(message);
-
-    getContext().become(aborted);
-  }
-
-  private void sendToParentsButSender(AbortMessage message) {
-    context.parentsOf(request)
-        .stream()
-        .filter(this::isNotSender)
-        .forEach(actor -> actor.tell(message, self()));
-  }
-
-  private void sendToChildrenButSender(AbortMessage message) {
-    context.childrenOf(request)
-        .stream()
-        .filter(this::isNotSender)
-        .forEach(actor -> actor.tell(message, self()));
-  }
-
-  private boolean isNotSender(ActorRef actor) {
-    return !actor.equals(sender());
-  }
-
-  private void onTransactRecovery(TransactionRecoveryMessage message) {
-    getContext().become(receiveBuilder()
-        .match(TransactMessage.class, m -> onTransaction(m, message::response))
-        .match(CompensationRecoveryMessage.class, m -> getContext().become(aborted))
-        .build()
-    );
-  }
-
-  private void onAbortRecovery(AbortRecoveryMessage message) {
-    getContext().become(
-        receiveBuilder()
-            .match(TransactMessage.class, m -> onAbort(new AbortMessage(message.response())))
-            .build());
-  }
-
-  private void onTransaction(TransactMessage message, Supplier<SagaResponse> responseSupplier) {
-    log().debug("{}: received transaction message of {}", request.id(), message.request());
-    if (context.parentsOf(request).contains(sender())) {
-      parentResponses.add(message.response());
-    }
-
-    if (parentResponses.size() == context.parentsOf(request).size()) {
-      transact(responseSupplier);
-    }
-  }
-
-  private void transact(Supplier<SagaResponse> responseSupplier) {
-    try {
-      if (isChosenChild(parentResponses)) {
-        SagaResponse sagaResponse = responseSupplier.get();
-        sendToChildren(new TransactMessage(request, sagaResponse));
-        getContext().become(transacted);
-      } else {
-        sendToChildren(new TransactMessage(request, SagaResponse.NONE_RESPONSE));
-        getContext().become(aborted);
-      }
-    } catch (SagaStartFailedException e) {
-      sendToParents(new FailMessage(e));
-    } catch (Exception e) {
-      log().error("Failed to run operation {} with error {}", request.transaction(), e);
-
-      Message abortMessage = new AbortMessage(new TransactionFailedException(e));
-      sendToParents(abortMessage);
-      sendToChildren(abortMessage);
-      getContext().become(aborted);
-    }
-  }
-
-  private void sendToParents(Message message) {
-    context.parentsOf(request).forEach(actor -> actor.tell(message, self()));
-  }
-
-  private void sendToChildren(Message message) {
-    context.childrenOf(request).forEach(actor -> actor.tell(message, self()));
-  }
-
-  private boolean isChosenChild(List<SagaResponse> parentResponses) {
-    return request.parents().length == 0 || parentResponses.isEmpty() || parentResponses.stream()
-            .map(context::chosenChildren)
-            .anyMatch(chosenChildren -> chosenChildren.isEmpty() || chosenChildren.contains(request.id()));
-  }
-
-  private SagaResponse responseOf(List<SagaResponse> responseContexts) {
-    if (responseContexts.isEmpty()) {
-      return SagaResponse.EMPTY_RESPONSE;
-    }
-
-    if (responseContexts.size() == 1) {
-      return responseContexts.get(0);
-    }
-    return new CompositeSagaResponse(responseContexts);
-  }
-
-  private ReceiveBuilder onReceive(Consumer<SagaRequest> requestConsumer) {
-    return receiveBuilder()
-        .match(CompensateMessage.class, message -> onCompensate(message, requestConsumer));
-  }
-
-  private void onCompensate(CompensateMessage message, Consumer<SagaRequest> requestConsumer) {
-    log().debug("{}: received compensation message from {}", request.id(), sender());
-    compensatedChildren.add(sender());
-
-    if (compensatedChildren.size() == context.childrenOf(request).size()) {
-      requestConsumer.accept(request);
-      sendToParents(message);
-    }
-  }
-}
diff --git a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/RequestActorBuilder.java b/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/RequestActorBuilder.java
deleted file mode 100644
index 5004b4e..0000000
--- a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/RequestActorBuilder.java
+++ /dev/null
@@ -1,108 +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.core.actors;
-
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.servicecomb.saga.core.NoOpSagaRequest;
-import org.apache.servicecomb.saga.core.SagaRequest;
-import org.apache.servicecomb.saga.core.SagaTask;
-import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
-import akka.actor.ActorRef;
-import akka.actor.ActorSystem;
-import akka.actor.Props;
-
-public class RequestActorBuilder {
-  private final ActorSystem actorSystem;
-  private final FromJsonFormat<Set<String>> childrenExtractor;
-
-  RequestActorBuilder(
-      ActorSystem actorSystem,
-      FromJsonFormat<Set<String>> childrenExtractor) {
-
-    this.actorSystem = actorSystem;
-    this.childrenExtractor = childrenExtractor;
-  }
-
-  public RequestActorContext build(SagaRequest[] requests, Map<String, SagaTask> tasks, ActorRef sagaActor) {
-    RequestActorContext context = new RequestActorContext(childrenExtractor);
-
-    ActorRef rootActor = rootActor(context, tasks);
-    ActorRef leafActor = leafActor(context, tasks);
-
-    createRequestActors(requests, tasks, context);
-
-    linkActorsById(rootActor, requests, context);
-    addLeafToChildless(leafActor, requests, context);
-
-    context.addParent(NoOpSagaRequest.SAGA_START_REQUEST.id(), sagaActor);
-    context.addChild(NoOpSagaRequest.SAGA_END_REQUEST.id(), sagaActor);
-    return context;
-  }
-
-  private void linkActorsById(ActorRef rootActor, SagaRequest[] requests, RequestActorContext context) {
-    for (SagaRequest request : requests) {
-      if (isOrphan(request)) {
-        context.addParent(request.id(), rootActor);
-        context.addChild(NoOpSagaRequest.SAGA_START_REQUEST.id(), context.actorOf(request.id()));
-      } else {
-        for (String parent : request.parents()) {
-          context.addParent(request.id(), context.actorOf(parent));
-          context.addChild(parent, context.actorOf(request.id()));
-        }
-      }
-    }
-  }
-
-  private boolean isOrphan(SagaRequest request) {
-    return request.parents().length == 0;
-  }
-
-  private void createRequestActors(SagaRequest[] requests, Map<String, SagaTask> tasks, RequestActorContext context) {
-    for (SagaRequest request : requests) {
-      Props props = RequestActor.props(context, tasks.get(request.task()), request);
-      context.addActor(request.id(), actorSystem.actorOf(props));
-    }
-  }
-
-  private void addLeafToChildless(ActorRef leafActor, SagaRequest[] requests, RequestActorContext context) {
-    for (SagaRequest request : requests) {
-      if (context.childrenOf(request).isEmpty()) {
-        context.addParent(NoOpSagaRequest.SAGA_END_REQUEST.id(), context.actorOf(request.id()));
-        context.addChild(request.id(), leafActor);
-      }
-    }
-  }
-
-  private ActorRef rootActor(RequestActorContext context, Map<String, SagaTask> tasks) {
-    Props root = RequestActor.props(context, tasks.get(
-        NoOpSagaRequest.SAGA_START_REQUEST.task()), NoOpSagaRequest.SAGA_START_REQUEST);
-    ActorRef actor = actorSystem.actorOf(root);
-    context.addActor(NoOpSagaRequest.SAGA_START_REQUEST.id(), actor);
-    return actor;
-  }
-
-  private ActorRef leafActor(RequestActorContext context, Map<String, SagaTask> tasks) {
-    Props leaf = RequestActor.props(context, tasks.get(
-        NoOpSagaRequest.SAGA_END_REQUEST.task()), NoOpSagaRequest.SAGA_END_REQUEST);
-    ActorRef actor = actorSystem.actorOf(leaf);
-    context.addActor(NoOpSagaRequest.SAGA_END_REQUEST.id(), actor);
-    return actor;
-  }
-}
diff --git a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/RequestActorContext.java b/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/RequestActorContext.java
deleted file mode 100644
index 2e3149d..0000000
--- a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/RequestActorContext.java
+++ /dev/null
@@ -1,82 +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.core.actors;
-
-import static java.util.Collections.emptyList;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.function.Consumer;
-
-import org.apache.servicecomb.saga.core.SagaRequest;
-import org.apache.servicecomb.saga.core.SagaResponse;
-import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
-import akka.actor.ActorRef;
-
-class RequestActorContext {
-  private final Map<String, ActorRef> actors;
-  private final Map<String, List<ActorRef>> parents;
-  private final Map<String, List<ActorRef>> children;
-  private final FromJsonFormat<Set<String>> childrenExtractor;
-
-  RequestActorContext(
-      FromJsonFormat<Set<String>> childrenExtractor) {
-    this.actors = new HashMap<>();
-    this.children = new HashMap<>();
-    this.parents = new HashMap<>();
-    this.childrenExtractor = childrenExtractor;
-  }
-
-  void addActor(String id, ActorRef actorRef) {
-    actors.put(id, actorRef);
-  }
-
-  void addChild(String requestId, ActorRef ref) {
-    children.computeIfAbsent(requestId, k -> new ArrayList<>()).add(ref);
-  }
-
-  void addParent(String requestId, ActorRef ref) {
-    parents.computeIfAbsent(requestId, k -> new ArrayList<>()).add(ref);
-  }
-
-  ActorRef actorOf(String id) {
-    return actors.get(id);
-  }
-
-  Collection<ActorRef> parentsOf(SagaRequest request) {
-    return parents.getOrDefault(request.id(), emptyList());
-  }
-
-  Collection<ActorRef> childrenOf(SagaRequest request) {
-    return children.getOrDefault(request.id(), emptyList());
-  }
-
-  void forAll(Consumer<ActorRef> consumer) {
-    actors.values()
-        .stream()
-        .forEach(consumer);
-  }
-
-  Set<String> chosenChildren(SagaResponse response) {
-    return childrenExtractor.fromJson(response.body());
-  }
-}
diff --git a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/AbortMessage.java b/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/AbortMessage.java
deleted file mode 100644
index f23a079..0000000
--- a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/AbortMessage.java
+++ /dev/null
@@ -1,37 +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.core.actors.messages;
-
-import org.apache.servicecomb.saga.core.FailedSagaResponse;
-import org.apache.servicecomb.saga.core.SagaResponse;
-
-public class AbortMessage implements Message {
-  private final SagaResponse response;
-
-  public AbortMessage(Throwable e) {
-    response = new FailedSagaResponse(e);
-  }
-
-  public AbortMessage(SagaResponse response) {
-    this.response = response;
-  }
-
-  public SagaResponse response() {
-    return response;
-  }
-}
diff --git a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/AbortRecoveryMessage.java b/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/AbortRecoveryMessage.java
deleted file mode 100644
index 951157d..0000000
--- a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/AbortRecoveryMessage.java
+++ /dev/null
@@ -1,33 +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.core.actors.messages;
-
-import org.apache.servicecomb.saga.core.SagaResponse;
-
-public class AbortRecoveryMessage implements Message {
-
-  private final SagaResponse response;
-
-  public AbortRecoveryMessage(SagaResponse response) {
-    this.response = response;
-  }
-
-  public SagaResponse response() {
-    return response;
-  }
-}
diff --git a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/CompensateMessage.java b/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/CompensateMessage.java
deleted file mode 100644
index 5fd0701..0000000
--- a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/CompensateMessage.java
+++ /dev/null
@@ -1,32 +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.core.actors.messages;
-
-import org.apache.servicecomb.saga.core.SagaResponse;
-
-public class CompensateMessage implements Message {
-  private final SagaResponse response;
-
-  public CompensateMessage(SagaResponse response) {
-    this.response = response;
-  }
-
-  public SagaResponse response() {
-    return response;
-  }
-}
diff --git a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/CompensationRecoveryMessage.java b/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/CompensationRecoveryMessage.java
deleted file mode 100644
index 421a092..0000000
--- a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/CompensationRecoveryMessage.java
+++ /dev/null
@@ -1,22 +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.core.actors.messages;
-
-public class CompensationRecoveryMessage implements Message {
-
-}
diff --git a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/FailMessage.java b/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/FailMessage.java
deleted file mode 100644
index 7a80ecb..0000000
--- a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/FailMessage.java
+++ /dev/null
@@ -1,33 +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.core.actors.messages;
-
-import org.apache.servicecomb.saga.core.FailedSagaResponse;
-import org.apache.servicecomb.saga.core.SagaResponse;
-
-public class FailMessage implements Message {
-  private final SagaResponse response;
-
-  public FailMessage(Throwable e) {
-    response = new FailedSagaResponse(e);
-  }
-
-  public SagaResponse response() {
-    return response;
-  }
-}
diff --git a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/Message.java b/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/Message.java
deleted file mode 100644
index 3ed8187..0000000
--- a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/Message.java
+++ /dev/null
@@ -1,21 +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.core.actors.messages;
-
-public interface Message {
-}
diff --git a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/TransactMessage.java b/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/TransactMessage.java
deleted file mode 100644
index e78be8d..0000000
--- a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/TransactMessage.java
+++ /dev/null
@@ -1,40 +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.core.actors.messages;
-
-
-import org.apache.servicecomb.saga.core.SagaRequest;
-import org.apache.servicecomb.saga.core.SagaResponse;
-
-public class TransactMessage implements Message {
-  private final SagaRequest request;
-  private final SagaResponse response;
-
-  public TransactMessage(SagaRequest request, SagaResponse response) {
-    this.request = request;
-    this.response = response;
-  }
-
-  public SagaRequest request() {
-    return request;
-  }
-
-  public SagaResponse response() {
-    return response;
-  }
-}
diff --git a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/TransactionRecoveryMessage.java b/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/TransactionRecoveryMessage.java
deleted file mode 100644
index 26ba05b..0000000
--- a/saga-core-akka/src/main/java/org/apache/servicecomb/saga/core/actors/messages/TransactionRecoveryMessage.java
+++ /dev/null
@@ -1,32 +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.core.actors.messages;
-
-import org.apache.servicecomb.saga.core.SagaResponse;
-
-public class TransactionRecoveryMessage implements Message {
-  private final SagaResponse response;
-
-  public TransactionRecoveryMessage(SagaResponse response) {
-    this.response = response;
-  }
-
-  public SagaResponse response() {
-    return response;
-  }
-}
diff --git a/saga-core-akka/src/test/java/org/apache/servicecomb/saga/core/actors/ActorBasedSagaExecutionComponentTest.java b/saga-core-akka/src/test/java/org/apache/servicecomb/saga/core/actors/ActorBasedSagaExecutionComponentTest.java
deleted file mode 100644
index a5633db..0000000
--- a/saga-core-akka/src/test/java/org/apache/servicecomb/saga/core/actors/ActorBasedSagaExecutionComponentTest.java
+++ /dev/null
@@ -1,31 +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.core.actors;
-
-import org.apache.servicecomb.saga.core.PersistentStore;
-import org.apache.servicecomb.saga.core.SagaExecutionComponentTestBase;
-import org.apache.servicecomb.saga.core.application.SagaFactory;
-
-
-public class ActorBasedSagaExecutionComponentTest extends SagaExecutionComponentTestBase {
-
-  @Override
-  protected SagaFactory sagaFactory(PersistentStore eventStore) {
-    return new ActorBasedSagaFactory(500, eventStore, null);
-  }
-}
diff --git a/saga-core-akka/src/test/java/org/apache/servicecomb/saga/core/actors/ActorBasedSagaIntegrationTest.java b/saga-core-akka/src/test/java/org/apache/servicecomb/saga/core/actors/ActorBasedSagaIntegrationTest.java
deleted file mode 100644
index de62cf2..0000000
--- a/saga-core-akka/src/test/java/org/apache/servicecomb/saga/core/actors/ActorBasedSagaIntegrationTest.java
+++ /dev/null
@@ -1,692 +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.core.actors;
-
-import static org.apache.servicecomb.saga.core.Transaction.SAGA_END_TRANSACTION;
-import static org.apache.servicecomb.saga.core.Transaction.SAGA_START_TRANSACTION;
-import static java.util.Arrays.asList;
-import static java.util.Collections.emptySet;
-import static java.util.Collections.singletonList;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.hamcrest.CoreMatchers.anyOf;
-import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import java.util.HashSet;
-import java.util.Set;
-import java.util.concurrent.Callable;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.CyclicBarrier;
-
-import org.apache.servicecomb.saga.core.BackwardRecovery;
-import org.apache.servicecomb.saga.core.Compensation;
-import org.apache.servicecomb.saga.core.EventEnvelope;
-import org.apache.servicecomb.saga.core.EventStore;
-import org.apache.servicecomb.saga.core.Fallback;
-import org.apache.servicecomb.saga.core.ForwardRecovery;
-import org.apache.servicecomb.saga.core.IdGenerator;
-import org.apache.servicecomb.saga.core.LongIdGenerator;
-import org.apache.servicecomb.saga.core.NoOpSagaRequest;
-import org.apache.servicecomb.saga.core.Operation;
-import org.apache.servicecomb.saga.core.PersistentStore;
-import org.apache.servicecomb.saga.core.Saga;
-import org.apache.servicecomb.saga.core.SagaDefinition;
-import org.apache.servicecomb.saga.core.SagaEndedEvent;
-import org.apache.servicecomb.saga.core.SagaEvent;
-import org.apache.servicecomb.saga.core.SagaEventMatcher;
-import org.apache.servicecomb.saga.core.SagaRequest;
-import org.apache.servicecomb.saga.core.SagaRequestImpl;
-import org.apache.servicecomb.saga.core.SagaResponse;
-import org.apache.servicecomb.saga.core.SagaStartedEvent;
-import org.apache.servicecomb.saga.core.SuccessfulSagaResponse;
-import org.apache.servicecomb.saga.core.Transaction;
-import org.apache.servicecomb.saga.core.TransactionAbortedEvent;
-import org.apache.servicecomb.saga.core.TransactionCompensatedEvent;
-import org.apache.servicecomb.saga.core.TransactionEndedEvent;
-import org.apache.servicecomb.saga.core.TransactionStartedEvent;
-import org.apache.servicecomb.saga.core.application.SagaFactory;
-import org.hamcrest.CoreMatchers;
-import org.hamcrest.collection.IsIterableContainingInOrder;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.mockito.stubbing.Answer;
-
-import com.seanyinx.github.unit.scaffolding.Randomness;
-
-import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
-import org.apache.servicecomb.saga.infrastructure.EmbeddedEventStore;
-
-@SuppressWarnings("unchecked")
-public class ActorBasedSagaIntegrationTest {
-  private static final String sagaId = Randomness.uniquify("sagaId");
-
-  private final FromJsonFormat<Set<String>> childrenExtractor = mock(FromJsonFormat.class);
-  private final IdGenerator<Long> idGenerator = new LongIdGenerator();
-  private final EventStore eventStore = new EmbeddedEventStore();
-
-  private final PersistentStore persistentStore = mock(PersistentStore.class);
-  private final SagaDefinition sagaDefinition = mock(SagaDefinition.class);
-
-  private final Transaction transaction1 = mock(Transaction.class, "transaction1");
-  private final Transaction transaction2 = mock(Transaction.class, "transaction2");
-  private final Transaction transaction3 = mock(Transaction.class, "transaction3");
-  private final Transaction transaction4 = mock(Transaction.class, "transaction4");
-
-  private final Compensation compensation1 = mock(Compensation.class, "compensation1");
-  private final Compensation compensation2 = mock(Compensation.class, "compensation2");
-  private final Compensation compensation3 = mock(Compensation.class, "compensation3");
-  private final Compensation compensation4 = mock(Compensation.class, "compensation4");
-
-  private final Fallback fallback1 = mock(Fallback.class, "fallback1");
-
-  private final String requestJson = "{}";
-  private final SagaRequest request1 = request("request1", "service1", transaction1, compensation1, fallback1);
-  private final SagaRequest request2 = request("request2", "service2", transaction2, compensation2, request1.id());
-  private final SagaRequest request3 = request("request3", "service3", transaction3, compensation3, request1.id());
-  private final SagaRequest request4 = request("request4", "service4", transaction4, compensation4, request3.id());
-
-  private final SagaResponse transactionResponse1 = new SuccessfulSagaResponse("transaction1");
-  private final SagaResponse transactionResponse2 = new SuccessfulSagaResponse("transaction2");
-  private final SagaResponse transactionResponse3 = new SuccessfulSagaResponse("transaction3");
-  private final SagaResponse compensationResponse1 = new SuccessfulSagaResponse("compensation1");
-  private final SagaResponse compensationResponse2 = new SuccessfulSagaResponse("compensation2");
-  private final SagaResponse compensationResponse3 = new SuccessfulSagaResponse("compensation3");
-
-  @SuppressWarnings("ThrowableInstanceNeverThrown")
-  private final RuntimeException exception = new RuntimeException("oops");
-
-  private Saga saga;
-  private final SagaFactory sagaFactory = new ActorBasedSagaFactory(100, persistentStore, childrenExtractor);
-
-  // root - node1 - node2 - leaf
-  @Before
-  public void setUp() throws Exception {
-    when(sagaDefinition.policy()).thenReturn(new BackwardRecovery());
-    when(sagaDefinition.requests()).thenReturn(new SagaRequest[]{request1, request2});
-
-    when(childrenExtractor.fromJson(anyString())).thenReturn(emptySet());
-    when(childrenExtractor.fromJson(SagaResponse.NONE_RESPONSE.body())).thenReturn(setOf("none"));
-
-    when(transaction1.send(request1.serviceName(), SagaResponse.EMPTY_RESPONSE)).thenReturn(transactionResponse1);
-    when(transaction2.send(request2.serviceName(), transactionResponse1)).thenReturn(transactionResponse2);
-    when(transaction3.send(request3.serviceName(), transactionResponse1)).thenReturn(transactionResponse3);
-
-    when(compensation1.send(request1.serviceName(), compensationResponse2)).thenReturn(compensationResponse1);
-    when(compensation2.send(request2.serviceName(), compensationResponse3)).thenReturn(compensationResponse2);
-    when(compensation3.send(request3.serviceName(), SagaResponse.EMPTY_RESPONSE)).thenReturn(compensationResponse3);
-  }
-
-  @After
-  public void tearDown() throws Exception {
-    sagaFactory.terminate();
-    assertTrue(sagaFactory.isTerminated());
-  }
-
-  @Test
-  public void transactionsAreRunSuccessfully() {
-    saga = sagaFactory.createSaga(requestJson, sagaId, eventStore, sagaDefinition);
-    saga.run();
-
-    assertThat(eventStore, IsIterableContainingInOrder.contains(
-        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
-    ));
-
-    verify(transaction1).send(request1.serviceName(), SagaResponse.EMPTY_RESPONSE);
-    verify(transaction2).send(request2.serviceName(), transactionResponse1);
-
-    verify(compensation1, never()).send(request1.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-  }
-
-  // root - node1 - node2 - leaf
-  //             \_ node3 _/
-  @Test
-  public void compensateCommittedTransactionsOnFailure() {
-    when(sagaDefinition.requests()).thenReturn(new SagaRequest[]{request1, request2, request3});
-    saga = sagaFactory.createSaga(requestJson, sagaId, eventStore, sagaDefinition);
-
-    // barrier to make sure the two transactions starts at the same time
-    CyclicBarrier barrier = new CyclicBarrier(2);
-    when(transaction2.send(request2.serviceName(), transactionResponse1))
-        .thenAnswer(
-            withAnswer(() -> {
-              barrier.await();
-              Thread.sleep(100);
-              throw exception;
-            }));
-
-    when(transaction3.send(request3.serviceName(), transactionResponse1))
-        .thenAnswer(
-            withAnswer(() -> {
-              barrier.await();
-              return transactionResponse3;
-            }));
-
-    saga.run();
-
-    assertThat(eventStore, IsIterableContainingInOrder.contains(
-        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        CoreMatchers.anyOf(SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class), SagaEventMatcher
-            .eventWith(sagaId, transaction3, TransactionStartedEvent.class)),
-        CoreMatchers.anyOf(SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class), SagaEventMatcher
-            .eventWith(sagaId, transaction3, TransactionStartedEvent.class)),
-        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionAbortedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, compensation3, TransactionCompensatedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, compensation1, TransactionCompensatedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, Compensation.SAGA_START_COMPENSATION, SagaEndedEvent.class)));
-
-    verify(transaction1).send(request1.serviceName(), SagaResponse.EMPTY_RESPONSE);
-    verify(transaction2).send(request2.serviceName(), transactionResponse1);
-    verify(transaction3).send(request3.serviceName(), transactionResponse1);
-
-    verify(compensation1).send(request1.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-    verify(compensation3).send(request3.serviceName());
-  }
-
-  @Test
-  public void skipIgnoredTransaction() throws Exception {
-    when(sagaDefinition.requests()).thenReturn(new SagaRequest[]{request1, request2, request3});
-    saga = sagaFactory.createSaga(requestJson, sagaId, eventStore, sagaDefinition);
-
-    when(childrenExtractor.fromJson(transactionResponse1.body())).thenReturn(setOf(request3.id()));
-
-    saga.run();
-
-    assertThat(eventStore, IsIterableContainingInOrder.contains(
-        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
-    ));
-
-    verify(transaction1).send(request1.serviceName(), SagaResponse.EMPTY_RESPONSE);
-    verify(transaction3).send(request3.serviceName(), transactionResponse1);
-    verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
-
-    verify(compensation1, never()).send(request1.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-    verify(compensation3, never()).send(request3.serviceName());
-  }
-
-  @Test
-  public void skipAllIgnoredTransactions() throws Exception {
-    when(sagaDefinition.requests()).thenReturn(new SagaRequest[]{request1, request2, request3, request4});
-    saga = sagaFactory.createSaga(requestJson, sagaId, eventStore, sagaDefinition);
-
-    when(childrenExtractor.fromJson(transactionResponse1.body())).thenReturn(setOf("none"));
-
-    saga.run();
-
-    assertThat(eventStore, IsIterableContainingInOrder.contains(
-        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
-    ));
-
-    verify(transaction1).send(request1.serviceName(), SagaResponse.EMPTY_RESPONSE);
-    verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction3, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction4, never()).send(anyString(), any(SagaResponse.class));
-
-    verify(compensation1, never()).send(request1.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-    verify(compensation3, never()).send(request3.serviceName());
-    verify(compensation4, never()).send(request4.serviceName());
-  }
-
-  @Test
-  public void doNotCompensateIgnoredTransactions() throws Exception {
-    when(sagaDefinition.requests()).thenReturn(new SagaRequest[]{request1, request2, request3, request4});
-    saga = sagaFactory.createSaga(requestJson, sagaId, eventStore, sagaDefinition);
-
-    when(childrenExtractor.fromJson(transactionResponse1.body())).thenReturn(setOf(request3.id()));
-
-    when(transaction4.send(request4.serviceName(), transactionResponse3)).thenThrow(exception);
-
-    saga.run();
-
-    assertThat(eventStore, IsIterableContainingInOrder.contains(
-        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction4, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction4, TransactionAbortedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionCompensatedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionCompensatedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, Compensation.SAGA_START_COMPENSATION, SagaEndedEvent.class)
-    ));
-
-    verify(transaction1).send(request1.serviceName(), SagaResponse.EMPTY_RESPONSE);
-    verify(transaction3).send(request3.serviceName(), transactionResponse1);
-    verify(transaction4).send(request4.serviceName(), transactionResponse3);
-    verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
-
-    verify(compensation1).send(request1.serviceName());
-    verify(compensation3).send(request3.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-    verify(compensation4, never()).send(request4.serviceName());
-  }
-
-  // TODO: 2017/10/31 actor will hang and its parent and children will be blocked without its response, timeout must be applied
-  @Ignore
-  // root - node1 - node2 - leaf
-  //             \_ node3 _/
-  @Test
-  public void redoHangingTransactionsOnFailure() throws InterruptedException {
-    when(sagaDefinition.requests()).thenReturn(new SagaRequest[]{request1, request2, request3});
-    saga = sagaFactory.createSaga(requestJson, sagaId, eventStore, sagaDefinition);
-
-    // barrier to make sure the two transactions starts at the same time
-    CyclicBarrier barrier = new CyclicBarrier(2);
-    when(transaction3.send(request3.serviceName(), transactionResponse1))
-        .thenAnswer(withAnswer(() -> {
-      barrier.await();
-      throw exception;
-    }));
-
-    CountDownLatch latch = new CountDownLatch(1);
-
-    when(transaction2.send(request2.serviceName(), transactionResponse1))
-        .thenAnswer(withAnswer(() -> {
-      barrier.await();
-      latch.await(1, SECONDS);
-      return transactionResponse2;
-    })).thenReturn(transactionResponse2);
-
-    saga.run();
-
-    // the ordering of events may not be consistence due to concurrent processing of requests
-    assertThat(eventStore, IsIterableContainingInOrder.contains(
-        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        CoreMatchers.anyOf(
-            SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-            SagaEventMatcher.eventWith(sagaId, transaction3, TransactionStartedEvent.class)),
-        CoreMatchers.anyOf(
-            SagaEventMatcher.eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-            SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class)),
-        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionAbortedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, compensation2, TransactionCompensatedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, compensation1, TransactionCompensatedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, Compensation.SAGA_START_COMPENSATION, SagaEndedEvent.class)));
-
-    verify(transaction1).send(request1.serviceName(), SagaResponse.EMPTY_RESPONSE);
-    verify(transaction2, times(2)).send(request2.serviceName(), transactionResponse1);
-    verify(transaction3).send(request3.serviceName(), transactionResponse1);
-
-    verify(compensation1).send(request1.serviceName());
-    verify(compensation2).send(request2.serviceName());
-    verify(compensation3, never()).send(request3.serviceName());
-
-    latch.countDown();
-  }
-
-  @Test
-  public void retriesFailedTransactionTillSuccess() {
-    when(sagaDefinition.policy()).thenReturn(new ForwardRecovery());
-    saga = sagaFactory.createSaga(requestJson, sagaId, eventStore, sagaDefinition);
-
-    when(transaction2.send(request2.serviceName(), transactionResponse1))
-        .thenThrow(exception).thenThrow(exception).thenReturn(transactionResponse2);
-    when(transaction2.retries()).thenReturn(-1);
-
-    saga.run();
-
-    assertThat(eventStore, IsIterableContainingInOrder.contains(
-        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
-    ));
-
-    verify(transaction1).send(request1.serviceName(), SagaResponse.EMPTY_RESPONSE);
-    verify(transaction2, times(3)).send(request2.serviceName(), transactionResponse1);
-
-    verify(compensation1, never()).send(anyString(), any(SagaResponse.class));
-    verify(compensation2, never()).send(anyString(), any(SagaResponse.class));
-  }
-
-  @Test
-  public void fallbackWhenCompensationFailed() {
-    int retries = 3;
-    saga = sagaFactory.createSaga(requestJson, sagaId, eventStore, sagaDefinition);
-
-    when(transaction2.send(request2.serviceName(), transactionResponse1)).thenThrow(exception);
-    when(compensation1.send(request1.serviceName())).thenThrow(exception);
-    when(compensation1.retries()).thenReturn(retries);
-
-    saga.run();
-
-    verify(transaction1).send(request1.serviceName(), SagaResponse.EMPTY_RESPONSE);
-    verify(transaction2).send(request2.serviceName(), transactionResponse1);
-
-    verify(compensation1, times(retries + 1)).send(request1.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-
-    verify(fallback1).send(request1.serviceName());
-  }
-
-  @Test
-  public void restoresSagaToTransactionStateByPlayingAllEvents() {
-    when(sagaDefinition.requests()).thenReturn(new SagaRequest[]{request1, request2, request3});
-    saga = sagaFactory.createSaga(requestJson, sagaId, eventStore, sagaDefinition);
-
-    Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
-        envelope(new TransactionStartedEvent(sagaId, request1)),
-        envelope(new TransactionEndedEvent(sagaId, request1, transactionResponse1)),
-        envelope(new TransactionStartedEvent(sagaId, request2)),
-        envelope(new TransactionEndedEvent(sagaId, request2, transactionResponse2))
-    );
-
-    eventStore.populate(events);
-    saga.play();
-
-    saga.run();
-    assertThat(eventStore, IsIterableContainingInOrder.contains(
-        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
-    ));
-
-    verify(transaction1, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction3).send(request3.serviceName(), transactionResponse1);
-
-    verify(compensation1, never()).send(request1.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-    verify(compensation3, never()).send(request3.serviceName());
-  }
-
-  @Test
-  public void restoresPartialTransactionByPlayingAllEvents() {
-    when(sagaDefinition.requests()).thenReturn(new SagaRequest[]{request1, request2, request3});
-    saga = sagaFactory.createSaga(requestJson, sagaId, eventStore, sagaDefinition);
-
-    Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
-        envelope(new TransactionStartedEvent(sagaId, request1)),
-        envelope(new TransactionEndedEvent(sagaId, request1, transactionResponse1)),
-        envelope(new TransactionStartedEvent(sagaId, request2)),
-        envelope(new TransactionEndedEvent(sagaId, request2, transactionResponse2)),
-        envelope(new TransactionStartedEvent(sagaId, request3))
-    );
-
-    eventStore.populate(events);
-    saga.play();
-
-    saga.run();
-    assertThat(eventStore, IsIterableContainingInOrder.contains(
-        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
-    ));
-
-    verify(transaction1, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction3).send(request3.serviceName(), transactionResponse1);
-
-    verify(compensation1, never()).send(request1.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-    verify(compensation3, never()).send(request3.serviceName());
-  }
-
-  @Test
-  public void restoresToCompensationFromAbortedTransactionByPlayingAllEvents() {
-    when(sagaDefinition.requests()).thenReturn(new SagaRequest[]{request1, request2, request3});
-    saga = sagaFactory.createSaga(requestJson, sagaId, eventStore, sagaDefinition);
-
-    Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
-        envelope(new TransactionStartedEvent(sagaId, request1)),
-        envelope(new TransactionEndedEvent(sagaId, request1)),
-        envelope(new TransactionStartedEvent(sagaId, request2)),
-        envelope(new TransactionEndedEvent(sagaId, request2)),
-        envelope(new TransactionStartedEvent(sagaId, request3)),
-        envelope(new TransactionAbortedEvent(sagaId, request3, exception))
-    );
-
-    eventStore.populate(events);
-    saga.play();
-
-    saga.run();
-    assertThat(eventStore, IsIterableContainingInOrder.contains(
-        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionAbortedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, compensation2, TransactionCompensatedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, compensation1, TransactionCompensatedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, Compensation.SAGA_START_COMPENSATION, SagaEndedEvent.class)
-    ));
-
-    verify(transaction1, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction3, never()).send(anyString(), any(SagaResponse.class));
-
-    verify(compensation1).send(request1.serviceName());
-    verify(compensation2).send(request2.serviceName());
-    verify(compensation3, never()).send(request3.serviceName());
-  }
-
-  @Test
-  public void restoresSagaToCompensationStateByPlayingAllEvents() {
-    when(sagaDefinition.requests()).thenReturn(new SagaRequest[]{request1, request2, request3});
-    saga = sagaFactory.createSaga(requestJson, sagaId, eventStore, sagaDefinition);
-
-    Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
-        envelope(new TransactionStartedEvent(sagaId, request1)),
-        envelope(new TransactionEndedEvent(sagaId, request1)),
-        envelope(new TransactionStartedEvent(sagaId, request2)),
-        envelope(new TransactionEndedEvent(sagaId, request2)),
-        envelope(new TransactionStartedEvent(sagaId, request3)),
-        envelope(new TransactionAbortedEvent(sagaId, request3, exception)),
-        envelope(new TransactionCompensatedEvent(sagaId, request2))
-    );
-
-    eventStore.populate(events);
-    saga.play();
-
-    saga.run();
-    assertThat(eventStore, IsIterableContainingInOrder.contains(
-        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionAbortedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, compensation2, TransactionCompensatedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, compensation1, TransactionCompensatedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, Compensation.SAGA_START_COMPENSATION, SagaEndedEvent.class)
-    ));
-
-    verify(transaction1, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction3, never()).send(anyString(), any(SagaResponse.class));
-
-    verify(compensation1).send(request1.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-    verify(compensation3, never()).send(request3.serviceName());
-  }
-
-  @Test
-  public void restoresPartialCompensationByPlayingAllEvents() {
-    when(sagaDefinition.requests()).thenReturn(new SagaRequest[]{request1, request2, request3});
-    saga = sagaFactory.createSaga(requestJson, sagaId, eventStore, sagaDefinition);
-
-    Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
-        envelope(new TransactionStartedEvent(sagaId, request1)),
-        envelope(new TransactionEndedEvent(sagaId, request1)),
-        envelope(new TransactionStartedEvent(sagaId, request2)),
-        envelope(new TransactionEndedEvent(sagaId, request2)),
-        envelope(new TransactionStartedEvent(sagaId, request3)),
-        envelope(new TransactionAbortedEvent(sagaId, request3, exception)),
-        envelope(new TransactionCompensatedEvent(sagaId, request2))
-    );
-
-    eventStore.populate(events);
-    saga.play();
-
-    saga.run();
-    assertThat(eventStore, IsIterableContainingInOrder.contains(
-        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction3, TransactionAbortedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, compensation2, TransactionCompensatedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, compensation1, TransactionCompensatedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, Compensation.SAGA_START_COMPENSATION, SagaEndedEvent.class)
-    ));
-
-    verify(transaction1, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction3, never()).send(anyString(), any(SagaResponse.class));
-
-    verify(compensation1).send(request1.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-    verify(compensation3, never()).send(request3.serviceName());
-  }
-
-  @Test
-  public void restoresSagaToEndStateByPlayingAllEvents() {
-    saga = sagaFactory.createSaga(requestJson, sagaId, eventStore, sagaDefinition);
-    Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
-        envelope(new TransactionStartedEvent(sagaId, request1)),
-        envelope(new TransactionEndedEvent(sagaId, request1)),
-        envelope(new TransactionStartedEvent(sagaId, request2)),
-        envelope(new TransactionEndedEvent(sagaId, request2))
-    );
-
-    eventStore.populate(events);
-    saga.play();
-
-    saga.run();
-    assertThat(eventStore, IsIterableContainingInOrder.contains(
-        SagaEventMatcher.eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        SagaEventMatcher.eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
-    ));
-
-    verify(transaction1, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
-
-    verify(compensation1, never()).send(request1.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-  }
-
-  @Test
-  public void failFastIfSagaLogIsDown() throws Exception {
-    EventStore sagaLog = mock(EventStore.class);
-    saga = sagaFactory.createSaga(requestJson, sagaId, sagaLog, sagaDefinition);
-
-    doThrow(RuntimeException.class).when(sagaLog).offer(any(SagaStartedEvent.class));
-
-    saga.run();
-
-    verify(sagaLog).offer(any(SagaStartedEvent.class));
-    verify(transaction1, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
-
-    verify(compensation1, never()).send(request1.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-  }
-
-  private Answer<SagaResponse> withAnswer(Callable<SagaResponse> callable) {
-    return invocationOnMock -> callable.call();
-  }
-
-  private EventEnvelope envelope(SagaEvent event) {
-    return new EventEnvelope(idGenerator.nextId(), event);
-  }
-
-  private SagaRequest request(String requestId,
-      String serviceName,
-      Transaction transaction,
-      Compensation compensation,
-      String... parentIds) {
-
-    return new SagaRequestImpl(requestId, serviceName, Operation.TYPE_REST, transaction, compensation, parentIds);
-  }
-
-  private SagaRequest request(String requestId,
-      String serviceName,
-      Transaction transaction,
-      Compensation compensation,
-      Fallback fallback) {
-
-    return new SagaRequestImpl(requestId, serviceName, Operation.TYPE_REST, transaction, compensation, fallback);
-  }
-
-  private HashSet<String> setOf(String requestId) {
-    return new HashSet<>(singletonList(requestId));
-  }
-}
diff --git a/saga-core-akka/src/test/java/org/apache/servicecomb/saga/core/actors/CompletionCallbackActorTest.java b/saga-core-akka/src/test/java/org/apache/servicecomb/saga/core/actors/CompletionCallbackActorTest.java
deleted file mode 100644
index 7057de4..0000000
--- a/saga-core-akka/src/test/java/org/apache/servicecomb/saga/core/actors/CompletionCallbackActorTest.java
+++ /dev/null
@@ -1,140 +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.core.actors;
-
-import static akka.actor.ActorRef.noSender;
-import static akka.actor.Props.empty;
-import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
-import static java.time.temporal.ChronoUnit.SECONDS;
-import static org.awaitility.Awaitility.await;
-import static org.hamcrest.core.Is.is;
-import static org.hamcrest.core.IsInstanceOf.instanceOf;
-import static org.junit.Assert.assertThat;
-
-import java.time.Duration;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.servicecomb.saga.core.FailedSagaResponse;
-import org.apache.servicecomb.saga.core.NoOpSagaRequest;
-import org.apache.servicecomb.saga.core.SagaResponse;
-import org.apache.servicecomb.saga.core.actors.messages.AbortMessage;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mockito;
-
-import org.apache.servicecomb.saga.core.actors.messages.CompensateMessage;
-import org.apache.servicecomb.saga.core.actors.messages.FailMessage;
-import org.apache.servicecomb.saga.core.actors.messages.TransactMessage;
-import akka.actor.ActorRef;
-import akka.actor.ActorSystem;
-import akka.testkit.javadsl.TestKit;
-
-public class CompletionCallbackActorTest {
-  private static final ActorSystem actorSystem = ActorSystem.create();
-
-  private final SagaResponse response = Mockito.mock(SagaResponse.class);
-  private final RequestActorContext context = new RequestActorContext(null);
-
-  private final ActorRef actor1 = someActor();
-  private final ActorRef actor2 = someActor();
-
-  @Before
-  public void setUp() throws Exception {
-    context.addActor(uniquify("requestId"), actor1);
-    context.addActor(uniquify("requestId"), actor2);
-  }
-
-  @AfterClass
-  public static void tearDown() throws Exception {
-    TestKit.shutdownActorSystem(actorSystem);
-  }
-
-  @Test
-  public void killAllOnTransactionComplete() throws Exception {
-    new TestKit(actorSystem) {{
-      CompletableFuture<SagaResponse> future = new CompletableFuture<>();
-
-      ActorRef actor = actorSystem.actorOf(CompletionCallbackActor.props(future));
-
-      actor.tell(context, noSender());
-      actor.tell(new TransactMessage(null, response), noSender());
-
-      await().atMost(2, TimeUnit.SECONDS)
-          .until(() -> actor1.isTerminated() && actor2.isTerminated() && actor.isTerminated());
-
-      assertThat(future.get(), is(response));
-    }};
-  }
-
-  @Test
-  public void killAllOnCompensationComplete() throws Exception {
-    new TestKit(actorSystem) {{
-      CompletableFuture<SagaResponse> future = new CompletableFuture<>();
-
-      ActorRef actor = actorSystem.actorOf(CompletionCallbackActor.props(future));
-
-      actor.tell(context, noSender());
-      actor.tell(new CompensateMessage(response), noSender());
-
-      await().atMost(2, TimeUnit.SECONDS)
-          .until(() -> actor1.isTerminated() && actor2.isTerminated() && actor.isTerminated());
-
-      assertThat(future.get(), is(response));
-    }};
-  }
-
-  @Test
-  public void killAllOnFailure() throws Exception {
-    new TestKit(actorSystem) {{
-      CompletableFuture<SagaResponse> future = new CompletableFuture<>();
-
-      ActorRef actor = actorSystem.actorOf(CompletionCallbackActor.props(future));
-
-      actor.tell(context, noSender());
-      actor.tell(new FailMessage(new RuntimeException("oops")), noSender());
-
-      await().atMost(2, TimeUnit.SECONDS)
-          .until(() -> actor1.isTerminated() && actor2.isTerminated() && actor.isTerminated());
-
-      assertThat(future.get(), is(instanceOf(FailedSagaResponse.class)));
-    }};
-  }
-
-  @Test
-  public void tellLeafToCompensateOnAbort() throws Exception {
-    new TestKit(actorSystem) {{
-      context.addActor(NoOpSagaRequest.SAGA_END_REQUEST.id(), getRef());
-      CompletableFuture<SagaResponse> future = new CompletableFuture<>();
-
-      ActorRef actor = actorSystem.actorOf(CompletionCallbackActor.props(future));
-
-      actor.tell(context, noSender());
-      AbortMessage message = new AbortMessage(new RuntimeException("oops"));
-      actor.tell(message, noSender());
-
-      CompensateMessage compensateMessage = (CompensateMessage) receiveOne(Duration.of(2, SECONDS));
-      assertThat(compensateMessage.response(), is(message.response()));
-    }};
-  }
-
-  private ActorRef someActor() {
-    return actorSystem.actorOf(empty());
-  }
-}
diff --git a/saga-core-akka/src/test/java/org/apache/servicecomb/saga/core/actors/EventContextImplTest.java b/saga-core-akka/src/test/java/org/apache/servicecomb/saga/core/actors/EventContextImplTest.java
deleted file mode 100644
index ae11d90..0000000
--- a/saga-core-akka/src/test/java/org/apache/servicecomb/saga/core/actors/EventContextImplTest.java
+++ /dev/null
@@ -1,96 +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.core.actors;
-
-import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
-import static java.time.temporal.ChronoUnit.SECONDS;
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Mockito.when;
-
-import java.time.Duration;
-
-import org.apache.servicecomb.saga.core.SagaRequest;
-import org.apache.servicecomb.saga.core.SagaResponse;
-import org.apache.servicecomb.saga.core.actors.messages.AbortRecoveryMessage;
-import org.apache.servicecomb.saga.core.actors.messages.CompensationRecoveryMessage;
-import org.apache.servicecomb.saga.core.actors.messages.TransactionRecoveryMessage;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mockito;
-import org.scalatest.junit.JUnitSuite;
-
-import akka.actor.ActorSystem;
-import akka.testkit.javadsl.TestKit;
-
-public class EventContextImplTest extends JUnitSuite {
-  private static final ActorSystem actorSystem = ActorSystem.create();
-
-  private final SagaRequest request = Mockito.mock(SagaRequest.class);
-  private final SagaResponse response = Mockito.mock(SagaResponse.class);
-
-  private final RequestActorContext context = new RequestActorContext(null);
-  private final EventContextImpl eventContext = new EventContextImpl(context);
-  private final String requestId = uniquify("requestId");
-
-  @Before
-  public void setUp() throws Exception {
-    when(request.id()).thenReturn(requestId);
-  }
-
-  @AfterClass
-  public static void tearDown() throws Exception {
-    TestKit.shutdownActorSystem(actorSystem);
-  }
-
-  @Test
-  public void sendTransactionRecoveryMessageToActor_OnTransactionEnd() throws Exception {
-    new TestKit(actorSystem) {{
-      context.addActor(requestId, getRef());
-
-      eventContext.endTransaction(request, response);
-
-      TransactionRecoveryMessage message = (TransactionRecoveryMessage) receiveOne(Duration.of(2, SECONDS));
-      assertThat(message.response(), is(response));
-    }};
-  }
-
-  @Test
-  public void sendCompensationRecoveryMessageToActor_OnCompensationEnd() throws Exception {
-    new TestKit(actorSystem) {{
-      context.addActor(requestId, getRef());
-
-      eventContext.compensateTransaction(request, response);
-
-      expectMsgClass(CompensationRecoveryMessage.class);
-    }};
-  }
-
-  @Test
-  public void sendAbortMessageToActor_OnAbort() throws Exception {
-    new TestKit(actorSystem) {{
-      context.addActor(requestId, getRef());
-
-      eventContext.abortTransaction(request, response);
-
-      AbortRecoveryMessage message = ((AbortRecoveryMessage) receiveOne(Duration.of(2, SECONDS)));
-      assertThat(message.response(), is(response));
-    }};
-  }
-}
diff --git a/saga-core-akka/src/test/java/org/apache/servicecomb/saga/core/actors/RequestActorBuilderTest.java b/saga-core-akka/src/test/java/org/apache/servicecomb/saga/core/actors/RequestActorBuilderTest.java
deleted file mode 100644
index f799517..0000000
--- a/saga-core-akka/src/test/java/org/apache/servicecomb/saga/core/actors/RequestActorBuilderTest.java
+++ /dev/null
@@ -1,175 +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.core.actors;
-
-import static java.time.temporal.ChronoUnit.SECONDS;
-import static org.hamcrest.Matchers.containsInAnyOrder;
-import static org.hamcrest.core.IsInstanceOf.instanceOf;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import java.time.Duration;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import org.apache.servicecomb.saga.core.CompositeSagaResponse;
-import org.apache.servicecomb.saga.core.NoOpSagaRequest;
-import org.apache.servicecomb.saga.core.SagaRequest;
-import org.apache.servicecomb.saga.core.SagaResponse;
-import org.apache.servicecomb.saga.core.SagaTask;
-import org.hamcrest.Matchers;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mockito;
-import org.scalatest.junit.JUnitSuite;
-
-import com.seanyinx.github.unit.scaffolding.Randomness;
-
-import org.apache.servicecomb.saga.core.actors.messages.CompensateMessage;
-import org.apache.servicecomb.saga.core.actors.messages.TransactMessage;
-import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
-import akka.actor.ActorRef;
-import akka.actor.ActorSystem;
-import akka.testkit.javadsl.TestKit;
-
-@SuppressWarnings("unchecked")
-public class RequestActorBuilderTest extends JUnitSuite {
-  private static final ActorSystem actorSystem = ActorSystem.create();
-
-  private final String requestId1 = Randomness.uniquify("requestId1");
-  private final String requestId2 = Randomness.uniquify("requestId2");
-  private final String requestId3 = Randomness.uniquify("requestId3");
-  private final String taskId = "some task";
-
-  private final SagaRequest request1 = Mockito.mock(SagaRequest.class);
-  private final SagaRequest request2 = Mockito.mock(SagaRequest.class);
-  private final SagaRequest request3 = Mockito.mock(SagaRequest.class);
-
-  private final SagaResponse response1 = Mockito.mock(SagaResponse.class);
-  private final SagaResponse response2 = Mockito.mock(SagaResponse.class);
-  private final SagaResponse response3 = Mockito.mock(SagaResponse.class);
-
-  private final SagaRequest[] requests = {request1, request2, request3};
-
-  private final SagaTask task = Mockito.mock(SagaTask.class);
-  private final Map<String, SagaTask> tasks = new HashMap<>();
-
-  private final FromJsonFormat<Set<String>> childrenExtractor = Mockito.mock(FromJsonFormat.class);
-  private final RequestActorBuilder actorBuilder = new RequestActorBuilder(actorSystem, childrenExtractor);
-
-  @Before
-  public void setUp() throws Exception {
-    tasks.put(SagaTask.SAGA_START_TASK, task);
-    tasks.put(SagaTask.SAGA_END_TASK, task);
-    tasks.put(taskId, task);
-
-    when(request1.id()).thenReturn(requestId1);
-    when(request2.id()).thenReturn(requestId2);
-    when(request3.id()).thenReturn(requestId3);
-
-    when(request1.task()).thenReturn(taskId);
-    when(request2.task()).thenReturn(taskId);
-    when(request3.task()).thenReturn(taskId);
-
-    when(request1.parents()).thenReturn(new String[0]);
-    when(request2.parents()).thenReturn(new String[] {requestId1});
-    when(request3.parents()).thenReturn(new String[] {requestId1});
-
-    when(task.commit(NoOpSagaRequest.SAGA_START_REQUEST, SagaResponse.EMPTY_RESPONSE)).thenReturn(
-        SagaResponse.EMPTY_RESPONSE);
-    when(task.commit(request1, SagaResponse.EMPTY_RESPONSE)).thenReturn(response1);
-    when(task.commit(request2, response1)).thenReturn(response2);
-    when(task.commit(request3, response1)).thenReturn(response3);
-
-    when(childrenExtractor.fromJson(anyString())).thenReturn(Collections.emptySet());
-  }
-
-  @AfterClass
-  public static void tearDown() throws Exception {
-    TestKit.shutdownActorSystem(actorSystem);
-  }
-
-  @Test
-  public void createOneActorPerRequest() throws Exception {
-    new TestKit(actorSystem) {{
-      ArgumentCaptor<SagaResponse> argumentCaptor = ArgumentCaptor.forClass(SagaResponse.class);
-      when(task.commit(eq(NoOpSagaRequest.SAGA_END_REQUEST), argumentCaptor.capture())).thenReturn(
-          SagaResponse.EMPTY_RESPONSE);
-
-      ActorRef root = actorBuilder.build(requests, tasks, getRef()).actorOf(NoOpSagaRequest.SAGA_START_REQUEST.id());
-
-      root.tell(new TransactMessage(NoOpSagaRequest.SAGA_START_REQUEST, SagaResponse.EMPTY_RESPONSE), getRef());
-
-      List<SagaResponse> responses = receiveN(1, Duration.of(2, SECONDS)).stream()
-          .map(o -> ((TransactMessage) o).response())
-          .collect(Collectors.toList());
-
-      assertThat(responses, Matchers.containsInAnyOrder(SagaResponse.EMPTY_RESPONSE));
-
-      verify(task).commit(NoOpSagaRequest.SAGA_START_REQUEST, SagaResponse.EMPTY_RESPONSE);
-      verify(task).commit(request1, SagaResponse.EMPTY_RESPONSE);
-      verify(task).commit(request2, response1);
-      verify(task).commit(request3, response1);
-      verify(task).commit(eq(NoOpSagaRequest.SAGA_END_REQUEST), any(SagaResponse.class));
-
-      SagaResponse response = argumentCaptor.getValue();
-      assertThat(response, instanceOf(CompositeSagaResponse.class));
-      assertThat(((CompositeSagaResponse) response).responses(),
-          containsInAnyOrder(response2, response3));
-    }};
-  }
-
-  @Test
-  public void compensateAllCompletedTransactions() throws Exception {
-    new TestKit(actorSystem) {{
-      ArgumentCaptor<SagaResponse> argumentCaptor = ArgumentCaptor.forClass(SagaResponse.class);
-      when(task.commit(eq(NoOpSagaRequest.SAGA_END_REQUEST), argumentCaptor.capture())).thenReturn(
-          SagaResponse.EMPTY_RESPONSE);
-
-      ActorRef root = actorBuilder.build(requests, tasks, getRef()).actorOf(NoOpSagaRequest.SAGA_START_REQUEST.id());
-
-      root.tell(new TransactMessage(NoOpSagaRequest.SAGA_START_REQUEST, SagaResponse.EMPTY_RESPONSE), getRef());
-
-      List<SagaResponse> responses = receiveN(1, Duration.of(2, SECONDS)).stream()
-          .map(o -> ((TransactMessage) o).response())
-          .collect(Collectors.toList());
-
-      assertThat(responses, Matchers.containsInAnyOrder(SagaResponse.EMPTY_RESPONSE));
-
-      CompensateMessage message = new CompensateMessage(response1);
-      getLastSender().tell(message, getRef());
-      expectMsg(message);
-
-      verify(task).compensate(NoOpSagaRequest.SAGA_START_REQUEST);
-      verify(task).compensate(request1);
-      verify(task).compensate(request2);
-      verify(task).compensate(request3);
-      verify(task).compensate(NoOpSagaRequest.SAGA_END_REQUEST);
-    }};
-  }
-}
diff --git a/saga-core-akka/src/test/java/org/apache/servicecomb/saga/core/actors/RequestActorTest.java b/saga-core-akka/src/test/java/org/apache/servicecomb/saga/core/actors/RequestActorTest.java
deleted file mode 100644
index a9d755f..0000000
--- a/saga-core-akka/src/test/java/org/apache/servicecomb/saga/core/actors/RequestActorTest.java
+++ /dev/null
@@ -1,406 +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.core.actors;
-
-import static akka.actor.ActorRef.noSender;
-import static akka.actor.Props.empty;
-import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
-import static java.time.temporal.ChronoUnit.MILLIS;
-import static java.time.temporal.ChronoUnit.SECONDS;
-import static java.util.Collections.emptySet;
-import static java.util.Collections.singleton;
-import static org.hamcrest.Matchers.contains;
-import static org.hamcrest.Matchers.containsInAnyOrder;
-import static org.hamcrest.core.IsInstanceOf.instanceOf;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.reset;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import java.time.Duration;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import org.apache.servicecomb.saga.core.CompositeSagaResponse;
-import org.apache.servicecomb.saga.core.FailedSagaResponse;
-import org.apache.servicecomb.saga.core.Operation;
-import org.apache.servicecomb.saga.core.SagaRequest;
-import org.apache.servicecomb.saga.core.SagaResponse;
-import org.apache.servicecomb.saga.core.SagaStartFailedException;
-import org.apache.servicecomb.saga.core.SagaTask;
-import org.apache.servicecomb.saga.core.TransactionFailedException;
-import org.apache.servicecomb.saga.core.actors.messages.AbortMessage;
-import org.apache.servicecomb.saga.core.actors.messages.CompensationRecoveryMessage;
-import org.apache.servicecomb.saga.core.actors.messages.TransactMessage;
-import org.apache.servicecomb.saga.core.actors.messages.TransactionRecoveryMessage;
-import org.hamcrest.Matchers;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mockito;
-import org.scalatest.junit.JUnitSuite;
-
-import org.apache.servicecomb.saga.core.actors.messages.CompensateMessage;
-import org.apache.servicecomb.saga.core.actors.messages.FailMessage;
-import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
-
-import akka.actor.ActorRef;
-import akka.actor.ActorSystem;
-import akka.testkit.javadsl.TestKit;
-
-@SuppressWarnings("unchecked")
-public class RequestActorTest extends JUnitSuite {
-
-  public static final Duration TWO_SECONDS = Duration.of(2, SECONDS);
-
-  private final String parentRequestId1 = uniquify("parentRequestId1");
-  private final String parentRequestId2 = uniquify("parentRequestId2");
-  private final String requestId = uniquify("requestId");
-
-  private final SagaTask task = Mockito.mock(SagaTask.class);
-  private final SagaRequest request = Mockito.mock(SagaRequest.class, "request");
-  private final SagaRequest request1 = Mockito.mock(SagaRequest.class, "request1");
-  private final SagaRequest request2 = Mockito.mock(SagaRequest.class, "request2");
-  private final SagaResponse response = Mockito.mock(SagaResponse.class);
-  private final FromJsonFormat<Set<String>> childrenExtractor = mock(FromJsonFormat.class);
-
-  private final RequestActorContext context = new RequestActorContext(childrenExtractor);
-
-  private final TransactionFailedException exception = new TransactionFailedException("oops");
-  private static final ActorSystem actorSystem = ActorSystem.create();
-  private final CompensateMessage compensateMessage = new CompensateMessage(new FailedSagaResponse(exception));
-
-  @Before
-  public void setUp() throws Exception {
-    when(childrenExtractor.fromJson(anyString())).thenReturn(emptySet());
-    when(request.id()).thenReturn(requestId);
-
-    when(request1.id()).thenReturn(parentRequestId1);
-    when(request2.id()).thenReturn(parentRequestId2);
-  }
-
-  @AfterClass
-  public static void tearDown() throws Exception {
-    TestKit.shutdownActorSystem(actorSystem);
-  }
-
-  @Test
-  public void tellNodeResponseToAllChildren() throws Exception {
-    new TestKit(actorSystem) {{
-      addChildren(getRef());
-
-      ActorRef parent = someActor();
-      context.addParent(requestId, parent);
-
-      when(request.parents()).thenReturn(new String[] {parentRequestId1});
-      when(task.commit(request, Operation.SUCCESSFUL_SAGA_RESPONSE)).thenReturn(response);
-
-      ActorRef actorRef = actorSystem.actorOf(RequestActor.props(context, task, request));
-
-      actorRef.tell(new TransactMessage(request1, Operation.SUCCESSFUL_SAGA_RESPONSE), parent);
-
-      List<SagaResponse> responses = receiveN(2, TWO_SECONDS).stream()
-          .map(o -> ((TransactMessage) o).response())
-          .collect(Collectors.toList());
-
-      assertThat(responses, containsInAnyOrder(response, response));
-
-      verify(task).commit(request, Operation.SUCCESSFUL_SAGA_RESPONSE);
-    }};
-  }
-
-  @Test
-  public void executeTransaction_OnlyWhenAllParentsResponsesAreReceived() throws Exception {
-    new TestKit(actorSystem) {{
-      addChildren(getRef());
-
-      ActorRef parent1 = someActor();
-      context.addParent(requestId, parent1);
-
-      ActorRef parent2 = someActor();
-      context.addParent(requestId, parent2);
-
-      ArgumentCaptor<SagaResponse> argumentCaptor = ArgumentCaptor.forClass(SagaResponse.class);
-
-      when(request.parents()).thenReturn(new String[] {parentRequestId1, parentRequestId2});
-      when(task.commit(eq(request), argumentCaptor.capture())).thenReturn(response);
-
-      ActorRef actorRef = actorSystem.actorOf(RequestActor.props(context, task, request));
-
-      actorRef.tell(new TransactMessage(request1, Operation.SUCCESSFUL_SAGA_RESPONSE), parent1);
-      expectNoMessage(Duration.of(500, MILLIS));
-
-      actorRef.tell(new TransactMessage(request2, SagaResponse.EMPTY_RESPONSE), parent2);
-
-      List<SagaResponse> responses = receiveN(2, TWO_SECONDS).stream()
-          .map(o -> ((TransactMessage) o).response())
-          .collect(Collectors.toList());
-
-      assertThat(responses, containsInAnyOrder(response, response));
-
-      SagaResponse response = argumentCaptor.getValue();
-      assertThat(response, instanceOf(CompositeSagaResponse.class));
-      assertThat(((CompositeSagaResponse) response).responses(),
-          Matchers.containsInAnyOrder(SagaResponse.EMPTY_RESPONSE, Operation.SUCCESSFUL_SAGA_RESPONSE));
-    }};
-  }
-
-  @Test
-  public void tellAllRelativesToAbortOnError() throws Exception {
-    new TestKit(actorSystem) {{
-      context.addChild(requestId, getRef());
-      context.addActor(requestId, getRef());
-
-      context.addParent(requestId, getRef());
-
-      when(request.parents()).thenReturn(new String[] {parentRequestId1});
-      when(task.commit(request, Operation.SUCCESSFUL_SAGA_RESPONSE)).thenThrow(exception);
-
-      ActorRef actorRef = actorSystem.actorOf(RequestActor.props(context, task, request));
-
-      actorRef.tell(new TransactMessage(request1, Operation.SUCCESSFUL_SAGA_RESPONSE), getRef());
-
-      List<SagaResponse> responses = receiveN(2, TWO_SECONDS).stream()
-          .map(o -> ((AbortMessage) o).response())
-          .collect(Collectors.toList());
-
-      assertThat(responses, containsInAnyOrder(instanceOf(FailedSagaResponse.class), instanceOf(FailedSagaResponse.class)));
-    }};
-  }
-
-  @Test
-  public void tellAllRelativesExceptSenderToAbortOnAbort() throws Exception {
-    new TestKit(actorSystem) {{
-      context.addChild(requestId, getRef());
-      context.addActor(requestId, getRef());
-
-      context.addParent(requestId, getRef());
-
-      when(request.parents()).thenReturn(new String[] {parentRequestId1});
-
-      ActorRef actorRef = actorSystem.actorOf(RequestActor.props(context, task, request));
-
-      actorRef.tell(new AbortMessage(exception), someActor());
-
-      List<SagaResponse> responses = receiveN(2, TWO_SECONDS).stream()
-          .map(o -> ((AbortMessage) o).response())
-          .collect(Collectors.toList());
-
-      assertThat(responses, containsInAnyOrder(instanceOf(FailedSagaResponse.class), instanceOf(FailedSagaResponse.class)));
-
-      actorRef.tell(new AbortMessage(exception), someActor());
-      expectNoMessage(Duration.of(500, MILLIS));
-    }};
-  }
-
-  @Test
-  public void compensateIfTransactionIsCompleted() throws Exception {
-    new TestKit(actorSystem) {{
-      addChildren(someActor());
-      context.addParent(requestId, getRef());
-
-      when(request.parents()).thenReturn(new String[] {parentRequestId1});
-      when(task.commit(request, Operation.SUCCESSFUL_SAGA_RESPONSE)).thenReturn(response);
-
-      ActorRef actorRef = actorSystem.actorOf(RequestActor.props(context, task, request));
-
-      actorRef.tell(new TransactMessage(request1, Operation.SUCCESSFUL_SAGA_RESPONSE), getRef());
-      actorRef.tell(new AbortMessage(exception), noSender());
-      actorRef.tell(compensateMessage, getRef());
-      actorRef.tell(compensateMessage, getRef());
-
-      expectMsg(TWO_SECONDS, compensateMessage);
-      verify(task).compensate(request);
-
-      // no duplicate compensation
-      reset(task);
-      actorRef.tell(compensateMessage, getRef());
-      actorRef.tell(compensateMessage, getRef());
-      expectNoMessage(Duration.of(200, MILLIS));
-      verify(task, never()).compensate(request);
-    }};
-  }
-
-  @Test
-  public void doNotCompensateIfTransactionIsNotCompleted() throws Exception {
-    new TestKit(actorSystem) {{
-      addChildren(someActor());
-      context.addParent(requestId, getRef());
-
-      when(request.parents()).thenReturn(new String[] {parentRequestId1});
-
-      ActorRef actorRef = actorSystem.actorOf(RequestActor.props(context, task, request));
-
-      actorRef.tell(new AbortMessage(exception), noSender());
-      actorRef.tell(compensateMessage, getRef());
-      actorRef.tell(compensateMessage, getRef());
-
-      List<Object> responses = receiveN(2, TWO_SECONDS);
-      assertThat(responses, contains(instanceOf(AbortMessage.class), instanceOf(CompensateMessage.class)));
-      verify(task, never()).compensate(request);
-
-      // no duplicate compensation
-      reset(task);
-      actorRef.tell(compensateMessage, getRef());
-      actorRef.tell(compensateMessage, getRef());
-      expectNoMessage(Duration.of(200, MILLIS));
-      verify(task, never()).compensate(request);
-    }};
-  }
-
-  @Test
-  public void skipIfActorIsNotChosenByAnyParent() throws Exception {
-    when(childrenExtractor.fromJson(Operation.SUCCESSFUL_SAGA_RESPONSE.body())).thenReturn(singleton("none"));
-
-    new TestKit(actorSystem) {{
-      addChildren(getRef());
-      context.addParent(requestId, getRef());
-
-      when(request.parents()).thenReturn(new String[] {parentRequestId1});
-
-      ActorRef actorRef = actorSystem.actorOf(RequestActor.props(context, task, request));
-
-      actorRef.tell(new TransactMessage(request1, Operation.SUCCESSFUL_SAGA_RESPONSE), getRef());
-
-      List<SagaResponse> responses = receiveN(2, TWO_SECONDS).stream()
-          .map(o -> ((TransactMessage) o).response())
-          .collect(Collectors.toList());
-
-      assertThat(responses, Matchers.containsInAnyOrder(SagaResponse.NONE_RESPONSE, SagaResponse.NONE_RESPONSE));
-      verify(task, never()).commit(request, Operation.SUCCESSFUL_SAGA_RESPONSE);
-
-      // skip compensation for ignored actor
-      actorRef.tell(compensateMessage, getRef());
-      actorRef.tell(compensateMessage, getRef());
-
-      expectMsg(TWO_SECONDS, compensateMessage);
-      verify(task, never()).compensate(request);
-    }};
-  }
-
-  @Test
-  public void transactIfChosenByAnyParent() throws Exception {
-    when(childrenExtractor.fromJson(Operation.SUCCESSFUL_SAGA_RESPONSE.body())).thenReturn(singleton(requestId));
-
-    new TestKit(actorSystem) {{
-      addChildren(getRef());
-
-      ActorRef parent1 = someActor();
-      context.addParent(requestId, parent1);
-
-      ActorRef parent2 = someActor();
-      context.addParent(requestId, parent2);
-
-      when(request.parents()).thenReturn(new String[] {parentRequestId1, parentRequestId2});
-      when(task.commit(eq(request), any(CompositeSagaResponse.class))).thenReturn(response);
-
-      ActorRef actorRef = actorSystem.actorOf(RequestActor.props(context, task, request));
-
-      actorRef.tell(new TransactMessage(request1, Operation.SUCCESSFUL_SAGA_RESPONSE), parent1);
-      actorRef.tell(new TransactMessage(request2, Operation.SUCCESSFUL_SAGA_RESPONSE), parent2);
-
-      List<SagaResponse> responses = receiveN(2, TWO_SECONDS).stream()
-          .map(o -> ((TransactMessage) o).response())
-          .collect(Collectors.toList());
-
-      assertThat(responses, containsInAnyOrder(response, response));
-    }};
-  }
-
-  @Test
-  public void tellTransactionResponseToChildrenOnRecovery() throws Exception {
-    new TestKit(actorSystem) {{
-      context.addChild(requestId, getRef());
-
-      ActorRef parent = someActor();
-      context.addParent(requestId, parent);
-
-      when(request.parents()).thenReturn(new String[] {parentRequestId1});
-
-      ActorRef actorRef = actorSystem.actorOf(RequestActor.props(context, task, request));
-
-      actorRef.tell(new TransactionRecoveryMessage(response), noSender());
-      actorRef.tell(new TransactMessage(request1, Operation.SUCCESSFUL_SAGA_RESPONSE), parent);
-
-      List<SagaResponse> responses = receiveN(1, TWO_SECONDS).stream()
-          .map(o -> ((TransactMessage) o).response())
-          .collect(Collectors.toList());
-
-      assertThat(responses, containsInAnyOrder(response));
-
-      verify(task, never()).commit(request, Operation.SUCCESSFUL_SAGA_RESPONSE);
-    }};
-  }
-
-  @Test
-  public void tellCompensationToParentsOnRecovery() throws Exception {
-    new TestKit(actorSystem) {{
-      context.addChild(requestId, someActor());
-      context.addParent(requestId, getRef());
-
-      when(request.parents()).thenReturn(new String[] {parentRequestId1});
-
-      ActorRef actorRef = actorSystem.actorOf(RequestActor.props(context, task, request));
-
-      actorRef.tell(new AbortMessage(exception), someActor());
-      actorRef.tell(new CompensationRecoveryMessage(), someActor());
-      actorRef.tell(compensateMessage, someActor());
-
-      List<Object> responses = receiveN(2, TWO_SECONDS);
-      assertThat(responses, contains(instanceOf(AbortMessage.class), instanceOf(CompensateMessage.class)));
-
-      verify(task, never()).compensate(request);
-    }};
-  }
-
-  @Test
-  public void abortOnPersistenceFailure() throws Exception {
-    new TestKit(actorSystem) {{
-      context.addChild(requestId, noSender());
-      context.addParent(requestId, getRef());
-
-      when(request.parents()).thenReturn(new String[] {parentRequestId1});
-
-      SagaStartFailedException oops = new SagaStartFailedException("oops", exception);
-      when(task.commit(request, SagaResponse.EMPTY_RESPONSE)).thenThrow(oops);
-
-      ActorRef actorRef = actorSystem.actorOf(RequestActor.props(context, task, request));
-
-      actorRef.tell(new TransactMessage(request, SagaResponse.EMPTY_RESPONSE), getRef());
-
-      expectMsgClass(FailMessage.class);
-    }};
-  }
-
-  private ActorRef someActor() {
-    return actorSystem.actorOf(empty());
-  }
-
-  private void addChildren(ActorRef ref) {
-    context.addChild(requestId, ref);
-    context.addChild(requestId, ref);
-    context.addActor(requestId, ref);
-  }
-}
diff --git a/saga-core-akka/src/test/resources/application.conf b/saga-core-akka/src/test/resources/application.conf
deleted file mode 100644
index 0629dd6..0000000
--- a/saga-core-akka/src/test/resources/application.conf
+++ /dev/null
@@ -1,21 +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.
-## ---------------------------------------------------------------------------
-akka {
-  loggers = ["akka.event.slf4j.Slf4jLogger"]
-  loglevel = "DEBUG"
-  logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"
-}
diff --git a/saga-core-akka/src/test/resources/log4j2.xml b/saga-core-akka/src/test/resources/log4j2.xml
deleted file mode 100644
index cae04cb..0000000
--- a/saga-core-akka/src/test/resources/log4j2.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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.
-  -->
-
-<Configuration status="WARN">
-  <Appenders>
-    <Console name="Console" target="SYSTEM_OUT">
-      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
-    </Console>
-  </Appenders>
-  <Loggers>
-    <AsyncRoot level="info">
-      <AppenderRef ref="Console"/>
-    </AsyncRoot>
-  </Loggers>
-</Configuration>
diff --git a/saga-core/pom.xml b/saga-core/pom.xml
deleted file mode 100644
index e460b1a..0000000
--- a/saga-core/pom.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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.
-  -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <parent>
-    <artifactId>saga</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
-    <version>0.3.0-SNAPSHOT</version>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-
-  <artifactId>saga-core</artifactId>
-  <name>Saga::Core</name>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.lmax</groupId>
-      <artifactId>disruptor</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.logging.log4j</groupId>
-      <artifactId>log4j-slf4j-impl</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.logging.log4j</groupId>
-      <artifactId>log4j-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.logging.log4j</groupId>
-      <artifactId>log4j-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>io.kamon</groupId>
-      <artifactId>kamon-annotation_2.12</artifactId>
-    </dependency>
-
-    <!-- test dependencies -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.hamcrest</groupId>
-      <artifactId>hamcrest-all</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <!-- need to use this version of running the test -->
-      <version>1.10.19</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.awaitility</groupId>
-      <artifactId>awaitility</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>com.github.seanyinx</groupId>
-      <artifactId>unit-scaffolding</artifactId>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <executions>
-          <execution>
-            <goals>
-              <goal>test-jar</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <version>3.1</version>
-        <configuration>
-          <encoding>UTF-8</encoding>
-          <source>1.7</source>
-          <target>1.7</target>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
-</project>
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/BackwardRecovery.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/BackwardRecovery.java
deleted file mode 100644
index 799dbbf..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/BackwardRecovery.java
+++ /dev/null
@@ -1,54 +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.core;
-
-import java.lang.invoke.MethodHandles;
-import kamon.annotation.EnableKamon;
-import kamon.annotation.Segment;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-@EnableKamon
-public class BackwardRecovery implements RecoveryPolicy {
-
-  private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-
-  @Segment(name = "backwardPolicy", category = "application", library = "kamon")
-  @Override
-  public SagaResponse apply(SagaTask task, SagaRequest request, SagaResponse parentResponse) {
-    try {
-      return request.transaction().send(request.serviceName(), parentResponse);
-    } catch (Exception e) {
-      log.error("Applying {} policy due to failure in transaction {} of service {}",
-          description(),
-          request.transaction(),
-          request.serviceName(),
-          e
-      );
-
-      task.abort(request, e);
-      throw e;
-    }
-  }
-
-  @Override
-  public String description() {
-    return getClass().getSimpleName();
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/Compensation.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/Compensation.java
deleted file mode 100644
index 758ebd9..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/Compensation.java
+++ /dev/null
@@ -1,55 +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.core;
-
-public interface Compensation extends Operation {
-
-  Compensation SAGA_START_COMPENSATION = new Compensation() {
-    @Override
-    public SagaResponse send(String address) {
-      return SUCCESSFUL_SAGA_RESPONSE;
-    }
-
-    @Override
-    public SagaResponse send(String address, SagaResponse response) {
-      return send(address);
-    }
-
-    @Override
-    public int retries() {
-      return DEFAULT_RETRIES;
-    }
-  };
-
-  Compensation SAGA_END_COMPENSATION = new Compensation() {
-    @Override
-    public SagaResponse send(String address) {
-      return SUCCESSFUL_SAGA_RESPONSE;
-    }
-
-    @Override
-    public SagaResponse send(String address, SagaResponse response) {
-      return send(address);
-    }
-
-    @Override
-    public int retries() {
-      return DEFAULT_RETRIES;
-    }
-  };
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/CompensationTaskConsumer.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/CompensationTaskConsumer.java
deleted file mode 100644
index 736c34d..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/CompensationTaskConsumer.java
+++ /dev/null
@@ -1,69 +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.core;
-
-import java.lang.invoke.MethodHandles;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.servicecomb.saga.core.dag.Node;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-class CompensationTaskConsumer implements TaskConsumer {
-
-  private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-  private final Map<String, SagaTask> tasks;
-  private final SagaContext sagaContext;
-
-  CompensationTaskConsumer(Map<String, SagaTask> tasks, SagaContext sagaContext) {
-    this.tasks = tasks;
-    this.sagaContext = sagaContext;
-  }
-
-  @Override
-  public void consume(Collection<Node<SagaRequest>> nodes) {
-    for (Node<SagaRequest> node : nodes) {
-      SagaRequest request = node.value();
-
-      if (sagaContext.isTransactionCompleted(request)) {
-        log.info("Starting request {} id={}", request.serviceName(), request.id());
-        tasks.get(request.task()).compensate(request);
-        log.info("Completed request {} id={}", request.serviceName(), request.id());
-      }
-    }
-  }
-
-  @Override
-  public boolean replay(Collection<Node<SagaRequest>> nodes) {
-
-    for (Iterator<Node<SagaRequest>> iterator = nodes.iterator(); iterator.hasNext(); ) {
-      SagaRequest request = iterator.next().value();
-      if (sagaContext.isCompensationCompleted(request)) {
-        log.info("Skipped completed compensation id={} operation={} while replay", request.id(), request.transaction());
-        iterator.remove();
-      } else if (!sagaContext.isTransactionCompleted(request)) {
-        // this transaction never started
-        log.info("Skipped pending transaction id={} operation={} while replay", request.id(), request.transaction());
-        iterator.remove();
-      }
-    }
-    return !nodes.isEmpty();
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/CompositeSagaLog.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/CompositeSagaLog.java
deleted file mode 100644
index 017129a..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/CompositeSagaLog.java
+++ /dev/null
@@ -1,40 +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.core;
-
-import kamon.annotation.EnableKamon;
-import kamon.annotation.Segment;
-
-@EnableKamon
-class CompositeSagaLog implements SagaLog {
-
-  private final SagaLog embedded;
-  private final PersistentLog persistent;
-
-  CompositeSagaLog(SagaLog embedded, PersistentLog persistent) {
-    this.embedded = embedded;
-    this.persistent = persistent;
-  }
-
-  @Segment(name = "compositeSagaLog", category = "application", library = "kamon")
-  @Override
-  public void offer(SagaEvent sagaEvent) {
-    persistent.offer(sagaEvent);
-    embedded.offer(sagaEvent);
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/CompositeSagaResponse.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/CompositeSagaResponse.java
deleted file mode 100644
index 84753b9..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/CompositeSagaResponse.java
+++ /dev/null
@@ -1,63 +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.core;
-
-import java.util.Collection;
-
-public class CompositeSagaResponse implements SagaResponse {
-  private final Collection<SagaResponse> responses;
-
-  public CompositeSagaResponse(Collection<SagaResponse> responses) {
-    this.responses = responses;
-  }
-
-  @Override
-  public boolean succeeded() {
-    if (responses.size() > 0) {
-      boolean result = true;
-      for (SagaResponse response : responses) {
-        result = result && response.succeeded();
-      }
-      return result;
-    } else {
-      return false;
-    }
-  }
-
-  @Override
-  public String body() {
-    StringBuffer result = new StringBuffer();
-    if (responses.size() == 0) {
-      result.append("{}");
-    } else {
-      result.append("[");
-      for (SagaResponse response : responses) {
-        result.append(response.body());
-        result.append(", ");
-      }
-      result.delete(result.length()-2, result.length());
-      result.append("]");
-    }
-    return result.toString();
-  }
-
-
-  public Collection<SagaResponse> responses() {
-    return responses;
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/Descriptive.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/Descriptive.java
deleted file mode 100644
index e8b4f4e..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/Descriptive.java
+++ /dev/null
@@ -1,23 +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.core;
-
-interface Descriptive {
-
-  String description();
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/EventContext.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/EventContext.java
deleted file mode 100644
index 79b0c3e..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/EventContext.java
+++ /dev/null
@@ -1,28 +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.core;
-
-public interface EventContext {
-  void beginTransaction(SagaRequest request);
-
-  void endTransaction(SagaRequest request, SagaResponse response);
-
-  void abortTransaction(SagaRequest request, SagaResponse response);
-
-  void compensateTransaction(SagaRequest request, SagaResponse response);
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/EventEnvelope.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/EventEnvelope.java
deleted file mode 100644
index 9283b33..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/EventEnvelope.java
+++ /dev/null
@@ -1,47 +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.core;
-
-public class EventEnvelope {
-
-  public final long id;
-  public final long timestamp;
-  public final SagaEvent event;
-
-  public EventEnvelope(long id, SagaEvent event) {
-    this.id = id;
-    this.event = event;
-    this.timestamp = System.currentTimeMillis();
-  }
-
-  // TODO: 8/21/2017 this class seems to be useless to saga
-  public EventEnvelope(long id, long timestamp, SagaEvent event) {
-    this.id = id;
-    this.timestamp = timestamp;
-    this.event = event;
-  }
-
-  @Override
-  public String toString() {
-    return "EventEnvelope{" +
-        "id=" + id +
-        ", timestamp=" + timestamp +
-        ", event={" + event +
-        "}}";
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/EventStore.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/EventStore.java
deleted file mode 100644
index 7b7e6e2..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/EventStore.java
+++ /dev/null
@@ -1,25 +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.core;
-
-public interface EventStore extends SagaLog, Iterable<SagaEvent> {
-
-  void populate(Iterable<EventEnvelope> events);
-
-  long size();
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/FailedSagaResponse.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/FailedSagaResponse.java
deleted file mode 100644
index 15d1701..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/FailedSagaResponse.java
+++ /dev/null
@@ -1,50 +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.core;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
-public class FailedSagaResponse implements SagaResponse {
-
-  private final String body;
-
-  public FailedSagaResponse(String body) {
-    this.body = body;
-  }
-
-  public FailedSagaResponse(Throwable e) {
-    this.body = stackTrace(e);
-  }
-
-  @Override
-  public boolean succeeded() {
-    return false;
-  }
-
-  @Override
-  public String body() {
-    return body;
-  }
-
-  private String stackTrace(Throwable e) {
-    StringWriter writer = new StringWriter();
-    e.printStackTrace(new PrintWriter(writer));
-    return writer.toString();
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/Fallback.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/Fallback.java
deleted file mode 100644
index 7215a6b..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/Fallback.java
+++ /dev/null
@@ -1,45 +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.core;
-
-public interface Fallback extends Operation {
-
-  Fallback NOP_FALLBACK = new Fallback() {
-    @Override
-    public String type() {
-      return TYPE_NOP;
-    }
-
-    @Override
-    public SagaResponse send(String address) {
-      return SUCCESSFUL_SAGA_RESPONSE;
-    }
-
-    @Override
-    public SagaResponse send(String address, SagaResponse response) {
-      return send(address);
-    }
-
-    @Override
-    public int retries() {
-      return 0;
-    }
-  };
-
-  String type();
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/FallbackPolicy.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/FallbackPolicy.java
deleted file mode 100644
index 48ad67d..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/FallbackPolicy.java
+++ /dev/null
@@ -1,62 +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.core;
-
-import java.lang.invoke.MethodHandles;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class FallbackPolicy {
-  private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-
-  private final int retryDelay;
-
-  public FallbackPolicy(int retryDelay) {
-    this.retryDelay = retryDelay;
-  }
-
-  public SagaResponse apply(String address, Compensation compensation, Fallback fallback) {
-    for (int i = 0; isRetryable(i, compensation) && !isInterrupted(); i++) {
-      try {
-        return compensation.send(address);
-      } catch (Exception e) {
-        log.error("Failed to send compensation to {}", address, e);
-        sleep(retryDelay);
-      }
-    }
-
-    log.warn("Falling back after {} failures sending compensation to {}", compensation.retries(), address);
-    return fallback.send(address);
-  }
-
-  private boolean isRetryable(int i, Compensation compensation) {
-    return compensation.retries() < 0 || i <= compensation.retries();
-  }
-
-  private boolean isInterrupted() {
-    return Thread.currentThread().isInterrupted();
-  }
-
-  private void sleep(int delay) {
-    try {
-      Thread.sleep(delay);
-    } catch (InterruptedException ignored) {
-      Thread.currentThread().interrupt();
-    }
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/ForwardRecovery.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/ForwardRecovery.java
deleted file mode 100644
index 8c10cc0..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/ForwardRecovery.java
+++ /dev/null
@@ -1,67 +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.core;
-
-import java.lang.invoke.MethodHandles;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ForwardRecovery implements RecoveryPolicy {
-
-  private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-
-  @Override
-  public SagaResponse apply(SagaTask task, SagaRequest request, SagaResponse parentResponse) {
-    try {
-      for(int i = 0; isRetryable(i, request.transaction()); i++) {
-        try {
-          return request.transaction().send(request.serviceName(), parentResponse);
-        } catch (Exception e) {
-          log.error("Applying {} policy due to failure in transaction {} of service {}",
-              description(),
-              request.transaction(),
-              request.serviceName(),
-              e
-          );
-          Thread.sleep(request.failRetryDelayMilliseconds());
-        }
-      }
-    } catch (InterruptedException ignored) {
-      log.warn("Applying {} interrupted in transaction {} of service {}",
-          description(),
-          request.transaction(),
-          request.serviceName(),
-          ignored);
-      throw new TransactionFailedException(ignored);
-    }
-    throw new TransactionAbortedException(
-        String.format(
-            "Too many failures in transaction %s of service %s, abort the transaction!",
-            request.transaction(),
-            request.serviceName()));
-  }
-
-  private boolean isRetryable(int i, Transaction transaction) {
-    return transaction.retries() <= 0 || i <= transaction.retries();
-  }
-
-  @Override
-  public String description() {
-    return getClass().getSimpleName();
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/GraphBasedSaga.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/GraphBasedSaga.java
deleted file mode 100644
index d57dbe9..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/GraphBasedSaga.java
+++ /dev/null
@@ -1,139 +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.core;
-
-import java.lang.invoke.MethodHandles;
-import java.util.Map;
-import java.util.concurrent.Executor;
-import java.util.concurrent.ExecutorCompletionService;
-import java.util.concurrent.Executors;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.servicecomb.saga.core.dag.ByLevelTraveller;
-import org.apache.servicecomb.saga.core.dag.FromLeafTraversalDirection;
-import org.apache.servicecomb.saga.core.dag.FromRootTraversalDirection;
-import org.apache.servicecomb.saga.core.dag.SingleLeafDirectedAcyclicGraph;
-import org.apache.servicecomb.saga.core.dag.TraversalDirection;
-import kamon.annotation.EnableKamon;
-import kamon.annotation.Segment;
-
-@EnableKamon
-public class GraphBasedSaga implements Saga {
-
-  private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-
-  private final EventStore eventStore;
-  private final Map<String, SagaTask> tasks;
-
-  private final TaskRunner transactionTaskRunner;
-  private final TaskRunner compensationTaskRunner;
-  private final SagaContext sagaContext;
-  private volatile SagaState currentTaskRunner;
-
-  GraphBasedSaga(EventStore eventStore,
-      Map<String, SagaTask> tasks,
-      SagaContext sagaContext,
-      SingleLeafDirectedAcyclicGraph<SagaRequest> sagaTaskGraph) {
-
-    this(eventStore, Executors.newFixedThreadPool(5), tasks, sagaContext, sagaTaskGraph);
-  }
-
-  public GraphBasedSaga(EventStore eventStore,
-      Executor executor,
-      Map<String, SagaTask> tasks,
-      SagaContext sagaContext,
-      SingleLeafDirectedAcyclicGraph<SagaRequest> sagaTaskGraph) {
-
-    this.eventStore = eventStore;
-    this.tasks = tasks;
-
-    this.transactionTaskRunner = new TaskRunner(
-        traveller(sagaTaskGraph, new FromRootTraversalDirection<SagaRequest>()),
-        new TransactionTaskConsumer(
-            tasks,
-            sagaContext,
-            new ExecutorCompletionService<Operation>(executor)));
-
-    this.sagaContext = sagaContext;
-    this.compensationTaskRunner = new TaskRunner(
-        traveller(sagaTaskGraph, new FromLeafTraversalDirection<SagaRequest>()),
-        new CompensationTaskConsumer(tasks, sagaContext));
-
-    currentTaskRunner = transactionTaskRunner;
-  }
-
-  @Override
-  @Segment(name = "runSaga", category = "application", library = "kamon")
-  public SagaResponse run() {
-    SagaResponse response = SagaResponse.EMPTY_RESPONSE;
-    log.info("Starting Saga");
-    do {
-      try {
-        currentTaskRunner.run();
-      } catch (TransactionFailedException e) {
-        response = new FailedSagaResponse(e);
-        log.error("Failed to run operation", e);
-        currentTaskRunner = compensationTaskRunner;
-
-        sagaContext.handleHangingTransactions(new TransactionConsumer<SagaRequest>() {
-          @Override
-          public void accept(SagaRequest request) {
-            tasks.get(request.task()).commit(request, sagaContext.responseOf(request.parents()));
-            tasks.get(request.task()).compensate(request);
-          }
-        });
-      } catch (TransactionAbortedException e) {
-        response = new FailedSagaResponse(e);
-        log.error("Transaction aborted ", e);
-        break;
-      }
-    } while (currentTaskRunner.hasNext());
-    log.info("Completed Saga");
-    return response;
-  }
-
-  @Override
-  public void play() {
-    log.info("Start playing events");
-    gatherEvents(eventStore);
-
-    transactionTaskRunner.replay();
-
-    if (sagaContext.isCompensationStarted()) {
-      currentTaskRunner = compensationTaskRunner;
-      compensationTaskRunner.replay();
-    }
-
-    log.info("Completed playing events");
-  }
-
-  private void gatherEvents(Iterable<SagaEvent> events) {
-    for (SagaEvent event : events) {
-      event.gatherTo(sagaContext);
-    }
-  }
-
-  private ByLevelTraveller<SagaRequest> traveller(
-      SingleLeafDirectedAcyclicGraph<SagaRequest> sagaTaskGraph,
-      TraversalDirection<SagaRequest> traversalDirection) {
-
-    return new ByLevelTraveller<>(sagaTaskGraph, traversalDirection);
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/IdGenerator.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/IdGenerator.java
deleted file mode 100644
index 2add260..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/IdGenerator.java
+++ /dev/null
@@ -1,25 +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.core;
-
-import java.io.Serializable;
-
-public interface IdGenerator<T extends Serializable> {
-
-  T nextId();
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/LoggingRecoveryPolicy.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/LoggingRecoveryPolicy.java
deleted file mode 100644
index 593aa91..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/LoggingRecoveryPolicy.java
+++ /dev/null
@@ -1,51 +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.core;
-
-import java.lang.invoke.MethodHandles;
-import kamon.annotation.EnableKamon;
-import kamon.annotation.Segment;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-
-@EnableKamon
-public class LoggingRecoveryPolicy implements RecoveryPolicy {
-  private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-
-  private final RecoveryPolicy recoveryPolicy;
-
-  public LoggingRecoveryPolicy(RecoveryPolicy recoveryPolicy) {
-    this.recoveryPolicy = recoveryPolicy;
-  }
-
-  @Segment(name = "loggingPolicy", category = "application", library = "kamon")
-  @Override
-  public SagaResponse apply(SagaTask task, SagaRequest request, SagaResponse parentResponse) {
-    log.info("Starting request id={} for service {}", request.id(), request.serviceName());
-    SagaResponse response = recoveryPolicy.apply(task, request, parentResponse);
-    log.info("Completed request id={} for service {}", request.id(), request.serviceName());
-    return response;
-  }
-
-  @Override
-  public String description() {
-    return getClass().getSimpleName();
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/LongIdGenerator.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/LongIdGenerator.java
deleted file mode 100644
index 6b16075..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/LongIdGenerator.java
+++ /dev/null
@@ -1,30 +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.core;
-
-import java.util.concurrent.atomic.AtomicLong;
-
-public class LongIdGenerator implements IdGenerator<Long> {
-
-  private final AtomicLong atomicLong = new AtomicLong();
-
-  @Override
-  public Long nextId() {
-    return atomicLong.incrementAndGet();
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/NoOpSagaRequest.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/NoOpSagaRequest.java
deleted file mode 100644
index 93bbda9..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/NoOpSagaRequest.java
+++ /dev/null
@@ -1,113 +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.core;
-
-import static org.apache.servicecomb.saga.core.Compensation.SAGA_END_COMPENSATION;
-import static org.apache.servicecomb.saga.core.Compensation.SAGA_START_COMPENSATION;
-import static org.apache.servicecomb.saga.core.Fallback.NOP_FALLBACK;
-import static org.apache.servicecomb.saga.core.Operation.TYPE_NOP;
-import static org.apache.servicecomb.saga.core.SagaTask.SAGA_END_TASK;
-import static org.apache.servicecomb.saga.core.SagaTask.SAGA_START_TASK;
-import static org.apache.servicecomb.saga.core.Transaction.SAGA_END_TRANSACTION;
-import static org.apache.servicecomb.saga.core.Transaction.SAGA_START_TRANSACTION;
-
-import java.util.Arrays;
-
-public class NoOpSagaRequest implements SagaRequest {
-
-  public static final SagaRequest SAGA_START_REQUEST = new NoOpSagaRequest(
-      "saga-start",
-      SAGA_START_TRANSACTION,
-      SAGA_START_COMPENSATION,
-      SAGA_START_TASK);
-
-  public static final SagaRequest SAGA_END_REQUEST = new NoOpSagaRequest(
-      "saga-end",
-      SAGA_END_TRANSACTION,
-      SAGA_END_COMPENSATION,
-      SAGA_END_TASK);
-
-  private final String id;
-  private final Transaction transaction;
-  private final Compensation compensation;
-  private final String task;
-  private final String[] parents = {};
-
-  private NoOpSagaRequest(String id, Transaction transaction, Compensation compensation, String task) {
-    this.id = id;
-    this.transaction = transaction;
-    this.compensation = compensation;
-    this.task = task;
-  }
-
-  @Override
-  public Transaction transaction() {
-    return transaction;
-  }
-
-  @Override
-  public Compensation compensation() {
-    return compensation;
-  }
-
-  @Override
-  public Fallback fallback() {
-    return NOP_FALLBACK;
-  }
-
-  @Override
-  public String serviceName() {
-    return "Saga";
-  }
-
-  @Override
-  public String id() {
-    return id;
-  }
-
-  @Override
-  public String type() {
-    return TYPE_NOP;
-  }
-
-  @Override
-  public String task() {
-    return task;
-  }
-
-  @Override
-  public String[] parents() {
-    return parents;
-  }
-
-  @Override
-  public int failRetryDelayMilliseconds() {
-    return 50;
-  }
-
-  @Override
-  public String toString() {
-    return "NoOpSagaRequest{" +
-        "id='" + id + '\'' +
-        ", transaction=" + transaction +
-        ", compensation=" + compensation +
-        ", task='" + task + '\'' +
-        ", parents=" + Arrays.toString(parents) +
-        '}';
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/Operation.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/Operation.java
deleted file mode 100644
index c693dd2..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/Operation.java
+++ /dev/null
@@ -1,33 +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.core;
-
-public interface Operation {
-
-  int DEFAULT_RETRIES = 3;
-  String TYPE_NOP = "NOP";
-  String TYPE_REST = "rest";
-  String TYPE_SQL = "sql";
-  SagaResponse SUCCESSFUL_SAGA_RESPONSE = new SuccessfulSagaResponse("success");
-
-  SagaResponse send(String address);
-
-  SagaResponse send(String address, SagaResponse response);
-
-  int retries();
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/PersistentLog.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/PersistentLog.java
deleted file mode 100644
index 26ec4bc..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/PersistentLog.java
+++ /dev/null
@@ -1,22 +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.core;
-
-public interface PersistentLog {
-  void offer(SagaEvent sagaEvent);
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/PersistentStore.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/PersistentStore.java
deleted file mode 100644
index a7620b3..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/PersistentStore.java
+++ /dev/null
@@ -1,26 +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.core;
-
-import java.util.List;
-import java.util.Map;
-
-public interface PersistentStore extends PersistentLog {
-
-  Map<String, List<EventEnvelope>> findPendingSagaEvents();
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/RecoveryPolicy.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/RecoveryPolicy.java
deleted file mode 100644
index c67d640..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/RecoveryPolicy.java
+++ /dev/null
@@ -1,26 +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.core;
-
-public interface RecoveryPolicy extends Descriptive {
-
-  String SAGA_FORWARD_RECOVERY_POLICY = "ForwardRecovery";
-  String SAGA_BACKWARD_RECOVERY_POLICY = "BackwardRecovery";
-
-  SagaResponse apply(SagaTask task, SagaRequest request, SagaResponse parentResponse);
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/RequestProcessTask.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/RequestProcessTask.java
deleted file mode 100644
index e19c7bf..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/RequestProcessTask.java
+++ /dev/null
@@ -1,67 +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.core;
-
-import kamon.annotation.EnableKamon;
-import kamon.annotation.Segment;
-
-@EnableKamon
-public class RequestProcessTask implements SagaTask {
-
-  private final String sagaId;
-  private final SagaLog sagaLog;
-  private final RecoveryPolicy recoveryPolicy;
-  private final FallbackPolicy fallbackPolicy;
-
-  public RequestProcessTask(
-      String sagaId,
-      SagaLog sagaLog,
-      RecoveryPolicy recoveryPolicy,
-      FallbackPolicy fallbackPolicy) {
-
-    this.sagaId = sagaId;
-    this.sagaLog = sagaLog;
-    this.recoveryPolicy = recoveryPolicy;
-    this.fallbackPolicy = fallbackPolicy;
-  }
-
-  @Segment(name = "commit", category = "application", library = "kamon")
-  @Override
-  public SagaResponse commit(SagaRequest request, SagaResponse parentResponse) {
-    sagaLog.offer(new TransactionStartedEvent(sagaId, request));
-
-    SagaResponse response = recoveryPolicy.apply(this, request, parentResponse);
-
-    sagaLog.offer(new TransactionEndedEvent(sagaId, request, response));
-    return response;
-  }
-
-  @Segment(name = "compensate", category = "application", library = "kamon")
-  @Override
-  public void compensate(SagaRequest request) {
-    Compensation compensation = request.compensation();
-    SagaResponse response = fallbackPolicy.apply(request.serviceName(), compensation, request.fallback());
-
-    sagaLog.offer(new TransactionCompensatedEvent(sagaId, request, response));
-  }
-
-  @Override
-  public void abort(SagaRequest request, Exception e) {
-    sagaLog.offer(new TransactionAbortedEvent(sagaId, request, e));
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/RestOperation.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/RestOperation.java
deleted file mode 100644
index d961b2e..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/RestOperation.java
+++ /dev/null
@@ -1,78 +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.core;
-
-import org.apache.servicecomb.saga.core.application.interpreter.RestRequestChecker;
-import java.util.Map;
-
-public class RestOperation implements Operation {
-
-  private final String path;
-  private final String method;
-  private final int retries;
-  private final Map<String, Map<String, String>> params;
-
-  public RestOperation(String path, String method, Map<String, Map<String, String>> params) {
-    this(path, method, DEFAULT_RETRIES, params);
-  }
-
-  public RestOperation(String path, String method, int retries, Map<String, Map<String, String>> params) {
-    RestRequestChecker.checkParameters(method, params);
-
-    this.path = path;
-    this.method = method;
-    this.retries = retries;
-    this.params = params == null? java.util.Collections.<String, Map<String, String>>emptyMap() : params;
-  }
-
-  public String path() {
-    return path;
-  }
-
-  public String method() {
-    return method;
-  }
-
-  public Map<String, Map<String, String>> params() {
-    return params;
-  }
-
-  @Override
-  public String toString() {
-    return "Operation{" +
-        "path='" + path + '\'' +
-        ", method='" + method + '\'' +
-        ", params=" + params +
-        '}';
-  }
-
-  @Override
-  public SagaResponse send(String address) {
-    return SUCCESSFUL_SAGA_RESPONSE;
-  }
-
-  @Override
-  public SagaResponse send(String address, SagaResponse response) {
-    return send(address);
-  }
-
-  @Override
-  public int retries() {
-    return this.retries;
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SQLOperation.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SQLOperation.java
deleted file mode 100644
index 5e1ad83..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SQLOperation.java
+++ /dev/null
@@ -1,65 +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.core;
-
-import java.util.Collections;
-import java.util.List;
-
-public class SQLOperation implements Operation {
-
-  private final String sql;
-  private final int retries;
-  private final List<List<String>> params;
-
-  public SQLOperation(String sql, int retries, List<List<String>> params) {
-    this.sql = sql;
-    this.retries = retries;
-    this.params = params == null ? Collections.<List<String>>emptyList() : params;
-  }
-
-  public String sql() {
-    return sql;
-  }
-
-  public List<List<String>> params() {
-    return params;
-  }
-
-  @Override
-  public String toString() {
-    return "SQLOperation{" +
-        "sql='" + sql + '\'' +
-        ", params=" + params +
-        '}';
-  }
-
-  @Override
-  public SagaResponse send(String datasource) {
-    return SUCCESSFUL_SAGA_RESPONSE;
-  }
-
-  @Override
-  public SagaResponse send(String datasource, SagaResponse response) {
-    return send(datasource);
-  }
-
-  @Override
-  public int retries() {
-    return this.retries;
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/Saga.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/Saga.java
deleted file mode 100644
index 44f62ea..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/Saga.java
+++ /dev/null
@@ -1,27 +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.core;
-
-import kamon.annotation.Segment;
-
-public interface Saga {
-  @Segment(name = "runSaga", category = "application", library = "kamon")
-  SagaResponse run();
-
-  void play();
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaContext.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaContext.java
deleted file mode 100644
index 2f76031..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaContext.java
+++ /dev/null
@@ -1,34 +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.core;
-
-public interface SagaContext extends EventContext {
-  boolean isCompensationStarted();
-
-  boolean isTransactionCompleted(SagaRequest request);
-
-  boolean isCompensationCompleted(SagaRequest request);
-
-  void handleHangingTransactions(TransactionConsumer<SagaRequest> consumer);
-
-  SagaResponse responseOf(String requestId);
-
-  boolean isChosenChild(SagaRequest request);
-
-  SagaResponse responseOf(String[] parentRequestIds);
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaContextImpl.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaContextImpl.java
deleted file mode 100644
index bc4253c..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaContextImpl.java
+++ /dev/null
@@ -1,144 +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.core;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentSkipListSet;
-
-
-import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
-
-public class SagaContextImpl implements SagaContext {
-
-  private final Map<String, SagaResponse> completedTransactions;
-  private final Map<String, SagaResponse> completedCompensations;
-  private final Set<String> abortedTransactions;
-  private final Map<String, SagaRequest> hangingTransactions;
-  private final FromJsonFormat<Set<String>> childrenExtractor;
-
-  public SagaContextImpl(FromJsonFormat<Set<String>> childrenExtractor) {
-    this.childrenExtractor = childrenExtractor;
-    this.completedTransactions = new ConcurrentHashMap<>();
-    this.completedCompensations = new HashMap<>();
-    this.abortedTransactions = new ConcurrentSkipListSet<>();
-    this.hangingTransactions = new ConcurrentHashMap<>();
-  }
-
-  @Override
-  public boolean isCompensationStarted() {
-    return !abortedTransactions.isEmpty() || !completedCompensations.isEmpty();
-  }
-
-  @Override
-  public boolean isTransactionCompleted(SagaRequest request) {
-    return completedTransactions.containsKey(request.id());
-  }
-
-  @Override
-  public boolean isCompensationCompleted(SagaRequest request) {
-    return completedCompensations.containsKey(request.id());
-  }
-
-  @Override
-  public void beginTransaction(SagaRequest request) {
-    hangingTransactions.put(request.id(), request);
-  }
-
-  @Override
-  public void endTransaction(SagaRequest request, SagaResponse response) {
-    completedTransactions.put(request.id(), response);
-    hangingTransactions.remove(request.id());
-  }
-
-  @Override
-  public void abortTransaction(SagaRequest request, SagaResponse response) {
-    completedTransactions.remove(request.id());
-    abortedTransactions.add(request.id());
-    hangingTransactions.remove(request.id());
-  }
-
-  @Override
-  public void compensateTransaction(SagaRequest request, SagaResponse response) {
-    completedCompensations.put(request.id(), response);
-    completedTransactions.remove(request.id());
-  }
-
-  @Override
-  public void handleHangingTransactions(TransactionConsumer<SagaRequest> consumer)  {
-    for (Iterator<SagaRequest> iterator = hangingTransactions.values().iterator(); iterator.hasNext(); ) {
-      consumer.accept(iterator.next());
-    }
-  }
-
-  @Override
-  public SagaResponse responseOf(String requestId) {
-    SagaResponse response = completedTransactions.get(requestId);
-    if (response == null) {
-      response = SagaResponse.NONE_RESPONSE;
-    }
-    return response;
-  }
-
-  private List<SagaResponse> responsesOf(String[] parentRequestIds) {
-    List<SagaResponse> result = new ArrayList<>();
-    for(String parentRequestId: parentRequestIds) {
-      result.add(responseOf(parentRequestId));
-    }
-    return result;
-  }
-
-  @Override
-  public SagaResponse responseOf(String[] parentRequestIds) {
-    List<SagaResponse> responses = responsesOf(parentRequestIds);
-
-    if (responses.isEmpty()) {
-      return SagaResponse.EMPTY_RESPONSE;
-    }
-
-    if (responses.size() == 1) {
-      return responses.get(0);
-    }
-
-    return new CompositeSagaResponse(responses);
-  }
-
-  @Override
-  public boolean isChosenChild(SagaRequest request)  {
-    Set<String> chosenChildren = chosenChildrenOf(request.parents());
-    return chosenChildren.isEmpty() || chosenChildren.contains(request.id());
-  }
-
-  private Set<String> chosenChildrenOf(String[] parentRequestIds) {
-    Set<String> result = new HashSet<>();
-    for(String parentRequestId: parentRequestIds) {
-      SagaResponse response = responseOf(parentRequestId);
-      Set<String> jsons = childrenExtractor.fromJson(response.body());
-      for (String json : jsons) {
-        result.add(json);
-      }
-    }
-    return result;
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaDefinition.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaDefinition.java
deleted file mode 100644
index 406c8df..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaDefinition.java
+++ /dev/null
@@ -1,25 +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.core;
-
-public interface SagaDefinition {
-
-  RecoveryPolicy policy();
-
-  SagaRequest[] requests();
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaEndTask.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaEndTask.java
deleted file mode 100644
index 69daba7..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaEndTask.java
+++ /dev/null
@@ -1,48 +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.core;
-
-import kamon.annotation.EnableKamon;
-import kamon.annotation.Segment;
-
-@EnableKamon
-public class SagaEndTask implements SagaTask {
-
-  private final String sagaId;
-  private final SagaLog sagaLog;
-
-  public SagaEndTask(String sagaId, SagaLog sagaLog) {
-    this.sagaId = sagaId;
-    this.sagaLog = sagaLog;
-  }
-
-  @Segment(name = "endTaskCommit", category = "application", library = "kamon")
-  @Override
-  public SagaResponse commit(SagaRequest request, SagaResponse parentResponse) {
-    sagaLog.offer(new SagaEndedEvent(sagaId, request));
-    return SagaResponse.EMPTY_RESPONSE;
-  }
-
-  @Override
-  public void compensate(SagaRequest request) {
-  }
-
-  @Override
-  public void abort(SagaRequest request, Exception e) {
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaEndedEvent.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaEndedEvent.java
deleted file mode 100644
index c6f4f9f..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaEndedEvent.java
+++ /dev/null
@@ -1,38 +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.core;
-
-public class SagaEndedEvent extends SagaEvent {
-
-  public SagaEndedEvent(String sagaId, SagaRequest sagaTask) {
-    super(sagaId, sagaTask);
-  }
-
-  @Override
-  public void gatherTo(EventContext sagaContext) {
-    sagaContext.endTransaction(payload(), SagaResponse.EMPTY_RESPONSE);
-  }
-
-  @Override
-  public String toString() {
-    return "SagaEndedEvent{id="
-        + payload().id()
-        + ", sagaId=" + sagaId
-        + "}";
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaEvent.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaEvent.java
deleted file mode 100644
index ffe31d0..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaEvent.java
+++ /dev/null
@@ -1,44 +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.core;
-
-public abstract class SagaEvent implements Descriptive {
-
-  public final String sagaId;
-  private final SagaRequest payload;
-
-  public SagaEvent(String sagaId, SagaRequest payload) {
-    this.sagaId = sagaId;
-    this.payload = payload;
-  }
-
-  public SagaRequest payload() {
-    return payload;
-  }
-
-  public abstract void gatherTo(EventContext sagaContext);
-
-  public String json(ToJsonFormat toJsonFormat) {
-    return "{}";
-  }
-
-  @Override
-  public String description() {
-    return getClass().getSimpleName();
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaException.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaException.java
deleted file mode 100644
index 49ce989..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaException.java
+++ /dev/null
@@ -1,29 +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.core;
-
-public class SagaException extends RuntimeException {
-
-  public SagaException(String cause, Throwable e) {
-    super(cause, e);
-  }
-
-  public SagaException(String cause) {
-    super(cause);
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaLog.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaLog.java
deleted file mode 100644
index 2e07b9f..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaLog.java
+++ /dev/null
@@ -1,22 +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.core;
-
-public interface SagaLog extends PersistentLog {
-
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaRequest.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaRequest.java
deleted file mode 100644
index 4578e42..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaRequest.java
+++ /dev/null
@@ -1,44 +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.core;
-
-public interface SagaRequest {
-
-  String PARAM_FORM = "form";
-  String PARAM_JSON = "json";
-  String PARAM_JSON_BODY = "body";
-  String PARAM_QUERY = "query";
-
-  Transaction transaction();
-
-  Compensation compensation();
-
-  Fallback fallback();
-
-  String serviceName();
-
-  String id();
-
-  String type();
-
-  String task();
-
-  String[] parents();
-
-  int failRetryDelayMilliseconds();
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaRequestImpl.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaRequestImpl.java
deleted file mode 100644
index cbb7a23..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaRequestImpl.java
+++ /dev/null
@@ -1,153 +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.core;
-
-import static org.apache.servicecomb.saga.core.Fallback.NOP_FALLBACK;
-
-import java.util.Arrays;
-
-public class SagaRequestImpl implements SagaRequest {
-
-  private final String id;
-  private final String serviceName;
-  private final String type;
-  private final Transaction transaction;
-  private final Compensation compensation;
-  private final String[] parents;
-  private final Fallback fallback;
-  private final int failRetryDelayMilliseconds;
-
-  public SagaRequestImpl(
-      String id,
-      String serviceName,
-      String type,
-      Transaction transaction,
-      Compensation compensation,
-      Fallback fallback,
-      String[] parents,
-      int failRetryDelayMilliseconds) {
-
-    this.id = id;
-    this.serviceName = serviceName;
-    this.type = type;
-    this.transaction = transaction;
-    this.compensation = compensation;
-    this.fallback = fallback;
-    this.failRetryDelayMilliseconds = failRetryDelayMilliseconds <= 0 ? 50 : failRetryDelayMilliseconds;
-    // TODO: 2017/10/21 set parent to root when null
-    this.parents = parents == null ? new String[0] : parents;
-  }
-
-  public SagaRequestImpl(
-      String id,
-      String serviceName,
-      String type,
-      Transaction transaction,
-      Compensation compensation,
-      Fallback fallback,
-      String[] parents) {
-    this(id, serviceName, type, transaction, compensation, fallback, parents, 0);
-  }
-
-  public SagaRequestImpl(
-      String id,
-      String serviceName,
-      String type,
-      Transaction transaction,
-      Compensation compensation,
-      Fallback fallback) {
-    this(id, serviceName, type, transaction, compensation, fallback, new String[0]);
-  }
-
-  public SagaRequestImpl(
-      String id,
-      String serviceName,
-      String type,
-      Transaction transaction,
-      Compensation compensation) {
-    this(id, serviceName, type, transaction, compensation, NOP_FALLBACK, new String[0]);
-  }
-
-  public SagaRequestImpl(
-      String id,
-      String serviceName,
-      String type,
-      Transaction transaction,
-      Compensation compensation,
-      String[] parents) {
-    this(id, serviceName, type, transaction, compensation, NOP_FALLBACK, parents);
-  }
-
-  @Override
-  public Transaction transaction() {
-    return transaction;
-  }
-
-  @Override
-  public Compensation compensation() {
-    return compensation;
-  }
-
-  @Override
-  public Fallback fallback() {
-    return fallback;
-  }
-
-  @Override
-  public String serviceName() {
-    return serviceName;
-  }
-
-  @Override
-  public String id() {
-    return id;
-  }
-
-  @Override
-  public String type() {
-    return type;
-  }
-
-  @Override
-  public String task() {
-    return SagaTask.SAGA_REQUEST_TASK;
-  }
-
-  @Override
-  public String[] parents() {
-    return parents;
-  }
-
-  @Override
-  public int failRetryDelayMilliseconds() {
-    return failRetryDelayMilliseconds;
-  }
-
-  @Override
-  public String toString() {
-    return "SagaRequest{" +
-        "id='" + id + '\'' +
-        ", serviceName='" + serviceName + '\'' +
-        ", type='" + type + '\'' +
-        ", transaction=" + transaction +
-        ", compensation=" + compensation +
-        ", fallback=" + fallback +
-        ", parents=" + Arrays.toString(parents) +
-        '}';
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaResponse.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaResponse.java
deleted file mode 100644
index ecdfe4a..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaResponse.java
+++ /dev/null
@@ -1,61 +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.core;
-
-public interface SagaResponse {
-
-  SagaResponse EMPTY_RESPONSE = new SagaResponse() {
-    @Override
-    public boolean succeeded() {
-      return true;
-    }
-
-    @Override
-    public String body() {
-      return "{}";
-    }
-
-    @Override
-    public String toString() {
-      return "EMPTY_RESPONSE{body={}}";
-    }
-  };
-
-  SagaResponse NONE_RESPONSE = new SagaResponse() {
-    @Override
-    public boolean succeeded() {
-      return false;
-    }
-
-    @Override
-    public String body() {
-      return "{\n"
-          + "  \"sagaChildren\": [\"none\"]\n"
-          + "}";
-    }
-
-    @Override
-    public String toString() {
-      return "NONE_RESPONSE{body={\"sagaChildren\": [\"none\"]\n}}";
-    }
-  };
-
-  boolean succeeded();
-
-  String body();
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaStartFailedException.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaStartFailedException.java
deleted file mode 100644
index 0de35da..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaStartFailedException.java
+++ /dev/null
@@ -1,25 +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.core;
-
-public class SagaStartFailedException extends RuntimeException {
-
-  public SagaStartFailedException(String cause, Throwable e) {
-    super(cause, e);
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaStartTask.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaStartTask.java
deleted file mode 100644
index d8a6bd1..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaStartTask.java
+++ /dev/null
@@ -1,56 +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.core;
-
-import kamon.annotation.EnableKamon;
-import kamon.annotation.Segment;
-
-@EnableKamon
-public class SagaStartTask implements SagaTask {
-
-  private final String sagaId;
-  private final String requestJson;
-  private final SagaLog sagaLog;
-
-  public SagaStartTask(String sagaId, String requestJson, SagaLog sagaLog) {
-    this.sagaId = sagaId;
-    this.requestJson = requestJson;
-    this.sagaLog = sagaLog;
-  }
-
-  @Segment(name = "startTaskCommit", category = "application", library = "kamon")
-  @Override
-  public SagaResponse commit(SagaRequest request, SagaResponse parentResponse) {
-    try {
-      sagaLog.offer(new SagaStartedEvent(sagaId, requestJson, request));
-    } catch (Exception e) {
-      throw new SagaStartFailedException("Failed to persist SagaStartedEvent for " + requestJson, e);
-    }
-    return SagaResponse.EMPTY_RESPONSE;
-  }
-
-  @Override
-  public void compensate(SagaRequest request) {
-    sagaLog.offer(new SagaEndedEvent(sagaId, request));
-  }
-
-  @Override
-  public void abort(SagaRequest request, Exception e) {
-
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaStartedEvent.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaStartedEvent.java
deleted file mode 100644
index 0d82fee..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaStartedEvent.java
+++ /dev/null
@@ -1,46 +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.core;
-
-public class SagaStartedEvent extends SagaEvent {
-
-  private final String requestJson;
-
-  public SagaStartedEvent(String sagaId, String requestJson, SagaRequest request) {
-    super(sagaId, request);
-    this.requestJson = requestJson;
-  }
-
-  @Override
-  public void gatherTo(EventContext sagaContext) {
-    sagaContext.endTransaction(payload(), SagaResponse.EMPTY_RESPONSE);
-  }
-
-  @Override
-  public String json(ToJsonFormat toJsonFormat) {
-    return requestJson;
-  }
-
-  @Override
-  public String toString() {
-    return "SagaStartedEvent{id="
-        + payload().id()
-        + ", sagaId=" + sagaId
-        + "}";
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaState.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaState.java
deleted file mode 100644
index eae3678..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaState.java
+++ /dev/null
@@ -1,27 +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.core;
-
-interface SagaState {
-
-  boolean hasNext();
-
-  void run();
-
-  void replay();
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaTask.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaTask.java
deleted file mode 100644
index 73efcc0..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaTask.java
+++ /dev/null
@@ -1,31 +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.core;
-
-public interface SagaTask {
-
-  String SAGA_START_TASK = "SagaStart";
-  String SAGA_REQUEST_TASK = "SagaRequest";
-  String SAGA_END_TASK = "SagaEnd";
-
-  SagaResponse commit(SagaRequest request, SagaResponse parentResponse);
-
-  void compensate(SagaRequest request);
-
-  void abort(SagaRequest request, Exception e);
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaTaskFactory.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaTaskFactory.java
deleted file mode 100644
index b6d9585..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SagaTaskFactory.java
+++ /dev/null
@@ -1,98 +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.core;
-
-import java.lang.invoke.MethodHandles;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class SagaTaskFactory {
-  private final FallbackPolicy fallbackPolicy;
-  private final RetrySagaLog retrySagaLog;
-  private final PersistentStore persistentStore;
-
-  public SagaTaskFactory(int retryDelay, PersistentStore persistentStore) {
-    this.persistentStore = persistentStore;
-
-    fallbackPolicy = new FallbackPolicy(retryDelay);
-    retrySagaLog = new RetrySagaLog(persistentStore, retryDelay);
-  }
-
-  public Map<String, SagaTask> sagaTasks(final String sagaId,
-      final String requestJson,
-      final RecoveryPolicy recoveryPolicy,
-      final EventStore sagaLog) {
-
-    final SagaLog compositeSagaLog = compositeSagaLog(sagaLog, persistentStore);
-
-    return new HashMap<String, SagaTask>() {{
-      put(SagaTask.SAGA_START_TASK, new SagaStartTask(sagaId, requestJson, compositeSagaLog));
-
-      SagaLog retrySagaLog = compositeSagaLog(sagaLog, SagaTaskFactory.this.retrySagaLog);
-      put(SagaTask.SAGA_REQUEST_TASK,
-          new RequestProcessTask(sagaId, retrySagaLog, new LoggingRecoveryPolicy(recoveryPolicy), fallbackPolicy));
-      put(SagaTask.SAGA_END_TASK, new SagaEndTask(sagaId, retrySagaLog));
-    }};
-  }
-
-  private CompositeSagaLog compositeSagaLog(SagaLog sagaLog, PersistentLog persistentLog) {
-    return new CompositeSagaLog(sagaLog, persistentLog);
-  }
-
-  static class RetrySagaLog implements PersistentLog {
-
-    private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-    private final PersistentStore persistentStore;
-    private final int retryDelay;
-
-    RetrySagaLog(PersistentStore persistentStore, int retryDelay) {
-      this.persistentStore = persistentStore;
-      this.retryDelay = retryDelay;
-    }
-
-    @Override
-    public void offer(SagaEvent sagaEvent) {
-      boolean success = false;
-      do {
-        try {
-          persistentStore.offer(sagaEvent);
-          success = true;
-          log.info("Persisted saga event {} successfully", sagaEvent);
-        } catch (Exception e) {
-          log.error("Failed to persist saga event {}", sagaEvent, e);
-          sleep(retryDelay);
-        }
-      } while (!success && !isInterrupted());
-    }
-
-    private boolean isInterrupted() {
-      return Thread.currentThread().isInterrupted();
-    }
-
-    private void sleep(int delay) {
-      try {
-        Thread.sleep(delay);
-      } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
-      }
-    }
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SuccessfulSagaResponse.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/SuccessfulSagaResponse.java
deleted file mode 100644
index d69bdcd..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/SuccessfulSagaResponse.java
+++ /dev/null
@@ -1,43 +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.core;
-
-public class SuccessfulSagaResponse implements SagaResponse {
-  private final String body;
-
-  public SuccessfulSagaResponse(String body) {
-    this.body = body;
-  }
-
-  @Override
-  public boolean succeeded() {
-    return true;
-  }
-
-  @Override
-  public String body() {
-    return body;
-  }
-
-  @Override
-  public String toString() {
-    return "SuccessfulSagaResponse{" +
-        "body='" + body + '\'' +
-        '}';
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/TaskConsumer.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TaskConsumer.java
deleted file mode 100644
index 5ae7494..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/TaskConsumer.java
+++ /dev/null
@@ -1,29 +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.core;
-
-import java.util.Collection;
-
-import org.apache.servicecomb.saga.core.dag.Node;
-
-interface TaskConsumer {
-
-  void consume(Collection<Node<SagaRequest>> nodes);
-
-  boolean replay(Collection<Node<SagaRequest>> nodes);
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/TaskRunner.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TaskRunner.java
deleted file mode 100644
index c078001..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/TaskRunner.java
+++ /dev/null
@@ -1,72 +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.core;
-
-import org.apache.servicecomb.saga.core.dag.Node;
-import org.apache.servicecomb.saga.core.dag.Traveller;
-
-import java.util.Collection;
-
-import kamon.annotation.EnableKamon;
-import kamon.annotation.Segment;
-
-@EnableKamon
-class TaskRunner implements SagaState {
-
-  private final Traveller<SagaRequest> traveller;
-  private final TaskConsumer taskConsumer;
-
-  TaskRunner(Traveller<SagaRequest> traveller, TaskConsumer taskConsumer) {
-    this.traveller = traveller;
-    this.taskConsumer = taskConsumer;
-  }
-
-  @Override
-  public boolean hasNext() {
-    return traveller.hasNext();
-  }
-
-  @Segment(name = "runTask", category = "application", library = "kamon")
-  @Override
-  public void run() {
-    Collection<Node<SagaRequest>> nodes = traveller.nodes();
-
-    // finish pending tasks from saga log at startup
-    if (!nodes.isEmpty()) {
-      taskConsumer.consume(nodes);
-      nodes.clear();
-    }
-
-    while (traveller.hasNext()) {
-      traveller.next();
-      taskConsumer.consume(nodes);
-      nodes.clear();
-    }
-  }
-
-  @Override
-  public void replay() {
-    boolean played = false;
-    Collection<Node<SagaRequest>> nodes = traveller.nodes();
-
-    while (traveller.hasNext() && !played) {
-      traveller.next();
-      played = taskConsumer.replay(nodes);
-    }
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/ToJsonFormat.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/ToJsonFormat.java
deleted file mode 100644
index cd6c449..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/ToJsonFormat.java
+++ /dev/null
@@ -1,26 +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.core;
-
-public interface ToJsonFormat {
-
-  String toJson(SagaRequest request);
-
-  String toJson(SagaRequest request, SagaResponse response);
-
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/Transaction.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/Transaction.java
deleted file mode 100644
index a6d4c54..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/Transaction.java
+++ /dev/null
@@ -1,57 +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.core;
-
-public interface Transaction extends Operation {
-
-  Transaction SAGA_START_TRANSACTION = new Transaction() {
-    @Override
-    public int retries() {
-      return INFINITE_RETRY;
-    }
-
-    @Override
-    public SagaResponse send(String address) {
-      return SUCCESSFUL_SAGA_RESPONSE;
-    }
-
-    @Override
-    public SagaResponse send(String address, SagaResponse response) {
-      return send(address);
-    }
-  };
-
-  Transaction SAGA_END_TRANSACTION = new Transaction() {
-    @Override
-    public int retries() {
-      return INFINITE_RETRY;
-    }
-
-    @Override
-    public SagaResponse send(String address) {
-      return SUCCESSFUL_SAGA_RESPONSE;
-    }
-
-    @Override
-    public SagaResponse send(String address, SagaResponse response) {
-      return send(address);
-    }
-  };
-
-  int INFINITE_RETRY = -1;
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionAbortedEvent.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionAbortedEvent.java
deleted file mode 100644
index b117c94..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionAbortedEvent.java
+++ /dev/null
@@ -1,57 +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.core;
-
-public class TransactionAbortedEvent extends SagaEvent {
-
-  private final SagaResponse response;
-
-  public TransactionAbortedEvent(String sagaId, SagaRequest payload, Exception exception) {
-    super(sagaId, payload);
-    this.response = new FailedSagaResponse(exception);
-  }
-
-  public TransactionAbortedEvent(String sagaId, SagaRequest payload, SagaResponse response) {
-    super(sagaId, payload);
-    this.response = response;
-  }
-
-  @Override
-  public void gatherTo(EventContext sagaContext) {
-    // remove from completed operations in order not to compensate it
-    sagaContext.abortTransaction(payload(), response);
-  }
-
-  @Override
-  public String json(ToJsonFormat toJsonFormat) {
-    return toJsonFormat.toJson(payload(), response);
-  }
-
-  @Override
-  public String toString() {
-    return "TransactionAbortedEvent{id="
-        + payload().id()
-        + ", operation="
-        + payload().compensation()
-        + "}";
-  }
-
-  public SagaResponse response() {
-    return response;
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionAbortedException.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionAbortedException.java
deleted file mode 100644
index 02cbf98..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionAbortedException.java
+++ /dev/null
@@ -1,28 +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.core;
-
-public class TransactionAbortedException extends RuntimeException{
-    public TransactionAbortedException(Throwable throwable) {
-        super(throwable);
-    }
-
-    public TransactionAbortedException(String cause) {
-        super(cause);
-    }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionCompensatedEvent.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionCompensatedEvent.java
deleted file mode 100644
index d6ab298..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionCompensatedEvent.java
+++ /dev/null
@@ -1,56 +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.core;
-
-public class TransactionCompensatedEvent extends SagaEvent {
-
-  private final SagaResponse response;
-
-  public TransactionCompensatedEvent(String sagaId, SagaRequest request) {
-    this(sagaId, request, SagaResponse.EMPTY_RESPONSE);
-  }
-
-  public TransactionCompensatedEvent(String sagaId, SagaRequest request, SagaResponse response) {
-    super(sagaId, request);
-    this.response = response;
-  }
-
-  @Override
-  public void gatherTo(EventContext sagaContext) {
-    sagaContext.compensateTransaction(payload(), response);
-  }
-
-  @Override
-  public String json(ToJsonFormat toJsonFormat) {
-    return toJsonFormat.toJson(payload(), response);
-  }
-
-  @Override
-  public String toString() {
-    return "TransactionCompensatedEvent{id="
-        + payload().id()
-        + ", sagaId=" + sagaId
-        + ", operation="
-        + payload().compensation()
-        + "}";
-  }
-
-  public SagaResponse response() {
-    return response;
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionConsumer.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionConsumer.java
deleted file mode 100644
index b5bb098..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionConsumer.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.apache.servicecomb.saga.core;
-
-public interface TransactionConsumer<T> {
-  void accept(T request);
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionEndedEvent.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionEndedEvent.java
deleted file mode 100644
index 603c542..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionEndedEvent.java
+++ /dev/null
@@ -1,56 +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.core;
-
-public class TransactionEndedEvent extends SagaEvent {
-
-  private final SagaResponse response;
-
-  public TransactionEndedEvent(String sagaId, SagaRequest request) {
-    this(sagaId, request, SagaResponse.EMPTY_RESPONSE);
-  }
-
-  public TransactionEndedEvent(String sagaId, SagaRequest request, SagaResponse response) {
-    super(sagaId, request);
-    this.response = response;
-  }
-
-  @Override
-  public void gatherTo(EventContext sagaContext) {
-    sagaContext.endTransaction(payload(), response);
-  }
-
-  @Override
-  public String toString() {
-    return "TransactionEndedEvent{id="
-        + payload().id()
-        + ", sagaId=" + sagaId
-        + ", operation="
-        + payload().transaction()
-        + "}";
-  }
-  
-  @Override
-  public String json(ToJsonFormat toJsonFormat) {
-    return toJsonFormat.toJson(payload(), response);
-  }
-
-  public SagaResponse response() {
-    return response;
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionFailedException.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionFailedException.java
deleted file mode 100644
index b55e01a..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionFailedException.java
+++ /dev/null
@@ -1,29 +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.core;
-
-public class TransactionFailedException extends RuntimeException {
-
-  public TransactionFailedException(Throwable throwable) {
-    super(throwable);
-  }
-
-  public TransactionFailedException(String cause) {
-    super(cause);
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionStartedEvent.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionStartedEvent.java
deleted file mode 100644
index cc35589..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionStartedEvent.java
+++ /dev/null
@@ -1,45 +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.core;
-
-public class TransactionStartedEvent extends SagaEvent {
-
-  public TransactionStartedEvent(String sagaId, SagaRequest transaction) {
-    super(sagaId, transaction);
-  }
-
-  @Override
-  public void gatherTo(EventContext sagaContext) {
-    sagaContext.beginTransaction(payload());
-  }
-
-  @Override
-  public String toString() {
-    return "TransactionStartedEvent{id="
-        + payload().id()
-        + ", sagaId=" + sagaId
-        + ", operation="
-        + payload().transaction()
-        + "}";
-  }
-  
-  @Override
-  public String json(ToJsonFormat toJsonFormat) {
-    return toJsonFormat.toJson(payload());
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionTaskConsumer.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionTaskConsumer.java
deleted file mode 100644
index ac470a0..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransactionTaskConsumer.java
+++ /dev/null
@@ -1,126 +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.core;
-
-import org.apache.servicecomb.saga.core.dag.Node;
-import java.lang.invoke.MethodHandles;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.Callable;
-import java.util.concurrent.CompletionService;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-
-import kamon.annotation.EnableKamon;
-import kamon.annotation.Segment;
-import kamon.annotation.Trace;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@EnableKamon
-class TransactionTaskConsumer implements TaskConsumer {
-
-  private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-  private final Map<String, SagaTask> tasks;
-  private final SagaContext sagaContext;
-  private final CompletionService<Operation> executorService;
-
-  TransactionTaskConsumer(
-      Map<String, SagaTask> tasks,
-      SagaContext sagaContext,
-      CompletionService<Operation> executorService) {
-
-    this.tasks = tasks;
-    this.sagaContext = sagaContext;
-    this.executorService = executorService;
-  }
-
-  @Segment(name = "consumeTask", category = "application", library = "kamon")
-  @Override
-  public void consume(Collection<Node<SagaRequest>> nodes) {
-    List<Future<Operation>> futures = new ArrayList<>(nodes.size());
-    for (Node<SagaRequest> node : nodes) {
-      SagaRequest request = node.value();
-      if (sagaContext.isChosenChild(request)) {
-        futures.add(futureOf(request));
-      }
-    }
-
-    for (int i = 0; i < futures.size(); i++) {
-      try {
-        executorService.take().get();
-      } catch (ExecutionException e) {
-        if (e.getCause() instanceof SagaStartFailedException) {
-          throw ((SagaStartFailedException) e.getCause());
-        }
-        if (e.getCause() instanceof TransactionAbortedException) {
-          throw ((TransactionAbortedException) e.getCause());
-        }
-        throw new TransactionFailedException(e.getCause());
-      } catch (InterruptedException e) {
-        // TODO: 7/29/2017 what shall we do when system is shutting down?
-        throw new TransactionFailedException(e);
-      }
-    }
-  }
-
-  @Override
-  public boolean replay(Collection<Node<SagaRequest>> nodes) {
-    for (Iterator<Node<SagaRequest>> iterator = nodes.iterator(); iterator.hasNext(); ) {
-      SagaRequest request = iterator.next().value();
-      if (sagaContext.isTransactionCompleted(request)) {
-        log.info("Skipped completed transaction id={} operation={} while replay", request.id(), request.transaction());
-        iterator.remove();
-      }
-    }
-    return !nodes.isEmpty();
-  }
-
-  @Segment(name = "submitCallable", category = "application", library = "kamon")
-  private Future<Operation> futureOf(SagaRequest request) {
-    return executorService.submit(new OperationCallable(tasks, request, sagaContext.responseOf(request.parents())));
-  }
-
-  @EnableKamon
-  private static class OperationCallable implements Callable<Operation> {
-
-    private final SagaRequest request;
-    private final Map<String, SagaTask> tasks;
-    private final SagaResponse parentResponse;
-
-    private OperationCallable(
-        Map<String, SagaTask> tasks,
-        SagaRequest request,
-        SagaResponse parentResponse) {
-      this.request = request;
-      this.tasks = tasks;
-      this.parentResponse = parentResponse;
-    }
-
-    @Trace("runTransactionCallable")
-    @Override
-    public Operation call() throws Exception {
-      tasks.get(request.task()).commit(request, parentResponse);
-      return request.transaction();
-    }
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/Transport.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/Transport.java
deleted file mode 100644
index 5679e0a..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/Transport.java
+++ /dev/null
@@ -1,22 +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.core;
-
-public interface Transport {
-
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransportFailedException.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransportFailedException.java
deleted file mode 100644
index e01a9d5..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/TransportFailedException.java
+++ /dev/null
@@ -1,28 +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.core;
-
-public class TransportFailedException extends RuntimeException {
-  public TransportFailedException(String cause) {
-    super(cause);
-  }
-
-  public TransportFailedException(String cause, Throwable e) {
-    super(cause, e);
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/application/SagaExecutionComponent.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/application/SagaExecutionComponent.java
deleted file mode 100644
index 7a600d7..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/application/SagaExecutionComponent.java
+++ /dev/null
@@ -1,87 +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.core.application;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.UUID;
-
-import org.apache.servicecomb.saga.core.EventEnvelope;
-import org.apache.servicecomb.saga.core.EventStore;
-import org.apache.servicecomb.saga.core.Saga;
-import org.apache.servicecomb.saga.core.SagaResponse;
-import org.apache.servicecomb.saga.core.ToJsonFormat;
-import org.apache.servicecomb.saga.core.PersistentStore;
-import org.apache.servicecomb.saga.core.SagaDefinition;
-import org.apache.servicecomb.saga.core.SagaEvent;
-import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
-import org.apache.servicecomb.saga.infrastructure.EmbeddedEventStore;
-import kamon.annotation.EnableKamon;
-import kamon.annotation.Segment;
-
-@EnableKamon
-public class SagaExecutionComponent {
-
-  private final PersistentStore persistentStore;
-  private final FromJsonFormat<SagaDefinition> fromJsonFormat;
-  private final ToJsonFormat toJsonFormat;
-  private final SagaFactory sagaFactory;
-
-  public SagaExecutionComponent(
-      PersistentStore persistentStore,
-      FromJsonFormat<SagaDefinition> fromJsonFormat,
-      ToJsonFormat toJsonFormat,
-      SagaFactory sagaFactory) {
-    this.persistentStore = persistentStore;
-    this.fromJsonFormat = fromJsonFormat;
-    this.toJsonFormat = toJsonFormat;
-    this.sagaFactory = sagaFactory;
-  }
-
-  @Segment(name = "runSagaExecutionComponent", category = "application", library = "kamon")
-  public SagaResponse run(String requestJson) {
-    String sagaId = UUID.randomUUID().toString();
-    EventStore sagaLog = new EmbeddedEventStore();
-    SagaDefinition definition = fromJsonFormat.fromJson(requestJson);
-    Saga saga = sagaFactory.createSaga(requestJson, sagaId, sagaLog, definition);
-    return saga.run();
-  }
-
-  public void reanimate() {
-    Map<String, List<EventEnvelope>> pendingSagaEvents = persistentStore.findPendingSagaEvents();
-
-    for (Entry<String, List<EventEnvelope>> entry : pendingSagaEvents.entrySet()) {
-      EventStore eventStore = new EmbeddedEventStore();
-      eventStore.populate(entry.getValue());
-      SagaEvent event = entry.getValue().iterator().next().event;
-
-      String requestJson = event.json(toJsonFormat);
-      SagaDefinition definition = fromJsonFormat.fromJson(requestJson);
-
-      Saga saga = sagaFactory.createSaga(requestJson, event.sagaId, eventStore, definition);
-
-      saga.play();
-      saga.run();
-    }
-  }
-
-  public void terminate() throws Exception {
-    sagaFactory.terminate();
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/application/SagaFactory.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/application/SagaFactory.java
deleted file mode 100644
index b60b5e7..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/application/SagaFactory.java
+++ /dev/null
@@ -1,30 +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.core.application;
-
-import org.apache.servicecomb.saga.core.EventStore;
-import org.apache.servicecomb.saga.core.Saga;
-import org.apache.servicecomb.saga.core.SagaDefinition;
-
-public interface SagaFactory {
-  Saga createSaga(String requestJson, String sagaId, EventStore sagaLog, SagaDefinition definition);
-
-  boolean isTerminated();
-
-  void terminate() throws Exception;
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/application/interpreter/FromJsonFormat.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/application/interpreter/FromJsonFormat.java
deleted file mode 100644
index ccfb408..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/application/interpreter/FromJsonFormat.java
+++ /dev/null
@@ -1,24 +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.core.application.interpreter;
-
-public interface FromJsonFormat<T> {
-
-  T fromJson(String requestJson);
-
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/application/interpreter/RestRequestChecker.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/application/interpreter/RestRequestChecker.java
deleted file mode 100644
index 7a65e48..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/application/interpreter/RestRequestChecker.java
+++ /dev/null
@@ -1,55 +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.core.application.interpreter;
-
-import static java.util.Arrays.asList;
-
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-public class RestRequestChecker {
-
-  private static final Set<String> validMethods = new HashSet<>(asList(
-      "GET",
-      "POST",
-      "PUT",
-      "DELETE"
-  ));
-
-  private RestRequestChecker() {
-  }
-
-  public static void checkParameters(String method, Map<String, Map<String, String>> params) {
-    if (method == null || !validMethods.contains(method.toUpperCase())) {
-      throw new IllegalArgumentException("Unsupported method " + method);
-    }
-
-    if (isDeleteOrGet(method) && hasBody(params)) {
-      throw new IllegalArgumentException("GET & DELETE request cannot enclose a body");
-    }
-  }
-
-  private static boolean isDeleteOrGet(String method) {
-    return "GET".equalsIgnoreCase(method) || "DELETE".equalsIgnoreCase(method);
-  }
-
-  private static boolean hasBody(Map<String, Map<String, String>> params) {
-    return params != null && (params.containsKey("form") || params.containsKey("json"));
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/ByLevelTraveller.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/ByLevelTraveller.java
deleted file mode 100644
index 2489117..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/ByLevelTraveller.java
+++ /dev/null
@@ -1,86 +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.core.dag;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Queue;
-import java.util.Set;
-import kamon.annotation.EnableKamon;
-import kamon.annotation.Segment;
-
-@EnableKamon
-public class ByLevelTraveller<T> implements Traveller<T> {
-
-  private final Collection<Node<T>> nodes;
-  private final Collection<Node<T>> nodesBuffer;
-
-  private final Queue<Node<T>> nodesWithoutParent = new LinkedList<>();
-  private final Map<Long, Set<Node<T>>> nodeParents = new HashMap<>();
-  private final TraversalDirection<T> traversalDirection;
-
-
-  public ByLevelTraveller(SingleLeafDirectedAcyclicGraph<T> dag, TraversalDirection<T> traversalDirection) {
-    this.nodes = new LinkedHashSet<>();
-    this.nodesBuffer = new LinkedList<>();
-    this.traversalDirection = traversalDirection;
-
-    nodesWithoutParent.offer(traversalDirection.root(dag));
-  }
-
-  @Segment(name = "travelNext", category = "application", library = "kamon")
-  @Override
-  public void next() {
-    nodes.addAll(nodesBuffer);
-    nodesBuffer.clear();
-    boolean buffered = false;
-
-    while (!nodesWithoutParent.isEmpty() && !buffered) {
-      Node<T> node = nodesWithoutParent.poll();
-      nodes.add(node);
-
-      for (Node<T> child : traversalDirection.children(node)) {
-        // This is not thread safe
-        if (nodeParents.get(child.id()) == null) {
-          nodeParents.put(child.id(), new HashSet<>(traversalDirection.parents(child)));
-        }
-        nodeParents.get(child.id()).remove(node);
-
-        if (nodeParents.get(child.id()).isEmpty()) {
-          nodesWithoutParent.offer(child);
-          nodesBuffer.add(child);
-          buffered = true;
-        }
-      }
-    }
-  }
-
-  @Override
-  public boolean hasNext() {
-    return !nodesWithoutParent.isEmpty();
-  }
-
-  @Override
-  public Collection<Node<T>> nodes() {
-    return nodes;
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/FromLeafTraversalDirection.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/FromLeafTraversalDirection.java
deleted file mode 100644
index d97c40f..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/FromLeafTraversalDirection.java
+++ /dev/null
@@ -1,38 +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.core.dag;
-
-import java.util.Set;
-
-public class FromLeafTraversalDirection<T> implements TraversalDirection<T> {
-
-  @Override
-  public Node<T> root(SingleLeafDirectedAcyclicGraph<T> dag) {
-    return dag.leaf();
-  }
-
-  @Override
-  public Set<Node<T>> parents(Node<T> node) {
-    return node.children();
-  }
-
-  @Override
-  public Set<Node<T>> children(Node<T> node) {
-    return node.parents();
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/FromRootTraversalDirection.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/FromRootTraversalDirection.java
deleted file mode 100644
index 8c664ac..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/FromRootTraversalDirection.java
+++ /dev/null
@@ -1,38 +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.core.dag;
-
-import java.util.Set;
-
-public class FromRootTraversalDirection<T> implements TraversalDirection<T> {
-
-  @Override
-  public Node<T> root(SingleLeafDirectedAcyclicGraph<T> dag) {
-    return dag.root();
-  }
-
-  @Override
-  public Set<Node<T>> parents(Node<T> node) {
-    return node.parents();
-  }
-
-  @Override
-  public Set<Node<T>> children(Node<T> node) {
-    return node.children();
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphBasedSagaFactory.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphBasedSagaFactory.java
deleted file mode 100644
index 55c71c1..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphBasedSagaFactory.java
+++ /dev/null
@@ -1,81 +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.core.dag;
-
-import java.util.Set;
-import java.util.concurrent.Executor;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import org.apache.servicecomb.saga.core.EventStore;
-import org.apache.servicecomb.saga.core.GraphBasedSaga;
-import org.apache.servicecomb.saga.core.Saga;
-import org.apache.servicecomb.saga.core.SagaContext;
-import org.apache.servicecomb.saga.core.SagaContextImpl;
-import org.apache.servicecomb.saga.core.SagaRequest;
-import org.apache.servicecomb.saga.core.application.SagaFactory;
-import org.apache.servicecomb.saga.infrastructure.ContextAwareEventStore;
-import org.apache.servicecomb.saga.core.PersistentStore;
-import org.apache.servicecomb.saga.core.SagaDefinition;
-import org.apache.servicecomb.saga.core.SagaTaskFactory;
-import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
-
-public class GraphBasedSagaFactory implements SagaFactory {
-  private final AtomicBoolean isRunning = new AtomicBoolean(true);
-  private final FromJsonFormat<Set<String>> childrenExtractor;
-  private final Executor executorService;
-  private final GraphBuilder graphBuilder;
-  private final SagaTaskFactory sagaTaskFactory;
-
-  public GraphBasedSagaFactory(int retryDelay,
-      PersistentStore persistentStore,
-      FromJsonFormat<Set<String>> childrenExtractor,
-      ExecutorService executorService) {
-
-    this.childrenExtractor = childrenExtractor;
-    this.executorService = executorService;
-    this.sagaTaskFactory = new SagaTaskFactory(retryDelay, persistentStore);
-    this.graphBuilder = new GraphBuilder(new GraphCycleDetectorImpl<SagaRequest>());
-  }
-
-  @Override
-  public Saga createSaga(String requestJson, String sagaId, EventStore sagaLog, SagaDefinition definition) {
-    SagaContext sagaContext = new SagaContextImpl(childrenExtractor);
-
-    return new GraphBasedSaga(
-        sagaLog,
-        executorService,
-        sagaTaskFactory.sagaTasks(sagaId,
-            requestJson,
-            definition.policy(),
-            new ContextAwareEventStore(sagaLog, sagaContext)
-        ),
-        sagaContext,
-        graphBuilder.build(definition.requests()));
-  }
-
-  @Override
-  public boolean isTerminated() {
-    return !isRunning.get();
-  }
-
-  @Override
-  public void terminate() throws Exception {
-    isRunning.compareAndSet(true, false);
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphBuilder.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphBuilder.java
deleted file mode 100644
index c5cd850..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphBuilder.java
+++ /dev/null
@@ -1,110 +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.core.dag;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.servicecomb.saga.core.NoOpSagaRequest;
-import org.apache.servicecomb.saga.core.SagaException;
-import org.apache.servicecomb.saga.core.SagaRequest;
-
-import kamon.annotation.EnableKamon;
-import kamon.annotation.Segment;
-
-@EnableKamon
-public class GraphBuilder {
-
-  private final GraphCycleDetector<SagaRequest> detector;
-
-  public GraphBuilder(GraphCycleDetector<SagaRequest> detector) {
-    this.detector = detector;
-  }
-
-  @Segment(name = "buildGraph", category = "application", library = "kamon")
-  public SingleLeafDirectedAcyclicGraph<SagaRequest> build(SagaRequest[] sagaRequests) {
-    Map<String, Node<SagaRequest>> requestNodes = requestsToNodes(sagaRequests);
-
-    SingleLeafDirectedAcyclicGraph<SagaRequest> graph = linkNodesToGraph(sagaRequests, requestNodes);
-    detectCycle(graph);
-    return graph;
-  }
-
-  private SingleLeafDirectedAcyclicGraph<SagaRequest> linkNodesToGraph(
-      SagaRequest[] sagaRequests,
-      Map<String, Node<SagaRequest>> requestNodes) {
-
-    Node<SagaRequest> root = rootNode(0);
-    Node<SagaRequest> leaf = leafNode(sagaRequests.length + 1);
-
-    for (SagaRequest sagaRequest : sagaRequests) {
-      if (isOrphan(sagaRequest)) {
-        root.addChild(requestNodes.get(sagaRequest.id()));
-      } else {
-        for (String parent : sagaRequest.parents()) {
-          requestNodes.get(parent).addChild(requestNodes.get(sagaRequest.id()));
-        }
-      }
-    }
-
-    for(Node<SagaRequest> node : requestNodes.values()) {
-      if (node.children().isEmpty()) {
-        node.addChild(leaf);
-      }
-    }
-    return new SingleLeafDirectedAcyclicGraph<>(root, leaf);
-  }
-
-  private Node<SagaRequest> rootNode(int id) {
-    return new Node<>(
-        id,
-        NoOpSagaRequest.SAGA_START_REQUEST);
-  }
-
-  private Node<SagaRequest> leafNode(int id) {
-    return new Node<>(
-        id,
-        NoOpSagaRequest.SAGA_END_REQUEST);
-  }
-
-  private boolean isOrphan(SagaRequest sagaRequest) {
-    return sagaRequest.parents().length == 0;
-  }
-
-  private Map<String, Node<SagaRequest>> requestsToNodes(SagaRequest[] sagaRequests) {
-    long index = 1;
-    Map<String, Node<SagaRequest>> requestMap = new HashMap<>();
-    for (SagaRequest sagaRequest : sagaRequests) {
-      if (requestMap.containsKey(sagaRequest.id())) {
-        // TODO: 8/20/2017 add random id if user didn't provide one
-        throw new SagaException("Failed to interpret requests with duplicate request id: " + sagaRequest.id());
-      }
-      requestMap.put(sagaRequest.id(), new Node<>(index++, sagaRequest));
-    }
-    return requestMap;
-  }
-
-  private void detectCycle(SingleLeafDirectedAcyclicGraph<SagaRequest> graph) {
-    Set<Node<SagaRequest>> jointNodes = detector.cycleJoints(graph);
-
-    if (!jointNodes.isEmpty()) {
-      throw new SagaException("Cycle detected in the request graph at nodes " + jointNodes);
-    }
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphCycleDetector.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphCycleDetector.java
deleted file mode 100644
index 9b12bc8..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphCycleDetector.java
+++ /dev/null
@@ -1,25 +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.core.dag;
-
-import java.util.Set;
-
-public interface GraphCycleDetector<T> {
-
-  Set<Node<T>> cycleJoints(SingleLeafDirectedAcyclicGraph<T> graph);
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphCycleDetectorImpl.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphCycleDetectorImpl.java
deleted file mode 100644
index f2869b3..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/GraphCycleDetectorImpl.java
+++ /dev/null
@@ -1,76 +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.core.dag;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Queue;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-/**
- * Cycle detection is based on topological sort with Kahn's algorithm.
- *
- * @see <a href="https://en.wikipedia.org/wiki/Topological_sorting">Topological Sorting</a>
- */
-public class GraphCycleDetectorImpl<T> implements GraphCycleDetector<T> {
-
-  @Override
-  public Set<Node<T>> cycleJoints(SingleLeafDirectedAcyclicGraph<T> graph) {
-    Queue<Node<T>> orphanNodes = new LinkedList<>();
-    Map<Node<T>, Set<Node<T>>> nodeParents = new HashMap<>();
-
-    orphanNodes.add(graph.root());
-
-    traverse(orphanNodes, nodeParents);
-
-    return unvisitedNodes(nodeParents);
-  }
-
-  // This method is not thread safe
-  private void traverse(Queue<Node<T>> orphanNodes, Map<Node<T>, Set<Node<T>>> nodeParents) {
-    while (!orphanNodes.isEmpty()) {
-      Node<T> node = orphanNodes.poll();
-
-      for(Node<T> child : node.children()) {
-        Set<Node<T>> parent = nodeParents.get(child);
-        if (parent == null) {
-          parent = new HashSet<>(child.parents());
-          nodeParents.put(child, parent);
-        }
-        parent.remove(node);
-        if (nodeParents.get(child).isEmpty()) {
-          orphanNodes.add(child);
-        }
-      }
-    }
-  }
-
-  private Set<Node<T>> unvisitedNodes(Map<Node<T>, Set<Node<T>>> nodeParents) {
-    Set<Node<T>> result = new HashSet<>();
-    for (Map.Entry<Node<T>, Set<Node<T>>> entry : nodeParents.entrySet()) {
-      if (!entry.getValue().isEmpty()) {
-        result.add(entry.getKey());
-      }
-    }
-    return result;
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/Node.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/Node.java
deleted file mode 100644
index 3e5bcad..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/Node.java
+++ /dev/null
@@ -1,88 +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.core.dag;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Objects;
-import java.util.Set;
-
-public class Node<T> {
-  private final long id;
-  private final T value;
-  private final Set<Node<T>> children = new HashSet<>();
-  private final Set<Node<T>> parents = new HashSet<>();
-
-  public Node(long id, T value) {
-    this.id = id;
-    this.value = value;
-  }
-
-  long id() {
-    return id;
-  }
-
-  public T value() {
-    return value;
-  }
-
-  Set<Node<T>> parents() {
-    return parents;
-  }
-
-  public Set<Node<T>> children() {
-    return children;
-  }
-
-  public void addChild(Node<T> node) {
-    children.add(node);
-    node.parents.add(this);
-  }
-
-  public void addChildren(Collection<Node<T>> nodes) {
-    children.addAll(nodes);
-    for (Node<T> node : nodes) {
-      node.parents.add(this);
-    }
-  }
-
-  @Override
-  public boolean equals(Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    Node<?> node = (Node<?>) o;
-    return id == node.id;
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(id);
-  }
-
-  @Override
-  public String toString() {
-    return "Node{" +
-        "id=" + id +
-        ", value=" + value +
-        '}';
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/SingleLeafDirectedAcyclicGraph.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/SingleLeafDirectedAcyclicGraph.java
deleted file mode 100644
index cf0d19b..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/SingleLeafDirectedAcyclicGraph.java
+++ /dev/null
@@ -1,38 +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.core.dag;
-
-public class SingleLeafDirectedAcyclicGraph<T> {
-
-  private final Node<T> root;
-  private final Node<T> leaf;
-
-  public SingleLeafDirectedAcyclicGraph(Node<T> root, Node<T> leaf) {
-
-    this.root = root;
-    this.leaf = leaf;
-  }
-
-  public Node<T> root() {
-    return root;
-  }
-
-  Node<T> leaf() {
-    return leaf;
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/Traveller.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/Traveller.java
deleted file mode 100644
index e44848b..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/Traveller.java
+++ /dev/null
@@ -1,29 +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.core.dag;
-
-import java.util.Collection;
-
-public interface Traveller<T> {
-
-  void next();
-
-  boolean hasNext();
-
-  Collection<Node<T>> nodes();
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/TraversalDirection.java b/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/TraversalDirection.java
deleted file mode 100644
index 22f7343..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/core/dag/TraversalDirection.java
+++ /dev/null
@@ -1,29 +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.core.dag;
-
-import java.util.Set;
-
-public interface TraversalDirection<T> {
-
-  Node<T> root(SingleLeafDirectedAcyclicGraph<T> dag);
-
-  Set<Node<T>> parents(Node<T> node);
-
-  Set<Node<T>> children(Node<T> node);
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/infrastructure/ContextAwareEventStore.java b/saga-core/src/main/java/org/apache/servicecomb/saga/infrastructure/ContextAwareEventStore.java
deleted file mode 100644
index 40fa71d..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/infrastructure/ContextAwareEventStore.java
+++ /dev/null
@@ -1,56 +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.infrastructure;
-
-import java.util.Iterator;
-
-import org.apache.servicecomb.saga.core.EventEnvelope;
-import org.apache.servicecomb.saga.core.EventStore;
-import org.apache.servicecomb.saga.core.SagaContext;
-import org.apache.servicecomb.saga.core.SagaEvent;
-
-public class ContextAwareEventStore implements EventStore {
-  private final EventStore eventStore;
-  private final SagaContext sagaContext;
-
-  public ContextAwareEventStore(EventStore eventStore, SagaContext sagaContext) {
-    this.eventStore = eventStore;
-    this.sagaContext = sagaContext;
-  }
-
-  @Override
-  public void offer(SagaEvent sagaEvent) {
-    sagaEvent.gatherTo(sagaContext);
-    eventStore.offer(sagaEvent);
-  }
-
-  @Override
-  public void populate(Iterable<EventEnvelope> events) {
-    eventStore.populate(events);
-  }
-
-  @Override
-  public long size() {
-    return eventStore.size();
-  }
-
-  @Override
-  public Iterator<SagaEvent> iterator() {
-    return eventStore.iterator();
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/infrastructure/EmbeddedEventStore.java b/saga-core/src/main/java/org/apache/servicecomb/saga/infrastructure/EmbeddedEventStore.java
deleted file mode 100644
index d342264..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/infrastructure/EmbeddedEventStore.java
+++ /dev/null
@@ -1,58 +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.infrastructure;
-
-import java.lang.invoke.MethodHandles;
-import java.util.Iterator;
-import java.util.Queue;
-import java.util.concurrent.LinkedBlockingQueue;
-
-import org.apache.servicecomb.saga.core.EventEnvelope;
-import org.apache.servicecomb.saga.core.EventStore;
-import org.apache.servicecomb.saga.core.SagaEvent;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class EmbeddedEventStore implements EventStore {
-  private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-  private final Queue<SagaEvent> events = new LinkedBlockingQueue<>();
-
-  @Override
-  public void offer(SagaEvent sagaEvent) {
-    events.offer(sagaEvent);
-    log.info("Added event {}", sagaEvent);
-  }
-
-  @Override
-  public void populate(Iterable<EventEnvelope> events) {
-    for (EventEnvelope event : events) {
-      this.events.offer(event.event);
-      log.info("Populated event {}", event);
-    }
-  }
-
-  @Override
-  public long size() {
-    return events.size();
-  }
-
-  @Override
-  public Iterator<SagaEvent> iterator() {
-    return events.iterator();
-  }
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/transports/RestTransport.java b/saga-core/src/main/java/org/apache/servicecomb/saga/transports/RestTransport.java
deleted file mode 100644
index 3d5bda3..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/transports/RestTransport.java
+++ /dev/null
@@ -1,27 +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.transports;
-
-import org.apache.servicecomb.saga.core.SagaResponse;
-import org.apache.servicecomb.saga.core.Transport;
-import java.util.Map;
-
-public interface RestTransport extends Transport {
-
-  SagaResponse with(String address, String path, String method, Map<String, Map<String, String>> params);
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/transports/SQLTransport.java b/saga-core/src/main/java/org/apache/servicecomb/saga/transports/SQLTransport.java
deleted file mode 100644
index 9438f65..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/transports/SQLTransport.java
+++ /dev/null
@@ -1,29 +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.transports;
-
-import java.util.List;
-
-import org.apache.servicecomb.saga.core.SagaResponse;
-import org.apache.servicecomb.saga.core.Transport;
-
-public interface SQLTransport extends Transport {
-
-  SagaResponse with(String datasource, String sql, List<List<String>> params);
-
-}
diff --git a/saga-core/src/main/java/org/apache/servicecomb/saga/transports/TransportFactory.java b/saga-core/src/main/java/org/apache/servicecomb/saga/transports/TransportFactory.java
deleted file mode 100644
index 053149f..0000000
--- a/saga-core/src/main/java/org/apache/servicecomb/saga/transports/TransportFactory.java
+++ /dev/null
@@ -1,25 +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.transports;
-
-import org.apache.servicecomb.saga.core.Transport;
-
-public interface TransportFactory<T extends Transport> {
-
-  T getTransport();
-}
diff --git a/saga-core/src/test/java/org/apache/servicecomb/saga/core/BackwardRecoveryTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/BackwardRecoveryTest.java
deleted file mode 100644
index 4f03992..0000000
--- a/saga-core/src/test/java/org/apache/servicecomb/saga/core/BackwardRecoveryTest.java
+++ /dev/null
@@ -1,57 +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.core;
-
-import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import org.junit.Before;
-import org.junit.Test;
-
-public class BackwardRecoveryTest {
-
-  private final String serviceName = "aaa";
-  private final Transaction transaction = mock(Transaction.class);
-  private final SagaTask sagaTask = mock(SagaTask.class);
-  private final SagaRequest sagaRequest = mock(SagaRequest.class);
-  private final SagaResponse parentResponse = mock(SagaResponse.class);
-  private final BackwardRecovery backwardRecovery = new BackwardRecovery();
-  private final RuntimeException exception = new RuntimeException("oops");
-
-  @Before
-  public void setUp() throws Exception {
-    when(sagaRequest.serviceName()).thenReturn(serviceName);
-    when(sagaRequest.transaction()).thenReturn(transaction);
-  }
-
-  @Test
-  public void blowsUpWhenTaskIsNotCommitted() {
-    doThrow(exception).when(transaction).send(serviceName, parentResponse);
-
-    try {
-      backwardRecovery.apply(sagaTask, sagaRequest, parentResponse);
-      expectFailing(RuntimeException.class);
-    } catch (RuntimeException ignored) {
-    }
-
-    verify(sagaTask).abort(sagaRequest, exception);
-  }
-}
diff --git a/saga-core/src/test/java/org/apache/servicecomb/saga/core/CompensationImpl.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/CompensationImpl.java
deleted file mode 100644
index 0077802..0000000
--- a/saga-core/src/test/java/org/apache/servicecomb/saga/core/CompensationImpl.java
+++ /dev/null
@@ -1,32 +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.core;
-
-import java.util.Map;
-
-public class CompensationImpl extends RestOperation implements Compensation {
-
-  public CompensationImpl(String path, String method, Map<String, Map<String, String>> params) {
-    super(path, method, params);
-  }
-
-  @Override
-  public int retries() {
-    return DEFAULT_RETRIES;
-  }
-}
diff --git a/saga-core/src/test/java/org/apache/servicecomb/saga/core/CompositeSagaLogTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/CompositeSagaLogTest.java
deleted file mode 100644
index c7dea51..0000000
--- a/saga-core/src/test/java/org/apache/servicecomb/saga/core/CompositeSagaLogTest.java
+++ /dev/null
@@ -1,49 +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.core;
-
-import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-
-import org.junit.Test;
-
-public class CompositeSagaLogTest {
-
-  private final SagaRequest request = mock(SagaRequest.class);
-  private final DummyEvent sagaEvent = new DummyEvent(request);
-  private final SagaLog embedded = mock(SagaLog.class);
-  private final SagaLog persistent = mock(SagaLog.class);
-
-  private final SagaLog compositeSagaLog = new CompositeSagaLog(embedded, persistent);
-
-  @Test
-  public void addsLogsToEmbeddedOnlyAfterPersisted() {
-    doThrow(RuntimeException.class).when(persistent).offer(sagaEvent);
-
-    try {
-      compositeSagaLog.offer(sagaEvent);
-      expectFailing(RuntimeException.class);
-    } catch (RuntimeException ignored) {
-    }
-
-    verify(embedded, never()).offer(sagaEvent);
-  }
-}
diff --git a/saga-core/src/test/java/org/apache/servicecomb/saga/core/CompositeSagaResponseTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/CompositeSagaResponseTest.java
deleted file mode 100644
index 449340c..0000000
--- a/saga-core/src/test/java/org/apache/servicecomb/saga/core/CompositeSagaResponseTest.java
+++ /dev/null
@@ -1,81 +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.core;
-
-import static java.util.Arrays.asList;
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Mockito.when;
-
-import java.util.ArrayList;
-
-import org.junit.Test;
-import org.mockito.Mockito;
-
-public class CompositeSagaResponseTest {
-
-  private final SagaResponse response1 = Mockito.mock(SagaResponse.class);
-  private final SagaResponse response2 = Mockito.mock(SagaResponse.class);
-
-  private final SagaResponse compositeSagaResponse = new CompositeSagaResponse(asList(response1, response2));
-  private final SagaResponse emptySagaResponse = new CompositeSagaResponse(new ArrayList<SagaResponse>());
-
-  @Test
-  public void succeededOnlyWhenAllAreSuccessful() throws Exception {
-    when(response1.succeeded()).thenReturn(true);
-    when(response2.succeeded()).thenReturn(true);
-
-    assertThat(compositeSagaResponse.succeeded(), is(true));
-  }
-
-  @Test
-  public void failedWhenAnyIsNotSuccessful() throws Exception {
-    when(response1.succeeded()).thenReturn(true);
-    when(response2.succeeded()).thenReturn(false);
-
-    assertThat(compositeSagaResponse.succeeded(), is(false));
-  }
-
-  @Test
-  public void bodyCombinesAllResponseBodies() throws Exception {
-    when(response1.body()).thenReturn("{\n"
-        + "  \"status\": 500,\n"
-        + "  \"body\" : \"oops\"\n"
-        + "}\n");
-
-    when(response2.body()).thenReturn("{\n"
-        + "  \"status\": 200,\n"
-        + "  \"body\" : \"blah\"\n"
-        + "}\n");
-
-    assertThat(compositeSagaResponse.body(), is("[{\n"
-        + "  \"status\": 500,\n"
-        + "  \"body\" : \"oops\"\n"
-        + "}\n"
-        + ", {\n"
-        + "  \"status\": 200,\n"
-        + "  \"body\" : \"blah\"\n"
-        + "}\n"
-        + "]"));
-  }
-
-  @Test
-  public void EmptyCompositeSagaResponse() {
-    assertThat(emptySagaResponse.body(), is("{}"));
-  }
-}
diff --git a/saga-core/src/test/java/org/apache/servicecomb/saga/core/DummyEvent.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/DummyEvent.java
deleted file mode 100644
index c775afe..0000000
--- a/saga-core/src/test/java/org/apache/servicecomb/saga/core/DummyEvent.java
+++ /dev/null
@@ -1,31 +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.core;
-
-public class DummyEvent extends SagaEvent {
-
-  DummyEvent(SagaRequest payload) {
-    super("0", payload);
-  }
-
-  @Override
-  public void gatherTo(EventContext sagaContext) {
-
-  }
-
-}
diff --git a/saga-core/src/test/java/org/apache/servicecomb/saga/core/FallbackPolicyTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/FallbackPolicyTest.java
deleted file mode 100644
index a2d1f32..0000000
--- a/saga-core/src/test/java/org/apache/servicecomb/saga/core/FallbackPolicyTest.java
+++ /dev/null
@@ -1,91 +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.core;
-
-import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.reset;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mockito;
-
-public class FallbackPolicyTest {
-
-  private final int numberOfRetries = 3;
-  private final String address = uniquify("address");
-
-  private final SagaResponse success = Mockito.mock(SagaResponse.class);
-  private final SagaResponse failure = Mockito.mock(SagaResponse.class);
-  private final Fallback fallback = Mockito.mock(Fallback.class);
-  private final Compensation compensation = Mockito.mock(Compensation.class);
-  private final FallbackPolicy fallbackPolicy = new FallbackPolicy(100);
-
-  @SuppressWarnings("ThrowableInstanceNeverThrown")
-  private final RuntimeException exception = new RuntimeException("oops");
-
-  @Before
-  public void setUp() throws Exception {
-    when(compensation.retries()).thenReturn(numberOfRetries);
-    when(fallback.send(address)).thenReturn(failure);
-  }
-
-  @Test
-  public void retriesTransportForSpecifiedTimes() {
-    when(compensation.send(address))
-        .thenThrow(exception)
-        .thenThrow(exception)
-        .thenReturn(success);
-
-    SagaResponse response = fallbackPolicy.apply(address, compensation, fallback);
-
-    assertThat(response, is(success));
-    verify(compensation, times(3)).send(address);
-  }
-
-  @Test
-  public void fallbackIfTransportFailedWithRetry() {
-    when(compensation.send(address)).thenThrow(exception);
-
-    SagaResponse response = fallbackPolicy.apply(address, compensation, fallback);
-    assertThat(response, is(failure));
-
-    verify(compensation, times(numberOfRetries + 1)).send(address);
-    verify(fallback).send(address);
-  }
-
-  @Test
-  public void retryUntilSuccessIfNumberOfRetriesIsNegative() throws InterruptedException {
-    reset(compensation);
-    when(compensation.retries()).thenReturn(-1);
-    when(compensation.send(address))
-        .thenThrow(exception, exception, exception, exception, exception)
-        .thenReturn(success);
-
-    SagaResponse response = fallbackPolicy.apply(address, compensation, fallback);
-
-    assertThat(response, is(success));
-    verify(fallback, never()).send(anyString());
-  }
-}
diff --git a/saga-core/src/test/java/org/apache/servicecomb/saga/core/ForwardRecoveryTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/ForwardRecoveryTest.java
deleted file mode 100644
index 1d21914..0000000
--- a/saga-core/src/test/java/org/apache/servicecomb/saga/core/ForwardRecoveryTest.java
+++ /dev/null
@@ -1,86 +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.core;
-
-import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import org.junit.Before;
-import org.junit.Test;
-
-public class ForwardRecoveryTest {
-
-  private final SagaTask sagaTask = mock(SagaTask.class);
-
-  private final Transaction transaction = mock(Transaction.class);
-
-  private final SagaRequest sagaRequest = mock(SagaRequest.class);
-  private final SagaResponse parentResponse = mock(SagaResponse.class);
-
-  private final ForwardRecovery forwardRecovery = new ForwardRecovery();
-
-  private final String serviceName = "aaa";
-
-  private final int numberOfRetries = 3;
-
-  @Before
-  public void setUp() {
-    when(sagaRequest.serviceName()).thenReturn(serviceName);
-    when(sagaRequest.transaction()).thenReturn(transaction);
-    when(sagaRequest.failRetryDelayMilliseconds()).thenReturn(300);
-    when(transaction.retries()).thenReturn(numberOfRetries);
-    when(transaction.toString()).thenReturn(serviceName);
-  }
-
-  @Test
-  public void blowsUpWhenTaskIsNotCommittedWithFailRetryDelaySeconds() throws Exception {
-    doThrow(Exception.class).when(transaction).send(serviceName, parentResponse);
-
-    Thread t = new Thread(new Runnable() {
-      @Override
-      public void run() {
-        forwardRecovery.apply(sagaTask, sagaRequest, parentResponse);
-      }
-    });
-    t.start();
-    Thread.sleep(400);
-    t.interrupt();
-
-    verify(transaction, times(2)).send(serviceName, parentResponse);
-  }
-
-  @Test
-  public void retriesTransportForSpecifiedTimes() {
-    doThrow(Exception.class).when(transaction).send(serviceName, parentResponse);
-
-    try {
-      forwardRecovery.apply(sagaTask, sagaRequest, parentResponse);
-      expectFailing(TransactionFailedException.class);
-    } catch (TransactionAbortedException e) {
-      assertThat(e.getMessage(), is("Too many failures in transaction aaa of service aaa, abort the transaction!"));
-    }
-
-    verify(transaction, times(4)).send(serviceName, parentResponse);
-  }
-}
diff --git a/saga-core/src/test/java/org/apache/servicecomb/saga/core/LongIdGeneratorTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/LongIdGeneratorTest.java
deleted file mode 100644
index 775866b..0000000
--- a/saga-core/src/test/java/org/apache/servicecomb/saga/core/LongIdGeneratorTest.java
+++ /dev/null
@@ -1,36 +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.core;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-import org.junit.Test;
-
-public class LongIdGeneratorTest {
-
-
-  private final LongIdGenerator generator = new LongIdGenerator();
-
-  @Test
-  public void generatesLongInSequence() {
-    for (long index = 0; index < 10; index++) {
-      assertThat(generator.nextId(), is(index + 1));
-    }
-  }
-}
diff --git a/saga-core/src/test/java/org/apache/servicecomb/saga/core/RestOperationTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/RestOperationTest.java
deleted file mode 100644
index 900bb8b..0000000
--- a/saga-core/src/test/java/org/apache/servicecomb/saga/core/RestOperationTest.java
+++ /dev/null
@@ -1,95 +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.core;
-
-import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
-import static java.util.Collections.emptyMap;
-import static java.util.Collections.singletonMap;
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-import java.util.Collections;
-import java.util.Map;
-
-import org.junit.Test;
-
-public class RestOperationTest {
-
-  public static final Map<String, Map<String, String>> EMPTY_MAP_MAP = Collections.<String, Map<String, String>>emptyMap();
-  public static final Map<String, String> EMPTY_MAP =  Collections.<String, String>emptyMap();
-
-  @Test
-  public void blowsUpWhenGetMethodWithForm() {
-    try {
-      new RestOperation("blah", "GET", singletonMap("form", EMPTY_MAP));
-      expectFailing(IllegalArgumentException.class);
-    } catch (IllegalArgumentException e) {
-      assertThat(e.getMessage(), is("GET & DELETE request cannot enclose a body"));
-    }
-  }
-
-  @Test
-  public void blowsUpWhenGetMethodWithJson() {
-    try {
-      new RestOperation("blah", "GET", singletonMap("json", EMPTY_MAP));
-      expectFailing(IllegalArgumentException.class);
-    } catch (IllegalArgumentException e) {
-      assertThat(e.getMessage(), is("GET & DELETE request cannot enclose a body"));
-    }
-  }
-
-  @Test
-  public void blowsUpWhenDeleteMethodWithForm() {
-    try {
-      new RestOperation("blah", "DELETE", singletonMap("form", EMPTY_MAP));
-      expectFailing(IllegalArgumentException.class);
-    } catch (IllegalArgumentException e) {
-      assertThat(e.getMessage(), is("GET & DELETE request cannot enclose a body"));
-    }
-  }
-
-  @Test
-  public void blowsUpWhenDeleteMethodWithJson() {
-    try {
-      new RestOperation("blah", "DELETE", singletonMap("json", EMPTY_MAP));
-      expectFailing(IllegalArgumentException.class);
-    } catch (IllegalArgumentException e) {
-      assertThat(e.getMessage(), is("GET & DELETE request cannot enclose a body"));
-    }
-  }
-
-  @Test
-  public void blowsUpWhenMethodIsNotSupported() {
-    try {
-      new RestOperation("blah", "foo", EMPTY_MAP_MAP );
-      expectFailing(IllegalArgumentException.class);
-    } catch (IllegalArgumentException e) {
-      assertThat(e.getMessage(), is("Unsupported method foo"));
-    }
-  }
-
-  @Test
-  public void blowsUpWhenMethodIsNull() {
-    try {
-      new RestOperation("blah", null, EMPTY_MAP_MAP);
-      expectFailing(IllegalArgumentException.class);
-    } catch (IllegalArgumentException e) {
-      assertThat(e.getMessage(), is("Unsupported method null"));
-    }
-  }
-}
diff --git a/saga-core/src/test/java/org/apache/servicecomb/saga/core/RetrySagaLogTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/RetrySagaLogTest.java
deleted file mode 100644
index 9f9bdc8..0000000
--- a/saga-core/src/test/java/org/apache/servicecomb/saga/core/RetrySagaLogTest.java
+++ /dev/null
@@ -1,89 +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.core;
-
-
-import static org.awaitility.Awaitility.await;
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-
-import org.junit.Test;
-
-import org.apache.servicecomb.saga.core.SagaTaskFactory.RetrySagaLog;
-
-public class RetrySagaLogTest {
-
-  private final PersistentStore persistentStore = mock(PersistentStore.class);
-  private final SagaRequest sagaRequest = mock(SagaRequest.class);
-  private final SagaEvent dummyEvent = new DummyEvent(sagaRequest);
-  private final RetrySagaLog retrySagaLog = new RetrySagaLog(persistentStore, 100);
-
-  private volatile boolean interrupted = false;
-
-  @Test
-  public void retryUntilSuccessWhenEventIsNotPersisted() throws InterruptedException {
-    doThrow(RuntimeException.class).
-        doThrow(RuntimeException.class).
-        doThrow(RuntimeException.class).
-        doThrow(RuntimeException.class).
-        doThrow(RuntimeException.class).
-        doNothing().
-        when(persistentStore).offer(dummyEvent);
-
-    retrySagaLog.offer(dummyEvent);
-
-    verify(persistentStore, times(6)).offer(dummyEvent);
-  }
-
-  @Test
-  public void exitOnInterruption() throws InterruptedException {
-    ExecutorService executor = Executors.newSingleThreadExecutor();
-
-    Future<?> future = executor.submit(new Runnable() {
-      @Override
-      public void run() {
-        doThrow(RuntimeException.class).when(persistentStore).offer(dummyEvent);
-
-        retrySagaLog.offer(dummyEvent);
-        interrupted = true;
-      }
-    });
-
-    Thread.sleep(500);
-
-    assertThat(future.cancel(true), is(true));
-
-    await().atMost(2, TimeUnit.SECONDS).until(new Callable<Boolean>() {
-      @Override
-      public Boolean call() {
-        return interrupted;
-      }
-    });
-    executor.shutdown();
-  }
-}
diff --git a/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaEndTaskTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaEndTaskTest.java
deleted file mode 100644
index 22f5fa1..0000000
--- a/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaEndTaskTest.java
+++ /dev/null
@@ -1,47 +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.core;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.mock;
-
-import org.junit.Test;
-import org.mockito.ArgumentCaptor;
-
-public class SagaEndTaskTest {
-  private final SagaRequest request = mock(SagaRequest.class);
-  private final SagaLog sagaLog = mock(SagaLog.class);
-
-  private final String sagaId = "0";
-  private final SagaEndTask sagaEndTask = new SagaEndTask(sagaId, sagaLog);
-
-  @Test
-  public void emptyResponseOnSuccessfulEventPersistence() throws Exception {
-    ArgumentCaptor<SagaEndedEvent> argumentCaptor = ArgumentCaptor.forClass(SagaEndedEvent.class);
-    doNothing().when(sagaLog).offer(argumentCaptor.capture());
-
-    sagaEndTask.commit(request, SagaResponse.EMPTY_RESPONSE);
-
-    SagaEndedEvent event = argumentCaptor.getValue();
-    assertThat(event.sagaId, is(sagaId));
-    assertThat(event.json(null), is("{}"));
-    assertThat(event.payload(), is(request));
-  }
-}
diff --git a/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaEventMatcher.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaEventMatcher.java
deleted file mode 100644
index 7e8289c..0000000
--- a/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaEventMatcher.java
+++ /dev/null
@@ -1,68 +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.core;
-
-import java.util.Objects;
-
-import org.hamcrest.Description;
-import org.hamcrest.Matcher;
-import org.hamcrest.TypeSafeMatcher;
-
-public class SagaEventMatcher extends TypeSafeMatcher<SagaEvent> {
-
-  private final String sagaId;
-  private final Operation operation;
-  private final Class<?> aClass;
-
-  public static Matcher<SagaEvent> eventWith(String sagaId, Operation operation, Class<?> aClass) {
-    return new SagaEventMatcher(sagaId, operation, aClass);
-  }
-
-  static Matcher<SagaEvent> eventWith(Operation operation, Class<?> aClass) {
-    return eventWith("0", operation, aClass);
-  }
-
-  private SagaEventMatcher(String sagaId, Operation operation, Class<?> aClass) {
-    this.sagaId = sagaId;
-    this.operation = operation;
-    this.aClass = aClass;
-  }
-
-  @Override
-  protected void describeMismatchSafely(SagaEvent item, Description description) {
-    description
-        .appendText("SagaEvent {sagaId=" + item.sagaId + ", operation=" + operation(item) + ", class=" + item.getClass());
-  }
-
-  @Override
-  protected boolean matchesSafely(SagaEvent envelope) {
-    return Objects.equals(envelope.sagaId, sagaId)
-        && operation(envelope).equals(operation)
-        && envelope.getClass().equals(aClass);
-  }
-
-  @Override
-  public void describeTo(Description description) {
-    description
-        .appendText("SagaEvent {sagaId=" + sagaId + ", operation=" + operation + ", class=" + aClass.getCanonicalName());
-  }
-
-  private Operation operation(SagaEvent envelope) {
-    return operation instanceof Compensation ? envelope.payload().compensation() : envelope.payload().transaction();
-  }
-}
diff --git a/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaExecutionComponentTestBase.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaExecutionComponentTestBase.java
deleted file mode 100644
index d4f88c4..0000000
--- a/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaExecutionComponentTestBase.java
+++ /dev/null
@@ -1,272 +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.core;
-
-import static org.apache.servicecomb.saga.core.Operation.TYPE_REST;
-import static java.util.Collections.singletonList;
-import static java.util.Collections.singletonMap;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.awaitility.Awaitility.waitAtMost;
-import static org.hamcrest.Matchers.containsInAnyOrder;
-import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Mockito.when;
-
-import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-import org.apache.servicecomb.saga.core.application.SagaFactory;
-import org.hamcrest.Description;
-import org.hamcrest.Matcher;
-import org.hamcrest.TypeSafeMatcher;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mockito;
-
-import org.apache.servicecomb.saga.core.application.SagaExecutionComponent;
-import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
-import org.apache.servicecomb.saga.infrastructure.EmbeddedEventStore;
-
-@SuppressWarnings("unchecked")
-public abstract class SagaExecutionComponentTestBase {
-
-  private static final String requestJson = "[\n"
-      + "  {\n"
-      + "    \"id\": \"request-1\",\n"
-      + "    \"serviceName\": \"aaa\",\n"
-      + "    \"transaction\": {\n"
-      + "      \"method\": \"post\",\n"
-      + "      \"path\": \"/rest/as\"\n"
-      + "    },\n"
-      + "    \"compensation\": {\n"
-      + "      \"method\": \"delete\",\n"
-      + "      \"path\": \"/rest/as\"\n"
-      + "    }\n"
-      + "  }\n"
-      + "]\n";
-
-  private static final String sagaJson = "{\n"
-      + "  \"policy\": \"ForwardRecovery\",\n"
-      + "  \"requests\": " + requestJson + "\n"
-      + "}";
-
-  private static final String anotherRequestJson = "[\n"
-      + "  {\n"
-      + "    \"id\": \"request-2\",\n"
-      + "    \"serviceName\": \"bbb\",\n"
-      + "    \"transaction\": {\n"
-      + "      \"method\": \"post\",\n"
-      + "      \"path\": \"/rest/bs\"\n"
-      + "    },\n"
-      + "    \"compensation\": {\n"
-      + "      \"method\": \"delete\",\n"
-      + "      \"path\": \"/rest/bs\"\n"
-      + "    }\n"
-      + "  }\n"
-      + "]\n";
-
-  private static final String anotherSagaJson = "{\n"
-      + "  \"policy\": \"ForwardRecovery\",\n"
-      + "  \"requests\": " + anotherRequestJson + "\n"
-      + "}";
-
-  public static final Map<String, Map<String, String>> EMPTY_MAP = Collections.<String, Map<String, String>>emptyMap();
-
-  private final SagaRequest request1 = new SagaRequestImpl(
-      "request-1",
-      "aaa",
-      TYPE_REST,
-      new TransactionImpl("/rest/as", "post", EMPTY_MAP),
-      new CompensationImpl("/rest/as", "delete", EMPTY_MAP)
-  );
-
-  private final SagaRequest request2 = new SagaRequestImpl(
-      "request-2",
-      "bbb",
-      TYPE_REST,
-      new TransactionImpl("/rest/bs", "post", EMPTY_MAP),
-      new CompensationImpl("/rest/bs", "delete", EMPTY_MAP)
-  );
-
-  private final SagaDefinition definition1 = new SagaDefinition() {
-    @Override
-    public RecoveryPolicy policy() {
-      return new ForwardRecovery();
-    }
-
-    @Override
-    public SagaRequest[] requests() {
-      return new SagaRequest[]{request1};
-    }
-  };
-
-  private final SagaDefinition definition2 = new SagaDefinition() {
-    @Override
-    public RecoveryPolicy policy() {
-      return new BackwardRecovery();
-    }
-
-    @Override
-    public SagaRequest[] requests() {
-      return new SagaRequest[]{request2};
-    }
-  };
-
-  private final FromJsonFormat<SagaDefinition> fromJsonFormat = Mockito.mock(FromJsonFormat.class);
-  private final EmbeddedPersistentStore eventStore = new EmbeddedPersistentStore();
-
-  private final SagaExecutionComponent coordinator = new SagaExecutionComponent(
-      eventStore,
-      fromJsonFormat,
-      null,
-      sagaFactory(eventStore)
-  );
-
-  private final String sagaId = "1";
-
-  @Before
-  public void setUp() throws Exception {
-    when(fromJsonFormat.fromJson(sagaJson)).thenReturn(definition1);
-    when(fromJsonFormat.fromJson(anotherSagaJson)).thenReturn(definition2);
-  }
-
-  @Test
-  public void recoverSagaWithEventsFromEventStore() throws IOException {
-    eventStore.offer(new SagaStartedEvent(sagaId, sagaJson, NoOpSagaRequest.SAGA_START_REQUEST));
-    coordinator.reanimate();
-
-    assertThat(eventStore, contains(
-        eventWith(NoOpSagaRequest.SAGA_START_REQUEST, SagaStartedEvent.class),
-        eventWith(request1, TransactionStartedEvent.class),
-        eventWith(request1, TransactionEndedEvent.class),
-        eventWith(NoOpSagaRequest.SAGA_END_REQUEST, SagaEndedEvent.class)
-    ));
-  }
-
-  @Test
-  public void runSagaWithEventStore() throws IOException {
-    SagaResponse response = coordinator.run(sagaJson);
-
-    assertThat(response, is(SagaResponse.EMPTY_RESPONSE));
-    assertThat(eventStore, contains(
-        eventWith(NoOpSagaRequest.SAGA_START_REQUEST, SagaStartedEvent.class),
-        eventWith(request1, TransactionStartedEvent.class),
-        eventWith(request1, TransactionEndedEvent.class),
-        eventWith(NoOpSagaRequest.SAGA_END_REQUEST, SagaEndedEvent.class)
-    ));
-  }
-
-  @Test
-  public void processRequestsInParallel() {
-    ExecutorService executor = Executors.newFixedThreadPool(2);
-
-    executor.submit(new Runnable() {
-      @Override
-      public void run() {
-        coordinator.run(sagaJson);
-      }
-    });
-    executor.submit(new Runnable() {
-      @Override
-      public void run() {
-        coordinator.run(anotherSagaJson);
-      }
-    });
-
-    waitAtMost(2, SECONDS).until(new Callable<Boolean>() {
-      @Override
-      public Boolean call() throws Exception {
-        return eventStore.size() == 8;
-      }
-    });
-
-    assertThat(eventStore, containsInAnyOrder(
-        eventWith(NoOpSagaRequest.SAGA_START_REQUEST, SagaStartedEvent.class),
-        eventWith(request1, TransactionStartedEvent.class),
-        eventWith(request1, TransactionEndedEvent.class),
-        eventWith(NoOpSagaRequest.SAGA_END_REQUEST, SagaEndedEvent.class),
-        eventWith(NoOpSagaRequest.SAGA_START_REQUEST, SagaStartedEvent.class),
-        eventWith(request2, TransactionStartedEvent.class),
-        eventWith(request2, TransactionEndedEvent.class),
-        eventWith(NoOpSagaRequest.SAGA_END_REQUEST, SagaEndedEvent.class)
-    ));
-  }
-
-  @Test
-  public void runSagaAfterRecovery() throws IOException {
-    eventStore.offer(new SagaStartedEvent(sagaId, sagaJson, NoOpSagaRequest.SAGA_START_REQUEST));
-    coordinator.reanimate();
-
-    coordinator.run(anotherSagaJson);
-
-    assertThat(eventStore, contains(
-        eventWith(NoOpSagaRequest.SAGA_START_REQUEST, SagaStartedEvent.class),
-        eventWith(request1, TransactionStartedEvent.class),
-        eventWith(request1, TransactionEndedEvent.class),
-        eventWith(NoOpSagaRequest.SAGA_END_REQUEST, SagaEndedEvent.class),
-        eventWith(NoOpSagaRequest.SAGA_START_REQUEST, SagaStartedEvent.class),
-        eventWith(request2, TransactionStartedEvent.class),
-        eventWith(request2, TransactionEndedEvent.class),
-        eventWith(NoOpSagaRequest.SAGA_END_REQUEST, SagaEndedEvent.class)
-    ));
-  }
-
-  private Matcher<SagaEvent> eventWith(
-      final SagaRequest sagaRequest,
-      final Class<?> type) {
-
-    return new TypeSafeMatcher<SagaEvent>() {
-      @Override
-      protected boolean matchesSafely(SagaEvent event) {
-        SagaRequest request = event.payload();
-        return sagaRequest.equals(request)
-            && event.getClass().equals(type);
-      }
-
-      @Override
-      protected void describeMismatchSafely(SagaEvent item, Description mismatchDescription) {
-        SagaRequest request = item.payload();
-        mismatchDescription.appendText(
-            "SagaEvent {" + request + "}");
-      }
-
-      @Override
-      public void describeTo(Description description) {
-        description.appendText(
-            "SagaEvent {" + sagaRequest + "}");
-      }
-    };
-  }
-
-  private class EmbeddedPersistentStore extends EmbeddedEventStore implements PersistentStore {
-
-    @Override
-    public Map<String, List<EventEnvelope>> findPendingSagaEvents() {
-      return singletonMap(sagaId, singletonList(
-          new EventEnvelope(1L, new SagaStartedEvent(sagaId, sagaJson, NoOpSagaRequest.SAGA_START_REQUEST))));
-    }
-  }
-
-  protected abstract SagaFactory sagaFactory(PersistentStore eventStore);
-}
diff --git a/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaIntegrationTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaIntegrationTest.java
deleted file mode 100644
index 64187eb..0000000
--- a/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaIntegrationTest.java
+++ /dev/null
@@ -1,738 +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.core;
-
-import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
-import static org.apache.servicecomb.saga.core.Compensation.SAGA_START_COMPENSATION;
-import static org.apache.servicecomb.saga.core.Operation.TYPE_REST;
-import static org.apache.servicecomb.saga.core.SagaEventMatcher.eventWith;
-import static org.apache.servicecomb.saga.core.SagaResponse.EMPTY_RESPONSE;
-import static org.apache.servicecomb.saga.core.SagaResponse.NONE_RESPONSE;
-import static org.apache.servicecomb.saga.core.SagaTask.SAGA_END_TASK;
-import static org.apache.servicecomb.saga.core.SagaTask.SAGA_REQUEST_TASK;
-import static org.apache.servicecomb.saga.core.SagaTask.SAGA_START_TASK;
-import static org.apache.servicecomb.saga.core.Transaction.SAGA_END_TRANSACTION;
-import static org.apache.servicecomb.saga.core.Transaction.SAGA_START_TRANSACTION;
-import static java.util.Arrays.asList;
-import static java.util.Collections.emptySet;
-import static java.util.Collections.singletonList;
-import static org.hamcrest.Matchers.anyOf;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.Callable;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.CyclicBarrier;
-
-import org.hamcrest.core.Is;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-
-import com.seanyinx.github.unit.scaffolding.Randomness;
-
-import org.apache.servicecomb.saga.core.application.interpreter.FromJsonFormat;
-import org.apache.servicecomb.saga.core.dag.Node;
-import org.apache.servicecomb.saga.core.dag.SingleLeafDirectedAcyclicGraph;
-import org.apache.servicecomb.saga.infrastructure.ContextAwareEventStore;
-import org.apache.servicecomb.saga.infrastructure.EmbeddedEventStore;
-
-@SuppressWarnings("unchecked")
-public class SagaIntegrationTest {
-  private static final String sagaId = Randomness.uniquify("sagaId");
-
-  private final FromJsonFormat<Set<String>> childrenExtractor = mock(FromJsonFormat.class);
-  private final SagaContext sagaContext = new SagaContextImpl(childrenExtractor);
-  private final IdGenerator<Long> idGenerator = new LongIdGenerator();
-  private final EventStore eventStore = new EmbeddedEventStore();
-  private final ContextAwareEventStore sagaLog = new ContextAwareEventStore(eventStore, sagaContext);
-
-  private final Transaction transaction1 = mock(Transaction.class, "transaction1");
-  private final Transaction transaction2 = mock(Transaction.class, "transaction2");
-  private final Transaction transaction3 = mock(Transaction.class, "transaction3");
-  private final Transaction transaction4 = mock(Transaction.class, "transaction4");
-
-  private final Compensation compensation1 = mock(Compensation.class, "compensation1");
-  private final Compensation compensation2 = mock(Compensation.class, "compensation2");
-  private final Compensation compensation3 = mock(Compensation.class, "compensation3");
-  private final Compensation compensation4 = mock(Compensation.class, "compensation4");
-
-  private final Fallback fallback1 = mock(Fallback.class, "fallback1");
-
-  private final String requestJson = "{}";
-  private final SagaRequest request1 = request("request1", "service1", transaction1, compensation1, fallback1);
-  private final SagaRequest request2 = request("request2", "service2", transaction2, compensation2, request1.id());
-  private final SagaRequest request3 = request("request3", "service3", transaction3, compensation3, request1.id());
-  private final SagaRequest request4 = request("request4", "service4", transaction4, compensation4, request3.id());
-
-  private final SagaResponse transactionResponse1 = new SuccessfulSagaResponse("transaction1");
-  private final SagaResponse transactionResponse2 = new SuccessfulSagaResponse("transaction2");
-  private final SagaResponse transactionResponse3 = new SuccessfulSagaResponse("transaction3");
-  private final SagaResponse compensationResponse1 = new SuccessfulSagaResponse("compensation1");
-  private final SagaResponse compensationResponse2 = new SuccessfulSagaResponse("compensation2");
-  private final SagaResponse compensationResponse3 = new SuccessfulSagaResponse("compensation3");
-
-  @SuppressWarnings("ThrowableInstanceNeverThrown")
-  private final RuntimeException exception = new RuntimeException("oops");
-
-  private final Node<SagaRequest> node1 = new Node<>(1, request1);
-  private final Node<SagaRequest> node2 = new Node<>(2, request2);
-  private final Node<SagaRequest> node3 = new Node<>(3, request3);
-  private final Node<SagaRequest> node4 = new Node<>(4, request4);
-  private final Node<SagaRequest> root = new Node<>(0, NoOpSagaRequest.SAGA_START_REQUEST);
-  private final Node<SagaRequest> leaf = new Node<>(5, NoOpSagaRequest.SAGA_END_REQUEST);
-  private final SingleLeafDirectedAcyclicGraph<SagaRequest> sagaTaskGraph = new SingleLeafDirectedAcyclicGraph<>(root, leaf);
-
-  private Saga saga;
-  private final Map<String, SagaTask> tasks = new HashMap<>();
-
-  // root - node1 - node2 - leaf
-  @Before
-  public void setUp() throws Exception {
-    when(childrenExtractor.fromJson(anyString())).thenReturn(Collections.<String>emptySet());
-    when(childrenExtractor.fromJson(NONE_RESPONSE.body())).thenReturn(setOf("none"));
-
-    when(transaction1.send(request1.serviceName(), EMPTY_RESPONSE)).thenReturn(transactionResponse1);
-    when(transaction2.send(request2.serviceName(), transactionResponse1)).thenReturn(transactionResponse2);
-    when(transaction3.send(request3.serviceName(), transactionResponse1)).thenReturn(transactionResponse3);
-
-    when(compensation1.send(request1.serviceName(), compensationResponse2)).thenReturn(compensationResponse1);
-    when(compensation2.send(request2.serviceName(), compensationResponse3)).thenReturn(compensationResponse2);
-    when(compensation3.send(request3.serviceName(), EMPTY_RESPONSE)).thenReturn(compensationResponse3);
-
-    root.addChild(node1);
-    node1.addChild(node2);
-    node2.addChild(leaf);
-
-    SagaStartTask sagaStartTask = new SagaStartTask(sagaId, requestJson, sagaLog);
-    SagaEndTask sagaEndTask = new SagaEndTask(sagaId, sagaLog);
-    RequestProcessTask processTask = requestProcessTask(new BackwardRecovery());
-
-    tasks.put(SAGA_START_TASK, sagaStartTask);
-    tasks.put(SAGA_REQUEST_TASK, processTask);
-    tasks.put(SAGA_END_TASK, sagaEndTask);
-
-    saga = new GraphBasedSaga(eventStore, tasks, sagaContext, sagaTaskGraph);
-  }
-
-  @Test
-  public void transactionsAreRunSuccessfully() {
-    saga.run();
-
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
-    ));
-
-    verify(transaction1).send(request1.serviceName(), EMPTY_RESPONSE);
-    verify(transaction2).send(request2.serviceName(), transactionResponse1);
-
-    verify(compensation1, never()).send(request1.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-  }
-
-  // root - node1 - node2 - leaf
-  //             \_ node3 _/
-  @Test
-  public void compensateCommittedTransactionsOnFailure() {
-    addExtraChildToNode1();
-
-    // barrier to make sure the two transactions starts at the same time
-    final CyclicBarrier barrier = new CyclicBarrier(2);
-    when(transaction2.send(request2.serviceName(), transactionResponse1))
-        .thenAnswer(
-            withAnswer(new Callable<SagaResponse>() {
-              @Override
-              public SagaResponse call() throws Exception {
-                barrier.await();
-                Thread.sleep(100);
-                throw exception;
-              }
-            }));
-
-    when(transaction3.send(request3.serviceName(), transactionResponse1))
-        .thenAnswer(
-            withAnswer(new Callable<SagaResponse>() {
-              @Override
-              public SagaResponse call() throws Exception {
-                barrier.await();
-                return transactionResponse3;
-              }
-            }));
-
-    saga.run();
-
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        anyOf(eventWith(sagaId, transaction2, TransactionStartedEvent.class), eventWith(sagaId, transaction3, TransactionStartedEvent.class)),
-        anyOf(eventWith(sagaId, transaction2, TransactionStartedEvent.class), eventWith(sagaId, transaction3, TransactionStartedEvent.class)),
-        eventWith(sagaId, transaction3, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction2, TransactionAbortedEvent.class),
-        eventWith(sagaId, compensation3, TransactionCompensatedEvent.class),
-        eventWith(sagaId, compensation1, TransactionCompensatedEvent.class),
-        eventWith(sagaId, SAGA_START_COMPENSATION, SagaEndedEvent.class)));
-
-    verify(transaction1).send(request1.serviceName(), EMPTY_RESPONSE);
-    verify(transaction2).send(request2.serviceName(), transactionResponse1);
-    verify(transaction3).send(request3.serviceName(), transactionResponse1);
-
-    verify(compensation1).send(request1.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-    verify(compensation3).send(request3.serviceName());
-  }
-
-  @Test
-  public void skipIgnoredTransaction() throws Exception {
-    addExtraChildToNode1();
-
-    when(childrenExtractor.fromJson(transactionResponse1.body())).thenReturn(setOf(request3.id()));
-
-    saga.run();
-
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction3, TransactionEndedEvent.class),
-        eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
-    ));
-
-    verify(transaction1).send(request1.serviceName(), EMPTY_RESPONSE);
-    verify(transaction3).send(request3.serviceName(), transactionResponse1);
-    verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
-
-    verify(compensation1, never()).send(request1.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-    verify(compensation3, never()).send(request3.serviceName());
-  }
-
-  @Test
-  public void skipAllIgnoredTransactions() throws Exception {
-    node1.addChild(node3);
-    node3.addChild(node4);
-    node4.addChild(leaf);
-
-    when(childrenExtractor.fromJson(transactionResponse1.body())).thenReturn(setOf("none"));
-
-    saga.run();
-
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
-    ));
-
-    verify(transaction1).send(request1.serviceName(), EMPTY_RESPONSE);
-    verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction3, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction4, never()).send(anyString(), any(SagaResponse.class));
-
-    verify(compensation1, never()).send(request1.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-    verify(compensation3, never()).send(request3.serviceName());
-    verify(compensation4, never()).send(request4.serviceName());
-  }
-
-  @Test
-  public void doNotCompensateIgnoredTransactions() throws Exception {
-    node1.addChild(node3);
-    node3.addChild(node4);
-    node4.addChild(leaf);
-
-    when(childrenExtractor.fromJson(transactionResponse1.body())).thenReturn(setOf(request3.id()));
-
-    when(transaction4.send(request4.serviceName(), transactionResponse3)).thenThrow(exception);
-
-    saga.run();
-
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction3, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction4, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction4, TransactionAbortedEvent.class),
-        eventWith(sagaId, transaction3, TransactionCompensatedEvent.class),
-        eventWith(sagaId, transaction1, TransactionCompensatedEvent.class),
-        eventWith(sagaId, SAGA_START_COMPENSATION, SagaEndedEvent.class)
-    ));
-
-    verify(transaction1).send(request1.serviceName(), EMPTY_RESPONSE);
-    verify(transaction3).send(request3.serviceName(), transactionResponse1);
-    verify(transaction4).send(request4.serviceName(), transactionResponse3);
-    verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
-
-    verify(compensation1).send(request1.serviceName());
-    verify(compensation3).send(request3.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-    verify(compensation4, never()).send(request4.serviceName());
-  }
-
-  // root - node1 - node2 - leaf
-  //             \_ node3 _/
-  @Test
-  public void redoHangingTransactionsOnFailure() throws InterruptedException {
-    addExtraChildToNode1();
-
-    // barrier to make sure the two transactions starts at the same time
-    final CyclicBarrier barrier = new CyclicBarrier(2);
-    when(transaction3.send(request3.serviceName(), transactionResponse1))
-        .thenAnswer(withAnswer(new Callable<SagaResponse>() {
-          @Override
-          public SagaResponse call() throws Exception {
-            barrier.await();
-            throw exception;
-          }
-        }));
-
-    final CountDownLatch latch = new CountDownLatch(1);
-
-    when(transaction2.send(request2.serviceName(), transactionResponse1))
-        .thenAnswer(withAnswer(new Callable<SagaResponse>() {
-          @Override
-          public SagaResponse call() throws Exception {
-            barrier.await();
-            latch.await();
-            return transactionResponse2;
-          }
-        })).thenReturn(transactionResponse2);
-
-    saga.run();
-
-    // the ordering of events may not be consistence due to concurrent processing of requests
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        anyOf(
-            eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-            eventWith(sagaId, transaction3, TransactionStartedEvent.class)),
-        anyOf(
-            eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-            eventWith(sagaId, transaction2, TransactionStartedEvent.class)),
-        eventWith(sagaId, transaction3, TransactionAbortedEvent.class),
-        eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        eventWith(sagaId, compensation2, TransactionCompensatedEvent.class),
-        eventWith(sagaId, compensation1, TransactionCompensatedEvent.class),
-        eventWith(sagaId, SAGA_START_COMPENSATION, SagaEndedEvent.class)));
-
-    verify(transaction1).send(request1.serviceName(), EMPTY_RESPONSE);
-    verify(transaction2, times(2)).send(request2.serviceName(), transactionResponse1);
-    verify(transaction3).send(request3.serviceName(), transactionResponse1);
-
-    verify(compensation1).send(request1.serviceName());
-    verify(compensation2).send(request2.serviceName());
-    verify(compensation3, never()).send(request3.serviceName());
-
-    latch.countDown();
-  }
-
-  @Test
-  public void retriesFailedTransactionTillSuccess() {
-    RequestProcessTask processTask = requestProcessTask(new ForwardRecovery());
-    tasks.put(SAGA_REQUEST_TASK, processTask);
-
-    when(transaction2.retries()).thenReturn(-1);
-    when(transaction2.send(request2.serviceName(), transactionResponse1))
-        .thenThrow(exception).thenThrow(exception).thenReturn(transactionResponse2);
-
-    saga.run();
-
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
-    ));
-
-    verify(transaction1).send(request1.serviceName(), EMPTY_RESPONSE);
-    verify(transaction2, times(3)).send(request2.serviceName(), transactionResponse1);
-
-    verify(compensation1, never()).send(anyString(), any(SagaResponse.class));
-    verify(compensation2, never()).send(anyString(), any(SagaResponse.class));
-  }
-
-  @Test
-  public void retriesFailedTransactionTillMaximum() {
-    RequestProcessTask processTask = requestProcessTask(new ForwardRecovery());
-    tasks.put(SAGA_REQUEST_TASK, processTask);
-
-    when(transaction2.send(request2.serviceName(), transactionResponse1)).thenThrow(exception);
-    when(transaction2.retries()).thenReturn(2);
-    when(transaction2.toString()).thenReturn("transaction2");
-
-    try {
-      saga.run();
-    } catch (TransactionAbortedException e) {
-      assertThat(e.getMessage(),
-          Is.is("Too many failures in transaction transaction2 of service " + request2.serviceName() + ", stop transaction!"));
-    }
-
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction2, TransactionStartedEvent.class)
-    ));
-
-    verify(transaction1).send(request1.serviceName(), EMPTY_RESPONSE);
-    verify(transaction2, times(3)).send(request2.serviceName(), transactionResponse1);
-
-    verify(compensation1, never()).send(anyString(), any(SagaResponse.class));
-    verify(compensation2, never()).send(anyString(), any(SagaResponse.class));
-  }
-
-  @Test
-  public void fallbackWhenCompensationFailed() {
-    int retries = 3;
-
-    when(transaction2.send(request2.serviceName(), transactionResponse1)).thenThrow(exception);
-    when(compensation1.send(request1.serviceName())).thenThrow(exception);
-    when(compensation1.retries()).thenReturn(retries);
-
-    saga.run();
-
-    verify(transaction1).send(request1.serviceName(), EMPTY_RESPONSE);
-    verify(transaction2).send(request2.serviceName(), transactionResponse1);
-
-    verify(compensation1, times(retries + 1)).send(request1.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-
-    verify(fallback1).send(request1.serviceName());
-  }
-
-  @Test
-  public void restoresSagaToTransactionStateByPlayingAllEvents() {
-    addExtraChildToNode1();
-
-    Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
-        envelope(new TransactionStartedEvent(sagaId, request1)),
-        envelope(new TransactionEndedEvent(sagaId, request1, transactionResponse1)),
-        envelope(new TransactionStartedEvent(sagaId, request2)),
-        envelope(new TransactionEndedEvent(sagaId, request2, transactionResponse2))
-    );
-
-    eventStore.populate(events);
-    saga.play();
-
-    saga.run();
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction3, TransactionEndedEvent.class),
-        eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
-    ));
-
-    verify(transaction1, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction3).send(request3.serviceName(), transactionResponse1);
-
-    verify(compensation1, never()).send(request1.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-    verify(compensation3, never()).send(request3.serviceName());
-  }
-
-  @Test
-  public void restoresPartialTransactionByPlayingAllEvents() {
-    addExtraChildToNode1();
-
-    Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
-        envelope(new TransactionStartedEvent(sagaId, request1)),
-        envelope(new TransactionEndedEvent(sagaId, request1, transactionResponse1)),
-        envelope(new TransactionStartedEvent(sagaId, request2)),
-        envelope(new TransactionEndedEvent(sagaId, request2, transactionResponse2)),
-        envelope(new TransactionStartedEvent(sagaId, request3))
-    );
-
-    eventStore.populate(events);
-    saga.play();
-
-    saga.run();
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction3, TransactionEndedEvent.class),
-        eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
-    ));
-
-    verify(transaction1, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction3).send(request3.serviceName(), transactionResponse1);
-
-    verify(compensation1, never()).send(request1.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-    verify(compensation3, never()).send(request3.serviceName());
-  }
-
-  @Test
-  public void restoresToCompensationFromAbortedTransactionByPlayingAllEvents() {
-    addExtraChildToNode1();
-
-    Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
-        envelope(new TransactionStartedEvent(sagaId, request1)),
-        envelope(new TransactionEndedEvent(sagaId, request1)),
-        envelope(new TransactionStartedEvent(sagaId, request2)),
-        envelope(new TransactionEndedEvent(sagaId, request2)),
-        envelope(new TransactionStartedEvent(sagaId, request3)),
-        envelope(new TransactionAbortedEvent(sagaId, request3, exception))
-    );
-
-    eventStore.populate(events);
-    saga.play();
-
-    saga.run();
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction3, TransactionAbortedEvent.class),
-        eventWith(sagaId, compensation2, TransactionCompensatedEvent.class),
-        eventWith(sagaId, compensation1, TransactionCompensatedEvent.class),
-        eventWith(sagaId, SAGA_START_COMPENSATION, SagaEndedEvent.class)
-    ));
-
-    verify(transaction1, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction3, never()).send(anyString(), any(SagaResponse.class));
-
-    verify(compensation1).send(request1.serviceName());
-    verify(compensation2).send(request2.serviceName());
-    verify(compensation3, never()).send(request3.serviceName());
-  }
-
-  @Test
-  public void restoresSagaToCompensationStateByPlayingAllEvents() {
-    addExtraChildToNode1();
-
-    Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
-        envelope(new TransactionStartedEvent(sagaId, request1)),
-        envelope(new TransactionEndedEvent(sagaId, request1)),
-        envelope(new TransactionStartedEvent(sagaId, request2)),
-        envelope(new TransactionEndedEvent(sagaId, request2)),
-        envelope(new TransactionStartedEvent(sagaId, request3)),
-        envelope(new TransactionEndedEvent(sagaId, request3)),
-        envelope(new TransactionCompensatedEvent(sagaId, request2))
-    );
-
-    eventStore.populate(events);
-    saga.play();
-
-    saga.run();
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction3, TransactionEndedEvent.class),
-        eventWith(sagaId, compensation2, TransactionCompensatedEvent.class),
-        eventWith(sagaId, compensation3, TransactionCompensatedEvent.class),
-        eventWith(sagaId, compensation1, TransactionCompensatedEvent.class),
-        eventWith(sagaId, SAGA_START_COMPENSATION, SagaEndedEvent.class)
-    ));
-
-    verify(transaction1, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction3, never()).send(anyString(), any(SagaResponse.class));
-
-    verify(compensation1).send(request1.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-    verify(compensation3).send(request3.serviceName());
-  }
-
-  @Test
-  public void restoresPartialCompensationByPlayingAllEvents() {
-    addExtraChildToNode1();
-
-    Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
-        envelope(new TransactionStartedEvent(sagaId, request1)),
-        envelope(new TransactionEndedEvent(sagaId, request1)),
-        envelope(new TransactionStartedEvent(sagaId, request2)),
-        envelope(new TransactionEndedEvent(sagaId, request2)),
-        envelope(new TransactionStartedEvent(sagaId, request3)),
-        envelope(new TransactionAbortedEvent(sagaId, request3, exception)),
-        envelope(new TransactionCompensatedEvent(sagaId, request2))
-    );
-
-    eventStore.populate(events);
-    saga.play();
-
-    saga.run();
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction3, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction3, TransactionAbortedEvent.class),
-        eventWith(sagaId, compensation2, TransactionCompensatedEvent.class),
-        eventWith(sagaId, compensation1, TransactionCompensatedEvent.class),
-        eventWith(sagaId, SAGA_START_COMPENSATION, SagaEndedEvent.class)
-    ));
-
-    verify(transaction1, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction3, never()).send(anyString(), any(SagaResponse.class));
-
-    verify(compensation1).send(request1.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-    verify(compensation3, never()).send(request3.serviceName());
-  }
-
-  @Test
-  public void restoresSagaToEndStateByPlayingAllEvents() {
-    Iterable<EventEnvelope> events = asList(
-        envelope(new SagaStartedEvent(sagaId, requestJson, NoOpSagaRequest.SAGA_START_REQUEST)),
-        envelope(new TransactionStartedEvent(sagaId, request1)),
-        envelope(new TransactionEndedEvent(sagaId, request1)),
-        envelope(new TransactionStartedEvent(sagaId, request2)),
-        envelope(new TransactionEndedEvent(sagaId, request2))
-    );
-
-    eventStore.populate(events);
-    saga.play();
-
-    saga.run();
-    assertThat(eventStore, contains(
-        eventWith(sagaId, SAGA_START_TRANSACTION, SagaStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction1, TransactionEndedEvent.class),
-        eventWith(sagaId, transaction2, TransactionStartedEvent.class),
-        eventWith(sagaId, transaction2, TransactionEndedEvent.class),
-        eventWith(sagaId, SAGA_END_TRANSACTION, SagaEndedEvent.class)
-    ));
-
-    verify(transaction1, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
-
-    verify(compensation1, never()).send(request1.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-  }
-
-  @Test
-  public void failFastIfSagaLogIsDown() throws Exception {
-    SagaLog sagaLog = mock(SagaLog.class);
-    tasks.put(SAGA_START_TASK, new SagaStartTask(sagaId, requestJson, sagaLog));
-
-    doThrow(RuntimeException.class).when(sagaLog).offer(any(SagaStartedEvent.class));
-
-    try {
-      saga.run();
-      expectFailing(SagaStartFailedException.class);
-    } catch (SagaStartFailedException e) {
-      assertThat(e.getMessage(), is("Failed to persist SagaStartedEvent for " + requestJson));
-    }
-
-    verify(sagaLog).offer(any(SagaStartedEvent.class));
-    verify(transaction1, never()).send(anyString(), any(SagaResponse.class));
-    verify(transaction2, never()).send(anyString(), any(SagaResponse.class));
-
-    verify(compensation1, never()).send(request1.serviceName());
-    verify(compensation2, never()).send(request2.serviceName());
-  }
-
-  private Answer<SagaResponse> withAnswer(final Callable<SagaResponse> callable) {
-    return new Answer<SagaResponse>() {
-      @Override
-      public SagaResponse answer(InvocationOnMock invocation) throws Throwable {
-        return callable.call();
-      }
-    };
-  }
-
-  private EventEnvelope envelope(SagaEvent event) {
-    return new EventEnvelope(idGenerator.nextId(), event);
-  }
-
-  private void addExtraChildToNode1() {
-    node1.addChild(node3);
-    node3.addChild(leaf);
-  }
-
-  private SagaRequest request(String requestId,
-      String serviceName,
-      Transaction transaction,
-      Compensation compensation,
-      String... parentIds) {
-
-    return new SagaRequestImpl(requestId, serviceName, TYPE_REST, transaction, compensation, parentIds);
-  }
-
-  private SagaRequest request(String requestId,
-      String serviceName,
-      Transaction transaction,
-      Compensation compensation,
-      Fallback fallback) {
-
-    return new SagaRequestImpl(requestId, serviceName, TYPE_REST, transaction, compensation, fallback);
-  }
-
-  private HashSet<String> setOf(String requestId) {
-    return new HashSet<>(singletonList(requestId));
-  }
-
-  private RequestProcessTask requestProcessTask(RecoveryPolicy recoveryPolicy) {
-    return new RequestProcessTask(sagaId, sagaLog, recoveryPolicy, new FallbackPolicy(100));
-  }
-}
diff --git a/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaStartTaskTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaStartTaskTest.java
deleted file mode 100644
index b1d0c4e..0000000
--- a/saga-core/src/test/java/org/apache/servicecomb/saga/core/SagaStartTaskTest.java
+++ /dev/null
@@ -1,64 +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.core;
-
-import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.startsWith;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.mock;
-
-import org.junit.Test;
-import org.mockito.ArgumentCaptor;
-
-public class SagaStartTaskTest {
-  private final SagaRequest request = mock(SagaRequest.class);
-  private final SagaLog sagaLog = mock(SagaLog.class);
-
-  private final String sagaId = "0";
-  private final String requestJson = null;
-  private final SagaStartTask sagaStartTask = new SagaStartTask(sagaId, requestJson, sagaLog);
-
-  @Test
-  public void emptyResponseOnSuccessfulEventPersistence() throws Exception {
-    ArgumentCaptor<SagaStartedEvent> argumentCaptor = ArgumentCaptor.forClass(SagaStartedEvent.class);
-    doNothing().when(sagaLog).offer(argumentCaptor.capture());
-
-    sagaStartTask.commit(request, SagaResponse.EMPTY_RESPONSE);
-
-    SagaStartedEvent event = argumentCaptor.getValue();
-    assertThat(event.sagaId, is(sagaId));
-    assertThat(event.json(null), is(requestJson));
-    assertThat(event.payload(), is(request));
-  }
-
-  @Test
-  public void blowsUpWhenEventIsNotPersisted() {
-    doThrow(RuntimeException.class).when(sagaLog).offer(any(SagaStartedEvent.class));
-
-    try {
-      sagaStartTask.commit(request, SagaResponse.EMPTY_RESPONSE);
-      expectFailing(SagaStartFailedException.class);
-    } catch (SagaStartFailedException e) {
-      assertThat(e.getMessage(), startsWith("Failed to persist SagaStartedEvent"));
-    }
-  }
-}
diff --git a/saga-core/src/test/java/org/apache/servicecomb/saga/core/TransactionImpl.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/TransactionImpl.java
deleted file mode 100644
index b0d4a35..0000000
--- a/saga-core/src/test/java/org/apache/servicecomb/saga/core/TransactionImpl.java
+++ /dev/null
@@ -1,32 +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.core;
-
-import java.util.Map;
-
-public class TransactionImpl extends RestOperation implements Transaction {
-
-  public TransactionImpl(String path, String method, Map<String, Map<String, String>> params) {
-    super(path, method, params);
-  }
-
-  @Override
-  public int retries() {
-    return INFINITE_RETRY;
-  }
-}
diff --git a/saga-core/src/test/java/org/apache/servicecomb/saga/core/dag/DirectedAcyclicGraphTraversalTest.java b/saga-core/src/test/java/org/apache/servicecomb/saga/core/dag/DirectedAcyclicGraphTraversalTest.java
deleted file mode 100644
index 3c54fcf..0000000
--- a/saga-core/src/test/java/org/apache/servicecomb/saga/core/dag/DirectedAcyclicGraphTraversalTest.java
+++ /dev/null
@@ -1,102 +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.core.dag;
-
-import static java.util.Arrays.asList;
-import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
-import static org.junit.Assert.assertThat;
-
-import java.util.Collection;
-import org.junit.Before;
-import org.junit.Test;
-
-public class DirectedAcyclicGraphTraversalTest {
-
-  private final Node<String> root = new Node<>(0, "i don't care");
-  private final Node<String> node1 = new Node<>(1, "i don't care");
-  private final Node<String> node2 = new Node<>(2, "i don't care");
-  private final Node<String> node3 = new Node<>(3, "i don't care");
-  private final Node<String> node4 = new Node<>(4, "i don't care");
-  private final Node<String> node5 = new Node<>(5, "i don't care");
-  private final Node<String> leaf = new Node<>(6, "i don't care");
-
-  private final SingleLeafDirectedAcyclicGraph<String> dag = new SingleLeafDirectedAcyclicGraph<>(root, leaf);
-
-  //        0
-  //       / \
-  //      1   \
-  //     / \   \
-  //    3   4   2
-  //     \ /   /
-  //      5   /
-  //       \ /
-  //        6
-  @Before
-  public void setUp() throws Exception {
-    root.addChildren(asList(node1, node2));
-    node1.addChildren(asList(node3, node4));
-    node3.addChild(node5);
-    node4.addChild(node5);
-    node5.addChild(leaf);
-    node2.addChild(leaf);
-  }
-
-  @Test
-  public void traverseGraphOneLevelPerStepFromRoot() {
-    Traveller<String> traveller = new ByLevelTraveller<>(dag, new FromRootTraversalDirection<String>());
-
-    Collection<Node<String>> nodes = traveller.nodes();
-
-    traveller.next();
-    assertThat(nodes, contains(root));
-
-    traveller.next();
-    assertThat(nodes, contains(root, node1, node2));
-
-    traveller.next();
-    assertThat(nodes, contains(root, node1, node2, node3, node4));
-
-    traveller.next();
-    assertThat(nodes, contains(root, node1, node2, node3, node4, node5));
-
-    traveller.next();
-    assertThat(nodes, contains(root, node1, node2, node3, node4, node5, leaf));
-  }
-
-  @Test
-  public void traverseGraphOneLevelPerStepFromLeaf() {
-    Traveller<String> traveller = new ByLevelTraveller<>(dag, new FromLeafTraversalDirection<String>());
-
-    Collection<Node<String>> nodes = traveller.nodes();
-
-    traveller.next();
-    assertThat(nodes, contains(leaf));
-
-    traveller.next();
-    assertThat(nodes, contains(leaf, node2, node5));
... 10920 lines suppressed ...


[servicecomb-pack] 02/05: SCB-976 Updated the pom file for removing modules

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

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

commit 825046bb49ac7856181aeef23f8d051763f3c103
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Fri Dec 14 10:43:06 2018 +0800

    SCB-976 Updated the pom file for removing modules
---
 integration-tests/coverage-aggregate/pom.xml | 22 ++++++-------------
 pom.xml                                      | 33 +---------------------------
 saga-demo/pom.xml                            |  2 --
 3 files changed, 8 insertions(+), 49 deletions(-)

diff --git a/integration-tests/coverage-aggregate/pom.xml b/integration-tests/coverage-aggregate/pom.xml
index ef4df2e..7169e95 100644
--- a/integration-tests/coverage-aggregate/pom.xml
+++ b/integration-tests/coverage-aggregate/pom.xml
@@ -31,39 +31,31 @@
   <dependencies>
     <dependency>
       <groupId>org.apache.servicecomb.saga</groupId>
-      <artifactId>saga-core</artifactId>
+      <artifactId>omega-context</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.servicecomb.saga</groupId>
-      <artifactId>saga-format</artifactId>
+      <artifactId>omega-transaction</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.servicecomb.saga</groupId>
-      <artifactId>saga-spring</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.servicecomb.saga.transports</groupId>
-      <artifactId>transport-httpclient</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.servicecomb.saga.discovery</groupId>
-      <artifactId>saga-discovery-servicecenter</artifactId>
+      <artifactId>omega-spring-tx</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.servicecomb.saga</groupId>
-      <artifactId>omega-context</artifactId>
+      <artifactId>omega-transport-resttemplate</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.servicecomb.saga</groupId>
-      <artifactId>omega-transaction</artifactId>
+      <artifactId>omega-transport-dubbo</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.servicecomb.saga</groupId>
-      <artifactId>omega-spring-tx</artifactId>
+      <artifactId>omega-transport-feign</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.servicecomb.saga</groupId>
-      <artifactId>omega-transport-resttemplate</artifactId>
+      <artifactId>omega-transport-servicecomb</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.servicecomb.saga</groupId>
diff --git a/pom.xml b/pom.xml
index f1eef13..d5b59bc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,13 +31,7 @@
   <version>0.3.0-SNAPSHOT</version>
 
   <modules>
-    <module>saga-core</module>
-    <module>saga-core-akka</module>
-    <module>transports</module>
-    <module>saga-spring</module>
     <module>docker-build-config</module>
-    <module>saga-format</module>
-    <module>saga-discovery</module>
     <module>saga-web</module>
     <module>omega</module>
     <module>alpha</module>
@@ -247,32 +241,6 @@
         <version>0.3.0-SNAPSHOT</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
-        <artifactId>saga-core</artifactId>
-        <version>0.3.0-SNAPSHOT</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
-        <artifactId>saga-core-akka</artifactId>
-        <version>0.3.0-SNAPSHOT</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
-        <artifactId>saga-core</artifactId>
-        <type>test-jar</type>
-        <version>0.3.0-SNAPSHOT</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
-        <artifactId>saga-format</artifactId>
-        <version>0.3.0-SNAPSHOT</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
-        <artifactId>saga-spring</artifactId>
-        <version>0.3.0-SNAPSHOT</version>
-      </dependency>
-      <dependency>
         <groupId>org.apache.servicecomb.saga.transports</groupId>
         <artifactId>transport-httpclient</artifactId>
         <version>0.3.0-SNAPSHOT</version>
@@ -357,6 +325,7 @@
         <artifactId>pack-common</artifactId>
         <version>0.3.0-SNAPSHOT</version>
       </dependency>
+      <!-- TODO rename this artifact -->
       <dependency>
        <groupId>org.apache.servicecomb.saga</groupId>
        <artifactId>saga-persistence-jpa</artifactId>
diff --git a/saga-demo/pom.xml b/saga-demo/pom.xml
index 614dfa6..d2c0db3 100644
--- a/saga-demo/pom.xml
+++ b/saga-demo/pom.xml
@@ -33,8 +33,6 @@
     <module>saga-dubbo-demo</module>
     <module>saga-spring-demo</module>
     <module>saga-servicecomb-demo</module>
-    <module>dependency-free-transaction-demo</module>
-    <module>conditional-transaction-demo</module>
     <module>tcc-spring-demo</module>
   </modules>
 


[servicecomb-pack] 03/05: SCB-976 Updated the group id to org.apache.servicecomb.pack

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

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

commit 237fb259397593195fb95d4bca60d121325a70a5
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Fri Dec 14 11:05:35 2018 +0800

    SCB-976 Updated the group id to org.apache.servicecomb.pack
---
 alpha/alpha-core/pom.xml                           |  6 +--
 alpha/alpha-server/pom.xml                         | 12 ++---
 alpha/pom.xml                                      |  4 +-
 docker-build-config/pom.xml                        |  4 +-
 integration-tests/coverage-aggregate/pom.xml       | 28 ++++++------
 integration-tests/pack-tests/pom.xml               | 14 +++---
 integration-tests/pom.xml                          |  6 +--
 omega/omega-connector/omega-connector-grpc/pom.xml |  8 ++--
 omega/omega-connector/pom.xml                      |  4 +-
 omega/omega-context/pom.xml                        |  4 +-
 omega/omega-format/pom.xml                         |  6 +--
 omega/omega-spring-starter/pom.xml                 | 10 ++---
 omega/omega-spring-tx/pom.xml                      | 10 ++---
 omega/omega-transaction/pom.xml                    |  8 ++--
 .../omega-transport/omega-transport-dubbo/pom.xml  |  2 +-
 .../omega-transport/omega-transport-feign/pom.xml  |  2 +-
 .../omega-transport-resttemplate/pom.xml           |  4 +-
 .../omega-transport-servicecomb/pom.xml            |  2 +-
 omega/omega-transport/pom.xml                      |  8 ++--
 omega/pom.xml                                      |  8 ++--
 pack-common/pom.xml                                |  4 +-
 pack-contracts/pack-contract-grpc/pom.xml          |  4 +-
 pack-contracts/pom.xml                             |  4 +-
 pom.xml                                            | 51 ++++++++--------------
 saga-demo/pom.xml                                  |  6 +--
 saga-demo/saga-dubbo-demo/pom.xml                  | 10 ++---
 saga-demo/saga-dubbo-demo/service-api/pom.xml      |  4 +-
 saga-demo/saga-dubbo-demo/service-pub/pom.xml      |  4 +-
 saga-demo/saga-dubbo-demo/servicea/pom.xml         | 10 ++---
 saga-demo/saga-dubbo-demo/serviceb/pom.xml         |  8 ++--
 saga-demo/saga-dubbo-demo/servicec/pom.xml         |  4 +-
 saga-demo/saga-servicecomb-demo/pom.xml            |  4 +-
 .../saga-servicecomb-demo/scb-booking/pom.xml      |  4 +-
 saga-demo/saga-servicecomb-demo/scb-car/pom.xml    |  4 +-
 saga-demo/saga-servicecomb-demo/scb-hotel/pom.xml  |  4 +-
 saga-demo/saga-spring-demo/booking/pom.xml         |  8 ++--
 saga-demo/saga-spring-demo/car/pom.xml             |  8 ++--
 saga-demo/saga-spring-demo/hotel/pom.xml           |  8 ++--
 saga-demo/saga-spring-demo/pom.xml                 |  2 +-
 saga-demo/tcc-spring-demo/inventory/pom.xml        |  2 +-
 saga-demo/tcc-spring-demo/ordering/pom.xml         |  2 +-
 saga-demo/tcc-spring-demo/payment/pom.xml          |  2 +-
 saga-demo/tcc-spring-demo/pom.xml                  |  2 +-
 saga-distribution/pom.xml                          |  2 +-
 saga-persistence/pom.xml                           |  2 +-
 saga-persistence/saga-persistence-jpa/pom.xml      |  2 +-
 saga-web/pom.xml                                   |  4 +-
 47 files changed, 152 insertions(+), 167 deletions(-)

diff --git a/alpha/alpha-core/pom.xml b/alpha/alpha-core/pom.xml
index 57c631f..bc154bb 100644
--- a/alpha/alpha-core/pom.xml
+++ b/alpha/alpha-core/pom.xml
@@ -21,17 +21,17 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>alpha</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>alpha-core</artifactId>
-  <name>Saga::Alpha::Core</name>
+  <name>Pack::Alpha::Core</name>
   
   <dependencies>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>pack-common</artifactId>
     </dependency>
     <dependency>
diff --git a/alpha/alpha-server/pom.xml b/alpha/alpha-server/pom.xml
index 2a6856a..eb1b49a 100644
--- a/alpha/alpha-server/pom.xml
+++ b/alpha/alpha-server/pom.xml
@@ -21,13 +21,13 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>alpha</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>alpha-server</artifactId>
-  <name>Saga::Alpha::Server</name>
+  <name>Pack::Alpha::Server</name>
 
   <dependencyManagement>
     <dependencies>
@@ -63,15 +63,15 @@
       <artifactId>grpc-netty</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>pack-contract-grpc</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>alpha-core</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>pack-common</artifactId>
     </dependency>
     <dependency>
@@ -89,7 +89,7 @@
       <artifactId>spring-boot-starter-log4j2</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>saga-persistence-jpa</artifactId>
     </dependency>
     <dependency>
diff --git a/alpha/pom.xml b/alpha/pom.xml
index 4e58d97..57d2006 100644
--- a/alpha/pom.xml
+++ b/alpha/pom.xml
@@ -21,13 +21,13 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>saga</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>alpha</artifactId>
-  <name>Saga::Alpha</name>
+  <name>Pack::Alpha</name>
 
   <packaging>pom</packaging>
   <modules>
diff --git a/docker-build-config/pom.xml b/docker-build-config/pom.xml
index 6395fd8..c14e005 100644
--- a/docker-build-config/pom.xml
+++ b/docker-build-config/pom.xml
@@ -19,13 +19,13 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>saga</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>docker-build-config</artifactId>
-  <name>Saga::Docker Build Config</name>
+  <name>Pack::Docker Build Config</name>
 
   <packaging>pom</packaging>
 
diff --git a/integration-tests/coverage-aggregate/pom.xml b/integration-tests/coverage-aggregate/pom.xml
index 7169e95..8d92958 100644
--- a/integration-tests/coverage-aggregate/pom.xml
+++ b/integration-tests/coverage-aggregate/pom.xml
@@ -18,63 +18,63 @@
 
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
-    <groupId>org.apache.servicecomb.saga.tests</groupId>
+    <groupId>org.apache.servicecomb.pack.tests</groupId>
     <artifactId>integration-tests</artifactId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>coverage-aggregate</artifactId>
-  <name>Saga::Integration Tests::Coverage Aggregate</name>
+  <name>Pack::Integration Tests::Coverage Aggregate</name>
 
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-context</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-transaction</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-spring-tx</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-transport-resttemplate</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-transport-dubbo</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-transport-feign</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-transport-servicecomb</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-format</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-connector-grpc</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>alpha-core</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>alpha-server</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga.tests</groupId>
+      <groupId>org.apache.servicecomb.pack.tests</groupId>
       <artifactId>pack-tests</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
diff --git a/integration-tests/pack-tests/pom.xml b/integration-tests/pack-tests/pom.xml
index dcb3678..f94d2f9 100644
--- a/integration-tests/pack-tests/pom.xml
+++ b/integration-tests/pack-tests/pom.xml
@@ -21,13 +21,13 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>integration-tests</artifactId>
-    <groupId>org.apache.servicecomb.saga.tests</groupId>
+    <groupId>org.apache.servicecomb.pack.tests</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>pack-tests</artifactId>
-  <name>Saga::Integration Tests::Pack Tests</name>
+  <name>Pack::Integration Tests::Pack Tests</name>
 
 
   <dependencyManagement>
@@ -56,19 +56,19 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>pack-common</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>alpha-core</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-spring-starter</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-transport-resttemplate</artifactId>
     </dependency>
     <dependency>
@@ -107,7 +107,7 @@
       <scope>runtime</scope>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>saga-persistence-jpa</artifactId>
       <scope>test</scope>
     </dependency>
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index 4253779..e790890 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -19,14 +19,14 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>saga</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
-  <groupId>org.apache.servicecomb.saga.tests</groupId>
+  <groupId>org.apache.servicecomb.pack.tests</groupId>
   <artifactId>integration-tests</artifactId>
-  <name>Saga::Integration Tests</name>
+  <name>Pack::Integration Tests</name>
 
   <packaging>pom</packaging>
   <modules>
diff --git a/omega/omega-connector/omega-connector-grpc/pom.xml b/omega/omega-connector/omega-connector-grpc/pom.xml
index f4d7bf1..b211d9b 100644
--- a/omega/omega-connector/omega-connector-grpc/pom.xml
+++ b/omega/omega-connector/omega-connector-grpc/pom.xml
@@ -23,13 +23,13 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>omega-connector</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>omega-connector-grpc</artifactId>
-  <name>Saga::Omega::Connector::GRPC</name>
+  <name>Pack::Omega::Connector::GRPC</name>
 
   <dependencies>
     <dependency>
@@ -45,11 +45,11 @@
       <artifactId>netty-tcnative-boringssl-static</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-transaction</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>pack-contract-grpc</artifactId>
     </dependency>
     <dependency>
diff --git a/omega/omega-connector/pom.xml b/omega/omega-connector/pom.xml
index cc2ed73..4edf0fb 100644
--- a/omega/omega-connector/pom.xml
+++ b/omega/omega-connector/pom.xml
@@ -21,13 +21,13 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>omega</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>omega-connector</artifactId>
-  <name>Saga::Omega::Connector</name>
+  <name>Pack::Omega::Connector</name>
   <packaging>pom</packaging>
   <modules>
     <module>omega-connector-grpc</module>
diff --git a/omega/omega-context/pom.xml b/omega/omega-context/pom.xml
index 654295c..c595c99 100644
--- a/omega/omega-context/pom.xml
+++ b/omega/omega-context/pom.xml
@@ -21,13 +21,13 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>omega</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>omega-context</artifactId>
-  <name>Saga::Omega::Context</name>
+  <name>Pack::Omega::Context</name>
   
   <dependencies>
     <dependency>
diff --git a/omega/omega-format/pom.xml b/omega/omega-format/pom.xml
index c4be4b2..efd215a 100644
--- a/omega/omega-format/pom.xml
+++ b/omega/omega-format/pom.xml
@@ -21,17 +21,17 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>omega</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>omega-format</artifactId>
-  <name>Saga::Omega::Format</name>
+  <name>Pack::Omega::Format</name>
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-transaction</artifactId>
     </dependency>
     <dependency>
diff --git a/omega/omega-spring-starter/pom.xml b/omega/omega-spring-starter/pom.xml
index 7baae84..49279fa 100644
--- a/omega/omega-spring-starter/pom.xml
+++ b/omega/omega-spring-starter/pom.xml
@@ -21,21 +21,21 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>omega</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>omega-spring-starter</artifactId>
-  <name>Saga::Omega::Spring Starter</name>
+  <name>Pack::Omega::Spring Starter</name>
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-spring-tx</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-format</artifactId>
     </dependency>
     <dependency>
@@ -47,7 +47,7 @@
       <artifactId>grpc-stub</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-connector-grpc</artifactId>
     </dependency>
   </dependencies>
diff --git a/omega/omega-spring-tx/pom.xml b/omega/omega-spring-tx/pom.xml
index ec6c020..fb51024 100644
--- a/omega/omega-spring-tx/pom.xml
+++ b/omega/omega-spring-tx/pom.xml
@@ -21,13 +21,13 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>omega</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>omega-spring-tx</artifactId>
-  <name>Saga::Omega::Spring TX</name>
+  <name>Pack::Omega::Spring TX</name>
   <dependencies>
     <dependency>
       <groupId>org.springframework.boot</groupId>
@@ -40,11 +40,11 @@
       </exclusions>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-context</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-transaction</artifactId>
     </dependency>
 
@@ -75,7 +75,7 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>saga-persistence-jpa</artifactId>
       <scope>test</scope>
     </dependency>
diff --git a/omega/omega-transaction/pom.xml b/omega/omega-transaction/pom.xml
index 8b487cd..e9f357f 100644
--- a/omega/omega-transaction/pom.xml
+++ b/omega/omega-transaction/pom.xml
@@ -21,21 +21,21 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>omega</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>omega-transaction</artifactId>
-  <name>Saga::Omega::Transaction</name>
+  <name>Pack::Omega::Transaction</name>
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>pack-common</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-context</artifactId>
     </dependency>
     <dependency>
diff --git a/omega/omega-transport/omega-transport-dubbo/pom.xml b/omega/omega-transport/omega-transport-dubbo/pom.xml
index ec9522e..09018ca 100644
--- a/omega/omega-transport/omega-transport-dubbo/pom.xml
+++ b/omega/omega-transport/omega-transport-dubbo/pom.xml
@@ -22,7 +22,7 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
         <artifactId>omega-transport</artifactId>
-        <groupId>org.apache.servicecomb.saga</groupId>
+        <groupId>org.apache.servicecomb.pack</groupId>
         <version>0.3.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
diff --git a/omega/omega-transport/omega-transport-feign/pom.xml b/omega/omega-transport/omega-transport-feign/pom.xml
index fd9b050..d8d3f7b 100644
--- a/omega/omega-transport/omega-transport-feign/pom.xml
+++ b/omega/omega-transport/omega-transport-feign/pom.xml
@@ -22,7 +22,7 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
         <artifactId>omega-transport</artifactId>
-        <groupId>org.apache.servicecomb.saga</groupId>
+        <groupId>org.apache.servicecomb.pack</groupId>
         <version>0.3.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
diff --git a/omega/omega-transport/omega-transport-resttemplate/pom.xml b/omega/omega-transport/omega-transport-resttemplate/pom.xml
index d9e348a..7edfad7 100644
--- a/omega/omega-transport/omega-transport-resttemplate/pom.xml
+++ b/omega/omega-transport/omega-transport-resttemplate/pom.xml
@@ -22,13 +22,13 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>omega-transport</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>omega-transport-resttemplate</artifactId>
-  <name>Saga::Omega::Transport::Rest Template</name>
+  <name>Pack::Omega::Transport::Rest Template</name>
 
   <dependencies>
     <dependency>
diff --git a/omega/omega-transport/omega-transport-servicecomb/pom.xml b/omega/omega-transport/omega-transport-servicecomb/pom.xml
index 951de05..835e96f 100644
--- a/omega/omega-transport/omega-transport-servicecomb/pom.xml
+++ b/omega/omega-transport/omega-transport-servicecomb/pom.xml
@@ -21,7 +21,7 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>omega-transport</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/omega/omega-transport/pom.xml b/omega/omega-transport/pom.xml
index f3626f3..6d1b288 100644
--- a/omega/omega-transport/pom.xml
+++ b/omega/omega-transport/pom.xml
@@ -22,13 +22,13 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>omega</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>omega-transport</artifactId>
-  <name>Saga::Omega::Transport</name>
+  <name>Pack::Omega::Transport</name>
 
   <packaging>pom</packaging>
   <modules>
@@ -40,11 +40,11 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-context</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-transaction</artifactId>
     </dependency>
 
diff --git a/omega/pom.xml b/omega/pom.xml
index bc431b5..abfcd09 100644
--- a/omega/pom.xml
+++ b/omega/pom.xml
@@ -21,13 +21,13 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>saga</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>omega</artifactId>
-  <name>Saga::Omega</name>
+  <name>Pack::Omega</name>
 
   <packaging>pom</packaging>
   <modules>
@@ -62,12 +62,12 @@
         <scope>import</scope>
       </dependency>
       <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
+        <groupId>org.apache.servicecomb.pack</groupId>
         <artifactId>omega-context</artifactId>
         <version>0.3.0-SNAPSHOT</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
+        <groupId>org.apache.servicecomb.pack</groupId>
         <artifactId>omega-transaction</artifactId>
         <version>0.3.0-SNAPSHOT</version>
       </dependency>
diff --git a/pack-common/pom.xml b/pack-common/pom.xml
index c32d7a2..2cf1625 100644
--- a/pack-common/pom.xml
+++ b/pack-common/pom.xml
@@ -21,12 +21,12 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>saga</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>pack-common</artifactId>
-  <name>Saga::Pack Common</name>
+  <name>Pack::Pack Common</name>
 
 </project>
diff --git a/pack-contracts/pack-contract-grpc/pom.xml b/pack-contracts/pack-contract-grpc/pom.xml
index f7b794b..7c805bb 100644
--- a/pack-contracts/pack-contract-grpc/pom.xml
+++ b/pack-contracts/pack-contract-grpc/pom.xml
@@ -24,13 +24,13 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>pack-contracts</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>pack-contract-grpc</artifactId>
-  <name>Saga::Pack Contracts::Grpc</name>
+  <name>Pack::Pack Contracts::Grpc</name>
 
   <dependencies>
     <dependency>
diff --git a/pack-contracts/pom.xml b/pack-contracts/pom.xml
index ed2a5d5..4d6d2da 100644
--- a/pack-contracts/pom.xml
+++ b/pack-contracts/pom.xml
@@ -21,13 +21,13 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>saga</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>pack-contracts</artifactId>
-  <name>Saga::Pack Contracts</name>
+  <name>Pack::Pack Contracts</name>
 
   <packaging>pom</packaging>
   <modules>
diff --git a/pom.xml b/pom.xml
index d5b59bc..b10dc2c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,7 +25,7 @@
     <version>18</version>
   </parent>
 
-  <groupId>org.apache.servicecomb.saga</groupId>
+  <groupId>org.apache.servicecomb.pack</groupId>
   <artifactId>saga</artifactId>
   <packaging>pom</packaging>
   <version>0.3.0-SNAPSHOT</version>
@@ -236,98 +236,83 @@
         <version>3.3.2.Final</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
+        <groupId>org.apache.servicecomb.pack</groupId>
         <artifactId>omega-transport-feign</artifactId>
         <version>0.3.0-SNAPSHOT</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.servicecomb.saga.transports</groupId>
+        <groupId>org.apache.servicecomb.pack.transports</groupId>
         <artifactId>transport-httpclient</artifactId>
         <version>0.3.0-SNAPSHOT</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.servicecomb.saga.transports</groupId>
-        <artifactId>transport-httpclient-spring</artifactId>
-        <version>0.3.0-SNAPSHOT</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.servicecomb.saga.transports</groupId>
-        <artifactId>transport-resttemplate</artifactId>
-        <version>0.3.0-SNAPSHOT</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.servicecomb.saga.discovery</groupId>
-        <artifactId>saga-discovery-servicecenter</artifactId>
-        <version>0.3.0-SNAPSHOT</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
+        <groupId>org.apache.servicecomb.pack</groupId>
         <artifactId>omega-context</artifactId>
         <version>0.3.0-SNAPSHOT</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
+        <groupId>org.apache.servicecomb.pack</groupId>
         <artifactId>omega-transaction</artifactId>
         <version>0.3.0-SNAPSHOT</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
+        <groupId>org.apache.servicecomb.pack</groupId>
         <artifactId>omega-spring-tx</artifactId>
         <version>0.3.0-SNAPSHOT</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
+        <groupId>org.apache.servicecomb.pack</groupId>
         <artifactId>omega-transport-resttemplate</artifactId>
         <version>0.3.0-SNAPSHOT</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
+        <groupId>org.apache.servicecomb.pack</groupId>
         <artifactId>omega-transport-dubbo</artifactId>
         <version>0.3.0-SNAPSHOT</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
+        <groupId>org.apache.servicecomb.pack</groupId>
         <artifactId>omega-transport-servicecomb</artifactId>
         <version>0.3.0-SNAPSHOT</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
+        <groupId>org.apache.servicecomb.pack</groupId>
         <artifactId>omega-connector-grpc</artifactId>
         <version>0.3.0-SNAPSHOT</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
+        <groupId>org.apache.servicecomb.pack</groupId>
         <artifactId>omega-spring-starter</artifactId>
         <version>0.3.0-SNAPSHOT</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
+        <groupId>org.apache.servicecomb.pack</groupId>
         <artifactId>omega-format</artifactId>
         <version>0.3.0-SNAPSHOT</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
+        <groupId>org.apache.servicecomb.pack</groupId>
         <artifactId>alpha-core</artifactId>
         <version>0.3.0-SNAPSHOT</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
+        <groupId>org.apache.servicecomb.pack</groupId>
         <artifactId>alpha-server</artifactId>
         <version>0.3.0-SNAPSHOT</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
+        <groupId>org.apache.servicecomb.pack</groupId>
         <artifactId>pack-contract-grpc</artifactId>
         <version>0.3.0-SNAPSHOT</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.servicecomb.saga</groupId>
+        <groupId>org.apache.servicecomb.pack</groupId>
         <artifactId>pack-common</artifactId>
         <version>0.3.0-SNAPSHOT</version>
       </dependency>
       <!-- TODO rename this artifact -->
       <dependency>
-       <groupId>org.apache.servicecomb.saga</groupId>
+       <groupId>org.apache.servicecomb.pack</groupId>
        <artifactId>saga-persistence-jpa</artifactId>
        <version>0.3.0-SNAPSHOT</version>
        </dependency>
@@ -622,7 +607,7 @@
           <configuration>
             <mixins>
               <mixin>
-                <groupId>org.apache.servicecomb.saga</groupId>
+                <groupId>org.apache.servicecomb.pack</groupId>
                 <artifactId>docker-build-config</artifactId>
                 <version>${project.version}</version>
               </mixin>
diff --git a/saga-demo/pom.xml b/saga-demo/pom.xml
index d2c0db3..556201b 100644
--- a/saga-demo/pom.xml
+++ b/saga-demo/pom.xml
@@ -19,14 +19,14 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>saga</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
-  <groupId>org.apache.servicecomb.saga.demo</groupId>
+  <groupId>org.apache.servicecomb.pack.demo</groupId>
   <artifactId>saga-demo</artifactId>
-  <name>Saga::Demo</name>
+  <name>Pack::Demo</name>
 
   <packaging>pom</packaging>
   <modules>
diff --git a/saga-demo/saga-dubbo-demo/pom.xml b/saga-demo/saga-dubbo-demo/pom.xml
index 3ba7d0c..ef4c783 100644
--- a/saga-demo/saga-dubbo-demo/pom.xml
+++ b/saga-demo/saga-dubbo-demo/pom.xml
@@ -20,13 +20,13 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>saga-demo</artifactId>
-    <groupId>org.apache.servicecomb.saga.demo</groupId>
+    <groupId>org.apache.servicecomb.pack.demo</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>saga-dubbo-demo</artifactId>
-  <name>Saga::Demo::Dubbo-Demo</name>
+  <name>Pack::Demo::Dubbo-Demo</name>
   <packaging>pom</packaging>
 
   <properties>
@@ -60,7 +60,7 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-transport-dubbo</artifactId>
       <version>${saga.version}</version>
     </dependency>
@@ -69,7 +69,7 @@
       <artifactId>spring-jdbc</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-spring-starter</artifactId>
     </dependency>
     <dependency>
@@ -81,7 +81,7 @@
       <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-transport-resttemplate</artifactId>
     </dependency>
     <dependency>
diff --git a/saga-demo/saga-dubbo-demo/service-api/pom.xml b/saga-demo/saga-dubbo-demo/service-api/pom.xml
index 4c4ceac..805422b 100644
--- a/saga-demo/saga-dubbo-demo/service-api/pom.xml
+++ b/saga-demo/saga-dubbo-demo/service-api/pom.xml
@@ -35,6 +35,6 @@
   </parent>
 
   <artifactId>service-api</artifactId>
-  <name>Saga::Demo::Dubbo-Demo::ServiceAPI</name>
+  <name>Pack::Demo::Dubbo-Demo::ServiceAPI</name>
 
-</project>
\ No newline at end of file
+</project>
diff --git a/saga-demo/saga-dubbo-demo/service-pub/pom.xml b/saga-demo/saga-dubbo-demo/service-pub/pom.xml
index 2c4dea9..b8ebb92 100644
--- a/saga-demo/saga-dubbo-demo/service-pub/pom.xml
+++ b/saga-demo/saga-dubbo-demo/service-pub/pom.xml
@@ -26,6 +26,6 @@
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>service-pub</artifactId>
-  <name>Saga::Demo::Dubbo-Demo::ServicePub</name>
+  <name>Pack::Demo::Dubbo-Demo::ServicePub</name>
 
-</project>
\ No newline at end of file
+</project>
diff --git a/saga-demo/saga-dubbo-demo/servicea/pom.xml b/saga-demo/saga-dubbo-demo/servicea/pom.xml
index 9dad60d..47da69a 100644
--- a/saga-demo/saga-dubbo-demo/servicea/pom.xml
+++ b/saga-demo/saga-dubbo-demo/servicea/pom.xml
@@ -22,25 +22,25 @@
   <modelVersion>4.0.0</modelVersion>
   <dependencies>
     <dependency>
-      <groupId>org.apache.servicecomb.saga.demo</groupId>
+      <groupId>org.apache.servicecomb.pack.demo</groupId>
       <artifactId>service-api</artifactId>
       <version>${saga.version}</version>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga.demo</groupId>
+      <groupId>org.apache.servicecomb.pack.demo</groupId>
       <artifactId>service-pub</artifactId>
       <version>${saga.version}</version>
     </dependency>
   </dependencies>
 
   <parent>
-    <groupId>org.apache.servicecomb.saga.demo</groupId>
+    <groupId>org.apache.servicecomb.pack.demo</groupId>
     <artifactId>saga-dubbo-demo</artifactId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>servicea</artifactId>
-  <name>Saga::Demo::Dubbo-Demo::ServiceA</name>
+  <name>Pack::Demo::Dubbo-Demo::ServiceA</name>
 
   <build>
     <plugins>
@@ -91,4 +91,4 @@
     </profile>
   </profiles>
 
-</project>
\ No newline at end of file
+</project>
diff --git a/saga-demo/saga-dubbo-demo/serviceb/pom.xml b/saga-demo/saga-dubbo-demo/serviceb/pom.xml
index 7aa8bbc..66ffc04 100644
--- a/saga-demo/saga-dubbo-demo/serviceb/pom.xml
+++ b/saga-demo/saga-dubbo-demo/serviceb/pom.xml
@@ -22,7 +22,7 @@
   <modelVersion>4.0.0</modelVersion>
   <dependencies>
     <dependency>
-      <groupId>org.apache.servicecomb.saga.demo</groupId>
+      <groupId>org.apache.servicecomb.pack.demo</groupId>
       <artifactId>service-api</artifactId>
       <version>0.3.0-SNAPSHOT</version>
       <scope>compile</scope>
@@ -30,13 +30,13 @@
   </dependencies>
 
   <parent>
-    <groupId>org.apache.servicecomb.saga.demo</groupId>
+    <groupId>org.apache.servicecomb.pack.demo</groupId>
     <artifactId>saga-dubbo-demo</artifactId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>serviceb</artifactId>
-  <name>Saga::Demo::Dubbo-Demo::ServiceB</name>
+  <name>Pack::Demo::Dubbo-Demo::ServiceB</name>
 
   <build>
     <plugins>
@@ -87,4 +87,4 @@
     </profile>
   </profiles>
 
-</project>
\ No newline at end of file
+</project>
diff --git a/saga-demo/saga-dubbo-demo/servicec/pom.xml b/saga-demo/saga-dubbo-demo/servicec/pom.xml
index 6046ed8..e99dd98 100644
--- a/saga-demo/saga-dubbo-demo/servicec/pom.xml
+++ b/saga-demo/saga-dubbo-demo/servicec/pom.xml
@@ -36,7 +36,7 @@
   </parent>
 
   <artifactId>servicec</artifactId>
-  <name>Saga::Demo::Dubbo-Demo::ServiceC</name>
+  <name>Pack::Demo::Dubbo-Demo::ServiceC</name>
 
   <build>
     <plugins>
@@ -87,4 +87,4 @@
     </profile>
   </profiles>
 
-</project>
\ No newline at end of file
+</project>
diff --git a/saga-demo/saga-servicecomb-demo/pom.xml b/saga-demo/saga-servicecomb-demo/pom.xml
index ef8f46b..e72ce81 100644
--- a/saga-demo/saga-servicecomb-demo/pom.xml
+++ b/saga-demo/saga-servicecomb-demo/pom.xml
@@ -21,13 +21,13 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>saga-demo</artifactId>
-    <groupId>org.apache.servicecomb.saga.demo</groupId>
+    <groupId>org.apache.servicecomb.pack.demo</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>saga-servicecomb-demo</artifactId>
-  <name>Saga::Demo::ServiceComb-Demo</name>
+  <name>Pack::Demo::ServiceComb-Demo</name>
   <packaging>pom</packaging>
 
 
diff --git a/saga-demo/saga-servicecomb-demo/scb-booking/pom.xml b/saga-demo/saga-servicecomb-demo/scb-booking/pom.xml
index 4a21c10..1858aae 100644
--- a/saga-demo/saga-servicecomb-demo/scb-booking/pom.xml
+++ b/saga-demo/saga-servicecomb-demo/scb-booking/pom.xml
@@ -27,6 +27,6 @@
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>scb-booking</artifactId>
-  <name>Saga::Demo::ServiceComb-Demo::Booking</name>
+  <name>Pack::Demo::ServiceComb-Demo::Booking</name>
 
-</project>
\ No newline at end of file
+</project>
diff --git a/saga-demo/saga-servicecomb-demo/scb-car/pom.xml b/saga-demo/saga-servicecomb-demo/scb-car/pom.xml
index 8f13b37..1c32849 100644
--- a/saga-demo/saga-servicecomb-demo/scb-car/pom.xml
+++ b/saga-demo/saga-servicecomb-demo/scb-car/pom.xml
@@ -27,6 +27,6 @@
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>scb-car</artifactId>
-  <name>Saga::Demo::ServiceComb-Demo::Car</name>
+  <name>Pack::Demo::ServiceComb-Demo::Car</name>
 
-</project>
\ No newline at end of file
+</project>
diff --git a/saga-demo/saga-servicecomb-demo/scb-hotel/pom.xml b/saga-demo/saga-servicecomb-demo/scb-hotel/pom.xml
index b617d4d..23424f2 100644
--- a/saga-demo/saga-servicecomb-demo/scb-hotel/pom.xml
+++ b/saga-demo/saga-servicecomb-demo/scb-hotel/pom.xml
@@ -27,6 +27,6 @@
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>scb-hotel</artifactId>
-  <name>Saga::Demo::ServiceComb-Demo::Hotel</name>
+  <name>Pack::Demo::ServiceComb-Demo::Hotel</name>
 
-</project>
\ No newline at end of file
+</project>
diff --git a/saga-demo/saga-spring-demo/booking/pom.xml b/saga-demo/saga-spring-demo/booking/pom.xml
index b1d77c8..6f854e7 100644
--- a/saga-demo/saga-spring-demo/booking/pom.xml
+++ b/saga-demo/saga-spring-demo/booking/pom.xml
@@ -19,13 +19,13 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>saga-spring-demo</artifactId>
-    <groupId>org.apache.servicecomb.saga.demo</groupId>
+    <groupId>org.apache.servicecomb.pack.demo</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>booking</artifactId>
-  <name>Saga::Demo::Spring-Demo::Booking</name>
+  <name>Pack::Demo::Spring-Demo::Booking</name>
 
   <dependencies>
     <dependency>
@@ -37,11 +37,11 @@
       <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-spring-starter</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-transport-resttemplate</artifactId>
     </dependency>
   </dependencies>
diff --git a/saga-demo/saga-spring-demo/car/pom.xml b/saga-demo/saga-spring-demo/car/pom.xml
index 169c13e..7314c54 100644
--- a/saga-demo/saga-spring-demo/car/pom.xml
+++ b/saga-demo/saga-spring-demo/car/pom.xml
@@ -19,13 +19,13 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>saga-spring-demo</artifactId>
-    <groupId>org.apache.servicecomb.saga.demo</groupId>
+    <groupId>org.apache.servicecomb.pack.demo</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>car</artifactId>
-  <name>Saga::Demo::Spring-Demo::Car</name>
+  <name>Pack::Demo::Spring-Demo::Car</name>
 
   <dependencies>
     <dependency>
@@ -37,11 +37,11 @@
       <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-spring-starter</artifactId>
     </dependency>
     <dependency>
-       <groupId>org.apache.servicecomb.saga</groupId>
+       <groupId>org.apache.servicecomb.pack</groupId>
        <artifactId>omega-transport-resttemplate</artifactId>
     </dependency>
   </dependencies>
diff --git a/saga-demo/saga-spring-demo/hotel/pom.xml b/saga-demo/saga-spring-demo/hotel/pom.xml
index 57c8557..56fc35c 100644
--- a/saga-demo/saga-spring-demo/hotel/pom.xml
+++ b/saga-demo/saga-spring-demo/hotel/pom.xml
@@ -19,13 +19,13 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>saga-spring-demo</artifactId>
-    <groupId>org.apache.servicecomb.saga.demo</groupId>
+    <groupId>org.apache.servicecomb.pack.demo</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>hotel</artifactId>
-  <name>Saga::Demo::Spring-Demo::Hotel</name>
+  <name>Pack::Demo::Spring-Demo::Hotel</name>
 
   <dependencies>
     <dependency>
@@ -37,11 +37,11 @@
       <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-spring-starter</artifactId>
     </dependency>
     <dependency>
-       <groupId>org.apache.servicecomb.saga</groupId>
+       <groupId>org.apache.servicecomb.pack</groupId>
        <artifactId>omega-transport-resttemplate</artifactId>
     </dependency>
   </dependencies>
diff --git a/saga-demo/saga-spring-demo/pom.xml b/saga-demo/saga-spring-demo/pom.xml
index 63aff40..ab5bece 100644
--- a/saga-demo/saga-spring-demo/pom.xml
+++ b/saga-demo/saga-spring-demo/pom.xml
@@ -25,7 +25,7 @@
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>saga-spring-demo</artifactId>
-  <name>Saga::Demo::Spring-Demo</name>
+  <name>Pack::Demo::Spring-Demo</name>
   <packaging>pom</packaging>
 
   <modules>
diff --git a/saga-demo/tcc-spring-demo/inventory/pom.xml b/saga-demo/tcc-spring-demo/inventory/pom.xml
index bd2f287..8d44906 100644
--- a/saga-demo/tcc-spring-demo/inventory/pom.xml
+++ b/saga-demo/tcc-spring-demo/inventory/pom.xml
@@ -27,7 +27,7 @@
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>tcc-inventory</artifactId>
-  <name>Saga::Demo::Tcc-Spring-Demo::Tcc-Inventory</name>
+  <name>Pack::Demo::Tcc-Spring-Demo::Tcc-Inventory</name>
 
   <dependencies>
    <!-- Add the JPA starter -->
diff --git a/saga-demo/tcc-spring-demo/ordering/pom.xml b/saga-demo/tcc-spring-demo/ordering/pom.xml
index 8158a35..4dae748 100644
--- a/saga-demo/tcc-spring-demo/ordering/pom.xml
+++ b/saga-demo/tcc-spring-demo/ordering/pom.xml
@@ -27,7 +27,7 @@
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>tcc-ordering</artifactId>
-  <name>Saga::Demo::Tcc-Spring-Demo::Tcc-Ordering</name>
+  <name>Pack::Demo::Tcc-Spring-Demo::Tcc-Ordering</name>
 
   <build>
     <plugins>
diff --git a/saga-demo/tcc-spring-demo/payment/pom.xml b/saga-demo/tcc-spring-demo/payment/pom.xml
index 9c07521..9a91dbd 100644
--- a/saga-demo/tcc-spring-demo/payment/pom.xml
+++ b/saga-demo/tcc-spring-demo/payment/pom.xml
@@ -25,7 +25,7 @@
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>tcc-payment</artifactId>
-  <name>Saga::Demo::Tcc-Spring-Demo::Tcc-Payment</name>
+  <name>Pack::Demo::Tcc-Spring-Demo::Tcc-Payment</name>
 
   <dependencies>
     <!-- Add the JPA starter -->
diff --git a/saga-demo/tcc-spring-demo/pom.xml b/saga-demo/tcc-spring-demo/pom.xml
index 76bc069..e7e7ec9 100644
--- a/saga-demo/tcc-spring-demo/pom.xml
+++ b/saga-demo/tcc-spring-demo/pom.xml
@@ -25,7 +25,7 @@
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>tcc-spring-demo</artifactId>
-  <name>Saga::Demo::Tcc-Spring-Demo</name>
+  <name>Pack::Demo::Tcc-Spring-Demo</name>
   <packaging>pom</packaging>
 
   <modules>
diff --git a/saga-distribution/pom.xml b/saga-distribution/pom.xml
index aeab76a..7451170 100644
--- a/saga-distribution/pom.xml
+++ b/saga-distribution/pom.xml
@@ -24,7 +24,7 @@
       <version>0.3.0-SNAPSHOT</version>
     </parent>
     <artifactId>apache-servicecomb-incubating-saga-distribution</artifactId>
-    <name>Saga::Distribution</name>
+    <name>Pack::Distribution</name>
     <packaging>pom</packaging>
     <dependencies>
         <dependency>
diff --git a/saga-persistence/pom.xml b/saga-persistence/pom.xml
index 134c83d..5f0cd41 100644
--- a/saga-persistence/pom.xml
+++ b/saga-persistence/pom.xml
@@ -21,7 +21,7 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>saga</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/saga-persistence/saga-persistence-jpa/pom.xml b/saga-persistence/saga-persistence-jpa/pom.xml
index 6bd5dd8..b08dc8d 100644
--- a/saga-persistence/saga-persistence-jpa/pom.xml
+++ b/saga-persistence/saga-persistence-jpa/pom.xml
@@ -21,7 +21,7 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>saga-persistence</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/saga-web/pom.xml b/saga-web/pom.xml
index 007e6d0..2622563 100644
--- a/saga-web/pom.xml
+++ b/saga-web/pom.xml
@@ -21,13 +21,13 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>saga</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
   <artifactId>saga-web</artifactId>
-  <name>Saga::Web</name>
+  <name>Pack::Web</name>
 
   <dependencyManagement>
     <dependencies>


[servicecomb-pack] 05/05: SCB-976 Update the maven group to org.apache.servicecomb.pack in the demo module

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

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

commit 18053b6ac80ba21a787f1cad4813b8cf5e31ff7c
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Fri Dec 14 13:59:23 2018 +0800

    SCB-976 Update the maven group to org.apache.servicecomb.pack in the demo module
---
 .../acceptance-pack-dubbo-demo/pom.xml             |  2 +-
 .../acceptance-pack-spring-demo/pom.xml            |  2 +-
 .../acceptance-pack-tcc-spring-demo/pom.xml        |  2 +-
 acceptance-tests/pom.xml                           |  2 +-
 demo/saga-dubbo-demo/service-api/pom.xml           |  4 ++--
 demo/saga-dubbo-demo/service-pub/pom.xml           |  2 +-
 demo/saga-dubbo-demo/servicec/pom.xml              |  4 ++--
 demo/saga-servicecomb-demo/pom.xml                 |  4 ++--
 demo/saga-servicecomb-demo/scb-booking/pom.xml     |  2 +-
 demo/saga-servicecomb-demo/scb-car/pom.xml         |  2 +-
 demo/saga-servicecomb-demo/scb-hotel/pom.xml       |  2 +-
 demo/saga-spring-demo/pom.xml                      |  2 +-
 demo/tcc-spring-demo/inventory/pom.xml             |  4 ++--
 demo/tcc-spring-demo/ordering/pom.xml              |  2 +-
 demo/tcc-spring-demo/payment/pom.xml               |  4 ++--
 demo/tcc-spring-demo/pom.xml                       |  6 ++---
 distribution/pom.xml                               | 26 +++++++++++-----------
 17 files changed, 36 insertions(+), 36 deletions(-)

diff --git a/acceptance-tests/acceptance-pack-dubbo-demo/pom.xml b/acceptance-tests/acceptance-pack-dubbo-demo/pom.xml
index b64a0ba..e8d5868 100644
--- a/acceptance-tests/acceptance-pack-dubbo-demo/pom.xml
+++ b/acceptance-tests/acceptance-pack-dubbo-demo/pom.xml
@@ -21,7 +21,7 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>acceptance-tests</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/acceptance-tests/acceptance-pack-spring-demo/pom.xml b/acceptance-tests/acceptance-pack-spring-demo/pom.xml
index 87bfe9a..389d10f 100644
--- a/acceptance-tests/acceptance-pack-spring-demo/pom.xml
+++ b/acceptance-tests/acceptance-pack-spring-demo/pom.xml
@@ -21,7 +21,7 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>acceptance-tests</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/acceptance-tests/acceptance-pack-tcc-spring-demo/pom.xml b/acceptance-tests/acceptance-pack-tcc-spring-demo/pom.xml
index 1126e3c..f752a36 100644
--- a/acceptance-tests/acceptance-pack-tcc-spring-demo/pom.xml
+++ b/acceptance-tests/acceptance-pack-tcc-spring-demo/pom.xml
@@ -21,7 +21,7 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>acceptance-tests</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/acceptance-tests/pom.xml b/acceptance-tests/pom.xml
index d6dc00b..7cd2078 100644
--- a/acceptance-tests/pom.xml
+++ b/acceptance-tests/pom.xml
@@ -21,7 +21,7 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>saga</artifactId>
-    <groupId>org.apache.servicecomb.saga</groupId>
+    <groupId>org.apache.servicecomb.pack</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/demo/saga-dubbo-demo/service-api/pom.xml b/demo/saga-dubbo-demo/service-api/pom.xml
index 805422b..105d55f 100644
--- a/demo/saga-dubbo-demo/service-api/pom.xml
+++ b/demo/saga-dubbo-demo/service-api/pom.xml
@@ -22,7 +22,7 @@
   <modelVersion>4.0.0</modelVersion>
   <dependencies>
     <dependency>
-      <groupId>org.apache.servicecomb.saga.demo</groupId>
+      <groupId>org.apache.servicecomb.pack.demo</groupId>
       <artifactId>service-pub</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
@@ -30,7 +30,7 @@
 
   <parent>
     <artifactId>saga-dubbo-demo</artifactId>
-    <groupId>org.apache.servicecomb.saga.demo</groupId>
+    <groupId>org.apache.servicecomb.pack.demo</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
 
diff --git a/demo/saga-dubbo-demo/service-pub/pom.xml b/demo/saga-dubbo-demo/service-pub/pom.xml
index b8ebb92..8dc184e 100644
--- a/demo/saga-dubbo-demo/service-pub/pom.xml
+++ b/demo/saga-dubbo-demo/service-pub/pom.xml
@@ -20,7 +20,7 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>saga-dubbo-demo</artifactId>
-    <groupId>org.apache.servicecomb.saga.demo</groupId>
+    <groupId>org.apache.servicecomb.pack.demo</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/demo/saga-dubbo-demo/servicec/pom.xml b/demo/saga-dubbo-demo/servicec/pom.xml
index e99dd98..d32c79b 100644
--- a/demo/saga-dubbo-demo/servicec/pom.xml
+++ b/demo/saga-dubbo-demo/servicec/pom.xml
@@ -22,7 +22,7 @@
   <modelVersion>4.0.0</modelVersion>
   <dependencies>
     <dependency>
-      <groupId>org.apache.servicecomb.saga.demo</groupId>
+      <groupId>org.apache.servicecomb.pack.demo</groupId>
       <artifactId>service-api</artifactId>
       <version>0.3.0-SNAPSHOT</version>
       <scope>compile</scope>
@@ -30,7 +30,7 @@
   </dependencies>
 
   <parent>
-    <groupId>org.apache.servicecomb.saga.demo</groupId>
+    <groupId>org.apache.servicecomb.pack.demo</groupId>
     <artifactId>saga-dubbo-demo</artifactId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
diff --git a/demo/saga-servicecomb-demo/pom.xml b/demo/saga-servicecomb-demo/pom.xml
index e72ce81..4b47f3d 100644
--- a/demo/saga-servicecomb-demo/pom.xml
+++ b/demo/saga-servicecomb-demo/pom.xml
@@ -71,11 +71,11 @@
       <artifactId>hibernate-validator</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-spring-starter</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-transport-servicecomb</artifactId>
     </dependency>
   </dependencies>
diff --git a/demo/saga-servicecomb-demo/scb-booking/pom.xml b/demo/saga-servicecomb-demo/scb-booking/pom.xml
index 1858aae..8468418 100644
--- a/demo/saga-servicecomb-demo/scb-booking/pom.xml
+++ b/demo/saga-servicecomb-demo/scb-booking/pom.xml
@@ -21,7 +21,7 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>saga-servicecomb-demo</artifactId>
-    <groupId>org.apache.servicecomb.saga.demo</groupId>
+    <groupId>org.apache.servicecomb.pack.demo</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/demo/saga-servicecomb-demo/scb-car/pom.xml b/demo/saga-servicecomb-demo/scb-car/pom.xml
index 1c32849..4746871 100644
--- a/demo/saga-servicecomb-demo/scb-car/pom.xml
+++ b/demo/saga-servicecomb-demo/scb-car/pom.xml
@@ -21,7 +21,7 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>saga-servicecomb-demo</artifactId>
-    <groupId>org.apache.servicecomb.saga.demo</groupId>
+    <groupId>org.apache.servicecomb.pack.demo</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/demo/saga-servicecomb-demo/scb-hotel/pom.xml b/demo/saga-servicecomb-demo/scb-hotel/pom.xml
index 23424f2..fce548e 100644
--- a/demo/saga-servicecomb-demo/scb-hotel/pom.xml
+++ b/demo/saga-servicecomb-demo/scb-hotel/pom.xml
@@ -21,7 +21,7 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>saga-servicecomb-demo</artifactId>
-    <groupId>org.apache.servicecomb.saga.demo</groupId>
+    <groupId>org.apache.servicecomb.pack.demo</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/demo/saga-spring-demo/pom.xml b/demo/saga-spring-demo/pom.xml
index ab5bece..ba31f5c 100644
--- a/demo/saga-spring-demo/pom.xml
+++ b/demo/saga-spring-demo/pom.xml
@@ -19,7 +19,7 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>saga-demo</artifactId>
-    <groupId>org.apache.servicecomb.saga.demo</groupId>
+    <groupId>org.apache.servicecomb.pack.demo</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/demo/tcc-spring-demo/inventory/pom.xml b/demo/tcc-spring-demo/inventory/pom.xml
index 7bd1d4f..f4b8a85 100644
--- a/demo/tcc-spring-demo/inventory/pom.xml
+++ b/demo/tcc-spring-demo/inventory/pom.xml
@@ -21,7 +21,7 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>tcc-spring-demo</artifactId>
-    <groupId>org.apache.servicecomb.saga.demo</groupId>
+    <groupId>org.apache.servicecomb.pack.demo</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
@@ -47,7 +47,7 @@
     </dependency>
     <!-- Added the eclipse link JPA configuration-->
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>persistence-jpa</artifactId>
     </dependency>
     <!-- Added the driver of h2 -->
diff --git a/demo/tcc-spring-demo/ordering/pom.xml b/demo/tcc-spring-demo/ordering/pom.xml
index 4dae748..ceb8b00 100644
--- a/demo/tcc-spring-demo/ordering/pom.xml
+++ b/demo/tcc-spring-demo/ordering/pom.xml
@@ -21,7 +21,7 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>tcc-spring-demo</artifactId>
-    <groupId>org.apache.servicecomb.saga.demo</groupId>
+    <groupId>org.apache.servicecomb.pack.demo</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/demo/tcc-spring-demo/payment/pom.xml b/demo/tcc-spring-demo/payment/pom.xml
index b8aa181..4fdf089 100644
--- a/demo/tcc-spring-demo/payment/pom.xml
+++ b/demo/tcc-spring-demo/payment/pom.xml
@@ -19,7 +19,7 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>tcc-spring-demo</artifactId>
-    <groupId>org.apache.servicecomb.saga.demo</groupId>
+    <groupId>org.apache.servicecomb.pack.demo</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
@@ -45,7 +45,7 @@
     </dependency>
     <!-- Added the eclipse link JPA configuration-->
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>persistence-jpa</artifactId>
     </dependency>
     <!-- Added the driver of h2 -->
diff --git a/demo/tcc-spring-demo/pom.xml b/demo/tcc-spring-demo/pom.xml
index e7e7ec9..99fdfa0 100644
--- a/demo/tcc-spring-demo/pom.xml
+++ b/demo/tcc-spring-demo/pom.xml
@@ -19,7 +19,7 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
     <artifactId>saga-demo</artifactId>
-    <groupId>org.apache.servicecomb.saga.demo</groupId>
+    <groupId>org.apache.servicecomb.pack.demo</groupId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
@@ -49,11 +49,11 @@
     </dependency>
     <!-- Added the Omega dependencies -->
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-spring-starter</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>omega-transport-resttemplate</artifactId>
     </dependency>
   </dependencies>
diff --git a/distribution/pom.xml b/distribution/pom.xml
index 7451170..dc68028 100644
--- a/distribution/pom.xml
+++ b/distribution/pom.xml
@@ -19,7 +19,7 @@
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
-      <groupId>org.apache.servicecomb.saga</groupId>
+      <groupId>org.apache.servicecomb.pack</groupId>
       <artifactId>saga</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </parent>
@@ -28,51 +28,51 @@
     <packaging>pom</packaging>
     <dependencies>
         <dependency>
-            <groupId>org.apache.servicecomb.saga</groupId>
+            <groupId>org.apache.servicecomb.pack</groupId>
             <artifactId>omega-context</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.servicecomb.saga</groupId>
+            <groupId>org.apache.servicecomb.pack</groupId>
             <artifactId>omega-transaction</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.servicecomb.saga</groupId>
+            <groupId>org.apache.servicecomb.pack</groupId>
             <artifactId>omega-spring-tx</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.servicecomb.saga</groupId>
+            <groupId>org.apache.servicecomb.pack</groupId>
             <artifactId>omega-transport-resttemplate</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.servicecomb.saga</groupId>
+            <groupId>org.apache.servicecomb.pack</groupId>
             <artifactId>omega-transport-dubbo</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.servicecomb.saga</groupId>
+            <groupId>org.apache.servicecomb.pack</groupId>
             <artifactId>omega-transport-feign</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.servicecomb.saga</groupId>
+            <groupId>org.apache.servicecomb.pack</groupId>
             <artifactId>omega-connector-grpc</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.servicecomb.saga</groupId>
+            <groupId>org.apache.servicecomb.pack</groupId>
             <artifactId>omega-spring-starter</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.servicecomb.saga</groupId>
+            <groupId>org.apache.servicecomb.pack</groupId>
             <artifactId>omega-format</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.servicecomb.saga</groupId>
+            <groupId>org.apache.servicecomb.pack</groupId>
             <artifactId>alpha-core</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.servicecomb.saga</groupId>
+            <groupId>org.apache.servicecomb.pack</groupId>
             <artifactId>pack-contract-grpc</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.servicecomb.saga</groupId>
+            <groupId>org.apache.servicecomb.pack</groupId>
             <artifactId>pack-common</artifactId>
         </dependency>
     </dependencies>