You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2018/02/13 07:59:25 UTC
[incubator-servicecomb-saga] branch master updated: SCB-344 add
document for how to use mysql as alpha's backend database (#137)
This is an automated email from the ASF dual-hosted git repository.
ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git
The following commit(s) were added to refs/heads/master by this push:
new 5e37786 SCB-344 add document for how to use mysql as alpha's backend database (#137)
5e37786 is described below
commit 5e3778646d303f339a9fd3585e1feeb187880304
Author: Eric Lee <da...@huawei.com>
AuthorDate: Tue Feb 13 15:59:23 2018 +0800
SCB-344 add document for how to use mysql as alpha's backend database (#137)
* SCB-330 added chinese version of README
* SCB-330 add user guide for saga pack
* SCB-330 attempt to fix test failure
Signed-off-by: Eric Lee <da...@huawei.com>
* SCB-344 add guide for mysql
* SCB-344 add license header for sql files
Signed-off-by: Eric Lee <da...@huawei.com>
---
README.md | 4 ++
README_ZH.md | 3 +
.../servicecomb/saga/alpha/core/Command.java | 2 +
.../servicecomb/saga/alpha/core/TxEvent.java | 2 +
.../servicecomb/saga/alpha/core/TxTimeout.java | 2 +
.../src/main/resources/application.yaml | 19 ++++++-
.../src/main/resources/schema-mysql.sql | 66 ++++++++++++++++++++++
.../src/main/resources/schema-postgresql.sql | 19 ++++++-
alpha/alpha-server/src/test/resources/schema.sql | 17 ++++++
.../how_to_use_mysql_as_alpha_backend_database.md | 12 ++++
.../how_to_use_mysql_as_alpha_backend_database.md | 12 ++++
.../omega-spring-tx/src/test/resources/schema.sql | 17 ++++++
saga-demo/pack-demo/README.md | 26 +++++++--
.../pack-demo/docker-compose.mysql.yaml | 32 +++++++----
saga-demo/pack-demo/docker-compose.yaml | 17 ++++--
.../src/main/resources/schema-postgresql.sql | 17 ++++++
saga-spring/src/test/resources/data.sql | 17 ++++++
17 files changed, 260 insertions(+), 24 deletions(-)
diff --git a/README.md b/README.md
index aa9b840..61c9c8f 100644
--- a/README.md
+++ b/README.md
@@ -25,6 +25,10 @@ See [Booking Demo](saga-demo/pack-demo/README.md) for details.
## User Guide
See [User Guide](docs/user_guide.md) for details.
+
+## FAQ
+* [How to use MySQL as alpha's backend database?](docs/faq/en/how_to_use_mysql_as_alpha_backend_database.md)
+
## Contact Us
* [issues](https://issues.apache.org/jira/browse/SCB)
* [gitter](https://gitter.im/ServiceCombUsers/Lobby)
diff --git a/README_ZH.md b/README_ZH.md
index 2ea467b..ac5f8a3 100644
--- a/README_ZH.md
+++ b/README_ZH.md
@@ -25,6 +25,9 @@ Saga是由 **alpha** 和 **omega**组成,其中:
## 用户指南
详情可浏览[用户指南](docs/user_guide_zh.md)。
+## 常见问题
+* [如何使用MySQL作为alpha的后台数据库?](docs/faq/cn/how_to_use_mysql_as_alpha_backend_database.md)
+
## 联系我们
* [提交issues](https://issues.apache.org/jira/browse/SCB)
* [gitter聊天室](https://gitter.im/ServiceCombUsers/Lobby)
diff --git a/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/Command.java b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/Command.java
index 1e6f21b..0f016d3 100644
--- a/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/Command.java
+++ b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/Command.java
@@ -25,9 +25,11 @@ import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
+import javax.persistence.Table;
import javax.persistence.Version;
@Entity
+@Table(name = "Command")
public class Command {
@Id
diff --git a/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxEvent.java b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxEvent.java
index 42a202f..b17a120 100644
--- a/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxEvent.java
+++ b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxEvent.java
@@ -25,9 +25,11 @@ import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
+import javax.persistence.Table;
import javax.persistence.Transient;
@Entity
+@Table(name = "TxEvent")
public class TxEvent {
@Transient
private static final long MAX_TIMESTAMP = 253402214400000L; // 9999-12-31 00:00:00
diff --git a/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxTimeout.java b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxTimeout.java
index 00ca2ec..342321f 100644
--- a/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxTimeout.java
+++ b/alpha/alpha-core/src/main/java/org/apache/servicecomb/saga/alpha/core/TxTimeout.java
@@ -23,9 +23,11 @@ import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
+import javax.persistence.Table;
import javax.persistence.Version;
@Entity
+@Table(name = "TxTimeout")
public class TxTimeout {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
diff --git a/alpha/alpha-server/src/main/resources/application.yaml b/alpha/alpha-server/src/main/resources/application.yaml
index a4790e2..43b39dc 100644
--- a/alpha/alpha-server/src/main/resources/application.yaml
+++ b/alpha/alpha-server/src/main/resources/application.yaml
@@ -14,6 +14,10 @@
## See the License for the specific language governing permissions and
## limitations under the License.
## ---------------------------------------------------------------------------
+server:
+ port: 8090
+
+---
spring:
profiles: prd
datasource:
@@ -23,5 +27,16 @@ spring:
platform: postgresql
# continue-on-error: true
-server:
- port: 8090
+---
+spring:
+ profiles: mysql
+ datasource:
+ username: saga
+ password: password
+ url: jdbc:mysql://mysql.servicecomb.io:3306/saga?useSSL=false
+ platform: mysql
+ continue-on-error: true
+ jpa:
+ properties:
+ eclipselink:
+ ddl-generation: none
\ No newline at end of file
diff --git a/alpha/alpha-server/src/main/resources/schema-mysql.sql b/alpha/alpha-server/src/main/resources/schema-mysql.sql
new file mode 100644
index 0000000..b0bc8d7
--- /dev/null
+++ b/alpha/alpha-server/src/main/resources/schema-mysql.sql
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ */
+
+CREATE TABLE IF NOT EXISTS TxEvent (
+ surrogateId bigint NOT NULL AUTO_INCREMENT,
+ serviceName varchar(16) NOT NULL,
+ instanceId varchar(36) NOT NULL,
+ creationTime datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ globalTxId varchar(36) NOT NULL,
+ localTxId varchar(36) NOT NULL,
+ parentTxId varchar(36) DEFAULT NULL,
+ type varchar(50) NOT NULL,
+ compensationMethod varchar(256) NOT NULL,
+ expiryTime datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ payloads varbinary(10240),
+ PRIMARY KEY (surrogateId),
+ INDEX saga_events_index (surrogateId, globalTxId, localTxId, type, expiryTime)
+) DEFAULT CHARSET=utf8;
+
+
+CREATE TABLE IF NOT EXISTS Command (
+ surrogateId bigint NOT NULL AUTO_INCREMENT,
+ eventId bigint NOT NULL UNIQUE,
+ serviceName varchar(16) NOT NULL,
+ instanceId varchar(36) NOT NULL,
+ globalTxId varchar(36) NOT NULL,
+ localTxId varchar(36) NOT NULL,
+ parentTxId varchar(36) DEFAULT NULL,
+ compensationMethod varchar(256) NOT NULL,
+ payloads varbinary(10240),
+ status varchar(12),
+ lastModified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ version bigint NOT NULL,
+ PRIMARY KEY (surrogateId),
+ INDEX saga_commands_index (surrogateId, eventId, globalTxId, localTxId, status)
+) DEFAULT CHARSET=utf8;
+
+CREATE TABLE IF NOT EXISTS TxTimeout (
+ surrogateId bigint NOT NULL AUTO_INCREMENT,
+ eventId bigint NOT NULL UNIQUE,
+ serviceName varchar(16) NOT NULL,
+ instanceId varchar(36) NOT NULL,
+ globalTxId varchar(36) NOT NULL,
+ localTxId varchar(36) NOT NULL,
+ parentTxId varchar(36) DEFAULT NULL,
+ type varchar(50) NOT NULL,
+ expiryTime datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ status varchar(12),
+ version bigint NOT NULL,
+ PRIMARY KEY (surrogateId),
+ INDEX saga_timeouts_index (surrogateId, expiryTime, globalTxId, localTxId, status)
+) DEFAULT CHARSET=utf8;
\ No newline at end of file
diff --git a/alpha/alpha-server/src/main/resources/schema-postgresql.sql b/alpha/alpha-server/src/main/resources/schema-postgresql.sql
index e7f774b..41815ee 100644
--- a/alpha/alpha-server/src/main/resources/schema-postgresql.sql
+++ b/alpha/alpha-server/src/main/resources/schema-postgresql.sql
@@ -1,3 +1,20 @@
+/*
+ * 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.
+ */
+
CREATE TABLE IF NOT EXISTS TxEvent (
surrogateId BIGSERIAL PRIMARY KEY,
serviceName varchar(16) NOT NULL,
@@ -12,7 +29,7 @@ CREATE TABLE IF NOT EXISTS TxEvent (
payloads bytea
);
-CREATE INDEX IF NOT EXISTS saga_events_index ON TxEvent (surrogateId, globalTxId, localTxId, type);
+CREATE INDEX IF NOT EXISTS saga_events_index ON TxEvent (surrogateId, globalTxId, localTxId, type, expiryTime);
CREATE TABLE IF NOT EXISTS Command (
diff --git a/alpha/alpha-server/src/test/resources/schema.sql b/alpha/alpha-server/src/test/resources/schema.sql
index 929c69f..a10a4e0 100644
--- a/alpha/alpha-server/src/test/resources/schema.sql
+++ b/alpha/alpha-server/src/test/resources/schema.sql
@@ -1,3 +1,20 @@
+/*
+ * 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.
+ */
+
CREATE TABLE IF NOT EXISTS TxEvent (
surrogateId bigint GENERATED BY DEFAULT AS IDENTITY(START WITH 1, INCREMENT BY 1) PRIMARY KEY,
serviceName varchar(36) NOT NULL,
diff --git a/docs/faq/cn/how_to_use_mysql_as_alpha_backend_database.md b/docs/faq/cn/how_to_use_mysql_as_alpha_backend_database.md
new file mode 100644
index 0000000..891a124
--- /dev/null
+++ b/docs/faq/cn/how_to_use_mysql_as_alpha_backend_database.md
@@ -0,0 +1,12 @@
+**问题描述:** 如何使用MySQL作为alpha的后台数据库?
+
+**解决方法:** 使用MySQL来替换默认的数据库PostgreSQL,只需以下两步:
+1. 在`alpha/alpha-server/pom.xml`添加`mysql-connector-java`的依赖:
+ ```xml
+ <dependency>
+ <groupId>mysql</groupId>
+ <artifactId>mysql-connector-java</artifactId>
+ </dependency>
+ ```
+
+2. 在alpha启动时通过添加`-Dspring.profiles.active=mysql`的启动参数来使mysql的配置生效。
diff --git a/docs/faq/en/how_to_use_mysql_as_alpha_backend_database.md b/docs/faq/en/how_to_use_mysql_as_alpha_backend_database.md
new file mode 100644
index 0000000..adb44e2
--- /dev/null
+++ b/docs/faq/en/how_to_use_mysql_as_alpha_backend_database.md
@@ -0,0 +1,12 @@
+**Problem:** How to use MySQL as alpha's backend database?
+
+**Solution:** To replace the default database from postgreSQL to MySQL:
+1. add dependency of `mysql-connector-java` in `alpha/alpha-server/pom.xml`
+ ```xml
+ <dependency>
+ <groupId>mysql</groupId>
+ <artifactId>mysql-connector-java</artifactId>
+ </dependency>
+ ```
+
+2. activate mysql profile by specifying option `-Dspring.profiles.active=mysql` when booting alpha.
\ No newline at end of file
diff --git a/omega/omega-spring-tx/src/test/resources/schema.sql b/omega/omega-spring-tx/src/test/resources/schema.sql
index cbc4330..e3b36c4 100644
--- a/omega/omega-spring-tx/src/test/resources/schema.sql
+++ b/omega/omega-spring-tx/src/test/resources/schema.sql
@@ -1,3 +1,20 @@
+/*
+ * 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.
+ */
+
CREATE TABLE IF NOT EXISTS `User` (
`id` bigint NOT NULL AUTO_INCREMENT,
`username` varchar(36) NOT NULL,
diff --git a/saga-demo/pack-demo/README.md b/saga-demo/pack-demo/README.md
index 9eecd62..4ceedaf 100644
--- a/saga-demo/pack-demo/README.md
+++ b/saga-demo/pack-demo/README.md
@@ -18,14 +18,28 @@ You will need:
## Running Demo
1. run the following command to create docker images in saga project root folder.
-```
-mvn package -DskipTests -Pdocker -Pdemo
-```
+ ```
+ mvn package -DskipTests -Pdocker -Pdemo
+ ```
2. start application up in saga/saga-demo/pack-demo with the following command
-```
-docker-compose up
-```
+ ```
+ docker-compose up
+ ```
+
+ **Note:** If you prefer to use MySQL as alpha's backend database, you need to try the following steps instead:
+ 1. add dependency of `mysql-connector-java` in `alpha/alpha-server/pom.xml`
+ ```xml
+ <dependency>
+ <groupId>mysql</groupId>
+ <artifactId>mysql-connector-java</artifactId>
+ </dependency>
+ ```
+
+ 2. start application up in saga/saga-demo/pack-demo with the following command
+ ```
+ docker-compose -f docker-compose.yaml -f docker-compose.mysql.yaml up
+ ```
## User Requests
1. Booking 2 rooms and 2 cars, this booking will be OK.
diff --git a/alpha/alpha-server/src/main/resources/application.yaml b/saga-demo/pack-demo/docker-compose.mysql.yaml
similarity index 65%
copy from alpha/alpha-server/src/main/resources/application.yaml
copy to saga-demo/pack-demo/docker-compose.mysql.yaml
index a4790e2..43f3b5e 100644
--- a/alpha/alpha-server/src/main/resources/application.yaml
+++ b/saga-demo/pack-demo/docker-compose.mysql.yaml
@@ -14,14 +14,26 @@
## See the License for the specific language governing permissions and
## limitations under the License.
## ---------------------------------------------------------------------------
-spring:
- profiles: prd
- datasource:
- username: saga
- password: password
- url: jdbc:postgresql://postgresql.servicecomb.io:5432/saga?useSSL=false
- platform: postgresql
-# continue-on-error: true
-server:
- port: 8090
+version: '2.1'
+
+services:
+ database:
+ image: "mysql/mysql-server:5.7"
+ hostname: mysql
+ environment:
+ - MYSQL_ROOT_PASSWORD=password
+ - MYSQL_DATABASE=saga
+ - MYSQL_USER=saga
+ - MYSQL_PASSWORD=password
+ healthcheck:
+ test: ["CMD-SHELL", "nc -z localhost 3306 &> /dev/null; echo $$?"]
+ interval: 30s
+ timeout: 10s
+ retries: 5
+
+ alpha:
+ links:
+ - "database:mysql.servicecomb.io"
+ environment:
+ - JAVA_OPTS=-Dspring.profiles.active=mysql
diff --git a/saga-demo/pack-demo/docker-compose.yaml b/saga-demo/pack-demo/docker-compose.yaml
index b452d24..e528c83 100644
--- a/saga-demo/pack-demo/docker-compose.yaml
+++ b/saga-demo/pack-demo/docker-compose.yaml
@@ -18,7 +18,7 @@
version: '2.1'
services:
- postgres:
+ database:
image: "postgres"
hostname: postgres
environment:
@@ -35,11 +35,16 @@ services:
image: "alpha-server:0.0.3-SNAPSHOT"
hostname: alpha-server
links:
- - "postgres:postgresql.servicecomb.io"
+ - "database:postgresql.servicecomb.io"
environment:
- JAVA_OPTS=-Dspring.profiles.active=prd
+ healthcheck:
+ test: ["CMD-SHELL", "nc -z localhost 8080 &> /dev/null; echo $$?"]
+ interval: 30s
+ timeout: 10s
+ retries: 5
depends_on:
- postgres:
+ database:
condition: service_healthy
pack-hotel:
@@ -50,7 +55,8 @@ services:
ports:
- "8081:8080"
depends_on:
- - alpha
+ alpha:
+ condition: service_healthy
pack-car:
image: "pack-car:0.0.3-SNAPSHOT"
@@ -60,7 +66,8 @@ services:
ports:
- "8082:8080"
depends_on:
- - alpha
+ alpha:
+ condition: service_healthy
pack-booking:
image: "pack-booking:0.0.3-SNAPSHOT"
diff --git a/saga-spring/src/main/resources/schema-postgresql.sql b/saga-spring/src/main/resources/schema-postgresql.sql
index c4a5c70..7a2cd1f 100644
--- a/saga-spring/src/main/resources/schema-postgresql.sql
+++ b/saga-spring/src/main/resources/schema-postgresql.sql
@@ -1,3 +1,20 @@
+/*
+ * 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.
+ */
+
CREATE TABLE IF NOT EXISTS SagaEventEntity (
id BIGSERIAL PRIMARY KEY,
sagaId varchar(36) NOT NULL,
diff --git a/saga-spring/src/test/resources/data.sql b/saga-spring/src/test/resources/data.sql
index d0db33e..5cdb7d9 100644
--- a/saga-spring/src/test/resources/data.sql
+++ b/saga-spring/src/test/resources/data.sql
@@ -1,3 +1,20 @@
+/*
+ * 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.
+ */
+
DROP TABLE IF EXISTS SagaEventEntity;
CREATE TABLE `SagaEventEntity` (
--
To stop receiving notification emails like this one, please contact
ningjiang@apache.org.