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

ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git

commit 249d1d76276b4ca6f904dff0e9477be9bbf326ef
Author: Eric Lee <dagang...@huawei.com>
AuthorDate: Fri Feb 9 17:35:21 2018 +0800

    SCB-330 add user guide for saga pack
---
 README.md                           |   3 ++
 README_ZH.md                        |   3 ++
 docs/user_guide.md                  | 101 ++++++++++++++++++++++++++++++++++++
 docs/user_guide_zh.md               | 100 +++++++++++++++++++++++++++++++++++
 saga-demo/pack-demo/booking/pom.xml |   6 +--
 5 files changed, 210 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index f9a81e3..aa9b840 100644
--- a/README.md
+++ b/README.md
@@ -22,6 +22,9 @@ See [Saga Pack Design](docs/design.md) for details. If you 
are interested in our
 ## Get Started
 See [Booking Demo](saga-demo/pack-demo/README.md) for details.
 
+## User Guide
+See [User Guide](docs/user_guide.md) for details.
+
 ## 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 a7ac6ac..2ea467b 100644
--- a/README_ZH.md
+++ b/README_ZH.md
@@ -22,6 +22,9 @@ Saga是由 **alpha** 和 **omega**组成,其中:
 ## 快速入门
 详情可浏览[出行预订示例](saga-demo/pack-demo/README.md)。
 
+## 用户指南
+详情可浏览[用户指南](docs/user_guide_zh.md)。
+
 ## 联系我们
 * [提交issues](https://issues.apache.org/jira/browse/SCB)
 * [gitter聊天室](https://gitter.im/ServiceCombUsers/Lobby)
diff --git a/docs/user_guide.md b/docs/user_guide.md
new file mode 100644
index 0000000..bd9733d
--- /dev/null
+++ b/docs/user_guide.md
@@ -0,0 +1,101 @@
+# Saga 用户指南
+[![ZH 
doc](https://img.shields.io/badge/document-中文-blue.svg)](user_guide_zh.md)
+
+## Prerequisites
+You will need:
+1. [JDK 1.8][jdk]
+2. [Maven 3.x][maven]
+3. [Docker][docker]
+
+[jdk]: 
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
+[maven]: https://maven.apache.org/install.html
+[docker]: https://www.docker.com/get-docker
+
+## Build
+To build:
+```bash
+$ git clone https://github.com/apache/incubator-servicecomb-saga.git
+$ cd incubator-servicecomb-saga
+$ mvn clean install -DskipTests -Pdocker
+```
+
+## How to use
+### Add saga dependencies
+```xml
+    <dependency>
+      <groupId>org.apache.servicecomb.saga</groupId>
+      <artifactId>omega-spring-starter</artifactId>
+      <version>0.0.3-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb.saga</groupId>
+      <artifactId>omega-transport-resttemplate</artifactId>
+      <version>0.0.3-SNAPSHOT</version>
+    </dependency>
+```
+
+### Add saga annotations and corresponding compensation methods
+Take a transfer money application as an example:
+1. add `@EnableOmega` at application entry to initialize omega configurations 
and connect to alpha
+   ```java
+   @SpringBootApplication
+   @EnableOmega
+   public class Application {
+     public static void main(String[] args) {
+       SpringApplication.run(Application.class, args);
+     }
+   }
+   ```
+   
+2. add `@SagaStart` at the starting point of the global transaction
+   ```java
+   @SagaStart(timeout=10)
+   public boolean transferMoney(String from, String to, int amount) {
+     transferOut(from, amount);
+     transferIn(to, amount);
+   }
+   ```
+   **Note:** By default, timeout is disable.
+
+3. add `@Compensable` at the sub-transaction and specify its corresponding 
compensation method
+   ```java
+   @Compensable(timeout=5, compensationMethod="cancel")
+   public boolean transferOut(String from, int amount) {
+     repo.reduceBalanceByUsername(from, amount);
+   }
+ 
+   public boolean cancel(String from, int amount) {
+     repo.addBalanceByUsername(from, amount);
+   }
+   ```
+   **Note:** By default, timeout is disable.
+
+   **Note:** If the starting point of global transaction and local transaction 
overlaps, both `@SagaStart` and `@Compensable` are needed.
+
+4. Repeat step 3 for the `transferIn` service.
+
+## How to run
+1. run postgreSQL.
+   ```bash
+   docker run -d -e "POSTGRES_DB=saga" -e "POSTGRES_USER=saga" -e 
"POSTGRES_PASSWORD=password" -p 5432:5432 postgres
+   ```
+
+2. run alpha. Before running alpha, please make sure postgreSQL is already up.
+   ```bash
+   docker run -d -p 8090:8090 \
+     -e "JAVA_OPTS=-Dspring.profiles.active=prd" \
+     -e 
"spring.datasource.url=jdbc:postgresql://{docker.host.address}:5432/saga?useSSL=false"
 \
+     alpha-server:0.0.3-SNAPSHOT
+   ```
+
+3. setup omega. Configure the following values in `application.yaml`.
+   ```yaml
+   spring:
+     application:
+       name: {application.name}
+   alpha:
+     cluster:
+       address: {alpha.cluster.addresses}
+   ```
+
+Then you can start your micro-services.
diff --git a/docs/user_guide_zh.md b/docs/user_guide_zh.md
new file mode 100644
index 0000000..25a8ff2
--- /dev/null
+++ b/docs/user_guide_zh.md
@@ -0,0 +1,100 @@
+# Saga User Guide
+[![EN 
doc](https://img.shields.io/badge/document-English-blue.svg)](user_guide.md)
+
+## 准备环境
+1. 安装[JDK 1.8][jdk]
+2. 安装[Maven 3.x][maven]
+3. 安装[Docker][docker]
+
+[jdk]: 
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
+[maven]: https://maven.apache.org/install.html
+[docker]: https://www.docker.com/get-docker
+
+## 编译
+编译Saga,只需以下几步:
+```bash
+$ git clone https://github.com/apache/incubator-servicecomb-saga.git
+$ cd incubator-servicecomb-saga
+$ mvn clean install -DskipTests -Pdocker
+```
+
+## 如何使用
+### 引入Saga的依赖
+```xml
+    <dependency>
+      <groupId>org.apache.servicecomb.saga</groupId>
+      <artifactId>omega-spring-starter</artifactId>
+      <version>0.0.3-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb.saga</groupId>
+      <artifactId>omega-transport-resttemplate</artifactId>
+      <version>0.0.3-SNAPSHOT</version>
+    </dependency>
+```
+
+### 添加Saga的注解及相应的补偿方法
+以一个转账应用为例:
+1. 在应用入口添加 `@EnableOmega` 的注解来初始化omega的配置并与alpha建立连接。
+   ```java
+   @SpringBootApplication
+   @EnableOmega
+   public class Application {
+     public static void main(String[] args) {
+       SpringApplication.run(Application.class, args);
+     }
+   }
+   ```
+
+2. 在全局事务的起点添加 `@SagaStart` 的注解。
+   ```java
+   @SagaStart(timeout=10)
+   public boolean transferMoney(String from, String to, int amount) {
+     transferOut(from, amount);
+     transferIn(to, amount);
+   }
+   ```
+   **注意:** 默认情况下,超时设置需要显式声明才生效。
+
+3. 在子事务处添加 `@Compensable` 的注解并指明其对应的补偿方法。
+   ```java
+   @Compensable(timeout=5, compensationMethod="cancel")
+   public boolean transferOut(String from, int amount) {
+     repo.reduceBalanceByUsername(from, amount);
+   }
+ 
+   public boolean cancel(String from, int amount) {
+     repo.addBalanceByUsername(from, amount);
+   }
+   ```
+   **注意:** 默认情况下,超时设置需要显式声明才生效。
+
+   **注意:** 若全局事务起点与子事务起点重合,需同时声明 `@SagaStart` 和 `@Compensable` 的注解。
+
+4. 对转入服务重复第三步即可。
+
+## 如何运行
+1. 运行postgreSQL
+   ```bash
+   docker run -d -e "POSTGRES_DB=saga" -e "POSTGRES_USER=saga" -e 
"POSTGRES_PASSWORD=password" -p 5432:5432 postgres
+   ```
+
+2. 运行alpha。在运行alpha前,请确保postgreSQL已正常启动。
+   ```bash
+   docker run -d -p 8090:8090 \
+     -e "JAVA_OPTS=-Dspring.profiles.active=prd" \
+     -e 
"spring.datasource.url=jdbc:postgresql://{docker.host.address}:5432/saga?useSSL=false"
 \
+     alpha-server:0.0.3-SNAPSHOT
+   ```
+
+3. 配置omega。在 `application.yaml` 添加下面的配置项:
+   ```yaml
+   spring:
+     application:
+       name: {application.name}
+   alpha:
+     cluster:
+       address: {alpha.cluster.addresses}
+   ```
+
+然后就可以运行相关的微服务了。
diff --git a/saga-demo/pack-demo/booking/pom.xml 
b/saga-demo/pack-demo/booking/pom.xml
index 47a8f9e..1f88668 100644
--- a/saga-demo/pack-demo/booking/pom.xml
+++ b/saga-demo/pack-demo/booking/pom.xml
@@ -41,9 +41,9 @@
       <artifactId>omega-spring-starter</artifactId>
     </dependency>
     <dependency>
-       <groupId>org.apache.servicecomb.saga</groupId>
-       <artifactId>omega-transport-resttemplate</artifactId>
-     </dependency>
+      <groupId>org.apache.servicecomb.saga</groupId>
+      <artifactId>omega-transport-resttemplate</artifactId>
+    </dependency>
   </dependencies>
 
   <build>

-- 
To stop receiving notification emails like this one, please contact
ningji...@apache.org.

Reply via email to