Refactoring the Alpha module using Spring SPI
diff --git a/.github/workflows/master-pr-build.yaml b/.github/workflows/master-pr-build.yaml
index 59453b2..88e9066 100644
--- a/.github/workflows/master-pr-build.yaml
+++ b/.github/workflows/master-pr-build.yaml
@@ -54,7 +54,7 @@
run: git log -n1
- name: Build and test
if: ${{ success() }}
- run: ./mvnw clean install -B -Pdocker
+ run: ./mvnw clean install -Pdocker -B
- name: Upload unit test results
if: ${{ failure() }}
uses: actions/upload-artifact@v2
@@ -64,7 +64,7 @@
if-no-files-found: ignore
- name: Verify demo
if: ${{ success() }}
- run: ./mvnw clean verify -B -f demo -Pdemo -Pdocker -Ddocker.useColor=false -Ddocker.showLogs
+ run: ./mvnw clean verify -f demo -Pdemo -Pdocker -Ddocker.useColor=false -Ddocker.showLogs -B
- name: Verify Acceptance tests
if: ${{ success() }}
- run: ./mvnw clean verify -B -f acceptance-tests -Pdemo -Pdocker -Ddocker.useColor=false -Ddocker.showLogs
+ run: ./mvnw clean verify -f acceptance-tests -Pdemo -Pdocker -Ddocker.useColor=false -Ddocker.showLogs -B
diff --git a/acceptance-tests/acceptance-pack-akka-spring-demo/pom.xml b/acceptance-tests/acceptance-pack-akka-spring-demo/pom.xml
index 8faed9a..e48816b 100644
--- a/acceptance-tests/acceptance-pack-akka-spring-demo/pom.xml
+++ b/acceptance-tests/acceptance-pack-akka-spring-demo/pom.xml
@@ -26,7 +26,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
- <artifactId>acceptance-pack-akka-spring</artifactId>
+ <artifactId>acceptance-pack-akka-spring-demo</artifactId>
<name>Pack:Acceptance Tests::Akka Spring</name>
<dependencies>
@@ -52,29 +52,6 @@
<configuration>
<images>
<image>
- <name>postgres</name>
- <alias>postgres</alias>
- <run>
- <env>
- <POSTGRES_DB>saga</POSTGRES_DB>
- <POSTGRES_USER>saga</POSTGRES_USER>
- <POSTGRES_PASSWORD>password</POSTGRES_PASSWORD>
- </env>
- <wait>
- <log>database system is ready to accept connections</log>
- <tcp>
- <ports>
- <port>5432</port>
- </ports>
- </tcp>
- <time>60000</time>
- </wait>
- <ports>
- <port>postgres.port:5432</port>
- </ports>
- </run>
- </image>
- <image>
<name>elasticsearch:7.17.1</name>
<alias>elasticsearch</alias>
<run>
@@ -102,15 +79,13 @@
<alias>alpha</alias>
<run>
<env>
- <JAVA_OPTS>
- -Dspring.profiles.active=prd,test
- </JAVA_OPTS>
- <alpha.feature.akka.enabled>true</alpha.feature.akka.enabled>
- <alpha.feature.akka.transaction.repository.type>elasticsearch</alpha.feature.akka.transaction.repository.type>
- <spring.elasticsearch.rest.uris>http://elasticsearch.servicecomb.io:9200</spring.elasticsearch.rest.uris>
+ <spring.profiles.active>prd,test</spring.profiles.active>
+ <alpha.spec.names>saga-akka</alpha.spec.names>
+ <alpha.spec.saga.akka.channel.name>memory</alpha.spec.saga.akka.channel.name>
+ <alpha.spec.saga.akka.repository.name>elasticsearch</alpha.spec.saga.akka.repository.name>
+ <alpha.spec.saga.akka.repository.elasticsearch.uris>http://elasticsearch.servicecomb.io:9200</alpha.spec.saga.akka.repository.elasticsearch.uris>
</env>
<links>
- <link>postgres:postgresql.servicecomb.io</link>
<link>elasticsearch:elasticsearch.servicecomb.io</link>
</links>
<wait>
@@ -128,7 +103,6 @@
<port>alpha.rest.port:8090</port>
</ports>
<dependsOn>
- <container>postgres</container>
<container>elasticsearch</container>
</dependsOn>
</run>
@@ -142,6 +116,7 @@
-Dorg.jboss.byteman.debug=true -Dorg.jboss.byteman.verbose=true
-javaagent:/maven/saga/byteman.jar=port:9092,address:0.0.0.0,listener:true
</JAVA_OPTS>
+ <omega.spec.names>saga</omega.spec.names>
</env>
<wait>
<log>Started [a-zA-Z]+ in [0-9.]+ seconds</log>
@@ -174,6 +149,7 @@
-Dorg.jboss.byteman.debug=true -Dorg.jboss.byteman.verbose=true
-javaagent:/maven/saga/byteman.jar=port:9093,address:0.0.0.0,listener:true
</JAVA_OPTS>
+ <omega.spec.names>saga</omega.spec.names>
</env>
<wait>
<log>Started [a-zA-Z]+ in [0-9.]+ seconds</log>
@@ -206,6 +182,7 @@
-Dorg.jboss.byteman.debug=true -Dorg.jboss.byteman.verbose=true
-javaagent:/maven/saga/byteman.jar=port:9091,address:0.0.0.0,listener:true
</JAVA_OPTS>
+ <omega.spec.names>saga</omega.spec.names>
</env>
<wait>
<log>Started [a-zA-Z]+ in [0-9.]+ seconds</log>
diff --git a/acceptance-tests/acceptance-pack-cluster-spring-demo/pom.xml b/acceptance-tests/acceptance-pack-cluster-spring-demo/pom.xml
index 2f7c861..ce15e97 100644
--- a/acceptance-tests/acceptance-pack-cluster-spring-demo/pom.xml
+++ b/acceptance-tests/acceptance-pack-cluster-spring-demo/pom.xml
@@ -26,7 +26,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
- <artifactId>acceptance-pack-cluster-spring</artifactId>
+ <artifactId>acceptance-pack-cluster-spring-demo</artifactId>
<name>Pack:Acceptance Tests::Cluster Spring</name>
<dependencies>
@@ -81,11 +81,10 @@
<alias>alpha-1</alias>
<run>
<env>
- <JAVA_OPTS>
- -Dspring.profiles.active=prd,test
- </JAVA_OPTS>
+ <spring.profiles.active>prd,test</spring.profiles.active>
+ <alpha.spec.names>saga-db</alpha.spec.names>
<alpha.server.port>8080</alpha.server.port>
- <alpha.cluster.master.enabled>true</alpha.cluster.master.enabled>
+ <alpha.spec.sagaa.db.cluster.enabled>true</alpha.spec.sagaa.db.cluster.enabled>
<management.endpoints.web.exposure.include>*</management.endpoints.web.exposure.include>
<management.endpoint.shutdown.enabled>true</management.endpoint.shutdown.enabled>
</env>
@@ -116,12 +115,11 @@
<alias>alpha-2</alias>
<run>
<env>
- <JAVA_OPTS>
- -Dspring.profiles.active=prd,test
- </JAVA_OPTS>
+ <spring.profiles.active>prd,test</spring.profiles.active>
+ <alpha.spec.names>saga-db</alpha.spec.names>
<alpha.server.port>8081</alpha.server.port>
<server.port>8091</server.port>
- <alpha.cluster.master.enabled>true</alpha.cluster.master.enabled>
+ <alpha.spec.sagaa.db.cluster.enabled>true</alpha.spec.sagaa.db.cluster.enabled>
<management.endpoints.web.exposure.include>*</management.endpoints.web.exposure.include>
<management.endpoint.shutdown.enabled>true</management.endpoint.shutdown.enabled>
</env>
@@ -156,6 +154,7 @@
-Dorg.jboss.byteman.debug=true -Dorg.jboss.byteman.verbose=true
-javaagent:/maven/saga/byteman.jar=port:9092,address:0.0.0.0,listener:true
</JAVA_OPTS>
+ <omega.spec.names>saga</omega.spec.names>
<alpha.cluster.address>alpha-server-1.servicecomb.io:8080,alpha-server-2.servicecomb.io:8081</alpha.cluster.address>
</env>
<wait>
@@ -191,6 +190,7 @@
-Dorg.jboss.byteman.debug=true -Dorg.jboss.byteman.verbose=true
-javaagent:/maven/saga/byteman.jar=port:9093,address:0.0.0.0,listener:true
</JAVA_OPTS>
+ <omega.spec.names>saga</omega.spec.names>
<alpha.cluster.address>alpha-server-1.servicecomb.io:8080,alpha-server-2.servicecomb.io:8081</alpha.cluster.address>
</env>
<wait>
@@ -226,6 +226,7 @@
-Dorg.jboss.byteman.debug=true -Dorg.jboss.byteman.verbose=true
-javaagent:/maven/saga/byteman.jar=port:9091,address:0.0.0.0,listener:true
</JAVA_OPTS>
+ <omega.spec.names>saga</omega.spec.names>
<alpha.cluster.address>alpha-server-1.servicecomb.io:8080,alpha-server-2.servicecomb.io:8081</alpha.cluster.address>
<alpha.rest.address>http://alpha-server-1.servicecomb.io:8090,http://alpha-server-2.servicecomb.io:8091</alpha.rest.address>
</env>
diff --git a/acceptance-tests/acceptance-pack-dubbo-demo/pom.xml b/acceptance-tests/acceptance-pack-dubbo-demo/pom.xml
index 4869e18..54c0d39 100644
--- a/acceptance-tests/acceptance-pack-dubbo-demo/pom.xml
+++ b/acceptance-tests/acceptance-pack-dubbo-demo/pom.xml
@@ -26,7 +26,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<name>Pack:Acceptance Tests::Dubbo</name>
- <artifactId>acceptance-pack-dubbo</artifactId>
+ <artifactId>acceptance-pack-dubbo-demo</artifactId>
<dependencies>
<dependency>
@@ -88,9 +88,8 @@
<alias>alpha</alias>
<run>
<env>
- <JAVA_OPTS>
- -Dspring.profiles.active=prd,test
- </JAVA_OPTS>
+ <spring.profiles.active>prd,test</spring.profiles.active>
+ <alpha.spec.names>saga-db</alpha.spec.names>
</env>
<links>
<link>postgres:postgresql.servicecomb.io</link>
@@ -129,6 +128,7 @@
-Dalpha.cluster.address=alpha-server.servicecomb.io:8080
-Dspring.datasource.initialization-mode=always
</JAVA_OPTS>
+ <omega.spec.names>saga</omega.spec.names>
</env>
<wait>
<log>Started [a-zA-Z]+ in [0-9.]+ seconds</log>
@@ -169,6 +169,7 @@
-Dalpha.cluster.address=alpha-server.servicecomb.io:8080
-Dspring.datasource.initialization-mode=always
</JAVA_OPTS>
+ <omega.spec.names>saga</omega.spec.names>
</env>
<wait>
<log>Started [a-zA-Z]+ in [0-9.]+ seconds</log>
@@ -209,6 +210,7 @@
-Dalpha.cluster.address=alpha-server.servicecomb.io:8080
-Dspring.datasource.initialization-mode=always
</JAVA_OPTS>
+ <omega.spec.names>saga</omega.spec.names>
</env>
<wait>
<log>Started [a-zA-Z]+ in [0-9.]+ seconds</log>
diff --git a/acceptance-tests/acceptance-pack-spring-demo-with-consul/pom.xml b/acceptance-tests/acceptance-pack-spring-demo-with-consul/pom.xml
index c425582..9d25566 100644
--- a/acceptance-tests/acceptance-pack-spring-demo-with-consul/pom.xml
+++ b/acceptance-tests/acceptance-pack-spring-demo-with-consul/pom.xml
@@ -26,7 +26,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
- <artifactId>acceptance-pack-spring-with-consul</artifactId>
+ <artifactId>acceptance-pack-spring-demo-with-consul</artifactId>
<name>Pack:Acceptance Tests::Spring with consul</name>
<dependencies>
@@ -98,9 +98,8 @@
<alias>alpha</alias>
<run>
<env>
- <JAVA_OPTS>
- -Dspring.profiles.active=prd,test
- </JAVA_OPTS>
+ <spring.profiles.active>prd,test</spring.profiles.active>
+ <alpha.spec.names>saga-db</alpha.spec.names>
<spring.cloud.consul.enabled>true</spring.cloud.consul.enabled>
<spring.cloud.consul.host>consul.servicecomb.io</spring.cloud.consul.host>
<spring.cloud.consul.port>8500</spring.cloud.consul.port>
@@ -139,6 +138,7 @@
-Dorg.jboss.byteman.debug=true -Dorg.jboss.byteman.verbose=true
-javaagent:/maven/saga/byteman.jar=port:9092,address:0.0.0.0,listener:true
</JAVA_OPTS>
+ <omega.spec.names>saga</omega.spec.names>
<spring.cloud.consul.enabled>true</spring.cloud.consul.enabled>
<alpha.cluster.address></alpha.cluster.address>
<alpha.cluster.register.type>consul</alpha.cluster.register.type>
@@ -178,6 +178,7 @@
-Dorg.jboss.byteman.debug=true -Dorg.jboss.byteman.verbose=true
-javaagent:/maven/saga/byteman.jar=port:9093,address:0.0.0.0,listener:true
</JAVA_OPTS>
+ <omega.spec.names>saga</omega.spec.names>
<spring.cloud.consul.enabled>true</spring.cloud.consul.enabled>
<alpha.cluster.address></alpha.cluster.address>
<alpha.cluster.register.type>consul</alpha.cluster.register.type>
@@ -217,6 +218,7 @@
-Dorg.jboss.byteman.debug=true -Dorg.jboss.byteman.verbose=true
-javaagent:/maven/saga/byteman.jar=port:9091,address:0.0.0.0,listener:true
</JAVA_OPTS>
+ <omega.spec.names>saga</omega.spec.names>
<spring.cloud.consul.enabled>true</spring.cloud.consul.enabled>
<alpha.cluster.address></alpha.cluster.address>
<alpha.cluster.register.type>consul</alpha.cluster.register.type>
diff --git a/acceptance-tests/acceptance-pack-spring-demo-with-nacos/pom.xml b/acceptance-tests/acceptance-pack-spring-demo-with-nacos/pom.xml
index 4b03b15..3b3e2dc 100644
--- a/acceptance-tests/acceptance-pack-spring-demo-with-nacos/pom.xml
+++ b/acceptance-tests/acceptance-pack-spring-demo-with-nacos/pom.xml
@@ -26,7 +26,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
- <artifactId>acceptance-pack-spring-with-nacos</artifactId>
+ <artifactId>acceptance-pack-spring-demo-with-nacos</artifactId>
<name>Pack:Acceptance Tests::Spring with nacos</name>
<dependencies>
@@ -60,7 +60,7 @@
<MODE>standalone</MODE>
</env>
<wait>
- <log>Completed initialization in</log>
+ <log>Nacos started successfully</log>
<tcp>
<ports>
<port>8848</port>
@@ -101,9 +101,8 @@
<alias>alpha</alias>
<run>
<env>
- <JAVA_OPTS>
- -Dspring.profiles.active=prd,test
- </JAVA_OPTS>
+ <spring.profiles.active>prd,test</spring.profiles.active>
+ <alpha.spec.names>saga-db</alpha.spec.names>
<spring.cloud.nacos.discovery.enabled>true</spring.cloud.nacos.discovery.enabled>
<spring.cloud.nacos.discovery.serverAddr>nacos.servicecomb.io:8848</spring.cloud.nacos.discovery.serverAddr>
<nacos.client.enabled>true</nacos.client.enabled>
@@ -140,6 +139,7 @@
-Dorg.jboss.byteman.debug=true -Dorg.jboss.byteman.verbose=true
-javaagent:/maven/saga/byteman.jar=port:9092,address:0.0.0.0,listener:true
</JAVA_OPTS>
+ <omega.spec.names>saga</omega.spec.names>
<spring.cloud.nacos.discovery.enabled>true</spring.cloud.nacos.discovery.enabled>
<alpha.cluster.register.type>nacos</alpha.cluster.register.type>
<spring.cloud.nacos.discovery.serverAddr>nacos.servicecomb.io:8848</spring.cloud.nacos.discovery.serverAddr>
@@ -176,6 +176,7 @@
-Dorg.jboss.byteman.debug=true -Dorg.jboss.byteman.verbose=true
-javaagent:/maven/saga/byteman.jar=port:9093,address:0.0.0.0,listener:true
</JAVA_OPTS>
+ <omega.spec.names>saga</omega.spec.names>
<spring.cloud.nacos.discovery.enabled>true</spring.cloud.nacos.discovery.enabled>
<alpha.cluster.register.type>nacos</alpha.cluster.register.type>
<spring.cloud.nacos.discovery.serverAddr>nacos.servicecomb.io:8848</spring.cloud.nacos.discovery.serverAddr>
@@ -212,6 +213,7 @@
-Dorg.jboss.byteman.debug=true -Dorg.jboss.byteman.verbose=true
-javaagent:/maven/saga/byteman.jar=port:9091,address:0.0.0.0,listener:true
</JAVA_OPTS>
+ <omega.spec.names>saga</omega.spec.names>
<spring.cloud.nacos.discovery.enabled>true</spring.cloud.nacos.discovery.enabled>
<alpha.cluster.register.type>nacos</alpha.cluster.register.type>
<spring.cloud.nacos.discovery.serverAddr>nacos.servicecomb.io:8848</spring.cloud.nacos.discovery.serverAddr>
diff --git a/acceptance-tests/acceptance-pack-spring-demo-with-zookeeper/pom.xml b/acceptance-tests/acceptance-pack-spring-demo-with-zookeeper/pom.xml
index 2e7c5d5..b8b3151 100644
--- a/acceptance-tests/acceptance-pack-spring-demo-with-zookeeper/pom.xml
+++ b/acceptance-tests/acceptance-pack-spring-demo-with-zookeeper/pom.xml
@@ -26,7 +26,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
- <artifactId>acceptance-pack-spring-with-zookeeper</artifactId>
+ <artifactId>acceptance-pack-spring-demo-with-zookeeper</artifactId>
<name>Pack:Acceptance Tests::Spring with zookeeper</name>
<dependencies>
@@ -98,9 +98,8 @@
<alias>alpha</alias>
<run>
<env>
- <JAVA_OPTS>
- -Dspring.profiles.active=prd,test
- </JAVA_OPTS>
+ <spring.profiles.active>prd,test</spring.profiles.active>
+ <alpha.spec.names>saga-db</alpha.spec.names>
<spring.cloud.zookeeper.enabled>true</spring.cloud.zookeeper.enabled>
<spring.cloud.zookeeper.connectString>zookeeper.servicecomb.io:2181</spring.cloud.zookeeper.connectString>
<spring.cloud.zookeeper.discovery.preferIpAddress>true</spring.cloud.zookeeper.discovery.preferIpAddress>
@@ -138,6 +137,7 @@
-Dorg.jboss.byteman.debug=true -Dorg.jboss.byteman.verbose=true
-javaagent:/maven/saga/byteman.jar=port:9092,address:0.0.0.0,listener:true
</JAVA_OPTS>
+ <omega.spec.names>saga</omega.spec.names>
<spring.cloud.zookeeper.enabled>true</spring.cloud.zookeeper.enabled>
<alpha.cluster.register.type>zookeeper</alpha.cluster.register.type>
<spring.cloud.zookeeper.connectString>zookeeper.servicecomb.io:2181</spring.cloud.zookeeper.connectString>
@@ -176,6 +176,7 @@
-Dorg.jboss.byteman.debug=true -Dorg.jboss.byteman.verbose=true
-javaagent:/maven/saga/byteman.jar=port:9093,address:0.0.0.0,listener:true
</JAVA_OPTS>
+ <omega.spec.names>saga</omega.spec.names>
<spring.cloud.zookeeper.enabled>true</spring.cloud.zookeeper.enabled>
<alpha.cluster.register.type>zookeeper</alpha.cluster.register.type>
<spring.cloud.zookeeper.connectString>zookeeper.servicecomb.io:2181</spring.cloud.zookeeper.connectString>
@@ -213,6 +214,7 @@
-Dorg.jboss.byteman.debug=true -Dorg.jboss.byteman.verbose=true
-javaagent:/maven/saga/byteman.jar=port:9091,address:0.0.0.0,listener:true
</JAVA_OPTS>
+ <omega.spec.names>saga</omega.spec.names>
<spring.cloud.zookeeper.enabled>true</spring.cloud.zookeeper.enabled>
<alpha.cluster.register.type>zookeeper</alpha.cluster.register.type>
<spring.cloud.zookeeper.connectString>zookeeper.servicecomb.io:2181</spring.cloud.zookeeper.connectString>
diff --git a/acceptance-tests/acceptance-pack-spring-demo/pom.xml b/acceptance-tests/acceptance-pack-spring-demo/pom.xml
index 09c6182..e7b360c 100644
--- a/acceptance-tests/acceptance-pack-spring-demo/pom.xml
+++ b/acceptance-tests/acceptance-pack-spring-demo/pom.xml
@@ -26,7 +26,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
- <artifactId>acceptance-pack-spring</artifactId>
+ <artifactId>acceptance-pack-spring-demo</artifactId>
<name>Pack:Acceptance Tests::Spring</name>
<dependencies>
@@ -80,9 +80,8 @@
<alias>alpha</alias>
<run>
<env>
- <JAVA_OPTS>
- -Dspring.profiles.active=prd,test
- </JAVA_OPTS>
+ <spring.profiles.active>prd,test</spring.profiles.active>
+ <alpha.spec.names>saga-db</alpha.spec.names>
</env>
<links>
<link>postgres:postgresql.servicecomb.io</link>
@@ -115,6 +114,7 @@
-Dorg.jboss.byteman.debug=true -Dorg.jboss.byteman.verbose=true
-javaagent:/maven/saga/byteman.jar=port:9092,address:0.0.0.0,listener:true
</JAVA_OPTS>
+ <omega.spec.names>saga</omega.spec.names>
</env>
<wait>
<log>Started [a-zA-Z]+ in [0-9.]+ seconds</log>
@@ -147,6 +147,7 @@
-Dorg.jboss.byteman.debug=true -Dorg.jboss.byteman.verbose=true
-javaagent:/maven/saga/byteman.jar=port:9093,address:0.0.0.0,listener:true
</JAVA_OPTS>
+ <omega.spec.names>saga</omega.spec.names>
</env>
<wait>
<log>Started [a-zA-Z]+ in [0-9.]+ seconds</log>
@@ -179,6 +180,7 @@
-Dorg.jboss.byteman.debug=true -Dorg.jboss.byteman.verbose=true
-javaagent:/maven/saga/byteman.jar=port:9091,address:0.0.0.0,listener:true
</JAVA_OPTS>
+ <omega.spec.names>saga</omega.spec.names>
</env>
<wait>
<log>Started [a-zA-Z]+ in [0-9.]+ seconds</log>
diff --git a/acceptance-tests/acceptance-pack-tcc-spring-demo/pom.xml b/acceptance-tests/acceptance-pack-tcc-spring-demo/pom.xml
index e29b90c..0f2ca47 100644
--- a/acceptance-tests/acceptance-pack-tcc-spring-demo/pom.xml
+++ b/acceptance-tests/acceptance-pack-tcc-spring-demo/pom.xml
@@ -80,9 +80,8 @@
<alias>alpha</alias>
<run>
<env>
- <JAVA_OPTS>
- -Dspring.profiles.active=prd,test
- </JAVA_OPTS>
+ <spring.profiles.active>prd,test</spring.profiles.active>
+ <alpha.spec.names>tcc-db</alpha.spec.names>
</env>
<links>
<link>postgres:postgresql.servicecomb.io</link>
@@ -111,9 +110,8 @@
<alias>inventory</alias>
<run>
<env>
- <JAVA_OPTS>
- -Dspring.profiles.active=prd
- </JAVA_OPTS>
+ <spring.profiles.active>prd</spring.profiles.active>
+ <omega.spec.names>tcc</omega.spec.names>
</env>
<wait>
<log>Started [a-zA-Z]+ in [0-9.]+ seconds</log>
@@ -140,9 +138,8 @@
<alias>payment</alias>
<run>
<env>
- <JAVA_OPTS>
- -Dspring.profiles.active=prd
- </JAVA_OPTS>
+ <spring.profiles.active>prd</spring.profiles.active>
+ <omega.spec.names>tcc</omega.spec.names>
</env>
<wait>
<log>Started [a-zA-Z]+ in [0-9.]+ seconds</log>
@@ -177,6 +174,9 @@
</tcp>
<time>120000</time>
</wait>
+ <env>
+ <omega.spec.names>tcc</omega.spec.names>
+ </env>
<links>
<link>alpha:alpha-server.servicecomb.io</link>
<link>inventory:inventory.servicecomb.io</link>
diff --git a/alpha/alpha-benchmark/pom.xml b/alpha/alpha-benchmark/pom.xml
index 617a6af..7162cef 100644
--- a/alpha/alpha-benchmark/pom.xml
+++ b/alpha/alpha-benchmark/pom.xml
@@ -36,7 +36,7 @@
</dependency>
<dependency>
<groupId>org.apache.servicecomb.pack</groupId>
- <artifactId>alpha-fsm</artifactId>
+ <artifactId>alpha-spec-saga-fsm</artifactId>
<exclusions>
<exclusion>
<artifactId>log4j-slf4j-impl</artifactId>
diff --git a/alpha/alpha-benchmark/src/main/java/org/apache/servicecomb/pack/alpha/benchmark/Application.java b/alpha/alpha-benchmark/src/main/java/org/apache/servicecomb/pack/alpha/benchmark/Application.java
index bff689d..bf8b33f 100644
--- a/alpha/alpha-benchmark/src/main/java/org/apache/servicecomb/pack/alpha/benchmark/Application.java
+++ b/alpha/alpha-benchmark/src/main/java/org/apache/servicecomb/pack/alpha/benchmark/Application.java
@@ -56,6 +56,7 @@
printHelp();
System.exit(0);
}
+ System.setProperty("omega.spec.names","saga");
SpringApplication.run(Application.class, args);
}
diff --git a/alpha/alpha-core/src/main/java/org/apache/servicecomb/pack/alpha/core/api/APIv1.java b/alpha/alpha-core/src/main/java/org/apache/servicecomb/pack/alpha/core/api/APIv1.java
index 67ebcc5..4dfc72a 100644
--- a/alpha/alpha-core/src/main/java/org/apache/servicecomb/pack/alpha/core/api/APIv1.java
+++ b/alpha/alpha-core/src/main/java/org/apache/servicecomb/pack/alpha/core/api/APIv1.java
@@ -33,7 +33,7 @@
PagingGlobalTransactions getTransactions(String state, int page, int size)
throws Exception;
- Map<String, Long> getTransactionStatistics();
+ Map<String, Long> getTransactionStatistics() throws Exception;
- List<GlobalTransaction> getSlowTransactions(int size);
+ List<GlobalTransaction> getSlowTransactions(int size) throws Exception;
}
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/Lock.java b/alpha/alpha-core/src/main/java/org/apache/servicecomb/pack/alpha/core/metrics/AlphaMetricsEndpoint.java
old mode 100755
new mode 100644
similarity index 77%
copy from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/Lock.java
copy to alpha/alpha-core/src/main/java/org/apache/servicecomb/pack/alpha/core/metrics/AlphaMetricsEndpoint.java
index 1622f13..4c44483
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/Lock.java
+++ b/alpha/alpha-core/src/main/java/org/apache/servicecomb/pack/alpha/core/metrics/AlphaMetricsEndpoint.java
@@ -15,8 +15,13 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.cluster.master.provider;
+package org.apache.servicecomb.pack.alpha.core.metrics;
-public interface Lock {
- void unlock();
+import org.apache.servicecomb.pack.alpha.core.NodeStatus.TypeEnum;
+
+public interface AlphaMetricsEndpoint {
+
+ MetricsBean getMetrics();
+
+ TypeEnum getNodeType();
}
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/FsmAutoConfiguration.java b/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/FsmAutoConfiguration.java
deleted file mode 100644
index aeef923..0000000
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/FsmAutoConfiguration.java
+++ /dev/null
@@ -1,124 +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.pack.alpha.fsm;
-
-import static org.apache.servicecomb.pack.alpha.fsm.spring.integration.akka.SagaDataExtension.SAGA_DATA_EXTENSION_PROVIDER;
-import static org.apache.servicecomb.pack.alpha.fsm.spring.integration.akka.SpringAkkaExtension.SPRING_EXTENSION_PROVIDER;
-
-import akka.actor.ActorRef;
-import akka.actor.ActorSystem;
-import akka.actor.Props;
-import com.typesafe.config.Config;
-import com.typesafe.config.ConfigFactory;
-import java.util.Map;
-import javax.annotation.PostConstruct;
-import org.apache.servicecomb.pack.alpha.fsm.channel.kafka.KafkaChannelAutoConfiguration;
-import org.apache.servicecomb.pack.alpha.fsm.channel.memory.MemoryChannelAutoConfiguration;
-import org.apache.servicecomb.pack.alpha.fsm.channel.rabbit.RabbitChannelAutoConfiguration;
-import org.apache.servicecomb.pack.alpha.fsm.channel.redis.RedisChannelAutoConfiguration;
-import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
-import org.apache.servicecomb.pack.alpha.fsm.repository.NoneTransactionRepository;
-import org.apache.servicecomb.pack.alpha.fsm.repository.channel.DefaultTransactionRepositoryChannel;
-import org.apache.servicecomb.pack.alpha.fsm.repository.elasticsearch.ElasticsearchTransactionRepository;
-import org.apache.servicecomb.pack.alpha.fsm.repository.TransactionRepository;
-import org.apache.servicecomb.pack.alpha.fsm.repository.TransactionRepositoryChannel;
-import org.apache.servicecomb.pack.alpha.fsm.spring.integration.akka.AkkaConfigPropertyAdapter;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.env.ConfigurableEnvironment;
-import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
-
-@Configuration
-@ImportAutoConfiguration({
- MemoryChannelAutoConfiguration.class,
- KafkaChannelAutoConfiguration.class,
- RedisChannelAutoConfiguration.class, RabbitChannelAutoConfiguration.class})
-@ConditionalOnProperty(value = {"alpha.feature.akka.enabled"})
-public class FsmAutoConfiguration {
-
- // TODO
- // Size of bulk request, When this value is greater than 0, the batch data will be lost when the jvm crashes.
- // In the future, we can use Kafka to solve this problem instead of storing it directly in the ES.
- @Value("${alpha.feature.akka.transaction.repository.elasticsearch.batchSize:100}")
- int repositoryElasticsearchBatchSize;
-
- @Value("${alpha.feature.akka.transaction.repository.elasticsearch.refreshTime:5000}")
- int repositoryElasticsearchRefreshTime;
-
- @PostConstruct
- void init() {
- System.setProperty("es.set.netty.runtime.available.processors", "false");
- }
-
- @Bean
- public ActorSystem actorSystem(ConfigurableApplicationContext applicationContext,
- ConfigurableEnvironment environment, MetricsService metricsService,
- TransactionRepositoryChannel repositoryChannel) {
- ActorSystem system = ActorSystem
- .create("alpha-cluster", akkaConfiguration(applicationContext, environment));
-
- SPRING_EXTENSION_PROVIDER.get(system).initialize(applicationContext);
- SAGA_DATA_EXTENSION_PROVIDER.get(system).setRepositoryChannel(repositoryChannel);
- SAGA_DATA_EXTENSION_PROVIDER.get(system).setMetricsService(metricsService);
- return system;
- }
-
- @Bean
- public Config akkaConfiguration(ConfigurableApplicationContext applicationContext,
- ConfigurableEnvironment environment) {
- final Map<String, Object> converted = AkkaConfigPropertyAdapter.getPropertyMap(environment);
- return ConfigFactory.parseMap(converted)
- .withFallback(ConfigFactory.defaultReference(applicationContext.getClassLoader()));
- }
-
- @Bean
- public MetricsService metricsService() {
- return new MetricsService();
- }
-
- @Bean(name = "sagaShardRegionActor")
- public ActorRef sagaShardRegionActor(ActorSystem actorSystem) {
- return actorSystem.actorOf(Props.create(SagaShardRegionActor.class));
- }
-
- @Bean
- @ConditionalOnMissingBean(TransactionRepository.class)
- public TransactionRepository transactionRepository() {
- return new NoneTransactionRepository();
- }
-
- @Bean
- @ConditionalOnProperty(value = "alpha.feature.akka.transaction.repository.type", havingValue = "elasticsearch")
- public TransactionRepository transactionRepository(MetricsService metricsService,
- ElasticsearchRestTemplate template) {
- return new ElasticsearchTransactionRepository(template, metricsService,
- repositoryElasticsearchBatchSize, repositoryElasticsearchRefreshTime);
- }
-
- @Bean
- TransactionRepositoryChannel memoryTransactionRepositoryChannel(TransactionRepository repository,
- MetricsService metricsService) {
- return new DefaultTransactionRepositoryChannel(repository, metricsService);
- }
-
-}
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/memory/MemoryChannelAutoConfiguration.java b/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/memory/MemoryChannelAutoConfiguration.java
deleted file mode 100644
index 7ad7878..0000000
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/memory/MemoryChannelAutoConfiguration.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.pack.alpha.fsm.channel.memory;
-
-import akka.actor.ActorRef;
-import akka.actor.ActorSystem;
-import java.lang.invoke.MethodHandles;
-import javax.annotation.PostConstruct;
-import org.apache.servicecomb.pack.alpha.core.fsm.channel.ActorEventChannel;
-import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-@ConditionalOnProperty(value = "alpha.feature.akka.channel.type", havingValue = "memory", matchIfMissing = true)
-public class MemoryChannelAutoConfiguration {
-
- private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-
- @Value("${alpha.feature.akka.channel.memory.size:-1}")
- int memoryEventChannelMemorySize;
-
- @PostConstruct
- public void init(){
- LOG.info("Memory Channel Init");
- }
-
- @Bean(name = "memoryEventChannel")
- @ConditionalOnMissingBean(ActorEventChannel.class)
- public ActorEventChannel memoryEventChannel(MetricsService metricsService) {
- return new MemoryActorEventChannel(metricsService, memoryEventChannelMemorySize);
- }
-
- @Bean
- MemorySagaEventConsumer sagaEventMemoryConsumer(ActorSystem actorSystem,
- @Qualifier("sagaShardRegionActor") ActorRef sagaShardRegionActor,
- MetricsService metricsService,
- @Qualifier("memoryEventChannel") ActorEventChannel actorEventChannel) {
- return new MemorySagaEventConsumer(actorSystem, sagaShardRegionActor, metricsService,
- (MemoryActorEventChannel) actorEventChannel);
- }
-}
\ No newline at end of file
diff --git a/persistence/persistence-jpa/pom.xml b/alpha/alpha-persistence-jpa/pom.xml
similarity index 94%
rename from persistence/persistence-jpa/pom.xml
rename to alpha/alpha-persistence-jpa/pom.xml
index e4d8ea5..64868cc 100644
--- a/persistence/persistence-jpa/pom.xml
+++ b/alpha/alpha-persistence-jpa/pom.xml
@@ -20,14 +20,14 @@
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>persistence</artifactId>
+ <artifactId>alpha</artifactId>
<groupId>org.apache.servicecomb.pack</groupId>
<version>0.7.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
- <name>Pack::Persistence::JPA</name>
- <artifactId>persistence-jpa</artifactId>
+ <artifactId>alpha-persistence-jpa</artifactId>
+ <name>Pack::Alpha::Persistence::JPA</name>
<dependencies>
<dependency>
@@ -42,6 +42,7 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
+
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>javax.transaction-api</artifactId>
@@ -74,5 +75,4 @@
</plugin>
</plugins>
</build>
-
-</project>
+</project>
\ No newline at end of file
diff --git a/alpha/alpha-server/pom.xml b/alpha/alpha-server/pom.xml
index 9b86862..663a56a 100644
--- a/alpha/alpha-server/pom.xml
+++ b/alpha/alpha-server/pom.xml
@@ -48,7 +48,15 @@
</dependency>
<dependency>
<groupId>org.apache.servicecomb.pack</groupId>
- <artifactId>alpha-fsm</artifactId>
+ <artifactId>alpha-spec-saga-fsm</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.servicecomb.pack</groupId>
+ <artifactId>alpha-spec-saga-db</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.servicecomb.pack</groupId>
+ <artifactId>alpha-spec-tcc-db</artifactId>
</dependency>
<dependency>
<groupId>org.apache.servicecomb.pack</groupId>
@@ -91,15 +99,6 @@
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
- <groupId>org.apache.servicecomb.pack</groupId>
- <artifactId>persistence-jpa</artifactId>
- </dependency>
- <dependency>
- <groupId>org.postgresql</groupId>
- <artifactId>postgresql</artifactId>
- <scope>runtime</scope>
- </dependency>
- <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
@@ -148,7 +147,6 @@
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
- <scope>test</scope>
</dependency>
<dependency>
<groupId>org.awaitility</groupId>
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/AlphaConfig.java b/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/AlphaConfig.java
index 57302aa..7ef7686 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/AlphaConfig.java
+++ b/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/AlphaConfig.java
@@ -17,8 +17,9 @@
package org.apache.servicecomb.pack.alpha.server;
+import com.google.common.eventbus.EventBus;
+import io.grpc.BindableService;
import java.io.IOException;
-import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.BlockingQueue;
@@ -28,35 +29,24 @@
import java.util.concurrent.ScheduledExecutorService;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
-
-import com.google.common.eventbus.EventBus;
-import org.apache.servicecomb.pack.alpha.core.*;
-import org.apache.servicecomb.pack.alpha.core.fsm.channel.ActorEventChannel;
-import org.apache.servicecomb.pack.alpha.server.fsm.GrpcSagaEventService;
-import org.apache.servicecomb.pack.alpha.server.tcc.GrpcTccEventService;
-import org.apache.servicecomb.pack.alpha.server.tcc.callback.TccPendingTaskRunner;
-import org.apache.servicecomb.pack.alpha.server.tcc.service.TccEventScanner;
-import org.apache.servicecomb.pack.alpha.server.tcc.service.TccTxEventService;
-import org.apache.servicecomb.pack.common.AlphaMetaKeys;
-import org.apache.servicecomb.pack.contract.grpc.ServerMeta;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.servicecomb.pack.alpha.core.CompositeOmegaCallback;
+import org.apache.servicecomb.pack.alpha.core.NodeStatus;
+import org.apache.servicecomb.pack.alpha.core.OmegaCallback;
+import org.apache.servicecomb.pack.alpha.core.PendingTaskRunner;
+import org.apache.servicecomb.pack.alpha.core.PushBackOmegaCallback;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import io.grpc.BindableService;
-
@EntityScan(basePackages = "org.apache.servicecomb.pack.alpha")
@Configuration
public class AlphaConfig {
- private static final Logger LOG = LoggerFactory.getLogger(AlphaConfig.class);
+
private final BlockingQueue<Runnable> pendingCompensations = new LinkedBlockingQueue<>();
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
@@ -89,21 +79,6 @@
OmegaCallback omegaCallback(Map<String, Map<String, OmegaCallback>> callbacks) {
return new PushBackOmegaCallback(pendingCompensations, new CompositeOmegaCallback(callbacks));
}
-
- @Bean
- TxEventRepository springTxEventRepository(TxEventEnvelopeRepository eventRepo) {
- return new SpringTxEventRepository(eventRepo);
- }
-
- @Bean
- CommandRepository springCommandRepository(TxEventEnvelopeRepository eventRepo, CommandEntityRepository commandRepository) {
- return new SpringCommandRepository(eventRepo, commandRepository);
- }
-
- @Bean
- TxTimeoutRepository springTxTimeoutRepository(TxTimeoutEntityRepository timeoutRepo) {
- return new SpringTxTimeoutRepository(timeoutRepo);
- }
@Bean
ScheduledExecutorService compensationScheduler() {
@@ -111,98 +86,21 @@
}
@Bean
- NodeStatus nodeStatus (){
- if(masterEnabled){
+ NodeStatus nodeStatus() {
+ if (masterEnabled) {
return new NodeStatus(NodeStatus.TypeEnum.SLAVE);
- }else{
+ } else {
return new NodeStatus(NodeStatus.TypeEnum.MASTER);
}
}
@Bean
- TxConsistentService txConsistentService(
- @Value("${alpha.event.pollingInterval:500}") int eventPollingInterval,
- @Value("${alpha.event.scanner.enabled:true}") boolean eventScannerEnabled,
- ScheduledExecutorService scheduler,
- TxEventRepository eventRepository,
- CommandRepository commandRepository,
- TxTimeoutRepository timeoutRepository,
- OmegaCallback omegaCallback,
- NodeStatus nodeStatus) {
- if (eventScannerEnabled) {
- new EventScanner(scheduler,
- eventRepository, commandRepository, timeoutRepository,
- omegaCallback, eventPollingInterval, nodeStatus).run();
- LOG.info("Starting the EventScanner.");
- }
- TxConsistentService consistentService = new TxConsistentService(eventRepository);
- return consistentService;
- }
-
- @Bean
- TccPendingTaskRunner tccPendingTaskRunner() {
- return new TccPendingTaskRunner(delay);
- }
-
- @Bean
- @ConditionalOnProperty(name = "alpha.feature.tcc.enabled", havingValue = "true", matchIfMissing = true)
- GrpcTccEventService grpcTccEventService(TccTxEventService tccTxEventService, TccPendingTaskRunner tccPendingTaskRunner, TccEventScanner tccEventScanner) {
- // start the service which are needed for TCC
- tccPendingTaskRunner.start();
- tccEventScanner.start();
- Runtime.getRuntime().addShutdownHook(new Thread(() -> {
- tccPendingTaskRunner.shutdown();
- tccEventScanner.shutdown();
- }));
- return new GrpcTccEventService(tccTxEventService);
- }
-
- @Bean
- TccEventScanner tccEventScanner(TccTxEventService tccTxEventService) {
- return new TccEventScanner(tccTxEventService, delay, globalTxTimeoutSeconds);
- }
-
-
- @Bean()
- @ConditionalOnProperty(name = "alpha.feature.akka.enabled", havingValue = "false", matchIfMissing = true)
- ServerStartable serverStartable(GrpcServerConfig serverConfig, TxConsistentService txConsistentService,
- Map<String, Map<String, OmegaCallback>> omegaCallbacks, @Autowired(required = false) GrpcTccEventService grpcTccEventService,
- @Qualifier("alphaEventBus") EventBus eventBus) throws IOException {
- ServerMeta serverMeta = ServerMeta.newBuilder()
- .putMeta(AlphaMetaKeys.AkkaEnabled.name(), String.valueOf(false)).build();
- List<BindableService> bindableServices = new ArrayList();
- bindableServices.add(new GrpcTxEventEndpointImpl(txConsistentService, omegaCallbacks, serverMeta));
- if (grpcTccEventService != null) {
- LOG.info("alpha.feature.tcc.enable=true, starting the TCC service.");
- bindableServices.add(grpcTccEventService);
- } else {
- LOG.info("alpha.feature.tcc.enable=false, the TCC service is disabled.");
- }
+ ServerStartable serverStartableWithAkka(GrpcServerConfig serverConfig,
+ @Qualifier("alphaEventBus") EventBus eventBus, List<BindableService> bindableServices)
+ throws IOException {
ServerStartable bootstrap = new GrpcStartable(serverConfig, eventBus,
bindableServices.toArray(new BindableService[0]));
new Thread(bootstrap::start).start();
- LOG.info("alpha.feature.akka.enabled=false, starting the saga db service");
- return bootstrap;
- }
-
- @Bean
- @ConditionalOnProperty(name= "alpha.feature.akka.enabled", havingValue = "true")
- ServerStartable serverStartableWithAkka(GrpcServerConfig serverConfig,
- Map<String, Map<String, OmegaCallback>> omegaCallbacks, @Autowired(required = false) GrpcTccEventService grpcTccEventService,
- @Qualifier("alphaEventBus") EventBus eventBus, ActorEventChannel actorEventChannel) throws IOException {
- ServerMeta serverMeta = ServerMeta.newBuilder()
- .putMeta(AlphaMetaKeys.AkkaEnabled.name(), String.valueOf(true)).build();
- List<BindableService> bindableServices = new ArrayList();
- bindableServices.add(new GrpcSagaEventService(actorEventChannel, omegaCallbacks, serverMeta));
- if (grpcTccEventService != null) {
- LOG.info("alpha.feature.tcc.enable=true, starting the TCC service.");
- bindableServices.add(grpcTccEventService);
- } else {
- LOG.info("alpha.feature.tcc.enable=false, the TCC service is disabled.");
- }
- ServerStartable bootstrap = new GrpcStartable(serverConfig, eventBus, bindableServices.toArray(new BindableService[0]));
- new Thread(bootstrap::start).start();
- LOG.info("alpha.feature.akka.enabled=true, starting the saga akka service.");
return bootstrap;
}
diff --git a/alpha/alpha-server/src/main/resources/application.yaml b/alpha/alpha-server/src/main/resources/application.yaml
index 40b010b..059a596 100644
--- a/alpha/alpha-server/src/main/resources/application.yaml
+++ b/alpha/alpha-server/src/main/resources/application.yaml
@@ -22,21 +22,59 @@
server:
host: ${server.host}
port: 8080
+ spec:
+ names: saga-db
+ saga:
+ akka:
+ channel:
+ name: memory
+ memory:
+ max-length: -1
+ kafka:
+ topic: servicecomb-pack-actor-event
+ bootstrap-servers: 127.0.0.1:9092
+ consumer:
+ group-id: servicecomb-pack
+ auto.offset.reset: earliest
+ producer:
+ batch-size: 16384
+ retries: 0
+ buffer.memory: 33554432
+ repository:
+ name: elasticsearch
+ elasticsearch:
+ uris: http://localhost:9200
+ batch-size: 100
+ refresh-time: 5000
+ db:
+ datasource:
+ username: sa
+ password:
+ url: jdbc:hsqldb:mem:saga
+ initialization-mode: always
+ cluster:
+ enabled: true
+ type: jdbc
+ expire: 5000
+ tcc:
+ db:
+ memory-mode: true
+ datasource:
+ username: sa
+ password:
+ url: jdbc:hsqldb:mem:saga
+ initialization-mode: always
+
feature:
nativetransport: false # Default disabled Netty Native Transport
- akka:
- enabled: false
- channel:
- type: memory
- transaction:
- repository:
- type: elasticsearch
spring:
- datasource:
- initialization-mode: always
main:
allow-bean-definition-overriding: true
+ jpa:
+ properties:
+ eclipselink:
+ ddl-generation: none
cloud:
consul:
host: 0.0.0.0
@@ -123,17 +161,29 @@
---
spring:
profiles: prd
- datasource:
- username: saga
- password: password
- url: jdbc:postgresql://postgresql.servicecomb.io:5432/saga?useSSL=false
- platform: postgresql
- continue-on-error: false
jpa:
properties:
eclipselink:
ddl-generation: none
-
+alpha:
+ spec:
+ saga:
+ db:
+ datasource:
+ username: saga
+ password: password
+ url: jdbc:postgresql://postgresql.servicecomb.io:5432/saga?useSSL=false
+ platform: postgresql
+ continue-on-error: false
+ tcc:
+ db:
+ memory-mode: false
+ datasource:
+ username: saga
+ password: password
+ url: jdbc:postgresql://postgresql.servicecomb.io:5432/saga?useSSL=false
+ platform: postgresql
+ continue-on-error: false
---
spring:
profiles: mysql
diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/AlphaIntegrationTest.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/AlphaIntegrationTest.java
index 523783f..0799426 100644
--- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/AlphaIntegrationTest.java
+++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/AlphaIntegrationTest.java
@@ -48,6 +48,9 @@
import javax.annotation.PostConstruct;
import org.apache.servicecomb.pack.alpha.core.*;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.CommandEntityRepository;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.TxEventEnvelopeRepository;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.TxTimeoutEntityRepository;
import org.apache.servicecomb.pack.common.EventType;
import org.apache.servicecomb.pack.common.AlphaMetaKeys;
import org.apache.servicecomb.pack.contract.grpc.GrpcAck;
diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/AlphaIntegrationWithRandomPortTest.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/AlphaIntegrationWithRandomPortTest.java
index 5e05e2d..6ec5a72 100644
--- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/AlphaIntegrationWithRandomPortTest.java
+++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/AlphaIntegrationWithRandomPortTest.java
@@ -23,6 +23,9 @@
import io.grpc.stub.StreamObserver;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.servicecomb.pack.alpha.core.*;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.CommandEntityRepository;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.TxEventEnvelopeRepository;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.TxTimeoutEntityRepository;
import org.apache.servicecomb.pack.common.EventType;
import org.apache.servicecomb.pack.contract.grpc.*;
import org.apache.servicecomb.pack.contract.grpc.TxEventServiceGrpc.TxEventServiceBlockingStub;
diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/fsm/AlphaIntegrationFsmTest.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/AlphaIntegrationFsmTest.java
similarity index 97%
rename from alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/fsm/AlphaIntegrationFsmTest.java
rename to alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/AlphaIntegrationFsmTest.java
index 49966bc..484bf7a 100644
--- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/fsm/AlphaIntegrationFsmTest.java
+++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/AlphaIntegrationFsmTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.fsm;
+package org.apache.servicecomb.pack.alpha.spec.saga.akka;
import static java.util.concurrent.TimeUnit.SECONDS;
import static org.awaitility.Awaitility.await;
@@ -59,20 +59,17 @@
"alpha.event.pollingInterval=1",
"spring.main.allow-bean-definition-overriding=true",
"spring.profiles.active=akka-persistence-mem",
- //akka
- "alpha.feature.akka.enabled=true",
- "alpha.feature.tcc.enabled=false",
- "alpha.feature.akka.channel.type=memory",
+ // saga-akka
+ "alpha.spec.names=saga-akka",
+ "alpha.spec.saga.akka.channel.name=memory",
+ "alpha.spec.saga.akka.channel.memory.max-length=-1",
+ "alpha.spec.saga.akka.repository.name=elasticsearch",
+ "alpha.spec.saga.akka.repository.elasticsearch.uris=http://localhost:9200",
+ // akka
"akkaConfig.akka.persistence.journal.plugin=akka.persistence.journal.inmem",
"akkaConfig.akka.persistence.journal.leveldb.dir=target/example/journal",
"akkaConfig.akka.persistence.snapshot-store.plugin=akka.persistence.snapshot-store.local",
- "akkaConfig.akka.persistence.snapshot-store.local.dir=target/example/snapshots",
- //elasticsearch
- "alpha.feature.akka.transaction.repository.channel.type=memory",
- "alpha.feature.akka.transaction.repository.type=elasticsearch",
- "spring.data.elasticsearch.cluster-name=elasticsearch",
- "spring.data.elasticsearch.cluster-nodes=localhost:9300",
- "spring.elasticsearch.rest.uris=http://localhost:9200"
+ "akkaConfig.akka.persistence.snapshot-store.local.dir=target/example/snapshots"
})
public class AlphaIntegrationFsmTest {
private static final OmegaEventSender omegaEventSender = OmegaEventSender.builder().build();
diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/fsm/OmegaEventSagaSimulator.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/OmegaEventSagaSimulator.java
similarity index 99%
rename from alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/fsm/OmegaEventSagaSimulator.java
rename to alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/OmegaEventSagaSimulator.java
index 454f6df..2f4e8d6 100644
--- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/fsm/OmegaEventSagaSimulator.java
+++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/OmegaEventSagaSimulator.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.fsm;
+package org.apache.servicecomb.pack.alpha.spec.saga.akka;
import com.google.protobuf.ByteString;
import java.util.ArrayList;
diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/fsm/OmegaEventSender.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/OmegaEventSender.java
similarity index 98%
rename from alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/fsm/OmegaEventSender.java
rename to alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/OmegaEventSender.java
index da3e6e7..53b1326 100644
--- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/fsm/OmegaEventSender.java
+++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/OmegaEventSender.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.fsm;
+package org.apache.servicecomb.pack.alpha.spec.saga.akka;
import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/cluster/master/ClusterLockServiceTest.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/db/ClusterLockServiceTest.java
similarity index 91%
rename from alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/cluster/master/ClusterLockServiceTest.java
rename to alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/db/ClusterLockServiceTest.java
index 9644b76..00f5eb2 100644
--- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/cluster/master/ClusterLockServiceTest.java
+++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/db/ClusterLockServiceTest.java
@@ -15,12 +15,14 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.cluster.master;
+package org.apache.servicecomb.pack.alpha.spec.saga.db;
import org.apache.servicecomb.pack.alpha.server.AlphaApplication;
import org.apache.servicecomb.pack.alpha.server.AlphaConfig;
-import org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc.jpa.MasterLock;
-import org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc.jpa.MasterLockRepository;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.ClusterLockService;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc.MasterLockEntityRepository;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc.jpa.MasterLock;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc.jpa.MasterLockRepository;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -30,7 +32,6 @@
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.junit4.SpringRunner;
-import org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc.MasterLockEntityRepository;
import java.util.Optional;
@@ -42,7 +43,7 @@
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {AlphaApplication.class, AlphaConfig.class},
properties = {
- "alpha.cluster.master.enabled=true",
+ "alpha.spec.saga.db.cluster.enabled=true",
"alpha.server.host=0.0.0.0",
"alpha.server.port=8090",
"alpha.event.pollingInterval=1",
@@ -57,7 +58,7 @@
@Value("${spring.application.name:servicecomb-alpha-server}")
private String serviceName;
- @Value("${alpha.cluster.master.expire:5000}")
+ @Value("${alpha.spec.saga.db.cluster.expire:5000}")
private int expire;
@Autowired
diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/AlphaTccEventControllerTest.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/AlphaTccEventControllerTest.java
similarity index 89%
rename from alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/AlphaTccEventControllerTest.java
rename to alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/AlphaTccEventControllerTest.java
index 09c1c9e..19ecc43 100644
--- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/AlphaTccEventControllerTest.java
+++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/AlphaTccEventControllerTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db;
import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
import static java.util.Collections.singletonList;
@@ -26,9 +26,10 @@
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.TccTxType;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.TccTxEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.service.TccTxEventRepository;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.TccTxType;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.TccTxEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.service.TccTxEventRepository;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.test.AlphaTccEventController;
import org.apache.servicecomb.pack.common.TransactionStatus;
import org.junit.Before;
import org.junit.Test;
diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/AlphaTccServerTestBase.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/AlphaTccServerTestBase.java
similarity index 95%
rename from alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/AlphaTccServerTestBase.java
rename to alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/AlphaTccServerTestBase.java
index 9aada8a..49203d4 100644
--- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/AlphaTccServerTestBase.java
+++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/AlphaTccServerTestBase.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db;
import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
import static java.util.concurrent.TimeUnit.SECONDS;
@@ -32,12 +32,12 @@
import java.util.UUID;
import java.util.concurrent.ConcurrentLinkedQueue;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.TccTxType;
-import org.apache.servicecomb.pack.alpha.server.tcc.callback.GrpcOmegaTccCallback;
-import org.apache.servicecomb.pack.alpha.server.tcc.callback.OmegaCallbacksRegistry;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.TccTxEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.EventConverter;
-import org.apache.servicecomb.pack.alpha.server.tcc.service.TccTxEventRepository;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.TccTxType;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.callback.GrpcOmegaTccCallback;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.callback.OmegaCallbacksRegistry;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.TccTxEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.EventConverter;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.service.TccTxEventRepository;
import org.apache.servicecomb.pack.common.TransactionStatus;
import org.apache.servicecomb.pack.contract.grpc.*;
import org.apache.servicecomb.pack.contract.grpc.TccEventServiceGrpc.TccEventServiceBlockingStub;
@@ -96,7 +96,8 @@
asyncStub.onConnected(serviceConfig, commandStreamObserver);
awaitUntilConnected();
assertThat(
- OmegaCallbacksRegistry.retrieve(serviceName, instanceId), is(instanceOf(GrpcOmegaTccCallback.class))
+ OmegaCallbacksRegistry.retrieve(serviceName, instanceId), is(instanceOf(
+ GrpcOmegaTccCallback.class))
);
}
diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/MemoryAlphaTccServerTest.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/MemoryAlphaTccServerTest.java
similarity index 88%
rename from alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/MemoryAlphaTccServerTest.java
rename to alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/MemoryAlphaTccServerTest.java
index c0106e8..dfed27b 100644
--- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/MemoryAlphaTccServerTest.java
+++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/MemoryAlphaTccServerTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db;
import io.grpc.netty.NettyChannelBuilder;
import org.junit.BeforeClass;
@@ -26,9 +26,11 @@
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {TccApplication.class},
properties = {
+ "alpha.spec.names=tcc-db",
+ "alpha.spec.tcc.db.memory-mode=true",
"alpha.server.host=0.0.0.0",
"alpha.server.port=8190",
- "spring.profiles.active=memory,tccTest"
+ "spring.profiles.active=tccTest"
})
public class MemoryAlphaTccServerTest extends AlphaTccServerTestBase {
diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/RdbAlphaTccServerTest.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/RdbAlphaTccServerTest.java
similarity index 91%
rename from alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/RdbAlphaTccServerTest.java
rename to alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/RdbAlphaTccServerTest.java
index 61661cd..10dfbbb 100644
--- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/RdbAlphaTccServerTest.java
+++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/RdbAlphaTccServerTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db;
import io.grpc.netty.NettyChannelBuilder;
import org.junit.BeforeClass;
@@ -26,6 +26,8 @@
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {TccApplication.class},
properties = {
+ "alpha.spec.names=tcc-db",
+ "alpha.spec.tcc.db.memory-mode=false",
"alpha.server.host=0.0.0.0",
"alpha.server.port=8091",
"spring.profiles.active=tccTest"
diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/TccApplication.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/TccApplication.java
similarity index 95%
rename from alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/TccApplication.java
rename to alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/TccApplication.java
index abd0f5f..45d6cc6 100644
--- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/TccApplication.java
+++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/TccApplication.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db;
import org.apache.servicecomb.pack.alpha.server.GrpcServerConfig;
import org.springframework.boot.SpringApplication;
diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/TccCallbackEngineTest.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/TccCallbackEngineTest.java
similarity index 90%
rename from alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/TccCallbackEngineTest.java
rename to alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/TccCallbackEngineTest.java
index 4d66ff7..a275a54 100644
--- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/TccCallbackEngineTest.java
+++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/TccCallbackEngineTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db;
import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
import static org.hamcrest.Matchers.is;
@@ -28,12 +28,12 @@
import io.grpc.stub.StreamObserver;
import java.util.UUID;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.ParticipatedEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.TccTxType;
-import org.apache.servicecomb.pack.alpha.server.tcc.callback.OmegaCallbacksRegistry;
-import org.apache.servicecomb.pack.alpha.server.tcc.callback.TccCallbackEngine;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.GlobalTxEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.service.TccTxEventService;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.ParticipatedEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.TccTxType;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.callback.OmegaCallbacksRegistry;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.callback.TccCallbackEngine;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.GlobalTxEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.service.TccTxEventService;
import org.apache.servicecomb.pack.common.TransactionStatus;
import org.apache.servicecomb.pack.contract.grpc.GrpcServiceConfig;
import org.junit.After;
@@ -47,6 +47,8 @@
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {TccApplication.class},
properties = {
+ "alpha.spec.names=tcc-db",
+ "alpha.spec.tcc.db.memory-mode=true",
"alpha.server.host=0.0.0.0",
"alpha.server.port=8092",
"alpha.compensation.retry.delay=30",
diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/TccConfiguration.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/TccConfiguration.java
similarity index 89%
rename from alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/TccConfiguration.java
rename to alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/TccConfiguration.java
index 514565c..10b025f 100644
--- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/TccConfiguration.java
+++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/TccConfiguration.java
@@ -15,15 +15,15 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db;
import com.google.common.eventbus.EventBus;
import org.apache.servicecomb.pack.alpha.server.GrpcServerConfig;
import org.apache.servicecomb.pack.alpha.server.GrpcStartable;
import org.apache.servicecomb.pack.alpha.server.ServerStartable;
-import org.apache.servicecomb.pack.alpha.server.tcc.callback.TccPendingTaskRunner;
-import org.apache.servicecomb.pack.alpha.server.tcc.service.TccEventScanner;
-import org.apache.servicecomb.pack.alpha.server.tcc.service.TccTxEventService;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.callback.TccPendingTaskRunner;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.service.TccEventScanner;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.service.TccTxEventService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/TccCoordinateCommandStreamObserver.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/TccCoordinateCommandStreamObserver.java
similarity index 96%
rename from alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/TccCoordinateCommandStreamObserver.java
rename to alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/TccCoordinateCommandStreamObserver.java
index b768de2..c07756e 100644
--- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/TccCoordinateCommandStreamObserver.java
+++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/TccCoordinateCommandStreamObserver.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db;
import io.grpc.stub.StreamObserver;
import java.util.Queue;
diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/EventConverterTest.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/EventConverterTest.java
similarity index 95%
rename from alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/EventConverterTest.java
rename to alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/EventConverterTest.java
index a9f2e98..992d939 100644
--- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/EventConverterTest.java
+++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/EventConverterTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.jpa;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa;
import org.junit.Test;
import static org.hamcrest.core.Is.is;
diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/service/MemoryEventRegistryTest.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/MemoryEventRegistryTest.java
similarity index 95%
rename from alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/service/MemoryEventRegistryTest.java
rename to alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/MemoryEventRegistryTest.java
index add543d..45613c8 100644
--- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/service/MemoryEventRegistryTest.java
+++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/MemoryEventRegistryTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.service;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.service;
import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
import static org.hamcrest.core.Is.is;
@@ -26,8 +26,8 @@
import java.util.List;
import java.util.Optional;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.TccTxType;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.TccTxEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.TccTxType;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.TccTxEvent;
import org.apache.servicecomb.pack.common.TransactionStatus;
import org.junit.Before;
import org.junit.Test;
diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/service/TccTxEventServiceTest.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/TccTxEventServiceTest.java
similarity index 92%
rename from alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/service/TccTxEventServiceTest.java
rename to alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/TccTxEventServiceTest.java
index e1c6e11..44e2ab7 100644
--- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/service/TccTxEventServiceTest.java
+++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/TccTxEventServiceTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.service;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.service;
import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
import static java.util.concurrent.TimeUnit.SECONDS;
@@ -30,14 +30,14 @@
import java.util.List;
import java.util.Optional;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.GlobalTxEventRepository;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.ParticipatedEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.ParticipatedEventRepository;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.TccTxType;
-import org.apache.servicecomb.pack.alpha.server.tcc.TccApplication;
-import org.apache.servicecomb.pack.alpha.server.tcc.callback.OmegaCallbacksRegistry;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.GlobalTxEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.TccTxEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.GlobalTxEventRepository;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.ParticipatedEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.ParticipatedEventRepository;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.TccTxType;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.TccApplication;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.callback.OmegaCallbacksRegistry;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.GlobalTxEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.TccTxEvent;
import org.apache.servicecomb.pack.common.TransactionStatus;
import org.apache.servicecomb.pack.contract.grpc.GrpcServiceConfig;
import org.apache.servicecomb.pack.contract.grpc.GrpcTccCoordinateCommand;
@@ -51,6 +51,8 @@
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {TccApplication.class}, properties = {
+ "alpha.spec.names=tcc-db",
+ "alpha.spec.tcc.db.memory-mode=false",
"spring.jpa.show-sql=true",
"spring.profiles.active=tccTest"
})
diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/service/TccTxEventServiceTransactionTest.java b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/TccTxEventServiceTransactionTest.java
similarity index 85%
rename from alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/service/TccTxEventServiceTransactionTest.java
rename to alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/TccTxEventServiceTransactionTest.java
index cea33d8..393ec4e 100644
--- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/tcc/service/TccTxEventServiceTransactionTest.java
+++ b/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/TccTxEventServiceTransactionTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.service;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.service;
import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
import static org.hamcrest.Matchers.is;
@@ -26,15 +26,15 @@
import java.util.List;
import java.util.Optional;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.GlobalTxEventRepository;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.ParticipatedEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.ParticipatedEventRepository;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.TccTxEventDBRepository;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.TccTxType;
-import org.apache.servicecomb.pack.alpha.server.tcc.TccApplication;
-import org.apache.servicecomb.pack.alpha.server.tcc.TccConfiguration;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.GlobalTxEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.TccTxEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.GlobalTxEventRepository;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.ParticipatedEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.ParticipatedEventRepository;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.TccTxEventDBRepository;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.TccTxType;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.TccApplication;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.TccConfiguration;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.GlobalTxEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.TccTxEvent;
import org.apache.servicecomb.pack.common.TransactionStatus;
import org.junit.After;
import org.junit.Before;
@@ -47,6 +47,7 @@
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {TccApplication.class, TccConfiguration.class}, properties = {
+ "alpha.spec.names=tcc-db",
"spring.profiles.active=tccTest"
})
public class TccTxEventServiceTransactionTest {
diff --git a/alpha/alpha-spec-saga-db/pom.xml b/alpha/alpha-spec-saga-db/pom.xml
new file mode 100644
index 0000000..81a8970
--- /dev/null
+++ b/alpha/alpha-spec-saga-db/pom.xml
@@ -0,0 +1,80 @@
+<?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>alpha</artifactId>
+ <groupId>org.apache.servicecomb.pack</groupId>
+ <version>0.7.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>alpha-spec-saga-db</artifactId>
+ <name>Pack::Alpha::Specification::Saga::DB</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-autoconfigure</artifactId>
+ </dependency>
+
+ <!-- servicecomb -->
+ <dependency>
+ <groupId>org.apache.servicecomb.pack</groupId>
+ <artifactId>pack-contract-grpc</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.servicecomb.pack</groupId>
+ <artifactId>alpha-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.servicecomb.pack</groupId>
+ <artifactId>alpha-persistence-jpa</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.postgresql</groupId>
+ <artifactId>postgresql</artifactId>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-web</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- test -->
+ <dependency>
+ <groupId>com.github.seanyinx</groupId>
+ <artifactId>unit-scaffolding</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/AlphaSpecSagaDbAutoConfiguration.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/AlphaSpecSagaDbAutoConfiguration.java
new file mode 100644
index 0000000..1ecb1ba
--- /dev/null
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/AlphaSpecSagaDbAutoConfiguration.java
@@ -0,0 +1,148 @@
+/*
+ * 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.pack.alpha.spec.saga.db;
+
+import java.lang.invoke.MethodHandles;
+import java.util.Map;
+import java.util.concurrent.ScheduledExecutorService;
+import org.apache.servicecomb.pack.alpha.core.CommandRepository;
+import org.apache.servicecomb.pack.alpha.core.EventScanner;
+import org.apache.servicecomb.pack.alpha.core.NodeStatus;
+import org.apache.servicecomb.pack.alpha.core.OmegaCallback;
+import org.apache.servicecomb.pack.alpha.core.TxConsistentService;
+import org.apache.servicecomb.pack.alpha.core.TxEventRepository;
+import org.apache.servicecomb.pack.alpha.core.TxTimeoutRepository;
+import org.apache.servicecomb.pack.alpha.core.api.APIv1;
+import org.apache.servicecomb.pack.alpha.core.metrics.AlphaMetricsEndpoint;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.api.SagaDbAPIv1Controller;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.api.SagaDbAPIv1Impl;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.ClusterLockService;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc.LockProviderJdbcConfiguration;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.metrics.AlphaMetricsEndpointImpl;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.metrics.MetricsService;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.properties.SpecSagaDbProperties;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.test.AlphaEventController;
+import org.apache.servicecomb.pack.common.AlphaMetaKeys;
+import org.apache.servicecomb.pack.contract.grpc.ServerMeta;
+import org.apache.servicecomb.pack.persistence.jpa.EclipseLinkJpaConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.context.annotation.Profile;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+
+@Configuration
+@ImportAutoConfiguration({SpecSagaDbProperties.class, EclipseLinkJpaConfiguration.class,
+ LockProviderJdbcConfiguration.class})
+@EnableJpaRepositories(basePackages = "org.apache.servicecomb.pack.alpha.spec.saga.db")
+@ConditionalOnExpression("'${alpha.spec.names}'.contains('saga-db')")
+public class AlphaSpecSagaDbAutoConfiguration {
+
+ private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+ public AlphaSpecSagaDbAutoConfiguration() {
+ LOG.info("Alpha Specification Saga DB");
+ }
+
+ @Bean
+ @Primary
+ public DataSourceProperties dataSourceProperties(SpecSagaDbProperties specSagaDbProperties) {
+ return specSagaDbProperties.getDatasource();
+ }
+
+ @Bean
+ CommandRepository springCommandRepository(TxEventEnvelopeRepository eventRepo,
+ CommandEntityRepository commandRepository) {
+ return new SpringCommandRepository(eventRepo, commandRepository);
+ }
+
+ @Bean
+ TxTimeoutRepository springTxTimeoutRepository(TxTimeoutEntityRepository timeoutRepo) {
+ return new SpringTxTimeoutRepository(timeoutRepo);
+ }
+
+ @Bean
+ TxEventRepository springTxEventRepository(TxEventEnvelopeRepository eventRepo) {
+ return new SpringTxEventRepository(eventRepo);
+ }
+
+ @Bean
+ TxConsistentService txConsistentService(
+ @Value("${alpha.event.pollingInterval:500}") int eventPollingInterval,
+ @Value("${alpha.event.scanner.enabled:true}") boolean eventScannerEnabled,
+ ScheduledExecutorService scheduler,
+ TxEventRepository eventRepository,
+ CommandRepository commandRepository,
+ TxTimeoutRepository timeoutRepository,
+ OmegaCallback omegaCallback,
+ NodeStatus nodeStatus) {
+ if (eventScannerEnabled) {
+ new EventScanner(scheduler,
+ eventRepository, commandRepository, timeoutRepository,
+ omegaCallback, eventPollingInterval, nodeStatus).run();
+ LOG.info("Starting the EventScanner.");
+ }
+ TxConsistentService consistentService = new TxConsistentService(eventRepository);
+ return consistentService;
+ }
+
+ @Bean
+ GrpcTxEventEndpointImpl grpcTxEventEndpoint(TxConsistentService txConsistentService,
+ Map<String, Map<String, OmegaCallback>> omegaCallbacks) {
+ ServerMeta serverMeta = ServerMeta.newBuilder()
+ .putMeta(AlphaMetaKeys.AkkaEnabled.name(), String.valueOf(false)).build();
+ return new GrpcTxEventEndpointImpl(txConsistentService, omegaCallbacks, serverMeta);
+ }
+
+ @Bean
+ ClusterLockService clusterLockService() {
+ return new ClusterLockService();
+ }
+
+ @Bean
+ public MetricsService metricsService() {
+ return new MetricsService();
+ }
+
+ @Bean
+ AlphaMetricsEndpoint alphaMetricsEndpoint(){
+ return new AlphaMetricsEndpointImpl();
+ }
+
+ @Bean
+ SagaDbAPIv1Controller apIv1Controller(){
+ return new SagaDbAPIv1Controller();
+ }
+
+ @Bean
+ APIv1 apIv1(){
+ return new SagaDbAPIv1Impl();
+ }
+
+ @Bean
+ @Profile("test")
+ AlphaEventController alphaEventController(TxEventEnvelopeRepository eventRepository){
+ return new AlphaEventController(eventRepository);
+ }
+}
\ No newline at end of file
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/CommandEntityRepository.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/CommandEntityRepository.java
similarity index 97%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/CommandEntityRepository.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/CommandEntityRepository.java
index 60fd28b..7eb5d94 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/CommandEntityRepository.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/CommandEntityRepository.java
@@ -15,13 +15,11 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server;
+package org.apache.servicecomb.pack.alpha.spec.saga.db;
import java.util.List;
-
import javax.persistence.LockModeType;
import javax.transaction.Transactional;
-
import org.apache.servicecomb.pack.alpha.core.Command;
import org.springframework.data.jpa.repository.Lock;
import org.springframework.data.jpa.repository.Modifying;
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/GrpcOmegaCallback.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/GrpcOmegaCallback.java
similarity index 96%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/GrpcOmegaCallback.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/GrpcOmegaCallback.java
index 97b7b61..45e0f48 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/GrpcOmegaCallback.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/GrpcOmegaCallback.java
@@ -18,16 +18,14 @@
*
*/
-package org.apache.servicecomb.pack.alpha.server;
+package org.apache.servicecomb.pack.alpha.spec.saga.db;
+import com.google.protobuf.ByteString;
+import io.grpc.stub.StreamObserver;
import org.apache.servicecomb.pack.alpha.core.OmegaCallback;
import org.apache.servicecomb.pack.alpha.core.TxEvent;
import org.apache.servicecomb.pack.contract.grpc.GrpcCompensateCommand;
-import com.google.protobuf.ByteString;
-
-import io.grpc.stub.StreamObserver;
-
class GrpcOmegaCallback implements OmegaCallback {
private final StreamObserver<GrpcCompensateCommand> observer;
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/GrpcTxEventEndpointImpl.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/GrpcTxEventEndpointImpl.java
similarity index 98%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/GrpcTxEventEndpointImpl.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/GrpcTxEventEndpointImpl.java
index 8263de5..4141d3d 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/GrpcTxEventEndpointImpl.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/GrpcTxEventEndpointImpl.java
@@ -18,15 +18,15 @@
*
*/
-package org.apache.servicecomb.pack.alpha.server;
+package org.apache.servicecomb.pack.alpha.spec.saga.db;
import static java.util.Collections.emptyMap;
+import io.grpc.stub.StreamObserver;
import java.lang.invoke.MethodHandles;
import java.util.Date;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-
import org.apache.servicecomb.pack.alpha.core.OmegaCallback;
import org.apache.servicecomb.pack.alpha.core.TxConsistentService;
import org.apache.servicecomb.pack.alpha.core.TxEvent;
@@ -36,8 +36,6 @@
import org.apache.servicecomb.pack.contract.grpc.GrpcTxEvent;
import org.apache.servicecomb.pack.contract.grpc.ServerMeta;
import org.apache.servicecomb.pack.contract.grpc.TxEventServiceGrpc.TxEventServiceImplBase;
-
-import io.grpc.stub.StreamObserver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/console/saga/SagaTransactionsController.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/SagaTransactionsController.java
similarity index 97%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/console/saga/SagaTransactionsController.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/SagaTransactionsController.java
index 339321a..7f347ae 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/console/saga/SagaTransactionsController.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/SagaTransactionsController.java
@@ -15,13 +15,12 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.console.saga;
+package org.apache.servicecomb.pack.alpha.spec.saga.db;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import org.apache.servicecomb.pack.alpha.core.TxEvent;
-import org.apache.servicecomb.pack.alpha.server.TxEventEnvelopeRepository;
-import org.apache.servicecomb.pack.alpha.server.console.saga.model.Stats;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.model.Stats;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.domain.PageRequest;
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/SpringCommandRepository.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/SpringCommandRepository.java
similarity index 87%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/SpringCommandRepository.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/SpringCommandRepository.java
index 649ebb0..f16275d 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/SpringCommandRepository.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/SpringCommandRepository.java
@@ -15,21 +15,16 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server;
-
-import static org.apache.servicecomb.pack.alpha.core.TaskStatus.DONE;
-import static org.apache.servicecomb.pack.alpha.core.TaskStatus.NEW;
-import static org.apache.servicecomb.pack.alpha.core.TaskStatus.PENDING;
+package org.apache.servicecomb.pack.alpha.spec.saga.db;
import java.lang.invoke.MethodHandles;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-
import javax.transaction.Transactional;
-
import org.apache.servicecomb.pack.alpha.core.Command;
import org.apache.servicecomb.pack.alpha.core.CommandRepository;
+import org.apache.servicecomb.pack.alpha.core.TaskStatus;
import org.apache.servicecomb.pack.alpha.core.TxEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -70,12 +65,12 @@
@Override
public void markCommandAsDone(String globalTxId, String localTxId) {
- commandRepository.updateStatusByGlobalTxIdAndLocalTxId(DONE.name(), globalTxId, localTxId);
+ commandRepository.updateStatusByGlobalTxIdAndLocalTxId(TaskStatus.DONE.name(), globalTxId, localTxId);
}
@Override
public List<Command> findUncompletedCommands(String globalTxId) {
- return commandRepository.findByGlobalTxIdAndStatus(globalTxId, NEW.name());
+ return commandRepository.findByGlobalTxIdAndStatus(globalTxId, TaskStatus.NEW.name());
}
@Transactional
@@ -86,8 +81,8 @@
commands.forEach(command ->
commandRepository.updateStatusByGlobalTxIdAndLocalTxId(
- NEW.name(),
- PENDING.name(),
+ TaskStatus.NEW.name(),
+ TaskStatus.PENDING.name(),
command.globalTxId(),
command.localTxId()));
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/SpringTxEventRepository.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/SpringTxEventRepository.java
similarity index 91%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/SpringTxEventRepository.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/SpringTxEventRepository.java
index f35c386..389998d 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/SpringTxEventRepository.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/SpringTxEventRepository.java
@@ -15,15 +15,13 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server;
-
-import static org.apache.servicecomb.pack.common.EventType.TxCompensatedEvent;
+package org.apache.servicecomb.pack.alpha.spec.saga.db;
import java.util.List;
import java.util.Optional;
-
import org.apache.servicecomb.pack.alpha.core.TxEvent;
import org.apache.servicecomb.pack.alpha.core.TxEventRepository;
+import org.apache.servicecomb.pack.common.EventType;
import org.springframework.data.domain.PageRequest;
class SpringTxEventRepository implements TxEventRepository {
@@ -66,7 +64,7 @@
@Override
public Optional<TxEvent> findFirstCompensatedEventByIdGreaterThan(long id) {
- return eventRepo.findFirstByTypeAndSurrogateIdGreaterThan(TxCompensatedEvent.name(), id);
+ return eventRepo.findFirstByTypeAndSurrogateIdGreaterThan(EventType.TxCompensatedEvent.name(), id);
}
@Override
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/SpringTxTimeoutRepository.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/SpringTxTimeoutRepository.java
similarity index 89%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/SpringTxTimeoutRepository.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/SpringTxTimeoutRepository.java
index 5569d36..9f32890 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/SpringTxTimeoutRepository.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/SpringTxTimeoutRepository.java
@@ -15,15 +15,12 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server;
-
-import static org.apache.servicecomb.pack.alpha.core.TaskStatus.PENDING;
+package org.apache.servicecomb.pack.alpha.spec.saga.db;
import java.lang.invoke.MethodHandles;
import java.util.List;
-
import javax.transaction.Transactional;
-
+import org.apache.servicecomb.pack.alpha.core.TaskStatus;
import org.apache.servicecomb.pack.alpha.core.TxTimeout;
import org.apache.servicecomb.pack.alpha.core.TxTimeoutRepository;
import org.slf4j.Logger;
@@ -58,7 +55,7 @@
public List<TxTimeout> findFirstTimeout() {
List<TxTimeout> timeoutEvents = timeoutRepo.findFirstTimeoutTxOrderByExpireTimeAsc(PageRequest.of(0, 1));
timeoutEvents.forEach(event -> timeoutRepo
- .updateStatusByGlobalTxIdAndLocalTxId(PENDING.name(), event.globalTxId(), event.localTxId()));
+ .updateStatusByGlobalTxIdAndLocalTxId(TaskStatus.PENDING.name(), event.globalTxId(), event.localTxId()));
return timeoutEvents;
}
}
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/TxEventEnvelopeRepository.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/TxEventEnvelopeRepository.java
similarity index 99%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/TxEventEnvelopeRepository.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/TxEventEnvelopeRepository.java
index 6e84383..fbad266 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/TxEventEnvelopeRepository.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/TxEventEnvelopeRepository.java
@@ -15,13 +15,11 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server;
+package org.apache.servicecomb.pack.alpha.spec.saga.db;
import java.util.List;
import java.util.Optional;
-
import javax.transaction.Transactional;
-
import org.apache.servicecomb.pack.alpha.core.TxEvent;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Modifying;
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/TxTimeoutEntityRepository.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/TxTimeoutEntityRepository.java
similarity index 94%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/TxTimeoutEntityRepository.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/TxTimeoutEntityRepository.java
index 1584952..0f034ec 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/TxTimeoutEntityRepository.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/TxTimeoutEntityRepository.java
@@ -15,13 +15,11 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server;
+package org.apache.servicecomb.pack.alpha.spec.saga.db;
import java.util.List;
-
import javax.persistence.LockModeType;
import javax.transaction.Transactional;
-
import org.apache.servicecomb.pack.alpha.core.TxTimeout;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Lock;
@@ -30,7 +28,7 @@
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
-interface TxTimeoutEntityRepository extends CrudRepository<TxTimeout, Long> {
+public interface TxTimeoutEntityRepository extends CrudRepository<TxTimeout, Long> {
@Transactional
@Modifying(clearAutomatically = true)
diff --git a/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/api/SagaDbAPIv1Controller.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/api/SagaDbAPIv1Controller.java
new file mode 100644
index 0000000..c28ed0e
--- /dev/null
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/api/SagaDbAPIv1Controller.java
@@ -0,0 +1,37 @@
+/*
+ * 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.pack.alpha.spec.saga.db.api;
+
+import org.apache.servicecomb.pack.alpha.core.api.APIv1;
+import org.apache.servicecomb.pack.alpha.core.metrics.AlphaMetrics;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@RequestMapping("/alpha/api/v1")
+public class SagaDbAPIv1Controller {
+
+ @Autowired
+ APIv1 apIv1;
+
+ @GetMapping(value = "/metrics")
+ public ResponseEntity<AlphaMetrics> metrics() {
+ return ResponseEntity.ok(apIv1.getMetrics());
+ }
+}
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/api/APIv1Impl.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/api/SagaDbAPIv1Impl.java
similarity index 63%
copy from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/api/APIv1Impl.java
copy to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/api/SagaDbAPIv1Impl.java
index edd7b78..eed744b 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/api/APIv1Impl.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/api/SagaDbAPIv1Impl.java
@@ -15,28 +15,23 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.api;
+package org.apache.servicecomb.pack.alpha.spec.saga.db.api;
import java.util.List;
import java.util.Map;
+import javax.transaction.NotSupportedException;
import org.apache.servicecomb.pack.alpha.core.api.APIv1;
import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.GlobalTransaction;
import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.PagingGlobalTransactions;
import org.apache.servicecomb.pack.alpha.core.metrics.AlphaMetrics;
-import org.apache.servicecomb.pack.alpha.fsm.repository.TransactionRepository;
-import org.apache.servicecomb.pack.alpha.server.metrics.AlphaMetricsEndpoint;
+import org.apache.servicecomb.pack.alpha.core.metrics.AlphaMetricsEndpoint;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-@Component
-public class APIv1Impl implements APIv1 {
+public class SagaDbAPIv1Impl implements APIv1 {
@Autowired
AlphaMetricsEndpoint alphaMetricsEndpoint;
- @Autowired(required = false)
- TransactionRepository transactionRepository;
-
public AlphaMetrics getMetrics() {
AlphaMetrics alphaMetrics = new AlphaMetrics();
alphaMetrics.setMetrics(alphaMetricsEndpoint.getMetrics());
@@ -44,25 +39,24 @@
return alphaMetrics;
}
- public GlobalTransaction getTransactionByGlobalTxId(String globalTxId)
- throws Exception {
- GlobalTransaction globalTransaction = transactionRepository
- .getGlobalTransactionByGlobalTxId(globalTxId);
- return globalTransaction;
+ @Override
+ public GlobalTransaction getTransactionByGlobalTxId(String globalTxId) throws Exception {
+ throw new NotSupportedException();
}
+ @Override
public PagingGlobalTransactions getTransactions(String state, int page, int size)
throws Exception {
- PagingGlobalTransactions pagingGlobalTransactions = transactionRepository
- .getGlobalTransactions(state, page, size);
- return pagingGlobalTransactions;
+ throw new NotSupportedException();
}
- public Map<String, Long> getTransactionStatistics() {
- return transactionRepository.getTransactionStatistics();
+ @Override
+ public Map<String, Long> getTransactionStatistics() throws Exception {
+ throw new NotSupportedException();
}
- public List<GlobalTransaction> getSlowTransactions(int size) {
- return transactionRepository.getSlowGlobalTransactionsTopN(size);
+ @Override
+ public List<GlobalTransaction> getSlowTransactions(int size) throws Exception {
+ throw new NotSupportedException();
}
}
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/ClusterLockService.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/ClusterLockService.java
similarity index 72%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/ClusterLockService.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/ClusterLockService.java
index a81f3a2..4933586 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/ClusterLockService.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/ClusterLockService.java
@@ -15,53 +15,48 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.cluster.master;
+package org.apache.servicecomb.pack.alpha.spec.saga.db.cluster;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
+import java.lang.invoke.MethodHandles;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Optional;
+import java.util.Timer;
+import java.util.TimerTask;
import javax.annotation.PostConstruct;
import org.apache.servicecomb.pack.alpha.core.NodeStatus;
import org.apache.servicecomb.pack.alpha.core.event.GrpcStartableStartedEvent;
-import org.apache.servicecomb.pack.alpha.server.AlphaConfig;
-import org.apache.servicecomb.pack.alpha.server.cluster.master.provider.LockProvider;
-import org.apache.servicecomb.pack.alpha.server.cluster.master.provider.Lock;
-import org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc.jpa.MasterLock;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.Lock;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.LockProvider;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc.jpa.MasterLock;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
+import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
-import java.lang.invoke.MethodHandles;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.Optional;
-
/**
* Cluster master preemption master service
* default based on database master_lock table implementation
* <p>
* Set true to enable default value false
- * alpha.cluster.master.enabled=true
+ * alpha.spec.saga.db.cluster=true
* <p>
* Implementation type, default jdbc
- * alpha.cluster.master.type=jdbc
+ * alpha.spec.saga.db.cluster.type=jdbc
* <p>
* Lock timeout, default value 5000 millisecond
- * alpha.cluster.master.expire=5000
+ * alpha.spec.saga.db.cluster.expire=5000
*/
-@Component
-@ConditionalOnProperty(name = "alpha.cluster.master.enabled", havingValue = "true")
-@EnableScheduling
-@AutoConfigureAfter(AlphaConfig.class)
public class ClusterLockService implements ApplicationListener<ApplicationReadyEvent> {
private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
@@ -78,13 +73,15 @@
private Optional<Lock> locker;
+ private Timer masterCheckTimer;
+
@Value("[${alpha.server.host}]:${alpha.server.port}")
private String instanceId;
@Value("${spring.application.name:servicecomb-alpha-server}")
private String serviceName;
- @Value("${alpha.cluster.master.expire:5000}")
+ @Value("${alpha.spec.saga.db.cluster.expire:5000}")
private int expire;
@Autowired
@@ -100,6 +97,37 @@
@PostConstruct
public void init() {
eventBus.register(this);
+
+ /**
+ * Try to lock every second
+ * TODO We need to check if the master check interval time check is OK
+ * */
+ masterCheckTimer = new Timer("masterCheckTimer");
+ masterCheckTimer.schedule(new TimerTask(){
+
+ @Override
+ public void run() {
+ if (applicationReady && portReady) {
+ locker = lockProvider.lock(getMasterLock());
+ if (locker.isPresent()) {
+ if (!locked) {
+ locked = true;
+ nodeStatus.setTypeEnum(NodeStatus.TypeEnum.MASTER);
+ LOG.info("Master Node");
+ }
+ //Keep locked
+ } else {
+ if (locked || !lockExecuted) {
+ locked = false;
+ nodeStatus.setTypeEnum(NodeStatus.TypeEnum.SLAVE);
+ LOG.info("Slave Node");
+ }
+ }
+ lockExecuted = true;
+ }
+ }
+ },0, 1000);
+
LOG.info("Initialize cluster mode");
}
@@ -123,32 +151,6 @@
return this.masterLock;
}
- /**
- * Try to lock every second
- * */
- //TODO We need to check if the master check interval time check is OK
- @Scheduled(cron = "0/1 * * * * ?")
- public void masterCheck() {
- if (this.applicationReady && this.portReady) {
- this.locker = lockProvider.lock(this.getMasterLock());
- if (this.locker.isPresent()) {
- if (!this.locked) {
- this.locked = true;
- nodeStatus.setTypeEnum(NodeStatus.TypeEnum.MASTER);
- LOG.info("Master Node");
- }
- //Keep locked
- } else {
- if (this.locked || !lockExecuted) {
- locked = false;
- nodeStatus.setTypeEnum(NodeStatus.TypeEnum.SLAVE);
- LOG.info("Slave Node");
- }
- }
- lockExecuted = true;
- }
- }
-
public void unLock() {
if (this.locker.isPresent()) {
this.locker.get().unlock();
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/AbstractLockProvider.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/AbstractLockProvider.java
similarity index 84%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/AbstractLockProvider.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/AbstractLockProvider.java
index 20e1afe..9d199ca 100755
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/AbstractLockProvider.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/AbstractLockProvider.java
@@ -15,11 +15,10 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.cluster.master.provider;
-
-import org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc.jpa.MasterLock;
+package org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider;
import java.util.Optional;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc.jpa.MasterLock;
public abstract class AbstractLockProvider implements LockProvider {
@@ -32,7 +31,8 @@
}
@Override
- public Optional<org.apache.servicecomb.pack.alpha.server.cluster.master.provider.Lock> lock(MasterLock masterLock) {
+ public Optional<org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.Lock> lock(
+ MasterLock masterLock) {
boolean lockObtained = doLock(masterLock);
if (lockObtained) {
return Optional.of(new Lock(this,masterLock, lockProviderPersistence));
@@ -55,7 +55,8 @@
this.lockInitialization = false;
}
- private static class Lock implements org.apache.servicecomb.pack.alpha.server.cluster.master.provider.Lock {
+ private static class Lock implements
+ org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.Lock {
private final MasterLock masterLock;
private final AbstractLockProvider provider;
private final LockProviderPersistence lockProviderPersistence;
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/Lock.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/Lock.java
similarity index 91%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/Lock.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/Lock.java
index 1622f13..39621f2 100755
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/Lock.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/Lock.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.cluster.master.provider;
+package org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider;
public interface Lock {
void unlock();
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/LockProvider.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/LockProvider.java
similarity index 84%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/LockProvider.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/LockProvider.java
index 3a15a59..038140c 100755
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/LockProvider.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/LockProvider.java
@@ -15,11 +15,10 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.cluster.master.provider;
-
-import org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc.jpa.MasterLock;
+package org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider;
import java.util.Optional;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc.jpa.MasterLock;
public interface LockProvider {
Optional<Lock> lock(MasterLock masterLock);
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/LockProviderPersistence.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/LockProviderPersistence.java
similarity index 84%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/LockProviderPersistence.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/LockProviderPersistence.java
index ab386b8..a40036b 100755
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/LockProviderPersistence.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/LockProviderPersistence.java
@@ -15,9 +15,9 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.cluster.master.provider;
+package org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider;
- import org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc.jpa.MasterLock;
+ import org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc.jpa.MasterLock;
public interface LockProviderPersistence {
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/jdbc/JdbcLockPersistence.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/jdbc/JdbcLockPersistence.java
similarity index 79%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/jdbc/JdbcLockPersistence.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/jdbc/JdbcLockPersistence.java
index 1bd6aa1..56461e1 100755
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/jdbc/JdbcLockPersistence.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/jdbc/JdbcLockPersistence.java
@@ -15,11 +15,11 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc;
+package org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc;
-import org.apache.servicecomb.pack.alpha.server.cluster.master.provider.LockProviderPersistence;
-import org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc.jpa.MasterLock;
-import org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc.jpa.MasterLockRepository;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.LockProviderPersistence;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc.jpa.MasterLock;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc.jpa.MasterLockRepository;
class JdbcLockPersistence implements LockProviderPersistence {
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/jdbc/JdbcLockProvider.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/jdbc/JdbcLockProvider.java
similarity index 78%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/jdbc/JdbcLockProvider.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/jdbc/JdbcLockProvider.java
index e7302d4..faf63ec 100755
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/jdbc/JdbcLockProvider.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/jdbc/JdbcLockProvider.java
@@ -15,10 +15,10 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc;
+package org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc;
-import org.apache.servicecomb.pack.alpha.server.cluster.master.provider.AbstractLockProvider;
-import org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc.jpa.MasterLockRepository;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.AbstractLockProvider;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc.jpa.MasterLockRepository;
public class JdbcLockProvider extends AbstractLockProvider {
public JdbcLockProvider(MasterLockRepository masterLockRepository) {
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/jdbc/LockProviderJdbcConfiguration.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/jdbc/LockProviderJdbcConfiguration.java
similarity index 75%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/jdbc/LockProviderJdbcConfiguration.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/jdbc/LockProviderJdbcConfiguration.java
index 35d53ed..4079245 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/jdbc/LockProviderJdbcConfiguration.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/jdbc/LockProviderJdbcConfiguration.java
@@ -15,17 +15,16 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc;
+package org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc;
-import org.apache.servicecomb.pack.alpha.server.cluster.master.provider.LockProvider;
-import org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc.jpa.MasterLockRepository;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.LockProvider;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc.jpa.MasterLockRepository;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
@Configuration
-@ConditionalOnProperty(name = "alpha.cluster.master.enabled", havingValue = "true")
public class LockProviderJdbcConfiguration {
@Bean
@@ -35,7 +34,7 @@
@Primary
@Bean
- @ConditionalOnProperty(name = "alpha.cluster.master.type", havingValue = "jdbc", matchIfMissing = true)
+ @ConditionalOnProperty(name = "alpha.spec.saga.db.cluster.type", havingValue = "jdbc", matchIfMissing = true)
public LockProvider lockProvider(MasterLockRepository electionRepo) {
return new JdbcLockProvider(electionRepo);
}
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/jdbc/MasterLockEntityRepository.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/jdbc/MasterLockEntityRepository.java
similarity index 85%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/jdbc/MasterLockEntityRepository.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/jdbc/MasterLockEntityRepository.java
index 43cf0f7..931110c 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/jdbc/MasterLockEntityRepository.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/jdbc/MasterLockEntityRepository.java
@@ -15,19 +15,17 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc;
+package org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc;
-import org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc.jpa.MasterLock;
+import java.util.Date;
+import java.util.Optional;
+import javax.transaction.Transactional;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc.jpa.MasterLock;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
-import javax.transaction.Transactional;
-
-import java.util.Date;
-import java.util.Optional;
-
public interface MasterLockEntityRepository extends CrudRepository<MasterLock, String> {
Optional<MasterLock> findMasterLockByServiceName(String serviceName);
@@ -46,7 +44,7 @@
@Transactional
@Modifying(clearAutomatically = true)
- @Query("UPDATE org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc.jpa.MasterLock t "
+ @Query("UPDATE org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc.jpa.MasterLock t "
+ "SET t.expireTime = :expireTime"
+ ",t.lockedTime = :lockedTime "
+ ",t.instanceId = :instanceId "
@@ -59,7 +57,7 @@
@Transactional
@Modifying(clearAutomatically = true)
- @Query("UPDATE org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc.jpa.MasterLock t "
+ @Query("UPDATE org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc.jpa.MasterLock t "
+ "SET t.expireTime = :expireTime "
+ "WHERE t.serviceName = :serviceName")
int unLock(@Param("serviceName") String serviceName,
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/jdbc/SpringMasterLockRepository.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/jdbc/SpringMasterLockRepository.java
similarity index 90%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/jdbc/SpringMasterLockRepository.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/jdbc/SpringMasterLockRepository.java
index c160d83..a8d6f92 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/jdbc/SpringMasterLockRepository.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/jdbc/SpringMasterLockRepository.java
@@ -15,17 +15,16 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc;
-
-import org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc.jpa.MasterLock;
-import org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc.jpa.MasterLockRepository;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+package org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc;
import java.lang.invoke.MethodHandles;
import java.util.Date;
import java.util.Optional;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc.jpa.MasterLock;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc.jpa.MasterLockRepository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@ConditionalOnProperty(name = "alpha.cluster.master.enabled", havingValue = "true")
public class SpringMasterLockRepository implements MasterLockRepository {
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/jdbc/jpa/MasterLock.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/jdbc/jpa/MasterLock.java
similarity index 94%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/jdbc/jpa/MasterLock.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/jdbc/jpa/MasterLock.java
index bb47b8c..af59421 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/jdbc/jpa/MasterLock.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/jdbc/jpa/MasterLock.java
@@ -15,14 +15,13 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc.jpa;
+package org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc.jpa;
+import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
-import java.util.Date;
-
@Entity
@Table(name = "master_lock")
public class MasterLock {
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/jdbc/jpa/MasterLockRepository.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/jdbc/jpa/MasterLockRepository.java
similarity index 92%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/jdbc/jpa/MasterLockRepository.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/jdbc/jpa/MasterLockRepository.java
index f66826d..cae39ea 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/jdbc/jpa/MasterLockRepository.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/cluster/provider/jdbc/jpa/MasterLockRepository.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.cluster.master.provider.jdbc.jpa;
+package org.apache.servicecomb.pack.alpha.spec.saga.db.cluster.provider.jdbc.jpa;
import java.util.Date;
import java.util.Optional;
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/metrics/AlphaMetricsEndpoint.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/metrics/AlphaMetricsEndpointImpl.java
similarity index 85%
copy from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/metrics/AlphaMetricsEndpoint.java
copy to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/metrics/AlphaMetricsEndpointImpl.java
index 4a88890..5689915 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/metrics/AlphaMetricsEndpoint.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/metrics/AlphaMetricsEndpointImpl.java
@@ -15,24 +15,24 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.metrics;
+package org.apache.servicecomb.pack.alpha.spec.saga.db.metrics;
import org.apache.servicecomb.pack.alpha.core.NodeStatus;
import org.apache.servicecomb.pack.alpha.core.NodeStatus.TypeEnum;
+import org.apache.servicecomb.pack.alpha.core.metrics.AlphaMetricsEndpoint;
import org.apache.servicecomb.pack.alpha.core.metrics.MetricsBean;
-import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
@Component
-public class AlphaMetricsEndpoint {
+public class AlphaMetricsEndpointImpl implements AlphaMetricsEndpoint {
@Autowired
@Lazy
private NodeStatus nodeStatus;
- @Autowired(required = false)
+ @Autowired
MetricsService metricsService;
public MetricsBean getMetrics() {
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/Lock.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/metrics/MetricsService.java
old mode 100755
new mode 100644
similarity index 73%
copy from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/Lock.java
copy to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/metrics/MetricsService.java
index 1622f13..a6ced13
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/Lock.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/metrics/MetricsService.java
@@ -15,8 +15,16 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.cluster.master.provider;
+package org.apache.servicecomb.pack.alpha.spec.saga.db.metrics;
-public interface Lock {
- void unlock();
+import org.apache.servicecomb.pack.alpha.core.metrics.MetricsBean;
+
+public class MetricsService {
+
+ private final MetricsBean metrics = new MetricsBean();
+
+ public MetricsBean metrics() {
+ return metrics;
+ }
+
}
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/console/saga/model/Stats.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/model/Stats.java
similarity index 97%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/console/saga/model/Stats.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/model/Stats.java
index a4a0a6a..98e3b45 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/console/saga/model/Stats.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/model/Stats.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.console.saga.model;
+package org.apache.servicecomb.pack.alpha.spec.saga.db.model;
import java.util.Date;
diff --git a/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/properties/SpecSagaDbProperties.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/properties/SpecSagaDbProperties.java
new file mode 100644
index 0000000..cdb0922
--- /dev/null
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/properties/SpecSagaDbProperties.java
@@ -0,0 +1,36 @@
+/*
+ * 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.pack.alpha.spec.saga.db.properties;
+
+import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@ConfigurationProperties(prefix = "alpha.spec.saga.db")
+public class SpecSagaDbProperties {
+ private DataSourceProperties datasource;
+
+ public DataSourceProperties getDatasource() {
+ return datasource;
+ }
+
+ public void setDatasource(DataSourceProperties datasource) {
+ this.datasource = datasource;
+ }
+}
\ No newline at end of file
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/AlphaEventController.java b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/test/AlphaEventController.java
similarity index 90%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/AlphaEventController.java
rename to alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/test/AlphaEventController.java
index 7f691ab..603a2bf 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/AlphaEventController.java
+++ b/alpha/alpha-spec-saga-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/saga/db/test/AlphaEventController.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server;
+package org.apache.servicecomb.pack.alpha.spec.saga.db.test;
import java.lang.invoke.MethodHandles;
import java.util.Collection;
@@ -23,6 +23,7 @@
import java.util.List;
import org.apache.servicecomb.pack.alpha.core.TxEvent;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.TxEventEnvelopeRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Profile;
@@ -39,12 +40,12 @@
@RequestMapping("/saga")
@Profile("test")
// Only export this Controller for test
-class AlphaEventController {
+public class AlphaEventController {
private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private final TxEventEnvelopeRepository eventRepository;
- AlphaEventController(TxEventEnvelopeRepository eventRepository) {
+ public AlphaEventController(TxEventEnvelopeRepository eventRepository) {
this.eventRepository = eventRepository;
}
diff --git a/alpha/alpha-fsm/src/main/resources/META-INF/spring.factories b/alpha/alpha-spec-saga-db/src/main/resources/META-INF/spring.factories
similarity index 86%
copy from alpha/alpha-fsm/src/main/resources/META-INF/spring.factories
copy to alpha/alpha-spec-saga-db/src/main/resources/META-INF/spring.factories
index ff42cdd..4ad6b20 100644
--- a/alpha/alpha-fsm/src/main/resources/META-INF/spring.factories
+++ b/alpha/alpha-spec-saga-db/src/main/resources/META-INF/spring.factories
@@ -14,4 +14,5 @@
## See the License for the specific language governing permissions and
## limitations under the License.
## ---------------------------------------------------------------------------
-org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.apache.servicecomb.pack.alpha.fsm.FsmAutoConfiguration
+org.springframework.boot.autoconfigure.EnableAutoConfiguration= \
+ org.apache.servicecomb.pack.alpha.spec.saga.db.AlphaSpecSagaDbAutoConfiguration
diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/AlphaEventControllerTest.java b/alpha/alpha-spec-saga-db/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/db/AlphaEventControllerTest.java
similarity index 89%
rename from alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/AlphaEventControllerTest.java
rename to alpha/alpha-spec-saga-db/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/db/AlphaEventControllerTest.java
index afd041b..64a4e0c 100644
--- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/AlphaEventControllerTest.java
+++ b/alpha/alpha-spec-saga-db/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/db/AlphaEventControllerTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server;
+package org.apache.servicecomb.pack.alpha.spec.saga.db;
import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
import static java.util.Collections.singletonList;
@@ -28,19 +28,21 @@
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import java.util.UUID;
-
import org.apache.servicecomb.pack.alpha.core.TxEvent;
+import org.apache.servicecomb.pack.alpha.spec.saga.db.test.AlphaEventController;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
@RunWith(SpringRunner.class)
-@WebMvcTest(value = AlphaEventController.class, properties = {
+@ContextConfiguration(classes = {WebConfiguration.class})
+@WebMvcTest(value = {AlphaEventController.class}, properties = {
"spring.profiles.active=test"
})
public class AlphaEventControllerTest {
diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/console/saga/SagaTransactionsControllerTest.java b/alpha/alpha-spec-saga-db/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/db/SagaTransactionsControllerTest.java
similarity index 97%
rename from alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/console/saga/SagaTransactionsControllerTest.java
rename to alpha/alpha-spec-saga-db/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/db/SagaTransactionsControllerTest.java
index 60bbb59..e2e5abf 100644
--- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/console/saga/SagaTransactionsControllerTest.java
+++ b/alpha/alpha-spec-saga-db/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/db/SagaTransactionsControllerTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.console.saga;
+package org.apache.servicecomb.pack.alpha.spec.saga.db;
import static com.seanyinx.github.unit.scaffolding.Randomness.uniquify;
import static java.util.Collections.singletonList;
@@ -37,7 +37,6 @@
import java.util.UUID;
import org.apache.servicecomb.pack.alpha.core.TxEvent;
-import org.apache.servicecomb.pack.alpha.server.TxEventEnvelopeRepository;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -45,10 +44,12 @@
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.data.domain.PageRequest;
+import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
@RunWith(SpringRunner.class)
+@ContextConfiguration(classes = {WebConfiguration.class})
@WebMvcTest(SagaTransactionsController.class)
public class SagaTransactionsControllerTest {
private final TxEvent someEvent = populateEvents(TxStartedEvent.name());
diff --git a/alpha/alpha-spec-saga-db/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/db/WebConfiguration.java b/alpha/alpha-spec-saga-db/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/db/WebConfiguration.java
new file mode 100644
index 0000000..aa15af2
--- /dev/null
+++ b/alpha/alpha-spec-saga-db/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/db/WebConfiguration.java
@@ -0,0 +1,20 @@
+package org.apache.servicecomb.pack.alpha.spec.saga.db;
+
+import org.apache.servicecomb.pack.alpha.spec.saga.db.test.AlphaEventController;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+class WebConfiguration implements WebMvcConfigurer {
+
+ @Bean
+ AlphaEventController alphaEventController(TxEventEnvelopeRepository eventRepository) {
+ return new AlphaEventController(eventRepository);
+ }
+
+ @Bean
+ SagaTransactionsController sagaTransactionsController(TxEventEnvelopeRepository eventRepository){
+ return new SagaTransactionsController(eventRepository);
+ }
+}
\ No newline at end of file
diff --git a/alpha/alpha-fsm/README.md b/alpha/alpha-spec-saga-fsm/README.md
similarity index 100%
rename from alpha/alpha-fsm/README.md
rename to alpha/alpha-spec-saga-fsm/README.md
diff --git a/alpha/alpha-fsm/pom.xml b/alpha/alpha-spec-saga-fsm/pom.xml
similarity index 91%
rename from alpha/alpha-fsm/pom.xml
rename to alpha/alpha-spec-saga-fsm/pom.xml
index 5ecd7e4..97da312 100644
--- a/alpha/alpha-fsm/pom.xml
+++ b/alpha/alpha-spec-saga-fsm/pom.xml
@@ -26,8 +26,8 @@
</parent>
<modelVersion>4.0.0</modelVersion>
- <artifactId>alpha-fsm</artifactId>
- <name>Pack::Alpha::Fsm</name>
+ <artifactId>alpha-spec-saga-fsm</artifactId>
+ <name>Pack::Alpha::Specification::Saga::FSM</name>
<dependencies>
<!-- spring boot -->
@@ -53,6 +53,10 @@
<!-- pack -->
<dependency>
<groupId>org.apache.servicecomb.pack</groupId>
+ <artifactId>pack-contract-grpc</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.servicecomb.pack</groupId>
<artifactId>pack-common</artifactId>
</dependency>
<dependency>
@@ -60,8 +64,8 @@
<artifactId>alpha-core</artifactId>
</dependency>
<dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
+ <groupId>org.springframework.data</groupId>
+ <artifactId>spring-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
@@ -195,6 +199,16 @@
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-web</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-webmvc</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
diff --git a/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/AlphaSpecSagaFsmAutoConfiguration.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/AlphaSpecSagaFsmAutoConfiguration.java
new file mode 100644
index 0000000..d4ca777
--- /dev/null
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/AlphaSpecSagaFsmAutoConfiguration.java
@@ -0,0 +1,198 @@
+/*
+ * 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.pack.alpha.fsm;
+
+import static org.apache.servicecomb.pack.alpha.fsm.spring.integration.akka.SagaDataExtension.SAGA_DATA_EXTENSION_PROVIDER;
+import static org.apache.servicecomb.pack.alpha.fsm.spring.integration.akka.SpringAkkaExtension.SPRING_EXTENSION_PROVIDER;
+
+import akka.actor.ActorRef;
+import akka.actor.ActorSystem;
+import akka.actor.Props;
+import com.typesafe.config.Config;
+import com.typesafe.config.ConfigFactory;
+import java.lang.invoke.MethodHandles;
+import java.util.Arrays;
+import java.util.Map;
+import org.apache.http.HttpHost;
+import org.apache.servicecomb.pack.alpha.core.OmegaCallback;
+import org.apache.servicecomb.pack.alpha.core.fsm.channel.ActorEventChannel;
+import org.apache.servicecomb.pack.alpha.core.metrics.AlphaMetricsEndpoint;
+import org.apache.servicecomb.pack.alpha.fsm.api.APIv1Controller;
+import org.apache.servicecomb.pack.alpha.fsm.api.APIv1Impl;
+import org.apache.servicecomb.pack.alpha.fsm.channel.AbstractEventConsumer;
+import org.apache.servicecomb.pack.alpha.fsm.channel.memory.MemoryActorEventChannel;
+import org.apache.servicecomb.pack.alpha.fsm.channel.memory.MemorySagaEventConsumer;
+import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
+import org.apache.servicecomb.pack.alpha.fsm.metrics.AlphaMetricsEndpointImpl;
+import org.apache.servicecomb.pack.alpha.fsm.properties.SpecSagaAkkaProperties;
+import org.apache.servicecomb.pack.alpha.fsm.repository.NoneTransactionRepository;
+import org.apache.servicecomb.pack.alpha.fsm.repository.TransactionRepository;
+import org.apache.servicecomb.pack.alpha.fsm.repository.TransactionRepositoryChannel;
+import org.apache.servicecomb.pack.alpha.fsm.repository.channel.DefaultTransactionRepositoryChannel;
+import org.apache.servicecomb.pack.alpha.fsm.repository.elasticsearch.ElasticsearchTransactionRepository;
+import org.apache.servicecomb.pack.alpha.fsm.spring.integration.akka.AkkaConfigPropertyAdapter;
+import org.apache.servicecomb.pack.alpha.fsm.test.FsmSagaDataController;
+import org.apache.servicecomb.pack.common.AlphaMetaKeys;
+import org.apache.servicecomb.pack.contract.grpc.ServerMeta;
+import org.elasticsearch.client.RestClient;
+import org.elasticsearch.client.RestClientBuilder;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Profile;
+import org.springframework.core.env.ConfigurableEnvironment;
+import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
+
+@Configuration
+@ImportAutoConfiguration({SpecSagaAkkaProperties.class})
+@ConditionalOnExpression("'${alpha.spec.names}'.contains('saga-akka')")
+public class AlphaSpecSagaFsmAutoConfiguration {
+
+ private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+ public AlphaSpecSagaFsmAutoConfiguration() {
+ System.setProperty("es.set.netty.runtime.available.processors", "false");
+ LOG.info("Alpha Specification Saga Akka");
+ }
+
+ @Bean
+ public MetricsService metricsService() {
+ return new MetricsService();
+ }
+
+ @Bean
+ public ActorSystem actorSystem(ConfigurableApplicationContext applicationContext,
+ ConfigurableEnvironment environment, MetricsService metricsService,
+ TransactionRepositoryChannel repositoryChannel) {
+ ActorSystem system = ActorSystem
+ .create("alpha-cluster", akkaConfiguration(applicationContext, environment));
+
+ SPRING_EXTENSION_PROVIDER.get(system).initialize(applicationContext);
+ SAGA_DATA_EXTENSION_PROVIDER.get(system).setRepositoryChannel(repositoryChannel);
+ SAGA_DATA_EXTENSION_PROVIDER.get(system).setMetricsService(metricsService);
+ return system;
+ }
+
+ @Bean
+ public Config akkaConfiguration(ConfigurableApplicationContext applicationContext,
+ ConfigurableEnvironment environment) {
+ final Map<String, Object> converted = AkkaConfigPropertyAdapter.getPropertyMap(environment);
+ return ConfigFactory.parseMap(converted)
+ .withFallback(ConfigFactory.defaultReference(applicationContext.getClassLoader()));
+ }
+
+ @Bean(name = "sagaShardRegionActor")
+ public ActorRef sagaShardRegionActor(ActorSystem actorSystem) {
+ return actorSystem.actorOf(Props.create(SagaShardRegionActor.class));
+ }
+
+ @Bean
+ public ElasticsearchRestTemplate elasticsearchRestTemplate(
+ SpecSagaAkkaProperties specSagaAkkaProperties) {
+ HttpHost[] hosts = Arrays.stream(
+ specSagaAkkaProperties.getRepository().getElasticsearch().getUris()
+ .split(","))
+ .map(uri -> HttpHost.create(uri))
+ .toArray(HttpHost[]::new);
+ RestClientBuilder builder = RestClient.builder(hosts);
+ RestHighLevelClient client = new RestHighLevelClient(builder);
+ return new ElasticsearchRestTemplate(client);
+ }
+
+ @Bean
+ public TransactionRepository transactionRepository(
+ SpecSagaAkkaProperties specSagaAkkaProperties,
+ ElasticsearchRestTemplate elasticsearchRestTemplate,
+ MetricsService metricsService) {
+ if (specSagaAkkaProperties.getRepository().getName().equals("elasticsearch")) {
+ return new ElasticsearchTransactionRepository(specSagaAkkaProperties.getRepository()
+ .getElasticsearch(), elasticsearchRestTemplate, metricsService);
+ } else {
+ return new NoneTransactionRepository();
+ }
+ }
+
+ @Bean
+ TransactionRepositoryChannel memoryTransactionRepositoryChannel(TransactionRepository repository,
+ MetricsService metricsService) {
+ return new DefaultTransactionRepositoryChannel(repository, metricsService);
+ }
+
+ @Bean
+ @ConditionalOnMissingBean(ActorEventChannel.class)
+ public ActorEventChannel eventChannel(SpecSagaAkkaProperties specSagaAkkaProperties,
+ MetricsService metricsService) {
+ if (specSagaAkkaProperties.getChannel().getName().equals("memory")) {
+ return new MemoryActorEventChannel(metricsService,
+ specSagaAkkaProperties.getChannel().getMemory().getMaxLength());
+ } else {
+ return new MemoryActorEventChannel(metricsService,
+ specSagaAkkaProperties.getChannel().getMemory().getMaxLength());
+ }
+ }
+
+ @Bean
+ AbstractEventConsumer eventConsumer(SpecSagaAkkaProperties specSagaAkkaProperties,
+ ActorSystem actorSystem,
+ @Qualifier("sagaShardRegionActor") ActorRef sagaShardRegionActor,
+ MetricsService metricsService,
+ ActorEventChannel actorEventChannel) {
+ if (specSagaAkkaProperties.getChannel().getName().equals("memory")) {
+ return new MemorySagaEventConsumer(actorSystem, sagaShardRegionActor, metricsService,
+ (MemoryActorEventChannel) actorEventChannel);
+ } else {
+ return new MemorySagaEventConsumer(actorSystem, sagaShardRegionActor, metricsService,
+ (MemoryActorEventChannel) actorEventChannel);
+ }
+ }
+
+ @Bean
+ GrpcSagaEventService grpcSagaEventService(ActorEventChannel actorEventChannel, Map<String, Map<String, OmegaCallback>> omegaCallbacks){
+ ServerMeta serverMeta = ServerMeta.newBuilder()
+ .putMeta(AlphaMetaKeys.AkkaEnabled.name(), String.valueOf(true)).build();
+ return new GrpcSagaEventService(actorEventChannel, omegaCallbacks, serverMeta);
+ }
+
+ @Bean
+ APIv1Impl apIv1(){
+ return new APIv1Impl();
+ }
+
+ @Bean
+ APIv1Controller apIv1Controller(){
+ return new APIv1Controller();
+ }
+
+ @Bean
+ AlphaMetricsEndpoint alphaMetricsEndpoint(){
+ return new AlphaMetricsEndpointImpl();
+ }
+
+ @Bean
+ @Profile("test")
+ FsmSagaDataController fsmSagaDataController(){
+ return new FsmSagaDataController();
+ }
+}
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/fsm/CompensateAckCountDownLatch.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/CompensateAckCountDownLatch.java
similarity index 95%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/fsm/CompensateAckCountDownLatch.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/CompensateAckCountDownLatch.java
index 188cc16..cdaf29e 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/fsm/CompensateAckCountDownLatch.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/CompensateAckCountDownLatch.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.fsm;
+package org.apache.servicecomb.pack.alpha.fsm;
import java.util.concurrent.CountDownLatch;
import org.apache.servicecomb.pack.alpha.core.fsm.CompensateAckType;
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/fsm/GrpcOmegaCallback.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/GrpcOmegaCallback.java
similarity index 98%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/fsm/GrpcOmegaCallback.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/GrpcOmegaCallback.java
index dcc7eea..9f27f95 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/fsm/GrpcOmegaCallback.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/GrpcOmegaCallback.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.fsm;
+package org.apache.servicecomb.pack.alpha.fsm;
import com.google.protobuf.ByteString;
import io.grpc.stub.StreamObserver;
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/fsm/GrpcSagaEventService.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/GrpcSagaEventService.java
similarity index 98%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/fsm/GrpcSagaEventService.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/GrpcSagaEventService.java
index e4d25b9..82552d0 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/fsm/GrpcSagaEventService.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/GrpcSagaEventService.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.fsm;
+package org.apache.servicecomb.pack.alpha.fsm;
import static java.util.Collections.emptyMap;
@@ -26,10 +26,10 @@
import java.util.concurrent.ConcurrentHashMap;
import org.apache.servicecomb.pack.alpha.core.OmegaCallback;
import org.apache.servicecomb.pack.alpha.core.fsm.CompensateAckType;
+import org.apache.servicecomb.pack.alpha.core.fsm.channel.ActorEventChannel;
import org.apache.servicecomb.pack.alpha.core.fsm.event.TxCompensateAckFailedEvent;
import org.apache.servicecomb.pack.alpha.core.fsm.event.TxCompensateAckSucceedEvent;
import org.apache.servicecomb.pack.alpha.core.fsm.event.base.BaseEvent;
-import org.apache.servicecomb.pack.alpha.core.fsm.channel.ActorEventChannel;
import org.apache.servicecomb.pack.common.EventType;
import org.apache.servicecomb.pack.contract.grpc.GrpcAck;
import org.apache.servicecomb.pack.contract.grpc.GrpcCompensateCommand;
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/SagaActor.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/SagaActor.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/SagaActor.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/SagaActor.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/SagaActorState.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/SagaActorState.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/SagaActorState.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/SagaActorState.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/SagaShardRegionActor.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/SagaShardRegionActor.java
similarity index 98%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/SagaShardRegionActor.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/SagaShardRegionActor.java
index 5d0d6d8..6298cbe 100644
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/SagaShardRegionActor.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/SagaShardRegionActor.java
@@ -20,7 +20,6 @@
import akka.actor.AbstractActor;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
-import akka.actor.Props;
import akka.cluster.sharding.ClusterSharding;
import akka.cluster.sharding.ClusterShardingSettings;
import akka.cluster.sharding.ShardRegion;
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/api/APIv1Controller.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/api/APIv1Controller.java
similarity index 80%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/api/APIv1Controller.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/api/APIv1Controller.java
index 396e708..a6dd52e 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/api/APIv1Controller.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/api/APIv1Controller.java
@@ -15,10 +15,11 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.api;
+package org.apache.servicecomb.pack.alpha.fsm.api;
import java.util.List;
import java.util.Map;
+import org.apache.servicecomb.pack.alpha.core.api.APIv1;
import org.apache.servicecomb.pack.alpha.core.metrics.AlphaMetrics;
import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.GlobalTransaction;
import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.PagingGlobalTransactions;
@@ -28,40 +29,38 @@
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-@RestController
@RequestMapping("/alpha/api/v1")
public class APIv1Controller {
@Autowired
- APIv1Impl APIv1Impl;
+ APIv1 apIv1;
@GetMapping(value = "/metrics")
public ResponseEntity<AlphaMetrics> metrics() {
- return ResponseEntity.ok(APIv1Impl.getMetrics());
+ return ResponseEntity.ok(apIv1.getMetrics());
}
@GetMapping(value = "/transaction/{globalTxId}")
public ResponseEntity<GlobalTransaction> getTransactionByGlobalTxId(@PathVariable String globalTxId)
throws Exception {
- return ResponseEntity.ok(APIv1Impl.getTransactionByGlobalTxId(globalTxId));
+ return ResponseEntity.ok(apIv1.getTransactionByGlobalTxId(globalTxId));
}
@GetMapping(value = "/transaction")
public ResponseEntity<PagingGlobalTransactions> getTransactions(@RequestParam(value = "page", required = false, defaultValue = "0") int page,
@RequestParam(value = "size", required = false, defaultValue = "50") int size)
throws Exception {
- return ResponseEntity.ok(APIv1Impl.getTransactions(null,page,size));
+ return ResponseEntity.ok(apIv1.getTransactions(null,page,size));
}
@GetMapping(value = "/transaction/statistics")
- public ResponseEntity<Map<String,Long>> getTransactionStatistics() {
- return ResponseEntity.ok(APIv1Impl.getTransactionStatistics());
+ public ResponseEntity<Map<String,Long>> getTransactionStatistics() throws Exception {
+ return ResponseEntity.ok(apIv1.getTransactionStatistics());
}
@GetMapping(value = "/transaction/slow")
- public ResponseEntity<List<GlobalTransaction>> getSlowTransactions(@RequestParam(name="size", defaultValue = "10") int size) {
- return ResponseEntity.ok(APIv1Impl.getSlowTransactions(size));
+ public ResponseEntity<List<GlobalTransaction>> getSlowTransactions(@RequestParam(name="size", defaultValue = "10") int size) throws Exception {
+ return ResponseEntity.ok(apIv1.getSlowTransactions(size));
}
}
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/api/APIv1Impl.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/api/APIv1Impl.java
similarity index 92%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/api/APIv1Impl.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/api/APIv1Impl.java
index edd7b78..8a03086 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/api/APIv1Impl.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/api/APIv1Impl.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.api;
+package org.apache.servicecomb.pack.alpha.fsm.api;
import java.util.List;
import java.util.Map;
@@ -23,12 +23,10 @@
import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.GlobalTransaction;
import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.PagingGlobalTransactions;
import org.apache.servicecomb.pack.alpha.core.metrics.AlphaMetrics;
+import org.apache.servicecomb.pack.alpha.core.metrics.AlphaMetricsEndpoint;
import org.apache.servicecomb.pack.alpha.fsm.repository.TransactionRepository;
-import org.apache.servicecomb.pack.alpha.server.metrics.AlphaMetricsEndpoint;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-@Component
public class APIv1Impl implements APIv1 {
@Autowired
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/AbstractActorEventChannel.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/AbstractActorEventChannel.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/AbstractActorEventChannel.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/AbstractActorEventChannel.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/AbstractEventConsumer.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/AbstractEventConsumer.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/AbstractEventConsumer.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/AbstractEventConsumer.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/kafka/KafkaActorEventChannel.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/kafka/KafkaActorEventChannel.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/kafka/KafkaActorEventChannel.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/kafka/KafkaActorEventChannel.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/kafka/KafkaChannelAutoConfiguration.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/kafka/KafkaChannelAutoConfiguration.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/kafka/KafkaChannelAutoConfiguration.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/kafka/KafkaChannelAutoConfiguration.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/kafka/KafkaMessagePublisher.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/kafka/KafkaMessagePublisher.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/kafka/KafkaMessagePublisher.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/kafka/KafkaMessagePublisher.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/kafka/KafkaSagaEventConsumer.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/kafka/KafkaSagaEventConsumer.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/kafka/KafkaSagaEventConsumer.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/kafka/KafkaSagaEventConsumer.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/memory/MemoryActorEventChannel.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/memory/MemoryActorEventChannel.java
similarity index 96%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/memory/MemoryActorEventChannel.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/memory/MemoryActorEventChannel.java
index d5222b5..dfdd744 100644
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/memory/MemoryActorEventChannel.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/memory/MemoryActorEventChannel.java
@@ -19,11 +19,9 @@
import java.lang.invoke.MethodHandles;
import java.util.concurrent.LinkedBlockingQueue;
-
import org.apache.servicecomb.pack.alpha.core.fsm.event.base.BaseEvent;
import org.apache.servicecomb.pack.alpha.fsm.channel.AbstractActorEventChannel;
import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
-import org.apache.servicecomb.pack.alpha.core.fsm.sink.ActorEventSink;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/memory/MemorySagaEventConsumer.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/memory/MemorySagaEventConsumer.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/memory/MemorySagaEventConsumer.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/memory/MemorySagaEventConsumer.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitActorEventChannel.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitActorEventChannel.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitActorEventChannel.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitActorEventChannel.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitChannelAutoConfiguration.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitChannelAutoConfiguration.java
similarity index 99%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitChannelAutoConfiguration.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitChannelAutoConfiguration.java
index f463f16..1e30415 100644
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitChannelAutoConfiguration.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitChannelAutoConfiguration.java
@@ -19,6 +19,7 @@
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
+import java.util.Map;
import org.apache.servicecomb.pack.alpha.core.fsm.channel.ActorEventChannel;
import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
import org.springframework.beans.factory.annotation.Qualifier;
@@ -32,8 +33,6 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
-import java.util.Map;
-
@EnableBinding({RabbitMessageChannel.class})
@Configuration
@EnableConfigurationProperties(BindingServiceProperties.class)
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitMessageChannel.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitMessageChannel.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitMessageChannel.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitMessageChannel.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitMessagePublisher.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitMessagePublisher.java
similarity index 99%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitMessagePublisher.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitMessagePublisher.java
index a441749..8a2c82a 100644
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitMessagePublisher.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitMessagePublisher.java
@@ -17,14 +17,13 @@
package org.apache.servicecomb.pack.alpha.fsm.channel.rabbit;
+import java.lang.invoke.MethodHandles;
import org.apache.servicecomb.pack.alpha.core.fsm.channel.MessagePublisher;
import org.apache.servicecomb.pack.alpha.core.fsm.event.base.BaseEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.integration.support.MessageBuilder;
-import java.lang.invoke.MethodHandles;
-
public class RabbitMessagePublisher implements MessagePublisher<BaseEvent> {
private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitSagaEventConsumer.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitSagaEventConsumer.java
similarity index 99%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitSagaEventConsumer.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitSagaEventConsumer.java
index 87f5237..9d72b94 100644
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitSagaEventConsumer.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitSagaEventConsumer.java
@@ -21,6 +21,10 @@
import akka.actor.ActorSystem;
import akka.pattern.Patterns;
import akka.util.Timeout;
+import java.lang.invoke.MethodHandles;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CompletionException;
+import java.util.concurrent.CompletionStage;
import org.apache.servicecomb.pack.alpha.core.fsm.event.base.BaseEvent;
import org.apache.servicecomb.pack.alpha.fsm.channel.AbstractEventConsumer;
import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
@@ -31,11 +35,6 @@
import scala.concurrent.Future;
import scala.concurrent.duration.Duration;
-import java.lang.invoke.MethodHandles;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.CompletionException;
-import java.util.concurrent.CompletionStage;
-
public class RabbitSagaEventConsumer extends AbstractEventConsumer {
private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
public RabbitSagaEventConsumer(ActorSystem actorSystem, ActorRef sagaShardRegionActor,
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/MessageSerializer.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/MessageSerializer.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/MessageSerializer.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/MessageSerializer.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/RedisActorEventChannel.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/RedisActorEventChannel.java
similarity index 99%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/RedisActorEventChannel.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/RedisActorEventChannel.java
index 20abdec..e023bb0 100644
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/RedisActorEventChannel.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/RedisActorEventChannel.java
@@ -18,9 +18,8 @@
package org.apache.servicecomb.pack.alpha.fsm.channel.redis;
import java.lang.invoke.MethodHandles;
-
-import org.apache.servicecomb.pack.alpha.fsm.channel.AbstractActorEventChannel;
import org.apache.servicecomb.pack.alpha.core.fsm.event.base.BaseEvent;
+import org.apache.servicecomb.pack.alpha.fsm.channel.AbstractActorEventChannel;
import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/RedisChannelAutoConfiguration.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/RedisChannelAutoConfiguration.java
similarity index 98%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/RedisChannelAutoConfiguration.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/RedisChannelAutoConfiguration.java
index 3bc8cb4..7d15967 100644
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/RedisChannelAutoConfiguration.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/RedisChannelAutoConfiguration.java
@@ -23,7 +23,6 @@
import org.apache.servicecomb.pack.alpha.core.NodeStatus;
import org.apache.servicecomb.pack.alpha.core.fsm.channel.ActorEventChannel;
import org.apache.servicecomb.pack.alpha.core.fsm.channel.MessagePublisher;
-import org.apache.servicecomb.pack.alpha.core.fsm.sink.ActorEventSink;
import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/RedisMessagePublisher.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/RedisMessagePublisher.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/RedisMessagePublisher.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/RedisMessagePublisher.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/RedisSagaEventConsumer.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/RedisSagaEventConsumer.java
similarity index 96%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/RedisSagaEventConsumer.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/RedisSagaEventConsumer.java
index f19e768..b9cb31e 100644
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/RedisSagaEventConsumer.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/redis/RedisSagaEventConsumer.java
@@ -23,7 +23,6 @@
import org.apache.servicecomb.pack.alpha.core.NodeStatus;
import org.apache.servicecomb.pack.alpha.core.fsm.event.base.BaseEvent;
import org.apache.servicecomb.pack.alpha.fsm.channel.AbstractEventConsumer;
-import org.apache.servicecomb.pack.alpha.fsm.channel.memory.MemoryActorEventChannel;
import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/AddTxEventDomain.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/AddTxEventDomain.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/AddTxEventDomain.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/AddTxEventDomain.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/DomainEvent.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/DomainEvent.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/DomainEvent.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/DomainEvent.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/SagaEndedDomain.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/SagaEndedDomain.java
similarity index 99%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/SagaEndedDomain.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/SagaEndedDomain.java
index 0abca9d..9cbe70b 100644
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/SagaEndedDomain.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/SagaEndedDomain.java
@@ -18,8 +18,8 @@
package org.apache.servicecomb.pack.alpha.fsm.domain;
import org.apache.servicecomb.pack.alpha.core.fsm.SuspendedType;
-import org.apache.servicecomb.pack.alpha.fsm.SagaActorState;
import org.apache.servicecomb.pack.alpha.core.fsm.event.base.BaseEvent;
+import org.apache.servicecomb.pack.alpha.fsm.SagaActorState;
public class SagaEndedDomain implements DomainEvent {
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/SagaStartedDomain.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/SagaStartedDomain.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/SagaStartedDomain.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/SagaStartedDomain.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/UpdateTxEventDomain.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/UpdateTxEventDomain.java
similarity index 99%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/UpdateTxEventDomain.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/UpdateTxEventDomain.java
index af7195a..a60a438 100644
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/UpdateTxEventDomain.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/domain/UpdateTxEventDomain.java
@@ -21,9 +21,9 @@
import org.apache.servicecomb.pack.alpha.core.fsm.event.TxAbortedEvent;
import org.apache.servicecomb.pack.alpha.core.fsm.event.TxCompensateAckFailedEvent;
import org.apache.servicecomb.pack.alpha.core.fsm.event.TxCompensateAckSucceedEvent;
-import org.apache.servicecomb.pack.alpha.core.fsm.event.internal.CompensateAckTimeoutEvent;
import org.apache.servicecomb.pack.alpha.core.fsm.event.TxEndedEvent;
import org.apache.servicecomb.pack.alpha.core.fsm.event.base.BaseEvent;
+import org.apache.servicecomb.pack.alpha.core.fsm.event.internal.CompensateAckTimeoutEvent;
import org.apache.servicecomb.pack.alpha.core.fsm.event.internal.ComponsitedCheckEvent;
public class UpdateTxEventDomain implements DomainEvent {
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/metrics/AlphaMetricsEndpoint.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/metrics/AlphaMetricsEndpointImpl.java
similarity index 86%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/metrics/AlphaMetricsEndpoint.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/metrics/AlphaMetricsEndpointImpl.java
index 4a88890..1896980 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/metrics/AlphaMetricsEndpoint.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/metrics/AlphaMetricsEndpointImpl.java
@@ -15,24 +15,24 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.metrics;
+package org.apache.servicecomb.pack.alpha.fsm.metrics;
import org.apache.servicecomb.pack.alpha.core.NodeStatus;
import org.apache.servicecomb.pack.alpha.core.NodeStatus.TypeEnum;
+import org.apache.servicecomb.pack.alpha.core.metrics.AlphaMetricsEndpoint;
import org.apache.servicecomb.pack.alpha.core.metrics.MetricsBean;
-import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
@Component
-public class AlphaMetricsEndpoint {
+public class AlphaMetricsEndpointImpl implements AlphaMetricsEndpoint {
@Autowired
@Lazy
private NodeStatus nodeStatus;
- @Autowired(required = false)
+ @Autowired
MetricsService metricsService;
public MetricsBean getMetrics() {
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/metrics/MetricsService.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/metrics/MetricsService.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/metrics/MetricsService.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/metrics/MetricsService.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/model/SagaData.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/model/SagaData.java
similarity index 99%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/model/SagaData.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/model/SagaData.java
index 92e873d..3295d67 100644
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/model/SagaData.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/model/SagaData.java
@@ -23,8 +23,8 @@
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
import org.apache.servicecomb.pack.alpha.core.fsm.SuspendedType;
-import org.apache.servicecomb.pack.alpha.fsm.SagaActorState;
import org.apache.servicecomb.pack.alpha.core.fsm.event.base.BaseEvent;
+import org.apache.servicecomb.pack.alpha.fsm.SagaActorState;
public class SagaData implements Serializable {
private String serviceName;
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/model/TxEntities.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/model/TxEntities.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/model/TxEntities.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/model/TxEntities.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/model/TxEntity.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/model/TxEntity.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/model/TxEntity.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/model/TxEntity.java
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/Lock.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/properties/ChannelKafkaProperties.java
old mode 100755
new mode 100644
similarity index 86%
copy from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/Lock.java
copy to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/properties/ChannelKafkaProperties.java
index 1622f13..2f76334
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/Lock.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/properties/ChannelKafkaProperties.java
@@ -14,9 +14,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+package org.apache.servicecomb.pack.alpha.fsm.properties;
-package org.apache.servicecomb.pack.alpha.server.cluster.master.provider;
+public class ChannelKafkaProperties {
-public interface Lock {
- void unlock();
-}
+}
\ No newline at end of file
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/Lock.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/properties/ChannelMemoryProperties.java
old mode 100755
new mode 100644
similarity index 74%
copy from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/Lock.java
copy to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/properties/ChannelMemoryProperties.java
index 1622f13..157e348
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/Lock.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/properties/ChannelMemoryProperties.java
@@ -15,8 +15,16 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.cluster.master.provider;
+package org.apache.servicecomb.pack.alpha.fsm.properties;
-public interface Lock {
- void unlock();
-}
+public class ChannelMemoryProperties {
+ private int maxLength;
+
+ public int getMaxLength() {
+ return maxLength;
+ }
+
+ public void setMaxLength(int maxLength) {
+ this.maxLength = maxLength;
+ }
+}
\ No newline at end of file
diff --git a/alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/SagaApplication.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/properties/ChannelProperties.java
similarity index 65%
copy from alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/SagaApplication.java
copy to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/properties/ChannelProperties.java
index 7c14000..3afd653 100644
--- a/alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/SagaApplication.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/properties/ChannelProperties.java
@@ -15,14 +15,25 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.fsm;
+package org.apache.servicecomb.pack.alpha.fsm.properties;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
+public class ChannelProperties {
+ private String name;
+ private ChannelMemoryProperties memory;
-@SpringBootApplication
-public class SagaApplication {
- public static void main(String[] args){
- SpringApplication.run(SagaApplication.class, args);
+ public String getName() {
+ return name;
}
-}
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public ChannelMemoryProperties getMemory() {
+ return memory;
+ }
+
+ public void setMemory(ChannelMemoryProperties memory) {
+ this.memory = memory;
+ }
+}
\ No newline at end of file
diff --git a/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/properties/ElasticsearchProperties.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/properties/ElasticsearchProperties.java
new file mode 100644
index 0000000..317356f
--- /dev/null
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/properties/ElasticsearchProperties.java
@@ -0,0 +1,52 @@
+/*
+ * 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.pack.alpha.fsm.properties;
+
+public class ElasticsearchProperties {
+
+ private String uris;
+ // TODO
+ // Size of bulk request, When this value is greater than 0, the batch data will be lost when the jvm crashes.
+ // In the future, we can use Kafka to solve this problem instead of storing it directly in the ES.
+ private int batchSize = 100;
+ private int refreshTime = 5000;
+
+ public String getUris() {
+ return uris;
+ }
+
+ public void setUris(String uris) {
+ this.uris = uris;
+ }
+
+ public int getBatchSize() {
+ return batchSize;
+ }
+
+ public void setBatchSize(int batchSize) {
+ this.batchSize = batchSize;
+ }
+
+ public int getRefreshTime() {
+ return refreshTime;
+ }
+
+ public void setRefreshTime(int refreshTime) {
+ this.refreshTime = refreshTime;
+ }
+}
\ No newline at end of file
diff --git a/alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/SagaApplication.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/properties/RepositoryProperties.java
similarity index 62%
copy from alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/SagaApplication.java
copy to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/properties/RepositoryProperties.java
index 7c14000..7b235a8 100644
--- a/alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/SagaApplication.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/properties/RepositoryProperties.java
@@ -15,14 +15,27 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.fsm;
+package org.apache.servicecomb.pack.alpha.fsm.properties;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
+public class RepositoryProperties {
+ private String name;
-@SpringBootApplication
-public class SagaApplication {
- public static void main(String[] args){
- SpringApplication.run(SagaApplication.class, args);
+ private ElasticsearchProperties elasticsearch;
+
+ public String getName() {
+ return name;
}
-}
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public ElasticsearchProperties getElasticsearch() {
+ return elasticsearch;
+ }
+
+ public void setElasticsearch(
+ ElasticsearchProperties elasticsearch) {
+ this.elasticsearch = elasticsearch;
+ }
+}
\ No newline at end of file
diff --git a/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/properties/SpecSagaAkkaProperties.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/properties/SpecSagaAkkaProperties.java
new file mode 100644
index 0000000..dc327e4
--- /dev/null
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/properties/SpecSagaAkkaProperties.java
@@ -0,0 +1,46 @@
+/*
+ * 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.pack.alpha.fsm.properties;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@ConfigurationProperties(prefix = "alpha.spec.saga.akka")
+public class SpecSagaAkkaProperties {
+
+ private ChannelProperties channel;
+ private RepositoryProperties repository;
+
+ public ChannelProperties getChannel() {
+ return channel;
+ }
+
+ public void setChannel(ChannelProperties channel) {
+ this.channel = channel;
+ }
+
+ public RepositoryProperties getRepository() {
+ return repository;
+ }
+
+ public void setRepository(
+ RepositoryProperties repository) {
+ this.repository = repository;
+ }
+}
\ No newline at end of file
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/AbstractTransactionRepositoryChannel.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/AbstractTransactionRepositoryChannel.java
similarity index 99%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/AbstractTransactionRepositoryChannel.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/AbstractTransactionRepositoryChannel.java
index 0dc7593..2b5eea3 100644
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/AbstractTransactionRepositoryChannel.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/AbstractTransactionRepositoryChannel.java
@@ -17,8 +17,8 @@
package org.apache.servicecomb.pack.alpha.fsm.repository;
-import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.GlobalTransaction;
+import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
public abstract class AbstractTransactionRepositoryChannel implements TransactionRepositoryChannel {
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/NoneTransactionRepository.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/NoneTransactionRepository.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/NoneTransactionRepository.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/NoneTransactionRepository.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/TransactionRepository.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/TransactionRepository.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/TransactionRepository.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/TransactionRepository.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/TransactionRepositoryChannel.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/TransactionRepositoryChannel.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/TransactionRepositoryChannel.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/TransactionRepositoryChannel.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/channel/DefaultTransactionRepositoryChannel.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/channel/DefaultTransactionRepositoryChannel.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/channel/DefaultTransactionRepositoryChannel.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/channel/DefaultTransactionRepositoryChannel.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/elasticsearch/ElasticsearchTransactionRepository.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/elasticsearch/ElasticsearchTransactionRepository.java
similarity index 95%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/elasticsearch/ElasticsearchTransactionRepository.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/elasticsearch/ElasticsearchTransactionRepository.java
index 9e1f0c7..1c9e242 100644
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/elasticsearch/ElasticsearchTransactionRepository.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/elasticsearch/ElasticsearchTransactionRepository.java
@@ -29,6 +29,7 @@
import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.GlobalTransaction;
import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.PagingGlobalTransactions;
import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
+import org.apache.servicecomb.pack.alpha.fsm.properties.ElasticsearchProperties;
import org.apache.servicecomb.pack.alpha.fsm.repository.TransactionRepository;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.index.query.QueryBuilders;
@@ -63,13 +64,12 @@
private final List<IndexQuery> queries = new ArrayList<>();
private final Object lock = new Object();
- public ElasticsearchTransactionRepository(
- ElasticsearchRestTemplate template, MetricsService metricsService, int batchSize,
- int refreshTime) {
- this.template = template;
+ public ElasticsearchTransactionRepository(ElasticsearchProperties elasticsearchProperties,
+ ElasticsearchRestTemplate elasticsearchRestTemplate, MetricsService metricsService) {
+ this.template = elasticsearchRestTemplate;
+ this.batchSize = elasticsearchProperties.getBatchSize();
+ this.refreshTime = elasticsearchProperties.getRefreshTime();
this.metricsService = metricsService;
- this.batchSize = batchSize;
- this.refreshTime = refreshTime;
if (this.refreshTime > 0) {
new Thread(new RefreshTimer(), "elasticsearch-repository-refresh").start();
}
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/elasticsearch/GlobalTransactionDocument.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/elasticsearch/GlobalTransactionDocument.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/elasticsearch/GlobalTransactionDocument.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/elasticsearch/GlobalTransactionDocument.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/spring/integration/akka/AkkaClusterListener.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/spring/integration/akka/AkkaClusterListener.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/spring/integration/akka/AkkaClusterListener.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/spring/integration/akka/AkkaClusterListener.java
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/spring/integration/akka/AkkaConfigPropertyAdapter.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/spring/integration/akka/AkkaConfigPropertyAdapter.java
similarity index 96%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/spring/integration/akka/AkkaConfigPropertyAdapter.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/spring/integration/akka/AkkaConfigPropertyAdapter.java
index 566694d..31c12a5 100644
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/spring/integration/akka/AkkaConfigPropertyAdapter.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/spring/integration/akka/AkkaConfigPropertyAdapter.java
@@ -18,13 +18,16 @@
package org.apache.servicecomb.pack.alpha.fsm.spring.integration.akka;
import java.lang.invoke.MethodHandles;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.EnumerablePropertySource;
import org.springframework.core.env.PropertySource;
-
-import java.util.*;
import org.springframework.core.env.StandardEnvironment;
public class AkkaConfigPropertyAdapter {
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/spring/integration/akka/SagaDataExtension.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/spring/integration/akka/SagaDataExtension.java
similarity index 99%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/spring/integration/akka/SagaDataExtension.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/spring/integration/akka/SagaDataExtension.java
index 62e6fb3..b91c27a 100644
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/spring/integration/akka/SagaDataExtension.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/spring/integration/akka/SagaDataExtension.java
@@ -24,12 +24,12 @@
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
-import org.apache.servicecomb.pack.alpha.fsm.SagaActorState;
import org.apache.servicecomb.pack.alpha.core.fsm.TransactionType;
-import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
-import org.apache.servicecomb.pack.alpha.fsm.model.SagaData;
import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.GlobalTransaction;
import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.SagaSubTransaction;
+import org.apache.servicecomb.pack.alpha.fsm.SagaActorState;
+import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
+import org.apache.servicecomb.pack.alpha.fsm.model.SagaData;
import org.apache.servicecomb.pack.alpha.fsm.repository.TransactionRepositoryChannel;
import org.apache.servicecomb.pack.alpha.fsm.spring.integration.akka.SagaDataExtension.SagaDataExt;
import org.slf4j.Logger;
diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/spring/integration/akka/SpringAkkaExtension.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/spring/integration/akka/SpringAkkaExtension.java
similarity index 100%
rename from alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/spring/integration/akka/SpringAkkaExtension.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/spring/integration/akka/SpringAkkaExtension.java
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/fsm/FsmSagaDataController.java b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/test/FsmSagaDataController.java
similarity index 96%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/fsm/FsmSagaDataController.java
rename to alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/test/FsmSagaDataController.java
index 44113e1..a430355 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/fsm/FsmSagaDataController.java
+++ b/alpha/alpha-spec-saga-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/test/FsmSagaDataController.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.fsm;
+package org.apache.servicecomb.pack.alpha.fsm.test;
import akka.actor.ActorSystem;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
@@ -45,7 +45,7 @@
@Profile("test")
@ConditionalOnProperty(name= "alpha.feature.akka.enabled", havingValue = "true")
// Only export this Controller for test
-class FsmSagaDataController {
+public class FsmSagaDataController {
private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
@Autowired
diff --git a/alpha/alpha-fsm/src/main/resources/META-INF/spring.factories b/alpha/alpha-spec-saga-fsm/src/main/resources/META-INF/spring.factories
similarity index 87%
rename from alpha/alpha-fsm/src/main/resources/META-INF/spring.factories
rename to alpha/alpha-spec-saga-fsm/src/main/resources/META-INF/spring.factories
index ff42cdd..e43b611 100644
--- a/alpha/alpha-fsm/src/main/resources/META-INF/spring.factories
+++ b/alpha/alpha-spec-saga-fsm/src/main/resources/META-INF/spring.factories
@@ -14,4 +14,5 @@
## See the License for the specific language governing permissions and
## limitations under the License.
## ---------------------------------------------------------------------------
-org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.apache.servicecomb.pack.alpha.fsm.FsmAutoConfiguration
+org.springframework.boot.autoconfigure.EnableAutoConfiguration= \
+ org.apache.servicecomb.pack.alpha.fsm.AlphaSpecSagaFsmAutoConfiguration
diff --git a/alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/SagaApplication.java b/alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/it/SagaApplication.java
similarity index 94%
rename from alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/SagaApplication.java
rename to alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/it/SagaApplication.java
index 7c14000..52cb449 100644
--- a/alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/SagaApplication.java
+++ b/alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/it/SagaApplication.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.fsm;
+package org.apache.servicecomb.pack.alpha.spec.saga.akka.it;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/SagaIntegrationTest.java b/alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/it/SagaIntegrationTest.java
similarity index 93%
rename from alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/SagaIntegrationTest.java
rename to alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/it/SagaIntegrationTest.java
index a94760b..3d53fc0 100644
--- a/alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/SagaIntegrationTest.java
+++ b/alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/it/SagaIntegrationTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.fsm;
+package org.apache.servicecomb.pack.alpha.spec.saga.akka.it;
import static java.util.concurrent.TimeUnit.SECONDS;
import static org.awaitility.Awaitility.await;
@@ -27,6 +27,8 @@
import akka.actor.ActorSystem;
import java.util.UUID;
import org.apache.servicecomb.pack.alpha.core.fsm.TxState;
+import org.apache.servicecomb.pack.alpha.fsm.SagaActorState;
+import org.apache.servicecomb.pack.alpha.spec.saga.akka.util.SagaEventSender;
import org.apache.servicecomb.pack.alpha.fsm.channel.memory.MemoryActorEventChannel;
import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
import org.apache.servicecomb.pack.alpha.fsm.model.SagaData;
@@ -47,18 +49,21 @@
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {SagaApplication.class},
properties = {
- //akka
- "alpha.feature.akka.enabled=true",
+ // saga-akka
+ "alpha.spec.names=saga-akka",
+ // akka
"akkaConfig.akka.persistence.journal.plugin=akka.persistence.journal.inmem",
"akkaConfig.akka.persistence.journal.leveldb.dir=target/example/journal",
"akkaConfig.akka.persistence.snapshot-store.plugin=akka.persistence.snapshot-store.local",
"akkaConfig.akka.persistence.snapshot-store.local.dir=target/example/snapshots",
- //elasticsearch
- "alpha.feature.akka.transaction.repository.channel.type=memory",
- "alpha.feature.akka.transaction.repository.type=elasticsearch",
- "alpha.feature.akka.transaction.repository.elasticsearch.batchSize=0",
- "spring.data.elasticsearch.cluster-name=elasticsearch",
- "spring.data.elasticsearch.cluster-nodes=localhost:9300"
+ // channel
+ "alpha.spec.saga.akka.channel.name=memory",
+ "alpha.spec.saga.akka.channel.memory.max-length=-1",
+ // elasticsearch
+ "alpha.spec.saga.akka.repository.name=elasticsearch",
+ "alpha.spec.saga.akka.repository.elasticsearch.uris=localhost:9300",
+ "alpha.spec.saga.akka.repository.elasticsearch.batch-size=0",
+ "alpha.spec.saga.akka.repository.elasticsearch.refresh-time=5000"
})
public class SagaIntegrationTest {
@@ -347,9 +352,14 @@
assertNotNull(sagaData.getBeginTime());
assertNotNull(sagaData.getEndTime());
assertEquals(sagaData.getTxEntities().size(),3);
- assertEquals(sagaData.getTxEntities().get(localTxId_1).getState(),TxState.COMPENSATED_SUCCEED);
- assertEquals(sagaData.getTxEntities().get(localTxId_2).getState(),TxState.COMPENSATED_SUCCEED);
- assertEquals(sagaData.getTxEntities().get(localTxId_3).getState(),TxState.FAILED);
+ await().atMost(60, SECONDS).until(() -> {
+ return sagaData.getTxEntities().get(localTxId_1) != null
+ && sagaData.getTxEntities().get(localTxId_2) != null
+ && sagaData.getTxEntities().get(localTxId_3) != null;
+ });
+ assertEquals(TxState.COMPENSATED_SUCCEED, sagaData.getTxEntities().get(localTxId_1).getState());
+ assertEquals(TxState.COMPENSATED_SUCCEED, sagaData.getTxEntities().get(localTxId_2).getState());
+ assertEquals(TxState.FAILED, sagaData.getTxEntities().get(localTxId_3).getState());
}
}
diff --git a/alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/SagaActorTest.java b/alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/ut/SagaActorTest.java
similarity index 98%
rename from alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/SagaActorTest.java
rename to alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/ut/SagaActorTest.java
index 8b3a7e4..76745f9 100644
--- a/alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/SagaActorTest.java
+++ b/alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/ut/SagaActorTest.java
@@ -15,14 +15,14 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.fsm;
+package org.apache.servicecomb.pack.alpha.spec.saga.akka.ut;
import static org.apache.servicecomb.pack.alpha.fsm.spring.integration.akka.SagaDataExtension.SAGA_DATA_EXTENSION_PROVIDER;
+import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Mockito.when;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
@@ -38,8 +38,12 @@
import java.util.UUID;
import org.apache.servicecomb.pack.alpha.core.fsm.TxState;
import org.apache.servicecomb.pack.alpha.core.fsm.event.base.BaseEvent;
+import org.apache.servicecomb.pack.alpha.fsm.SagaActor;
+import org.apache.servicecomb.pack.alpha.fsm.SagaActorState;
+import org.apache.servicecomb.pack.alpha.spec.saga.akka.util.SagaEventSender;
import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
import org.apache.servicecomb.pack.alpha.fsm.model.SagaData;
+import org.apache.servicecomb.pack.alpha.fsm.properties.ElasticsearchProperties;
import org.apache.servicecomb.pack.alpha.fsm.repository.TransactionRepository;
import org.apache.servicecomb.pack.alpha.fsm.repository.TransactionRepositoryChannel;
import org.apache.servicecomb.pack.alpha.fsm.repository.channel.DefaultTransactionRepositoryChannel;
@@ -47,6 +51,7 @@
import org.apache.servicecomb.pack.alpha.fsm.spring.integration.akka.SagaDataExtension;
import org.junit.After;
import org.junit.AfterClass;
+import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -58,8 +63,6 @@
import org.springframework.data.elasticsearch.core.IndexOperations;
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
-import static org.hamcrest.CoreMatchers.*;
-
@RunWith(MockitoJUnitRunner.class)
public class SagaActorTest {
@@ -68,6 +71,9 @@
@Mock
ElasticsearchRestTemplate template;
+ @Mock
+ ElasticsearchProperties elasticsearchProperties;
+
static MetricsService metricsService = new MetricsService();
private static Map<String,Object> getPersistenceMemConfig(){
@@ -107,7 +113,7 @@
public void before(){
when(template.indexOps(ArgumentMatchers.any(IndexCoordinates.class))).thenReturn(mock(IndexOperations.class));
- TransactionRepository repository = new ElasticsearchTransactionRepository(template, metricsService, 0,0);
+ TransactionRepository repository = new ElasticsearchTransactionRepository(elasticsearchProperties, template, metricsService);
TransactionRepositoryChannel repositoryChannel = new DefaultTransactionRepositoryChannel(repository, metricsService);
SAGA_DATA_EXTENSION_PROVIDER.get(system).setRepositoryChannel(repositoryChannel);
}
@@ -150,7 +156,7 @@
//expect
CurrentState currentState = expectMsgClass(PersistentFSM.CurrentState.class);
- assertEquals(SagaActorState.IDLE, currentState.state());
+ Assert.assertEquals(SagaActorState.IDLE, currentState.state());
PersistentFSM.Transition transition = expectMsgClass(PersistentFSM.Transition.class);
assertSagaTransition(transition, saga, SagaActorState.IDLE, SagaActorState.READY);
diff --git a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/api/APIv1ControllerTest.java b/alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/ut/api/APIv1ControllerTest.java
similarity index 94%
rename from alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/api/APIv1ControllerTest.java
rename to alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/ut/api/APIv1ControllerTest.java
index bb9b3b5..887f487 100644
--- a/alpha/alpha-server/src/test/java/org/apache/servicecomb/pack/alpha/server/api/APIv1ControllerTest.java
+++ b/alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/ut/api/APIv1ControllerTest.java
@@ -15,10 +15,11 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.api;
+package org.apache.servicecomb.pack.alpha.spec.saga.akka.ut.api;
import static org.hamcrest.Matchers.hasSize;
import static org.mockito.Mockito.when;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@@ -34,7 +35,6 @@
import java.util.UUID;
import org.apache.servicecomb.pack.alpha.core.NodeStatus;
import org.apache.servicecomb.pack.alpha.core.NodeStatus.TypeEnum;
-import org.apache.servicecomb.pack.alpha.fsm.SagaActorState;
import org.apache.servicecomb.pack.alpha.core.fsm.TransactionType;
import org.apache.servicecomb.pack.alpha.core.fsm.TxState;
import org.apache.servicecomb.pack.alpha.core.fsm.event.SagaEndedEvent;
@@ -42,32 +42,29 @@
import org.apache.servicecomb.pack.alpha.core.fsm.event.TxEndedEvent;
import org.apache.servicecomb.pack.alpha.core.fsm.event.TxStartedEvent;
import org.apache.servicecomb.pack.alpha.core.fsm.event.base.BaseEvent;
-import org.apache.servicecomb.pack.alpha.core.metrics.MetricsBean;
-import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
-import org.apache.servicecomb.pack.alpha.fsm.repository.TransactionRepository;
import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.GlobalTransaction;
import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.PagingGlobalTransactions;
import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.SagaSubTransaction;
-import org.apache.servicecomb.pack.alpha.server.AlphaApplication;
-import org.apache.servicecomb.pack.alpha.server.AlphaConfig;
-import org.apache.servicecomb.pack.alpha.server.metrics.AlphaMetricsEndpoint;
+import org.apache.servicecomb.pack.alpha.core.metrics.AlphaMetricsEndpoint;
+import org.apache.servicecomb.pack.alpha.core.metrics.MetricsBean;
+import org.apache.servicecomb.pack.alpha.fsm.api.APIv1Controller;
+import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
+import org.apache.servicecomb.pack.alpha.fsm.SagaActorState;
+import org.apache.servicecomb.pack.alpha.fsm.repository.TransactionRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.http.MediaType;
+import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-
@RunWith(SpringRunner.class)
-@AutoConfigureMockMvc
-@SpringBootTest(classes = {AlphaApplication.class, AlphaConfig.class})
+@ContextConfiguration(classes = {TestConfiguration.class})
+@WebMvcTest(APIv1Controller.class)
public class APIv1ControllerTest {
@Autowired
@@ -76,16 +73,16 @@
@Autowired
AlphaMetricsEndpoint alphaMetricsEndpoint;
- @MockBean
+ @Autowired
MetricsService metricsService;
- @MockBean
+ @Autowired
NodeStatus nodeStatus;
- @MockBean
+ @Autowired
ElasticsearchRestTemplate template;
- @MockBean
+ @Autowired
TransactionRepository transactionRepository;
@Test
@@ -193,7 +190,7 @@
.globalTransactions(globalTransactions)
.build();
- when(transactionRepository.getGlobalTransactions(null,0, 50)).thenReturn(paging);
+ when(transactionRepository.getGlobalTransactions(null, 0, 50)).thenReturn(paging);
ObjectMapper mapper = new ObjectMapper();
mapper.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, false);
@@ -281,12 +278,13 @@
.subTransactions(subTransactions)
.build();
- when(transactionRepository.getGlobalTransactionByGlobalTxId(globalTxId)).thenReturn(globalTransaction);
+ when(transactionRepository.getGlobalTransactionByGlobalTxId(globalTxId)).thenReturn(
+ globalTransaction);
ObjectMapper mapper = new ObjectMapper();
mapper.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, false);
mapper.configure(Feature.QUOTE_NON_NUMERIC_NUMBERS, false);
- mockMvc.perform(get("/alpha/api/v1/transaction/"+globalTxId))
+ mockMvc.perform(get("/alpha/api/v1/transaction/" + globalTxId))
.andDo(print())
.andExpect(status().isOk())
.andExpect(
@@ -334,7 +332,7 @@
@Test
public void transactionSlowTest() throws Exception {
List<GlobalTransaction> globalTransactions = new ArrayList<>();
- for(int i=0;i<10;i++){
+ for (int i = 0; i < 10; i++) {
globalTransactions.add(GlobalTransaction.builder()
.beginTime(new Date())
.endTime(new Date())
diff --git a/alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/ut/api/TestConfiguration.java b/alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/ut/api/TestConfiguration.java
new file mode 100644
index 0000000..1d5dc6b
--- /dev/null
+++ b/alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/ut/api/TestConfiguration.java
@@ -0,0 +1,60 @@
+/*
+ * 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.pack.alpha.spec.saga.akka.ut.api;
+
+import org.apache.servicecomb.pack.alpha.core.NodeStatus;
+import org.apache.servicecomb.pack.alpha.core.metrics.AlphaMetricsEndpoint;
+import org.apache.servicecomb.pack.alpha.fsm.api.APIv1Controller;
+import org.apache.servicecomb.pack.alpha.fsm.api.APIv1Impl;
+import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
+import org.apache.servicecomb.pack.alpha.fsm.metrics.AlphaMetricsEndpointImpl;
+import org.apache.servicecomb.pack.alpha.fsm.repository.TransactionRepository;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
+
+@Configuration
+public class TestConfiguration {
+ @MockBean
+ MetricsService metricsService;
+
+ @MockBean
+ NodeStatus nodeStatus;
+
+ @MockBean
+ ElasticsearchRestTemplate template;
+
+ @MockBean
+ TransactionRepository transactionRepository;
+
+ @Bean
+ AlphaMetricsEndpoint alphaMetricsEndpoint(){
+ return new AlphaMetricsEndpointImpl();
+ }
+
+ @Bean
+ APIv1Controller apIv1Controller(){
+ return new APIv1Controller();
+ }
+
+ @Bean
+ APIv1Impl apIv1(){
+ return new APIv1Impl();
+ }
+}
\ No newline at end of file
diff --git a/alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/model/TxEntitiesTest.java b/alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/ut/model/TxEntitiesTest.java
similarity index 91%
rename from alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/model/TxEntitiesTest.java
rename to alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/ut/model/TxEntitiesTest.java
index 2ffb16a..c647dd6 100644
--- a/alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/model/TxEntitiesTest.java
+++ b/alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/ut/model/TxEntitiesTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.fsm.model;
+package org.apache.servicecomb.pack.alpha.spec.saga.akka.ut.model;
import static org.junit.Assert.assertTrue;
@@ -26,6 +26,8 @@
import java.util.List;
import java.util.ListIterator;
import java.util.UUID;
+import org.apache.servicecomb.pack.alpha.fsm.model.TxEntities;
+import org.apache.servicecomb.pack.alpha.fsm.model.TxEntity;
import org.junit.Test;
public class TxEntitiesTest {
diff --git a/alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/repository/ElasticsearchTransactionRepositoryTest.java b/alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/ut/repository/ElasticsearchTransactionRepositoryTest.java
similarity index 83%
rename from alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/repository/ElasticsearchTransactionRepositoryTest.java
rename to alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/ut/repository/ElasticsearchTransactionRepositoryTest.java
index 4437da8..4a99444 100644
--- a/alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/repository/ElasticsearchTransactionRepositoryTest.java
+++ b/alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/ut/repository/ElasticsearchTransactionRepositoryTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.fsm.repository;
+package org.apache.servicecomb.pack.alpha.spec.saga.akka.ut.repository;
import static java.util.concurrent.TimeUnit.SECONDS;
import static org.awaitility.Awaitility.await;
@@ -26,11 +26,13 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.UUID;
-import org.apache.servicecomb.pack.alpha.fsm.SagaActorState;
import org.apache.servicecomb.pack.alpha.core.fsm.TransactionType;
-import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
-import org.apache.servicecomb.pack.alpha.fsm.repository.elasticsearch.ElasticsearchTransactionRepository;
import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.GlobalTransaction;
+import org.apache.servicecomb.pack.alpha.fsm.SagaActorState;
+import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
+import org.apache.servicecomb.pack.alpha.fsm.properties.ElasticsearchProperties;
+import org.apache.servicecomb.pack.alpha.fsm.repository.TransactionRepository;
+import org.apache.servicecomb.pack.alpha.fsm.repository.elasticsearch.ElasticsearchTransactionRepository;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -57,10 +59,10 @@
@Test
public void syncTest() throws Exception {
- int refreshTime = 0;
- int batchSize = 0;
- TransactionRepository repository = new ElasticsearchTransactionRepository(template,
- metricsService, batchSize, refreshTime);
+ ElasticsearchProperties elasticsearchProperties = new ElasticsearchProperties();
+ elasticsearchProperties.setBatchSize(0);
+ elasticsearchProperties.setRefreshTime(0);
+ TransactionRepository repository = new ElasticsearchTransactionRepository(elasticsearchProperties, template, metricsService);
int size = 100;
for (int i = 0; i < size; i++) {
final String globalTxId = UUID.randomUUID().toString();
@@ -88,10 +90,11 @@
@Test
public void syncWithRefreshTimeTest() throws Exception {
int size = 100;
- int refreshTime = 2;
- int batchSize = 0;
- TransactionRepository repository = new ElasticsearchTransactionRepository(template,
- metricsService, batchSize, refreshTime * 1000);
+ ElasticsearchProperties elasticsearchProperties = new ElasticsearchProperties();
+ elasticsearchProperties.setBatchSize(0);
+ elasticsearchProperties.setRefreshTime(2000);
+ TransactionRepository repository = new ElasticsearchTransactionRepository(elasticsearchProperties,
+ template, metricsService);
for (int i = 0; i < size; i++) {
final String globalTxId = UUID.randomUUID().toString();
GlobalTransaction transaction = GlobalTransaction.builder()
@@ -117,10 +120,11 @@
@Test
public void asyncWithBatchSizeAndRefreshTimeTest() throws Exception {
int size = 15;
- int refreshTime = 2;
- int batchSize = 10;
- TransactionRepository repository = new ElasticsearchTransactionRepository(template,
- metricsService, batchSize, refreshTime * 1000);
+ ElasticsearchProperties elasticsearchProperties = new ElasticsearchProperties();
+ elasticsearchProperties.setBatchSize(10);
+ elasticsearchProperties.setRefreshTime(2000);
+ TransactionRepository repository = new ElasticsearchTransactionRepository(elasticsearchProperties,
+ template, metricsService);
for (int i = 0; i < size; i++) {
final String globalTxId = UUID.randomUUID().toString();
GlobalTransaction transaction = GlobalTransaction.builder()
@@ -137,7 +141,7 @@
.build();
repository.send(transaction);
}
- await().atMost(refreshTime + 10, SECONDS).until(
+ await().atMost(2000 + 10, SECONDS).until(
() -> metricsService.metrics().getRepositoryAccepted() == metricsService.metrics()
.getRepositoryReceived());
assertEquals(metricsService.metrics().getRepositoryAccepted(), size);
diff --git a/alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/SagaEventSender.java b/alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/util/SagaEventSender.java
similarity index 99%
rename from alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/SagaEventSender.java
rename to alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/util/SagaEventSender.java
index 1f0d792..48d4c69 100644
--- a/alpha/alpha-fsm/src/test/java/org/apache/servicecomb/pack/alpha/fsm/SagaEventSender.java
+++ b/alpha/alpha-spec-saga-fsm/src/test/java/org/apache/servicecomb/pack/alpha/spec/saga/akka/util/SagaEventSender.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.fsm;
+package org.apache.servicecomb.pack.alpha.spec.saga.akka.util;
import java.util.ArrayList;
import java.util.List;
@@ -26,7 +26,6 @@
import org.apache.servicecomb.pack.alpha.core.fsm.event.TxAbortedEvent;
import org.apache.servicecomb.pack.alpha.core.fsm.event.TxCompensateAckFailedEvent;
import org.apache.servicecomb.pack.alpha.core.fsm.event.TxCompensateAckSucceedEvent;
-import org.apache.servicecomb.pack.alpha.core.fsm.event.TxCompensateAckSucceedEvent;
import org.apache.servicecomb.pack.alpha.core.fsm.event.TxEndedEvent;
import org.apache.servicecomb.pack.alpha.core.fsm.event.TxStartedEvent;
import org.apache.servicecomb.pack.alpha.core.fsm.event.base.BaseEvent;
diff --git a/alpha/alpha-fsm/src/test/resources/application.yaml b/alpha/alpha-spec-saga-fsm/src/test/resources/application.yaml
similarity index 100%
rename from alpha/alpha-fsm/src/test/resources/application.yaml
rename to alpha/alpha-spec-saga-fsm/src/test/resources/application.yaml
diff --git a/alpha/alpha-fsm/src/test/resources/log4j2.xml b/alpha/alpha-spec-saga-fsm/src/test/resources/log4j2.xml
similarity index 100%
rename from alpha/alpha-fsm/src/test/resources/log4j2.xml
rename to alpha/alpha-spec-saga-fsm/src/test/resources/log4j2.xml
diff --git a/alpha/alpha-spec-tcc-db/pom.xml b/alpha/alpha-spec-tcc-db/pom.xml
new file mode 100644
index 0000000..865b1f4
--- /dev/null
+++ b/alpha/alpha-spec-tcc-db/pom.xml
@@ -0,0 +1,61 @@
+<?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>alpha</artifactId>
+ <groupId>org.apache.servicecomb.pack</groupId>
+ <version>0.7.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>alpha-spec-tcc-db</artifactId>
+ <name>Pack::Alpha::Specification::Tcc::DB</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-autoconfigure</artifactId>
+ </dependency>
+
+ <!-- servicecomb -->
+ <dependency>
+ <groupId>org.apache.servicecomb.pack</groupId>
+ <artifactId>pack-contract-grpc</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.servicecomb.pack</groupId>
+ <artifactId>alpha-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.servicecomb.pack</groupId>
+ <artifactId>alpha-persistence-jpa</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.postgresql</groupId>
+ <artifactId>postgresql</artifactId>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-web</artifactId>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
diff --git a/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/AlphaSpecTccDbAutoConfiguration.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/AlphaSpecTccDbAutoConfiguration.java
new file mode 100644
index 0000000..b2f62eb
--- /dev/null
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/AlphaSpecTccDbAutoConfiguration.java
@@ -0,0 +1,147 @@
+/*
+ * 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.pack.alpha.spec.tcc.db;
+
+import java.lang.invoke.MethodHandles;
+import org.apache.servicecomb.pack.alpha.core.api.APIv1;
+import org.apache.servicecomb.pack.alpha.core.metrics.AlphaMetricsEndpoint;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.api.TccDbAPIv1Controller;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.api.TccDbAPIv1Impl;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.callback.OmegaCallbackWrapper;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.callback.TccCallbackEngine;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.callback.TccPendingTaskRunner;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.metrics.AlphaMetricsEndpointImpl;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.metrics.MetricsService;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.properties.SpecTccDbProperties;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.service.MemoryTxEventRepository;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.service.RDBTxEventRepository;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.service.TccEventScanner;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.service.TccTxEventRepository;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.service.TccTxEventService;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.test.AlphaTccEventController;
+import org.apache.servicecomb.pack.persistence.jpa.EclipseLinkJpaConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.context.annotation.Profile;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+
+@Configuration
+@ImportAutoConfiguration({SpecTccDbProperties.class, EclipseLinkJpaConfiguration.class})
+@ConditionalOnExpression("'${alpha.spec.names}'.contains('tcc-db')")
+@EnableJpaRepositories(basePackages = "org.apache.servicecomb.pack.alpha.spec.tcc.db")
+public class AlphaSpecTccDbAutoConfiguration {
+
+ private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+ @Value("${alpha.compensation.retry.delay:3000}")
+ private int delay;
+
+ @Value("${alpha.tx.timeout-seconds:600}")
+ private int globalTxTimeoutSeconds;
+
+ public AlphaSpecTccDbAutoConfiguration() {
+ LOG.info("Alpha Specification Tcc DB");
+ }
+
+ @Bean
+ @Primary
+ public DataSourceProperties dataSourceProperties(SpecTccDbProperties specTccDbProperties) {
+ return specTccDbProperties.getDatasource();
+ }
+
+ @Bean
+ TccTxEventRepository tccTxEventRepository(SpecTccDbProperties specTccDbProperties) {
+ if (specTccDbProperties.isMemoryMode()) {
+ return new MemoryTxEventRepository();
+ } else {
+ return new RDBTxEventRepository();
+ }
+ }
+
+ @Bean
+ TccCallbackEngine tccCallbackEngine() {
+ return new TccCallbackEngine();
+ }
+
+ @Bean
+ TccTxEventService tccTxEventService(TccTxEventRepository tccTxEventRepository,
+ TccCallbackEngine tccCallbackEngine) {
+ return new TccTxEventService(tccTxEventRepository, tccCallbackEngine);
+ }
+
+ @Bean
+ TccPendingTaskRunner tccPendingTaskRunner() {
+ return new TccPendingTaskRunner(delay);
+ }
+
+ @Bean
+ OmegaCallbackWrapper omegaCallbackWrapper(TccPendingTaskRunner tccPendingTaskRunner) {
+ return new OmegaCallbackWrapper(tccPendingTaskRunner);
+ }
+
+ @Bean
+ GrpcTccEventService grpcTccEventService(TccTxEventService tccTxEventService,
+ TccPendingTaskRunner tccPendingTaskRunner, TccEventScanner tccEventScanner) {
+ // start the service which are needed for TCC
+ tccPendingTaskRunner.start();
+ tccEventScanner.start();
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+ tccPendingTaskRunner.shutdown();
+ tccEventScanner.shutdown();
+ }));
+ return new GrpcTccEventService(tccTxEventService);
+ }
+
+ @Bean
+ TccEventScanner tccEventScanner(TccTxEventService tccTxEventService) {
+ return new TccEventScanner(tccTxEventService, delay, globalTxTimeoutSeconds);
+ }
+
+ @Bean
+ public MetricsService metricsService() {
+ return new MetricsService();
+ }
+
+ @Bean
+ AlphaMetricsEndpoint alphaMetricsEndpoint(){
+ return new AlphaMetricsEndpointImpl();
+ }
+
+ @Bean
+ TccDbAPIv1Controller apIv1Controller(){
+ return new TccDbAPIv1Controller();
+ }
+
+ @Bean
+ APIv1 apIv1(){
+ return new TccDbAPIv1Impl();
+ }
+
+ @Bean
+ @Profile("test")
+ AlphaTccEventController alphaTccEventController(TccTxEventRepository tccTxEventRepository){
+ return new AlphaTccEventController(tccTxEventRepository);
+ }
+}
\ No newline at end of file
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/GrpcTccEventService.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/GrpcTccEventService.java
similarity index 82%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/GrpcTccEventService.java
rename to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/GrpcTccEventService.java
index 2c00932..d7330c4 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/GrpcTccEventService.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/GrpcTccEventService.java
@@ -15,15 +15,23 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db;
import io.grpc.stub.StreamObserver;
import java.lang.invoke.MethodHandles;
-import org.apache.servicecomb.pack.alpha.server.tcc.callback.OmegaCallback;
-import org.apache.servicecomb.pack.alpha.server.tcc.callback.OmegaCallbacksRegistry;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.EventConverter;
-import org.apache.servicecomb.pack.alpha.server.tcc.service.TccTxEventService;
-import org.apache.servicecomb.pack.contract.grpc.*;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.callback.OmegaCallback;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.callback.OmegaCallbacksRegistry;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.EventConverter;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.service.TccTxEventService;
+import org.apache.servicecomb.pack.contract.grpc.GrpcAck;
+import org.apache.servicecomb.pack.contract.grpc.GrpcParticipationEndedEvent;
+import org.apache.servicecomb.pack.contract.grpc.GrpcParticipationStartedEvent;
+import org.apache.servicecomb.pack.contract.grpc.GrpcServiceConfig;
+import org.apache.servicecomb.pack.contract.grpc.GrpcTccCoordinateCommand;
+import org.apache.servicecomb.pack.contract.grpc.GrpcTccCoordinatedEvent;
+import org.apache.servicecomb.pack.contract.grpc.GrpcTccTransactionEndedEvent;
+import org.apache.servicecomb.pack.contract.grpc.GrpcTccTransactionStartedEvent;
+import org.apache.servicecomb.pack.contract.grpc.TccEventServiceGrpc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/api/TccDbAPIv1Controller.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/api/TccDbAPIv1Controller.java
new file mode 100644
index 0000000..0087b37
--- /dev/null
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/api/TccDbAPIv1Controller.java
@@ -0,0 +1,37 @@
+/*
+ * 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.pack.alpha.spec.tcc.db.api;
+
+import org.apache.servicecomb.pack.alpha.core.api.APIv1;
+import org.apache.servicecomb.pack.alpha.core.metrics.AlphaMetrics;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@RequestMapping("/alpha/api/v1")
+public class TccDbAPIv1Controller {
+
+ @Autowired
+ APIv1 apIv1;
+
+ @GetMapping(value = "/metrics")
+ public ResponseEntity<AlphaMetrics> metrics() {
+ return ResponseEntity.ok(apIv1.getMetrics());
+ }
+}
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/api/APIv1Impl.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/api/TccDbAPIv1Impl.java
similarity index 63%
copy from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/api/APIv1Impl.java
copy to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/api/TccDbAPIv1Impl.java
index edd7b78..a2ff755 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/api/APIv1Impl.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/api/TccDbAPIv1Impl.java
@@ -15,28 +15,23 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.api;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.api;
import java.util.List;
import java.util.Map;
+import javax.transaction.NotSupportedException;
import org.apache.servicecomb.pack.alpha.core.api.APIv1;
import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.GlobalTransaction;
import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.PagingGlobalTransactions;
import org.apache.servicecomb.pack.alpha.core.metrics.AlphaMetrics;
-import org.apache.servicecomb.pack.alpha.fsm.repository.TransactionRepository;
-import org.apache.servicecomb.pack.alpha.server.metrics.AlphaMetricsEndpoint;
+import org.apache.servicecomb.pack.alpha.core.metrics.AlphaMetricsEndpoint;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-@Component
-public class APIv1Impl implements APIv1 {
+public class TccDbAPIv1Impl implements APIv1 {
@Autowired
AlphaMetricsEndpoint alphaMetricsEndpoint;
- @Autowired(required = false)
- TransactionRepository transactionRepository;
-
public AlphaMetrics getMetrics() {
AlphaMetrics alphaMetrics = new AlphaMetrics();
alphaMetrics.setMetrics(alphaMetricsEndpoint.getMetrics());
@@ -44,25 +39,24 @@
return alphaMetrics;
}
- public GlobalTransaction getTransactionByGlobalTxId(String globalTxId)
- throws Exception {
- GlobalTransaction globalTransaction = transactionRepository
- .getGlobalTransactionByGlobalTxId(globalTxId);
- return globalTransaction;
+ @Override
+ public GlobalTransaction getTransactionByGlobalTxId(String globalTxId) throws Exception {
+ throw new NotSupportedException();
}
+ @Override
public PagingGlobalTransactions getTransactions(String state, int page, int size)
throws Exception {
- PagingGlobalTransactions pagingGlobalTransactions = transactionRepository
- .getGlobalTransactions(state, page, size);
- return pagingGlobalTransactions;
+ throw new NotSupportedException();
}
- public Map<String, Long> getTransactionStatistics() {
- return transactionRepository.getTransactionStatistics();
+ @Override
+ public Map<String, Long> getTransactionStatistics() throws Exception {
+ throw new NotSupportedException();
}
- public List<GlobalTransaction> getSlowTransactions(int size) {
- return transactionRepository.getSlowGlobalTransactionsTopN(size);
+ @Override
+ public List<GlobalTransaction> getSlowTransactions(int size) throws Exception {
+ throw new NotSupportedException();
}
}
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/callback/CallbackEngine.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/callback/CallbackEngine.java
similarity index 86%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/callback/CallbackEngine.java
rename to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/callback/CallbackEngine.java
index 5aaa4f0..88052b2 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/callback/CallbackEngine.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/callback/CallbackEngine.java
@@ -15,9 +15,9 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.callback;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.callback;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.GlobalTxEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.GlobalTxEvent;
public interface CallbackEngine {
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/callback/GrpcOmegaTccCallback.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/callback/GrpcOmegaTccCallback.java
similarity index 92%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/callback/GrpcOmegaTccCallback.java
rename to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/callback/GrpcOmegaTccCallback.java
index 3de4966..c7c8c3f 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/callback/GrpcOmegaTccCallback.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/callback/GrpcOmegaTccCallback.java
@@ -15,11 +15,10 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.callback;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.callback;
import io.grpc.stub.StreamObserver;
-
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.ParticipatedEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.ParticipatedEvent;
import org.apache.servicecomb.pack.common.TransactionStatus;
import org.apache.servicecomb.pack.contract.grpc.GrpcTccCoordinateCommand;
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/callback/OmegaCallback.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/callback/OmegaCallback.java
similarity index 87%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/callback/OmegaCallback.java
rename to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/callback/OmegaCallback.java
index 7d57d8e..11b4c9e 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/callback/OmegaCallback.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/callback/OmegaCallback.java
@@ -15,9 +15,9 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.callback;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.callback;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.ParticipatedEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.ParticipatedEvent;
import org.apache.servicecomb.pack.common.TransactionStatus;
public interface OmegaCallback {
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/callback/OmegaCallbackWrapper.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/callback/OmegaCallbackWrapper.java
similarity index 89%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/callback/OmegaCallbackWrapper.java
rename to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/callback/OmegaCallbackWrapper.java
index fb5d37f..6ce604f 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/callback/OmegaCallbackWrapper.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/callback/OmegaCallbackWrapper.java
@@ -15,15 +15,12 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.callback;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.callback;
import java.util.concurrent.BlockingQueue;
-
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.ParticipatedEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.ParticipatedEvent;
import org.apache.servicecomb.pack.common.TransactionStatus;
-import org.springframework.stereotype.Component;
-@Component
public class OmegaCallbackWrapper implements OmegaCallback {
private final BlockingQueue<Runnable> pendingTasks;
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/callback/OmegaCallbacksRegistry.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/callback/OmegaCallbacksRegistry.java
similarity index 97%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/callback/OmegaCallbacksRegistry.java
rename to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/callback/OmegaCallbacksRegistry.java
index 61a509c..0485a63 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/callback/OmegaCallbacksRegistry.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/callback/OmegaCallbacksRegistry.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.callback;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.callback;
import static java.util.Collections.emptyMap;
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/callback/TccCallbackEngine.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/callback/TccCallbackEngine.java
similarity index 87%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/callback/TccCallbackEngine.java
rename to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/callback/TccCallbackEngine.java
index 5bf3362..fcc0e31 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/callback/TccCallbackEngine.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/callback/TccCallbackEngine.java
@@ -15,20 +15,18 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.callback;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.callback;
import java.lang.invoke.MethodHandles;
import java.util.concurrent.atomic.AtomicBoolean;
-
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.ParticipatedEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.GlobalTxEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.service.TccTxEventRepository;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.GlobalTxEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.ParticipatedEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.service.TccTxEventRepository;
import org.apache.servicecomb.pack.common.TransactionStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-@Component
+
public class TccCallbackEngine implements CallbackEngine {
private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/callback/TccPendingTaskRunner.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/callback/TccPendingTaskRunner.java
similarity index 96%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/callback/TccPendingTaskRunner.java
rename to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/callback/TccPendingTaskRunner.java
index a248e04..5b303ba 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/callback/TccPendingTaskRunner.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/callback/TccPendingTaskRunner.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.callback;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.callback;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/EventConverter.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/EventConverter.java
similarity index 92%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/EventConverter.java
rename to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/EventConverter.java
index 3748d3d..6193c65 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/EventConverter.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/EventConverter.java
@@ -15,10 +15,14 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.jpa;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa;
import org.apache.servicecomb.pack.common.TransactionStatus;
-import org.apache.servicecomb.pack.contract.grpc.*;
+import org.apache.servicecomb.pack.contract.grpc.GrpcParticipationEndedEvent;
+import org.apache.servicecomb.pack.contract.grpc.GrpcParticipationStartedEvent;
+import org.apache.servicecomb.pack.contract.grpc.GrpcTccCoordinatedEvent;
+import org.apache.servicecomb.pack.contract.grpc.GrpcTccTransactionEndedEvent;
+import org.apache.servicecomb.pack.contract.grpc.GrpcTccTransactionStartedEvent;
public class EventConverter {
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/GlobalTxEvent.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/GlobalTxEvent.java
similarity index 98%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/GlobalTxEvent.java
rename to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/GlobalTxEvent.java
index 96c8055..9b48af1 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/GlobalTxEvent.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/GlobalTxEvent.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.jpa;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa;
import java.util.Date;
import java.util.Objects;
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/GlobalTxEventRepository.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/GlobalTxEventRepository.java
similarity index 97%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/GlobalTxEventRepository.java
rename to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/GlobalTxEventRepository.java
index 3dc172d..9d169cf 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/GlobalTxEventRepository.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/GlobalTxEventRepository.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.jpa;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa;
import java.util.Date;
import java.util.List;
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/ParticipatedEvent.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/ParticipatedEvent.java
similarity index 98%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/ParticipatedEvent.java
rename to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/ParticipatedEvent.java
index e669c4e..1029050 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/ParticipatedEvent.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/ParticipatedEvent.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.jpa;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa;
import java.util.Date;
import java.util.Objects;
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/ParticipatedEventRepository.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/ParticipatedEventRepository.java
similarity index 96%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/ParticipatedEventRepository.java
rename to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/ParticipatedEventRepository.java
index 88cd4c1..798ecb0 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/ParticipatedEventRepository.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/ParticipatedEventRepository.java
@@ -15,18 +15,16 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.jpa;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa;
import java.util.List;
import java.util.Optional;
-
+import javax.transaction.Transactional;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
-import javax.transaction.Transactional;
-
public interface ParticipatedEventRepository extends CrudRepository<ParticipatedEvent, Long> {
@Query(value = "SELECT t FROM ParticipatedEvent AS t WHERE t.globalTxId = ?1")
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/TccTxEvent.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/TccTxEvent.java
similarity index 98%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/TccTxEvent.java
rename to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/TccTxEvent.java
index 5237838..4cf70e4 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/TccTxEvent.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/TccTxEvent.java
@@ -15,12 +15,11 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.jpa;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa;
import java.util.Date;
import java.util.Objects;
-
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/TccTxEventDBRepository.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/TccTxEventDBRepository.java
similarity index 95%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/TccTxEventDBRepository.java
rename to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/TccTxEventDBRepository.java
index 4b865dc..c5ea380 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/TccTxEventDBRepository.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/TccTxEventDBRepository.java
@@ -15,11 +15,10 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.jpa;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa;
import java.util.List;
import java.util.Optional;
-
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/TccTxType.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/TccTxType.java
similarity index 93%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/TccTxType.java
rename to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/TccTxType.java
index 343f0fe..b0e9130 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/jpa/TccTxType.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/jpa/TccTxType.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.jpa;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa;
public enum TccTxType {
STARTED,
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/metrics/AlphaMetricsEndpoint.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/metrics/AlphaMetricsEndpointImpl.java
similarity index 85%
copy from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/metrics/AlphaMetricsEndpoint.java
copy to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/metrics/AlphaMetricsEndpointImpl.java
index 4a88890..34fbab4 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/metrics/AlphaMetricsEndpoint.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/metrics/AlphaMetricsEndpointImpl.java
@@ -15,24 +15,24 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.metrics;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.metrics;
import org.apache.servicecomb.pack.alpha.core.NodeStatus;
import org.apache.servicecomb.pack.alpha.core.NodeStatus.TypeEnum;
+import org.apache.servicecomb.pack.alpha.core.metrics.AlphaMetricsEndpoint;
import org.apache.servicecomb.pack.alpha.core.metrics.MetricsBean;
-import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
@Component
-public class AlphaMetricsEndpoint {
+public class AlphaMetricsEndpointImpl implements AlphaMetricsEndpoint {
@Autowired
@Lazy
private NodeStatus nodeStatus;
- @Autowired(required = false)
+ @Autowired
MetricsService metricsService;
public MetricsBean getMetrics() {
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/Lock.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/metrics/MetricsService.java
old mode 100755
new mode 100644
similarity index 73%
copy from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/Lock.java
copy to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/metrics/MetricsService.java
index 1622f13..33dbc88
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/cluster/master/provider/Lock.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/metrics/MetricsService.java
@@ -15,8 +15,16 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.cluster.master.provider;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.metrics;
-public interface Lock {
- void unlock();
+import org.apache.servicecomb.pack.alpha.core.metrics.MetricsBean;
+
+public class MetricsService {
+
+ private final MetricsBean metrics = new MetricsBean();
+
+ public MetricsBean metrics() {
+ return metrics;
+ }
+
}
diff --git a/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/properties/SpecTccDbProperties.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/properties/SpecTccDbProperties.java
new file mode 100644
index 0000000..2943f9a
--- /dev/null
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/properties/SpecTccDbProperties.java
@@ -0,0 +1,45 @@
+/*
+ * 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.pack.alpha.spec.tcc.db.properties;
+
+import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@ConfigurationProperties(prefix = "alpha.spec.tcc.db")
+public class SpecTccDbProperties {
+ private boolean memoryMode = false;
+ private DataSourceProperties datasource;
+
+ public boolean isMemoryMode() {
+ return memoryMode;
+ }
+
+ public void setMemoryMode(boolean memoryMode) {
+ this.memoryMode = memoryMode;
+ }
+
+ public DataSourceProperties getDatasource() {
+ return datasource;
+ }
+
+ public void setDatasource(DataSourceProperties datasource) {
+ this.datasource = datasource;
+ }
+}
\ No newline at end of file
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/service/MemoryTxEventRepository.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/MemoryTxEventRepository.java
similarity index 87%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/service/MemoryTxEventRepository.java
rename to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/MemoryTxEventRepository.java
index 3fadb53..6d69609 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/service/MemoryTxEventRepository.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/MemoryTxEventRepository.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.service;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.service;
import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
@@ -27,20 +27,15 @@
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
-
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.EventConverter;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.GlobalTxEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.ParticipatedEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.TccTxEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.TccTxType;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.EventConverter;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.GlobalTxEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.ParticipatedEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.TccTxEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.TccTxType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.context.annotation.Profile;
import org.springframework.data.domain.Pageable;
-import org.springframework.stereotype.Component;
-@Component
-@Profile("memory")
public class MemoryTxEventRepository implements TccTxEventRepository {
private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/service/RDBTxEventRepository.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/RDBTxEventRepository.java
similarity index 82%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/service/RDBTxEventRepository.java
rename to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/RDBTxEventRepository.java
index 5841ce9..4697abe 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/service/RDBTxEventRepository.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/RDBTxEventRepository.java
@@ -15,28 +15,23 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.service;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.service;
import java.util.Date;
import java.util.List;
import java.util.Optional;
-
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.EventConverter;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.GlobalTxEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.GlobalTxEventRepository;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.ParticipatedEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.ParticipatedEventRepository;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.TccTxEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.TccTxEventDBRepository;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.TccTxType;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.EventConverter;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.GlobalTxEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.GlobalTxEventRepository;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.ParticipatedEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.ParticipatedEventRepository;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.TccTxEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.TccTxEventDBRepository;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.TccTxType;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Profile;
import org.springframework.data.domain.Pageable;
-import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
-@Component
-@Profile("!memory")
public class RDBTxEventRepository implements TccTxEventRepository {
@Autowired
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/service/TccEventScanner.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/TccEventScanner.java
similarity index 96%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/service/TccEventScanner.java
rename to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/TccEventScanner.java
index 5812414..e5e97d4 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/service/TccEventScanner.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/TccEventScanner.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.service;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.service;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.concurrent.TimeUnit.SECONDS;
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/service/TccTxEventRepository.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/TccTxEventRepository.java
similarity index 83%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/service/TccTxEventRepository.java
rename to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/TccTxEventRepository.java
index f6478dc..34b85ec 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/service/TccTxEventRepository.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/TccTxEventRepository.java
@@ -15,16 +15,15 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.service;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.service;
import java.util.Date;
import java.util.List;
import java.util.Optional;
-
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.GlobalTxEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.ParticipatedEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.TccTxEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.TccTxType;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.GlobalTxEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.ParticipatedEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.TccTxEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.TccTxType;
import org.springframework.data.domain.Pageable;
public interface TccTxEventRepository {
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/service/TccTxEventService.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/TccTxEventService.java
similarity index 93%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/service/TccTxEventService.java
rename to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/TccTxEventService.java
index f0a8f19..4706e9c 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/service/TccTxEventService.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/service/TccTxEventService.java
@@ -15,23 +15,20 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc.service;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.service;
import java.lang.invoke.MethodHandles;
import java.util.Date;
-
-import org.apache.servicecomb.pack.alpha.server.tcc.callback.TccCallbackEngine;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.GlobalTxEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.ParticipatedEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.TccTxEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.TccTxType;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.callback.TccCallbackEngine;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.GlobalTxEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.ParticipatedEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.TccTxEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.TccTxType;
import org.apache.servicecomb.pack.common.TransactionStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.domain.PageRequest;
-import org.springframework.stereotype.Component;
-@Component
public class TccTxEventService {
private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/AlphaTccEventController.java b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/test/AlphaTccEventController.java
similarity index 91%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/AlphaTccEventController.java
rename to alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/test/AlphaTccEventController.java
index 238969b..2cfdaae 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/pack/alpha/server/tcc/AlphaTccEventController.java
+++ b/alpha/alpha-spec-tcc-db/src/main/java/org/apache/servicecomb/pack/alpha/spec/tcc/db/test/AlphaTccEventController.java
@@ -15,15 +15,16 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.alpha.server.tcc;
+package org.apache.servicecomb.pack.alpha.spec.tcc.db.test;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
import java.lang.invoke.MethodHandles;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
-
-import org.apache.servicecomb.pack.alpha.server.tcc.jpa.TccTxEvent;
-import org.apache.servicecomb.pack.alpha.server.tcc.service.TccTxEventRepository;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.jpa.TccTxEvent;
+import org.apache.servicecomb.pack.alpha.spec.tcc.db.service.TccTxEventRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Profile;
@@ -33,12 +34,8 @@
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
-import com.fasterxml.jackson.annotation.JsonAutoDetect;
-import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
-
@Controller
@RequestMapping("/tcc")
-@Profile("test")
public class AlphaTccEventController {
private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
diff --git a/alpha/alpha-fsm/src/main/resources/META-INF/spring.factories b/alpha/alpha-spec-tcc-db/src/main/resources/META-INF/spring.factories
similarity index 86%
copy from alpha/alpha-fsm/src/main/resources/META-INF/spring.factories
copy to alpha/alpha-spec-tcc-db/src/main/resources/META-INF/spring.factories
index ff42cdd..60803c7 100644
--- a/alpha/alpha-fsm/src/main/resources/META-INF/spring.factories
+++ b/alpha/alpha-spec-tcc-db/src/main/resources/META-INF/spring.factories
@@ -14,4 +14,6 @@
## See the License for the specific language governing permissions and
## limitations under the License.
## ---------------------------------------------------------------------------
-org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.apache.servicecomb.pack.alpha.fsm.FsmAutoConfiguration
+
+org.springframework.boot.autoconfigure.EnableAutoConfiguration= \
+ org.apache.servicecomb.pack.alpha.spec.tcc.db.AlphaSpecTccDbAutoConfiguration
diff --git a/alpha/alpha-ui/src/main/java/org/apache/servicecomb/pack/alpha/ui/controller/TransactionController.java b/alpha/alpha-ui/src/main/java/org/apache/servicecomb/pack/alpha/ui/controller/TransactionController.java
index c1c8066..76bb504 100644
--- a/alpha/alpha-ui/src/main/java/org/apache/servicecomb/pack/alpha/ui/controller/TransactionController.java
+++ b/alpha/alpha-ui/src/main/java/org/apache/servicecomb/pack/alpha/ui/controller/TransactionController.java
@@ -217,7 +217,7 @@
@GetMapping("/ui/transaction/statistics")
@ResponseBody
- public TransactionStatisticsDTO getGlobalTransactionStatistics() {
+ public TransactionStatisticsDTO getGlobalTransactionStatistics() throws Exception {
TransactionStatisticsDTO statisticsDTO = new TransactionStatisticsDTO();
Map<String, Long> statistics = apiv1.getTransactionStatistics();
if (statistics.containsKey("COMMITTED")) {
@@ -234,7 +234,7 @@
@GetMapping("/ui/transaction/slow")
@ResponseBody
- public List<TransactionRowDTO> getSlowGlobalTransactionTopN() {
+ public List<TransactionRowDTO> getSlowGlobalTransactionTopN() throws Exception {
List<TransactionRowDTO> transactionRowDTOS = new ArrayList<>();
List<GlobalTransaction> transactions = apiv1.getSlowTransactions(10);
transactions.stream().forEach(globalTransaction -> {
diff --git a/alpha/pom.xml b/alpha/pom.xml
index 25e18c3..7f13aef 100644
--- a/alpha/pom.xml
+++ b/alpha/pom.xml
@@ -33,7 +33,10 @@
<packaging>pom</packaging>
<modules>
<module>alpha-core</module>
- <module>alpha-fsm</module>
+ <module>alpha-persistence-jpa</module>
+ <module>alpha-spec-saga-fsm</module>
+ <module>alpha-spec-saga-db</module>
+ <module>alpha-spec-tcc-db</module>
<module>alpha-benchmark</module>
<module>alpha-spring-cloud-starter-eureka</module>
<module>alpha-spring-cloud-starter-consul</module>
diff --git a/demo/tcc-spring-demo/inventory/pom.xml b/demo/tcc-spring-demo/inventory/pom.xml
index 5993dab..2c04067 100644
--- a/demo/tcc-spring-demo/inventory/pom.xml
+++ b/demo/tcc-spring-demo/inventory/pom.xml
@@ -45,10 +45,9 @@
</exclusion>
</exclusions>
</dependency>
- <!-- Added the eclipse link JPA configuration-->
<dependency>
- <groupId>org.apache.servicecomb.pack</groupId>
- <artifactId>persistence-jpa</artifactId>
+ <groupId>org.eclipse.persistence</groupId>
+ <artifactId>org.eclipse.persistence.jpa</artifactId>
</dependency>
<!-- Added the driver of h2 -->
<dependency>
diff --git a/persistence/persistence-jpa/src/main/java/org/apache/servicecomb/pack/persistence/jpa/EclipseLinkJpaConfiguration.java b/demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/pack/demo/inventory/EclipseLinkJpaConfiguration.java
similarity index 95%
rename from persistence/persistence-jpa/src/main/java/org/apache/servicecomb/pack/persistence/jpa/EclipseLinkJpaConfiguration.java
rename to demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/pack/demo/inventory/EclipseLinkJpaConfiguration.java
index 69dbf91..68b673a 100644
--- a/persistence/persistence-jpa/src/main/java/org/apache/servicecomb/pack/persistence/jpa/EclipseLinkJpaConfiguration.java
+++ b/demo/tcc-spring-demo/inventory/src/main/java/org/apache/servicecomb/pack/demo/inventory/EclipseLinkJpaConfiguration.java
@@ -15,14 +15,11 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.persistence.jpa;
+package org.apache.servicecomb.pack.demo.inventory;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
-
import javax.sql.DataSource;
-
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
diff --git a/demo/tcc-spring-demo/inventory/src/main/resources/application.yaml b/demo/tcc-spring-demo/inventory/src/main/resources/application.yaml
index aac174e..c6a96e2 100644
--- a/demo/tcc-spring-demo/inventory/src/main/resources/application.yaml
+++ b/demo/tcc-spring-demo/inventory/src/main/resources/application.yaml
@@ -26,6 +26,10 @@
show-sql: true
generate-ddl: true
+omega:
+ spec:
+ names: tcc
+
alpha:
cluster:
address: alpha-server.servicecomb.io:8080
diff --git a/demo/tcc-spring-demo/ordering/src/main/resources/application.yaml b/demo/tcc-spring-demo/ordering/src/main/resources/application.yaml
index 028de4e..79818bd 100644
--- a/demo/tcc-spring-demo/ordering/src/main/resources/application.yaml
+++ b/demo/tcc-spring-demo/ordering/src/main/resources/application.yaml
@@ -30,6 +30,11 @@
naming:
physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
+
+omega:
+ spec:
+ names: tcc
+
alpha:
cluster:
address: alpha-server.servicecomb.io:8080
diff --git a/demo/tcc-spring-demo/payment/pom.xml b/demo/tcc-spring-demo/payment/pom.xml
index bc7da43..baa89d4 100644
--- a/demo/tcc-spring-demo/payment/pom.xml
+++ b/demo/tcc-spring-demo/payment/pom.xml
@@ -43,10 +43,9 @@
</exclusion>
</exclusions>
</dependency>
- <!-- Added the eclipse link JPA configuration-->
<dependency>
- <groupId>org.apache.servicecomb.pack</groupId>
- <artifactId>persistence-jpa</artifactId>
+ <groupId>org.eclipse.persistence</groupId>
+ <artifactId>org.eclipse.persistence.jpa</artifactId>
</dependency>
<!-- Added the driver of h2 -->
<dependency>
diff --git a/persistence/persistence-jpa/src/main/java/org/apache/servicecomb/pack/persistence/jpa/EclipseLinkJpaConfiguration.java b/demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/pack/demo/payment/EclipseLinkJpaConfiguration.java
similarity index 95%
copy from persistence/persistence-jpa/src/main/java/org/apache/servicecomb/pack/persistence/jpa/EclipseLinkJpaConfiguration.java
copy to demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/pack/demo/payment/EclipseLinkJpaConfiguration.java
index 69dbf91..c4eba6f 100644
--- a/persistence/persistence-jpa/src/main/java/org/apache/servicecomb/pack/persistence/jpa/EclipseLinkJpaConfiguration.java
+++ b/demo/tcc-spring-demo/payment/src/main/java/org/apache/servicecomb/pack/demo/payment/EclipseLinkJpaConfiguration.java
@@ -15,14 +15,11 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.persistence.jpa;
+package org.apache.servicecomb.pack.demo.payment;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
-
import javax.sql.DataSource;
-
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
diff --git a/demo/tcc-spring-demo/payment/src/main/resources/application.yaml b/demo/tcc-spring-demo/payment/src/main/resources/application.yaml
index 1261a10..4e9b742 100644
--- a/demo/tcc-spring-demo/payment/src/main/resources/application.yaml
+++ b/demo/tcc-spring-demo/payment/src/main/resources/application.yaml
@@ -25,7 +25,11 @@
jpa:
show-sql: true
generate-ddl: true
-
+
+omega:
+ spec:
+ names: tcc
+
alpha:
cluster:
address: alpha-server.servicecomb.io:8080
diff --git a/integration-tests/explicit-transaction-context-tests/pom.xml b/integration-tests/explicit-transaction-context-tests/pom.xml
index 214fe12..7f26e75 100644
--- a/integration-tests/explicit-transaction-context-tests/pom.xml
+++ b/integration-tests/explicit-transaction-context-tests/pom.xml
@@ -81,8 +81,13 @@
<scope>runtime</scope>
</dependency>
<dependency>
- <groupId>org.apache.servicecomb.pack</groupId>
- <artifactId>persistence-jpa</artifactId>
+ <groupId>org.eclipse.persistence</groupId>
+ <artifactId>org.eclipse.persistence.jpa</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-data-jpa</artifactId>
<scope>test</scope>
</dependency>
<dependency>
diff --git a/persistence/persistence-jpa/src/main/java/org/apache/servicecomb/pack/persistence/jpa/EclipseLinkJpaConfiguration.java b/integration-tests/explicit-transaction-context-tests/src/test/java/org/apache/servicecomb/pack/integration/tests/explicitcontext/EclipseLinkJpaConfiguration.java
similarity index 95%
copy from persistence/persistence-jpa/src/main/java/org/apache/servicecomb/pack/persistence/jpa/EclipseLinkJpaConfiguration.java
copy to integration-tests/explicit-transaction-context-tests/src/test/java/org/apache/servicecomb/pack/integration/tests/explicitcontext/EclipseLinkJpaConfiguration.java
index 69dbf91..a318676 100644
--- a/persistence/persistence-jpa/src/main/java/org/apache/servicecomb/pack/persistence/jpa/EclipseLinkJpaConfiguration.java
+++ b/integration-tests/explicit-transaction-context-tests/src/test/java/org/apache/servicecomb/pack/integration/tests/explicitcontext/EclipseLinkJpaConfiguration.java
@@ -15,14 +15,11 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.persistence.jpa;
+package org.apache.servicecomb.pack.integration.tests.explicitcontext;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
-
import javax.sql.DataSource;
-
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
diff --git a/integration-tests/explicit-transaction-context-tests/src/test/java/org/apache/servicecomb/pack/integration/tests/explicitcontext/ExplicitTransactionContextIT.java b/integration-tests/explicit-transaction-context-tests/src/test/java/org/apache/servicecomb/pack/integration/tests/explicitcontext/ExplicitTransactionContextIT.java
index dc2bf58..2b28d76 100644
--- a/integration-tests/explicit-transaction-context-tests/src/test/java/org/apache/servicecomb/pack/integration/tests/explicitcontext/ExplicitTransactionContextIT.java
+++ b/integration-tests/explicit-transaction-context-tests/src/test/java/org/apache/servicecomb/pack/integration/tests/explicitcontext/ExplicitTransactionContextIT.java
@@ -43,8 +43,8 @@
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
-@SpringBootTest(classes = GreetingApplication.class, webEnvironment = WebEnvironment.DEFINED_PORT,
- properties = {"server.port=8080", "spring.application.name=greeting-service"})
+@SpringBootTest(classes = {GreetingApplication.class, EclipseLinkJpaConfiguration.class}, webEnvironment = WebEnvironment.DEFINED_PORT,
+ properties = {"omega.spec.names=saga", "server.port=8080", "spring.application.name=greeting-service"})
public class ExplicitTransactionContextIT {
private static final String serviceName = "greeting-service";
diff --git a/integration-tests/pack-tests/pom.xml b/integration-tests/pack-tests/pom.xml
index 7b64b75..d3b8d34 100644
--- a/integration-tests/pack-tests/pom.xml
+++ b/integration-tests/pack-tests/pom.xml
@@ -81,8 +81,13 @@
<scope>runtime</scope>
</dependency>
<dependency>
- <groupId>org.apache.servicecomb.pack</groupId>
- <artifactId>persistence-jpa</artifactId>
+ <groupId>org.eclipse.persistence</groupId>
+ <artifactId>org.eclipse.persistence.jpa</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-data-jpa</artifactId>
<scope>test</scope>
</dependency>
<dependency>
@@ -145,9 +150,9 @@
<alias>alpha</alias>
<run>
<env>
- <JAVA_OPTS>
- -Dspring.profiles.active=prd -Dspring.datasource.initialization-mode=always
- </JAVA_OPTS>
+ <alpha.spec.names>saga-db</alpha.spec.names>
+ <spring.profiles.active>prd</spring.profiles.active>
+ <spring.datasource.initialization-mode>always</spring.datasource.initialization-mode>
</env>
<links>
<link>postgres:postgresql.servicecomb.io</link>
diff --git a/persistence/persistence-jpa/src/main/java/org/apache/servicecomb/pack/persistence/jpa/EclipseLinkJpaConfiguration.java b/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/pack/integration/tests/resttemplate/EclipseLinkJpaConfiguration.java
similarity index 95%
copy from persistence/persistence-jpa/src/main/java/org/apache/servicecomb/pack/persistence/jpa/EclipseLinkJpaConfiguration.java
copy to integration-tests/pack-tests/src/test/java/org/apache/servicecomb/pack/integration/tests/resttemplate/EclipseLinkJpaConfiguration.java
index 69dbf91..64f6d0b 100644
--- a/persistence/persistence-jpa/src/main/java/org/apache/servicecomb/pack/persistence/jpa/EclipseLinkJpaConfiguration.java
+++ b/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/pack/integration/tests/resttemplate/EclipseLinkJpaConfiguration.java
@@ -15,14 +15,11 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.persistence.jpa;
+package org.apache.servicecomb.pack.integration.tests.resttemplate;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
-
import javax.sql.DataSource;
-
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
diff --git a/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/pack/integration/tests/resttemplate/PackIT.java b/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/pack/integration/tests/resttemplate/PackIT.java
index 246e951..2e5a8fd 100644
--- a/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/pack/integration/tests/resttemplate/PackIT.java
+++ b/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/pack/integration/tests/resttemplate/PackIT.java
@@ -44,8 +44,8 @@
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
-@SpringBootTest(classes = GreetingApplication.class, webEnvironment = WebEnvironment.DEFINED_PORT,
- properties = {"server.port=8080", "spring.application.name=greeting-service"})
+@SpringBootTest(classes = {GreetingApplication.class, EclipseLinkJpaConfiguration.class}, webEnvironment = WebEnvironment.DEFINED_PORT,
+ properties = {"omega.spec.names=saga", "server.port=8080", "spring.application.name=greeting-service"})
public class PackIT {
private static final String serviceName = "greeting-service";
diff --git a/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/OmegaSpringAutoConfiguration.java b/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/OmegaSpringAutoConfiguration.java
index 021cbae..f9676d7 100644
--- a/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/OmegaSpringAutoConfiguration.java
+++ b/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/OmegaSpringAutoConfiguration.java
@@ -23,7 +23,9 @@
import org.springframework.context.annotation.Import;
@Configuration
-@Import({OmegaSpringConfig.class,TransactionAspectConfig.class})
+@Import({OmegaSpringConfig.class, OmegaTccSpringConfig.class, OmegaSagaSpringConfig.class,
+ TransactionAspectConfig.class})
@ConditionalOnProperty(value = {"omega.enabled"}, matchIfMissing = true)
public class OmegaSpringAutoConfiguration {
+
}
diff --git a/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/OmegaSpringConfig.java b/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/OmegaSpringConfig.java
index 5f54972..704ff8b 100644
--- a/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/OmegaSpringConfig.java
+++ b/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/OmegaSpringConfig.java
@@ -18,42 +18,39 @@
package org.apache.servicecomb.pack.omega.spring;
import com.google.common.collect.ImmutableList;
+import java.lang.invoke.MethodHandles;
import org.apache.servicecomb.pack.common.AlphaMetaKeys;
import org.apache.servicecomb.pack.contract.grpc.ServerMeta;
-import org.apache.servicecomb.pack.omega.connector.grpc.AlphaClusterDiscovery;
import org.apache.servicecomb.pack.omega.connector.grpc.AlphaClusterConfig;
+import org.apache.servicecomb.pack.omega.connector.grpc.AlphaClusterDiscovery;
import org.apache.servicecomb.pack.omega.connector.grpc.core.FastestSender;
import org.apache.servicecomb.pack.omega.connector.grpc.core.LoadBalanceContext;
import org.apache.servicecomb.pack.omega.connector.grpc.core.LoadBalanceContextBuilder;
import org.apache.servicecomb.pack.omega.connector.grpc.core.TransactionType;
import org.apache.servicecomb.pack.omega.connector.grpc.saga.SagaLoadBalanceSender;
-import org.apache.servicecomb.pack.omega.connector.grpc.tcc.TccLoadBalanceSender;
import org.apache.servicecomb.pack.omega.context.AlphaMetas;
-import org.apache.servicecomb.pack.omega.transaction.CallbackContext;
import org.apache.servicecomb.pack.omega.context.IdGenerator;
import org.apache.servicecomb.pack.omega.context.OmegaContext;
import org.apache.servicecomb.pack.omega.context.ServiceConfig;
import org.apache.servicecomb.pack.omega.context.UniqueIdGenerator;
import org.apache.servicecomb.pack.omega.format.KryoMessageFormat;
import org.apache.servicecomb.pack.omega.format.MessageFormat;
+import org.apache.servicecomb.pack.omega.transaction.CallbackContext;
import org.apache.servicecomb.pack.omega.transaction.MessageHandler;
import org.apache.servicecomb.pack.omega.transaction.SagaMessageSender;
-import org.apache.servicecomb.pack.omega.transaction.tcc.DefaultParametersContext;
-import org.apache.servicecomb.pack.omega.transaction.tcc.ParametersContext;
import org.apache.servicecomb.pack.omega.transaction.tcc.TccMessageHandler;
-import org.apache.servicecomb.pack.omega.transaction.tcc.TccMessageSender;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
-import java.lang.invoke.MethodHandles;
-
@Configuration
class OmegaSpringConfig {
@@ -66,20 +63,17 @@
}
@Bean
- OmegaContext omegaContext(@Qualifier("omegaUniqueIdGenerator") IdGenerator<String> idGenerator, SagaMessageSender messageSender) {
- ServerMeta serverMeta = messageSender.onGetServerMeta();
- boolean akkaEnabeld = Boolean.parseBoolean(serverMeta.getMetaMap().get(AlphaMetaKeys.AkkaEnabled.name()));
- return new OmegaContext(idGenerator, AlphaMetas.builder().akkaEnabled(akkaEnabeld).build());
- }
-
- @Bean(name = {"compensationContext"})
- CallbackContext compensationContext(OmegaContext omegaContext, SagaMessageSender sender) {
- return new CallbackContext(omegaContext, sender);
- }
-
- @Bean(name = {"coordinateContext"})
- CallbackContext coordinateContext(OmegaContext omegaContext, SagaMessageSender sender) {
- return new CallbackContext(omegaContext, sender);
+ OmegaContext omegaContext(@Qualifier("omegaUniqueIdGenerator") IdGenerator<String> idGenerator, @Autowired(required = false) SagaMessageSender messageSender) {
+ if(messageSender!=null){
+ ServerMeta serverMeta = messageSender.onGetServerMeta();
+ boolean akkaEnabeld = false;
+ if(serverMeta!=null){
+ akkaEnabeld = Boolean.parseBoolean(serverMeta.getMetaMap().get(AlphaMetaKeys.AkkaEnabled.name()));
+ }
+ return new OmegaContext(idGenerator, AlphaMetas.builder().akkaEnabled(akkaEnabeld).build());
+ }else{
+ return new OmegaContext(idGenerator, AlphaMetas.builder().build());
+ }
}
@Bean
@@ -88,11 +82,6 @@
}
@Bean
- ParametersContext parametersContext() {
- return new DefaultParametersContext();
- }
-
- @Bean
@ConditionalOnProperty(name = "alpha.cluster.register.type", havingValue = "default", matchIfMissing = true)
AlphaClusterDiscovery alphaClusterAddress(@Value("${alpha.cluster.address:0.0.0.0:8080}") String[] addresses){
return AlphaClusterDiscovery.builder().addresses(addresses).build();
@@ -125,62 +114,4 @@
.build();
return clusterConfig;
}
-
- @Bean(name = "sagaLoadContext")
- LoadBalanceContext sagaLoadBalanceSenderContext(
- AlphaClusterConfig alphaClusterConfig,
- ServiceConfig serviceConfig,
- @Value("${omega.connection.reconnectDelay:3000}") int reconnectDelay,
- @Value("${omega.connection.sending.timeout:8}") int timeoutSeconds) {
- LoadBalanceContext loadBalanceSenderContext = new LoadBalanceContextBuilder(
- TransactionType.SAGA,
- alphaClusterConfig,
- serviceConfig,
- reconnectDelay,
- timeoutSeconds).build();
- return loadBalanceSenderContext;
- }
-
- @Bean
- SagaMessageSender sagaLoadBalanceSender(@Qualifier("sagaLoadContext") LoadBalanceContext loadBalanceSenderContext) {
- final SagaMessageSender sagaMessageSender = new SagaLoadBalanceSender(loadBalanceSenderContext, new FastestSender());
- sagaMessageSender.onConnected();
- Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
- @Override
- public void run() {
- sagaMessageSender.onDisconnected();
- sagaMessageSender.close();
- }
- }));
- return sagaMessageSender;
- }
-
- @Bean(name = "tccLoadContext")
- LoadBalanceContext loadBalanceSenderContext(
- AlphaClusterConfig alphaClusterConfig,
- ServiceConfig serviceConfig,
- @Value("${omega.connection.reconnectDelay:3000}") int reconnectDelay,
- @Value("${omega.connection.sending.timeout:8}") int timeoutSeconds) {
- LoadBalanceContext loadBalanceSenderContext = new LoadBalanceContextBuilder(
- TransactionType.TCC,
- alphaClusterConfig,
- serviceConfig,
- reconnectDelay,
- timeoutSeconds).build();
- return loadBalanceSenderContext;
- }
-
- @Bean
- TccMessageSender tccLoadBalanceSender(@Qualifier("tccLoadContext") LoadBalanceContext loadBalanceSenderContext) {
- final TccMessageSender tccMessageSender = new TccLoadBalanceSender(loadBalanceSenderContext, new FastestSender());
- tccMessageSender.onConnected();
- Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
- @Override
- public void run() {
- tccMessageSender.onDisconnected();
- tccMessageSender.close();
- }
- }));
- return tccMessageSender;
- }
}
diff --git a/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/OmegaTccSpringConfig.java b/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/OmegaTccSpringConfig.java
new file mode 100644
index 0000000..4e7b583
--- /dev/null
+++ b/omega/omega-spring-starter/src/main/java/org/apache/servicecomb/pack/omega/spring/OmegaTccSpringConfig.java
@@ -0,0 +1,105 @@
+/*
+ * 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.pack.omega.spring;
+
+import com.google.common.collect.ImmutableList;
+import java.lang.invoke.MethodHandles;
+import org.apache.servicecomb.pack.common.AlphaMetaKeys;
+import org.apache.servicecomb.pack.contract.grpc.ServerMeta;
+import org.apache.servicecomb.pack.omega.connector.grpc.AlphaClusterConfig;
+import org.apache.servicecomb.pack.omega.connector.grpc.AlphaClusterDiscovery;
+import org.apache.servicecomb.pack.omega.connector.grpc.core.FastestSender;
+import org.apache.servicecomb.pack.omega.connector.grpc.core.LoadBalanceContext;
+import org.apache.servicecomb.pack.omega.connector.grpc.core.LoadBalanceContextBuilder;
+import org.apache.servicecomb.pack.omega.connector.grpc.core.TransactionType;
+import org.apache.servicecomb.pack.omega.connector.grpc.saga.SagaLoadBalanceSender;
+import org.apache.servicecomb.pack.omega.connector.grpc.tcc.TccLoadBalanceSender;
+import org.apache.servicecomb.pack.omega.context.AlphaMetas;
+import org.apache.servicecomb.pack.omega.context.IdGenerator;
+import org.apache.servicecomb.pack.omega.context.OmegaContext;
+import org.apache.servicecomb.pack.omega.context.ServiceConfig;
+import org.apache.servicecomb.pack.omega.context.UniqueIdGenerator;
+import org.apache.servicecomb.pack.omega.format.KryoMessageFormat;
+import org.apache.servicecomb.pack.omega.format.MessageFormat;
+import org.apache.servicecomb.pack.omega.transaction.CallbackContext;
+import org.apache.servicecomb.pack.omega.transaction.MessageHandler;
+import org.apache.servicecomb.pack.omega.transaction.SagaMessageSender;
+import org.apache.servicecomb.pack.omega.transaction.tcc.DefaultParametersContext;
+import org.apache.servicecomb.pack.omega.transaction.tcc.ParametersContext;
+import org.apache.servicecomb.pack.omega.transaction.tcc.TccMessageHandler;
+import org.apache.servicecomb.pack.omega.transaction.tcc.TccMessageSender;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
+
+@Configuration
+@ConditionalOnExpression("'${omega.spec.names}'.contains('tcc')")
+class OmegaTccSpringConfig {
+
+ private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+ public OmegaTccSpringConfig() {
+ LOG.info("Omega Specification TCC");
+ }
+
+ @Bean
+ ParametersContext parametersContext() {
+ return new DefaultParametersContext();
+ }
+
+ @Bean(name = {"coordinateContext"})
+ CallbackContext coordinateContext(OmegaContext omegaContext) {
+ return new CallbackContext(omegaContext, null);
+ }
+
+ @Bean(name = "tccLoadContext")
+ LoadBalanceContext loadBalanceSenderContext(
+ AlphaClusterConfig alphaClusterConfig,
+ ServiceConfig serviceConfig,
+ @Value("${omega.connection.reconnectDelay:3000}") int reconnectDelay,
+ @Value("${omega.connection.sending.timeout:8}") int timeoutSeconds) {
+ LoadBalanceContext loadBalanceSenderContext = new LoadBalanceContextBuilder(
+ TransactionType.TCC,
+ alphaClusterConfig,
+ serviceConfig,
+ reconnectDelay,
+ timeoutSeconds).build();
+ return loadBalanceSenderContext;
+ }
+
+ @Bean
+ TccMessageSender tccLoadBalanceSender(@Qualifier("tccLoadContext") LoadBalanceContext loadBalanceSenderContext) {
+ final TccMessageSender tccMessageSender = new TccLoadBalanceSender(loadBalanceSenderContext, new FastestSender());
+ tccMessageSender.onConnected();
+ Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
+ @Override
+ public void run() {
+ tccMessageSender.onDisconnected();
+ tccMessageSender.close();
+ }
+ }));
+ return tccMessageSender;
+ }
+}
diff --git a/omega/omega-spring-tx/pom.xml b/omega/omega-spring-tx/pom.xml
index 0138783..f15b668 100644
--- a/omega/omega-spring-tx/pom.xml
+++ b/omega/omega-spring-tx/pom.xml
@@ -75,8 +75,12 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.apache.servicecomb.pack</groupId>
- <artifactId>persistence-jpa</artifactId>
+ <groupId>org.eclipse.persistence</groupId>
+ <artifactId>org.eclipse.persistence.jpa</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-data-jpa</artifactId>
<scope>test</scope>
</dependency>
<dependency>
diff --git a/omega/omega-spring-tx/src/main/java/org/apache/servicecomb/pack/omega/transaction/spring/TransactionAspectConfig.java b/omega/omega-spring-tx/src/main/java/org/apache/servicecomb/pack/omega/transaction/spring/TransactionAspectConfig.java
index b9f5527..87a4bf2 100644
--- a/omega/omega-spring-tx/src/main/java/org/apache/servicecomb/pack/omega/transaction/spring/TransactionAspectConfig.java
+++ b/omega/omega-spring-tx/src/main/java/org/apache/servicecomb/pack/omega/transaction/spring/TransactionAspectConfig.java
@@ -31,6 +31,7 @@
import org.apache.servicecomb.pack.omega.transaction.tcc.TccParticipatorAspect;
import org.apache.servicecomb.pack.omega.transaction.tcc.TccStartAspect;
import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@@ -40,21 +41,25 @@
public class TransactionAspectConfig {
@Bean
+ @ConditionalOnExpression("'${omega.spec.names}'.contains('saga')")
MessageHandler messageHandler(SagaMessageSender sender,
@Qualifier("compensationContext") CallbackContext context, OmegaContext omegaContext) {
return new CompensationMessageHandler(sender, context);
}
@Bean
+ @ConditionalOnExpression("'${omega.spec.names}'.contains('saga')")
SagaStartAspect sagaStartAspect(SagaMessageSender sender, OmegaContext context) {
return new SagaStartAspect(sender, context);
}
@Bean
+ @ConditionalOnExpression("'${omega.spec.names}'.contains('saga')")
TransactionAspect transactionAspect(SagaMessageSender sender, OmegaContext context) {
return new TransactionAspect(sender, context);
}
+ @ConditionalOnExpression("'${omega.spec.names}'.contains('saga')")
@Bean
CompensableAnnotationProcessor compensableAnnotationProcessor(OmegaContext omegaContext,
@Qualifier("compensationContext") CallbackContext compensationContext) {
@@ -62,6 +67,7 @@
}
@Bean
+ @ConditionalOnExpression("'${omega.spec.names}'.contains('tcc')")
TccMessageHandler coordinateMessageHandler(
TccMessageSender tccMessageSender,
@Qualifier("coordinateContext") CallbackContext coordinateContext,
@@ -71,6 +77,7 @@
}
@Bean
+ @ConditionalOnExpression("'${omega.spec.names}'.contains('tcc')")
TccStartAspect tccStartAspect(
TccMessageSender tccMessageSender,
OmegaContext context) {
@@ -78,6 +85,7 @@
}
@Bean
+ @ConditionalOnExpression("'${omega.spec.names}'.contains('tcc')")
TccParticipatorAspect tccParticipatorAspect(
TccMessageSender tccMessageSender,
OmegaContext context, ParametersContext parametersContext) {
@@ -85,6 +93,7 @@
}
@Bean
+ @ConditionalOnExpression("'${omega.spec.names}'.contains('tcc')")
ParticipateAnnotationProcessor participateAnnotationProcessor(OmegaContext omegaContext,
@Qualifier("coordinateContext") CallbackContext coordinateContext) {
return new ParticipateAnnotationProcessor(omegaContext, coordinateContext);
diff --git a/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/CompensableAnnotationCheckingTest.java b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/CompensableAnnotationCheckingTest.java
index 018d08c..6884ba5 100644
--- a/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/CompensableAnnotationCheckingTest.java
+++ b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/CompensableAnnotationCheckingTest.java
@@ -34,7 +34,8 @@
try {
try (ConfigurableApplicationContext ignored = new SpringApplicationBuilder(TransactionTestMain.class)
.profiles("annotation-checking")
- .properties("spring.jpa.hibernate.ddl-auto=none",
+ .properties("omega.spec.names=saga",
+ "spring.jpa.hibernate.ddl-auto=none",
"spring.datasource.driver-class-name=org.h2.Driver",
"spring.datasource.url=jdbc:h2:mem:alpha;MODE=MYSQL")
.run()) {
@@ -50,7 +51,8 @@
try {
try (ConfigurableApplicationContext ignored = new SpringApplicationBuilder(TransactionTestMain.class)
.profiles("annotation-retries-checking")
- .properties("spring.jpa.hibernate.ddl-auto=none",
+ .properties("omega.spec.names=saga",
+ "spring.jpa.hibernate.ddl-auto=none",
"spring.datasource.driver-class-name=org.h2.Driver",
"spring.datasource.url=jdbc:h2:mem:alpha;MODE=MYSQL")
.run()) {
@@ -66,7 +68,8 @@
try {
try (ConfigurableApplicationContext ignored = new SpringApplicationBuilder(TransactionTestMain.class)
.profiles("omega-context-aware-checking")
- .properties("spring.jpa.hibernate.ddl-auto=none",
+ .properties("omega.spec.names=saga",
+ "spring.jpa.hibernate.ddl-auto=none",
"spring.datasource.driver-class-name=org.h2.Driver",
"spring.datasource.url=jdbc:h2:mem:alpha;MODE=MYSQL")
.run()) {
diff --git a/persistence/persistence-jpa/src/main/java/org/apache/servicecomb/pack/persistence/jpa/EclipseLinkJpaConfiguration.java b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/EclipseLinkJpaConfiguration.java
similarity index 95%
copy from persistence/persistence-jpa/src/main/java/org/apache/servicecomb/pack/persistence/jpa/EclipseLinkJpaConfiguration.java
copy to omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/EclipseLinkJpaConfiguration.java
index 69dbf91..7f9221d 100644
--- a/persistence/persistence-jpa/src/main/java/org/apache/servicecomb/pack/persistence/jpa/EclipseLinkJpaConfiguration.java
+++ b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/EclipseLinkJpaConfiguration.java
@@ -15,14 +15,11 @@
* limitations under the License.
*/
-package org.apache.servicecomb.pack.persistence.jpa;
+package org.apache.servicecomb.pack.omega.transaction.spring;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
-
import javax.sql.DataSource;
-
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
diff --git a/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/TccInterceptorTest.java b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/TccInterceptorTest.java
index 375ae71..0a6bb30 100644
--- a/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/TccInterceptorTest.java
+++ b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/TccInterceptorTest.java
@@ -30,8 +30,6 @@
import java.util.UUID;
import org.apache.servicecomb.pack.common.TransactionStatus;
import org.apache.servicecomb.pack.omega.context.IdGenerator;
-import org.apache.servicecomb.pack.omega.transaction.TxCompensateAckFailedEvent;
-import org.apache.servicecomb.pack.omega.transaction.TxCompensateAckSucceedEvent;
import org.apache.servicecomb.pack.omega.transaction.tcc.TccMessageHandler;
import org.apache.servicecomb.pack.omega.transaction.tcc.events.*;
import org.junit.After;
@@ -45,10 +43,11 @@
@RunWith(SpringRunner.class)
@SpringBootTest(properties = {
+ "omega.spec.names=tcc",
"spring.jpa.hibernate.ddl-auto=none",
"spring.datasource.driver-class-name=org.h2.Driver",
"spring.datasource.url=jdbc:h2:mem:alpha;MODE=MYSQL"},
- classes = {TransactionTestMain.class, MessageConfig.class})
+ classes = {TransactionTestMain.class, MessageConfig.class, EclipseLinkJpaConfiguration.class})
public class TccInterceptorTest {
private static final String globalTxId = UUID.randomUUID().toString();
diff --git a/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/TransactionInterceptionTest.java b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/TransactionInterceptionTest.java
index 69c9f9e..cbac372 100644
--- a/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/TransactionInterceptionTest.java
+++ b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/pack/omega/transaction/spring/TransactionInterceptionTest.java
@@ -67,10 +67,11 @@
@RunWith(SpringRunner.class)
@SpringBootTest(properties = {
+ "omega.spec.names=saga",
"spring.jpa.hibernate.ddl-auto=none",
"spring.datasource.driver-class-name=org.h2.Driver",
"spring.datasource.url=jdbc:h2:mem:alpha;MODE=MYSQL"},
- classes = {TransactionTestMain.class, MessageConfig.class})
+ classes = {TransactionTestMain.class, MessageConfig.class, EclipseLinkJpaConfiguration.class})
@AutoConfigureMockMvc
public class TransactionInterceptionTest {
@SuppressWarnings("unchecked")
diff --git a/pack-dependencies/pom.xml b/pack-dependencies/pom.xml
index 8b57a99..8584877 100644
--- a/pack-dependencies/pom.xml
+++ b/pack-dependencies/pom.xml
@@ -279,7 +279,22 @@
</dependency>
<dependency>
<groupId>org.apache.servicecomb.pack</groupId>
- <artifactId>alpha-fsm</artifactId>
+ <artifactId>alpha-spec-saga-fsm</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.servicecomb.pack</groupId>
+ <artifactId>alpha-spec-saga-db</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.servicecomb.pack</groupId>
+ <artifactId>alpha-spec-tcc-db</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.servicecomb.pack</groupId>
+ <artifactId>alpha-persistence-jpa</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
@@ -325,7 +340,7 @@
<!-- TODO rename this artifact -->
<dependency>
<groupId>org.apache.servicecomb.pack</groupId>
- <artifactId>persistence-jpa</artifactId>
+ <artifactId>alpha-persistence-jpa</artifactId>
<version>${project.version}</version>
</dependency>
diff --git a/persistence/persistence-jpa/src/main/resources/META-INF/spring.factories b/persistence/persistence-jpa/src/main/resources/META-INF/spring.factories
deleted file mode 100644
index f18c6a5..0000000
--- a/persistence/persistence-jpa/src/main/resources/META-INF/spring.factories
+++ /dev/null
@@ -1,18 +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.
-## ---------------------------------------------------------------------------
-org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
- org.apache.servicecomb.pack.persistence.jpa.EclipseLinkJpaConfiguration
diff --git a/persistence/pom.xml b/persistence/pom.xml
deleted file mode 100644
index 8bffff8..0000000
--- a/persistence/pom.xml
+++ /dev/null
@@ -1,36 +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>pack-dependencies</artifactId>
- <groupId>org.apache.servicecomb.pack</groupId>
- <version>0.7.0-SNAPSHOT</version>
- <relativePath>../pack-dependencies</relativePath>
- </parent>
- <modelVersion>4.0.0</modelVersion>
-
- <artifactId>persistence</artifactId>
- <name>Pack::Persistence</name>
- <packaging>pom</packaging>
- <modules>
- <module>persistence-jpa</module>
- </modules>
-</project>
diff --git a/pom.xml b/pom.xml
index 5fba82b..e78f784 100644
--- a/pom.xml
+++ b/pom.xml
@@ -38,7 +38,6 @@
<module>pack-contracts</module>
<module>pack-common</module>
<module>integration-tests</module>
- <module>persistence</module>
<module>web</module>
</modules>