You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by se...@apache.org on 2018/01/17 10:02:29 UTC

[incubator-servicecomb-saga] 03/03: SCB-249 replaced mysql with postgres to comply with APL2 in original saga

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

seanyinx pushed a commit to branch SCB-249_apl_compliance
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-saga.git

commit 2ff73d17d49df769dd7c91ee6eadcf05c2a58261
Author: seanyinx <se...@huawei.com>
AuthorDate: Wed Jan 17 17:57:44 2018 +0800

    SCB-249 replaced mysql with postgres to comply with APL2 in original saga
    
    Signed-off-by: seanyinx <se...@huawei.com>
---
 README.md                                          |  4 +-
 alpha/alpha-server/pom.xml                         | 14 +----
 docker-compose.yaml                                | 21 ++++---
 integration-tests/pack-tests/pom.xml               | 20 +++----
 .../pack/tests/EclipseLinkJpaConfiguration.java    | 52 ----------------
 .../pack/tests/GreetingApplication.java            |  2 +
 omega/omega-spring-tx/pom.xml                      |  4 +-
 .../saga/omega/transaction/spring/User.java        |  5 +-
 .../omega-spring-tx/src/test/resources/schema.sql  |  6 ++
 pom.xml                                            |  6 ++
 .../conditional-transaction-demo-tests/pom.xml     | 21 ++++---
 .../docker-compose.yaml                            | 21 ++++---
 .../demo-tests/pom.xml                             | 21 ++++---
 .../docker-compose.yaml                            | 21 ++++---
 saga-persistence/pom.xml                           | 36 +++++++++++
 saga-persistence/saga-persistence-jpa/pom.xml      | 69 ++++++++++++++++++++++
 .../jpa}/EclipseLinkJpaConfiguration.java          |  4 +-
 .../src/main/resources/META-INF/spring.factories   | 23 +-------
 saga-spring/pom.xml                                | 13 ++--
 .../servicecomb/saga/spring/SagaEventEntity.java   |  5 +-
 .../servicecomb/saga/spring/SagaEventRepo.java     |  6 +-
 saga-spring/src/main/resources/application.yaml    | 13 +---
 saga-spring/src/main/resources/schema-mysql.sql    |  9 ---
 .../src/main/resources/schema-postgresql.sql       |  9 +++
 saga-spring/src/test/resources/data.sql            | 12 ++--
 25 files changed, 222 insertions(+), 195 deletions(-)

diff --git a/README.md b/README.md
index 1b2c4f3..9a7249f 100755
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@ You will need:
 1. [Oracle JDK 1.8+][jdk]
 2. [Maven 3.x][maven]
 3. [Docker][docker]
-4. [MySQL][mysql]
+4. [PostgreSQL][postgres]
 5. [Service Center(optional)][service_center]
 6. [Docker compose(optional)][docker_compose]
 7. [Docker machine(optional)][docker_machine]
@@ -29,7 +29,7 @@ You will need:
 [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
-[mysql]: https://dev.mysql.com/downloads/
+[postgres]: https://www.postgresql.org/download/
 [service_center]: https://github.com/apache/incubator-servicecomb-service-center
 [docker_compose]: https://docs.docker.com/compose/install/
 [docker_machine]: https://docs.docker.com/machine/install-machine/
diff --git a/alpha/alpha-server/pom.xml b/alpha/alpha-server/pom.xml
index 856d86c..ae894b8 100644
--- a/alpha/alpha-server/pom.xml
+++ b/alpha/alpha-server/pom.xml
@@ -67,18 +67,8 @@
       <artifactId>spring-boot-starter</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.springframework.boot</groupId>
-      <artifactId>spring-boot-starter-data-jpa</artifactId>
-      <exclusions>
-        <exclusion>
-          <groupId>org.hibernate</groupId>
-          <artifactId>*</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.persistence</groupId>
-      <artifactId>org.eclipse.persistence.jpa</artifactId>
+      <groupId>org.apache.servicecomb.saga</groupId>
+      <artifactId>saga-persistence-jpa</artifactId>
     </dependency>
     <dependency>
       <groupId>org.postgresql</groupId>
diff --git a/docker-compose.yaml b/docker-compose.yaml
index 8d3037b..1afc3fb 100755
--- a/docker-compose.yaml
+++ b/docker-compose.yaml
@@ -24,18 +24,17 @@ services:
       ports:
         - "30100:30100"
 
-  mysql:
-    image: "mysql/mysql-server:5.7"
-    hostname: mysql
+  postgres:
+    image: "postgres"
+    hostname: postgres
     environment:
-      - MYSQL_ROOT_PASSWORD=password
-      - MYSQL_DATABASE=saga
-      - MYSQL_USER=saga
-      - MYSQL_PASSWORD=password
+      - POSTGRES_DB=saga
+      - POSTGRES_USER=saga
+      - POSTGRES_PASSWORD=password
     ports:
-      - "3306:3306"
+      - "5432:5432"
     healthcheck:
-        test: ["CMD-SHELL", "nc -z localhost 3306 &> /dev/null; echo $$?"]
+        test: ["CMD-SHELL", "nc -z localhost 5432 &> /dev/null; echo $$?"]
         interval: 30s
         timeout: 10s
         retries: 5
@@ -44,12 +43,12 @@ services:
     image: "saga-spring:0.0.2-SNAPSHOT"
     hostname: saga
     links:
-      - "mysql:mysql.servicecomb.io"
+      - "postgres:postgres.servicecomb.io"
       - "service-center:sc.servicecomb.io"
     environment:
       - JAVA_OPTS=-Dspring.profiles.active=prd,servicecomb -Dcse.service.registry.address=http://sc.servicecomb.io:30100
     ports:
       - "8083:8080"
     depends_on:
-      mysql:
+      postgres:
         condition: service_healthy
diff --git a/integration-tests/pack-tests/pom.xml b/integration-tests/pack-tests/pom.xml
index f7b1d01..5c31c79 100644
--- a/integration-tests/pack-tests/pom.xml
+++ b/integration-tests/pack-tests/pom.xml
@@ -45,6 +45,10 @@
   <dependencies>
     <dependency>
       <groupId>org.apache.servicecomb.saga</groupId>
+      <artifactId>pack-common</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb.saga</groupId>
       <artifactId>alpha-core</artifactId>
     </dependency>
     <dependency>
@@ -81,17 +85,6 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.springframework.boot</groupId>
-      <artifactId>spring-boot-starter-data-jpa</artifactId>
-      <exclusions>
-        <exclusion>
-          <groupId>org.hibernate</groupId>
-          <artifactId>*</artifactId>
-        </exclusion>
-      </exclusions>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
       <groupId>javax.persistence</groupId>
       <artifactId>javax.persistence-api</artifactId>
       <scope>test</scope>
@@ -102,8 +95,9 @@
       <scope>runtime</scope>
     </dependency>
     <dependency>
-      <groupId>org.eclipse.persistence</groupId>
-      <artifactId>org.eclipse.persistence.jpa</artifactId>
+      <groupId>org.apache.servicecomb.saga</groupId>
+      <artifactId>saga-persistence-jpa</artifactId>
+      <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.springframework.boot</groupId>
diff --git a/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/EclipseLinkJpaConfiguration.java b/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/EclipseLinkJpaConfiguration.java
deleted file mode 100644
index 75d1a8c..0000000
--- a/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/EclipseLinkJpaConfiguration.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.servicecomb.saga.integration.pack.tests;
-
-import java.util.Collections;
-import java.util.Map;
-
-import javax.sql.DataSource;
-
-import org.springframework.beans.factory.ObjectProvider;
-import org.springframework.boot.autoconfigure.domain.EntityScan;
-import org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration;
-import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.orm.jpa.vendor.AbstractJpaVendorAdapter;
-import org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter;
-import org.springframework.transaction.jta.JtaTransactionManager;
-
-@Configuration
-@EntityScan(basePackages = "org.apache.servicecomb.saga.alpha")
-class EclipseLinkJpaConfiguration extends JpaBaseConfiguration {
-  EclipseLinkJpaConfiguration(DataSource dataSource,
-      JpaProperties properties,
-      ObjectProvider<JtaTransactionManager> jtaTransactionManagerProvider) {
-    super(dataSource, properties, jtaTransactionManagerProvider);
-  }
-
-  @Override
-  protected AbstractJpaVendorAdapter createJpaVendorAdapter() {
-    return new EclipseLinkJpaVendorAdapter();
-  }
-
-  @Override
-  protected Map<String, Object> getVendorProperties() {
-    return Collections.singletonMap("eclipselink.weaving", "false");
-  }
-}
diff --git a/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/GreetingApplication.java b/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/GreetingApplication.java
index 9d1b23a..c49829c 100644
--- a/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/GreetingApplication.java
+++ b/integration-tests/pack-tests/src/test/java/org/apache/servicecomb/saga/integration/pack/tests/GreetingApplication.java
@@ -23,10 +23,12 @@ import java.util.concurrent.ConcurrentLinkedQueue;
 import org.apache.servicecomb.saga.omega.spring.EnableOmega;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.context.annotation.Bean;
 
 @EnableOmega
 @SpringBootApplication
+@EntityScan(basePackages = "org.apache.servicecomb.saga.alpha")
 public class GreetingApplication {
   public static void main(String[] args) {
     SpringApplication.run(GreetingApplication.class, args);
diff --git a/omega/omega-spring-tx/pom.xml b/omega/omega-spring-tx/pom.xml
index 539335b..ec2ab6a 100644
--- a/omega/omega-spring-tx/pom.xml
+++ b/omega/omega-spring-tx/pom.xml
@@ -75,8 +75,8 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.springframework.boot</groupId>
-      <artifactId>spring-boot-starter-data-jpa</artifactId>
+      <groupId>org.apache.servicecomb.saga</groupId>
+      <artifactId>saga-persistence-jpa</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/User.java b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/User.java
index 9b7f474..c5c3d84 100644
--- a/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/User.java
+++ b/omega/omega-spring-tx/src/test/java/org/apache/servicecomb/saga/omega/transaction/spring/User.java
@@ -21,13 +21,14 @@ import java.util.Objects;
 
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
 import javax.persistence.Id;
 
 @Entity
 public class User {
   @Id
-  @GeneratedValue
-  private long id;
+  @GeneratedValue(strategy = GenerationType.IDENTITY)
+  private Long id;
 
   private String username;
   private String email;
diff --git a/omega/omega-spring-tx/src/test/resources/schema.sql b/omega/omega-spring-tx/src/test/resources/schema.sql
new file mode 100644
index 0000000..cbc4330
--- /dev/null
+++ b/omega/omega-spring-tx/src/test/resources/schema.sql
@@ -0,0 +1,6 @@
+CREATE TABLE IF NOT EXISTS `User` (
+  `id` bigint NOT NULL AUTO_INCREMENT,
+  `username` varchar(36) NOT NULL,
+  `email` varchar(36) NOT NULL,
+  PRIMARY KEY (`id`)
+) DEFAULT CHARSET=utf8;
diff --git a/pom.xml b/pom.xml
index 417e0ee..42b0a63 100755
--- a/pom.xml
+++ b/pom.xml
@@ -43,6 +43,7 @@
     <module>pack-contracts</module>
     <module>pack-common</module>
     <module>integration-tests</module>
+    <module>saga-persistence</module>
   </modules>
 
   <properties>
@@ -210,6 +211,11 @@
         <version>0.0.3-SNAPSHOT</version>
       </dependency>
       <dependency>
+        <groupId>org.apache.servicecomb.saga</groupId>
+        <artifactId>saga-persistence-jpa</artifactId>
+        <version>0.0.3-SNAPSHOT</version>
+      </dependency>
+      <dependency>
         <groupId>commons-io</groupId>
         <artifactId>commons-io</artifactId>
         <version>2.4</version>
diff --git a/saga-demo/conditional-transaction-demo/conditional-transaction-demo-tests/pom.xml b/saga-demo/conditional-transaction-demo/conditional-transaction-demo-tests/pom.xml
index 5a7dc9d..6b07471 100644
--- a/saga-demo/conditional-transaction-demo/conditional-transaction-demo-tests/pom.xml
+++ b/saga-demo/conditional-transaction-demo/conditional-transaction-demo-tests/pom.xml
@@ -64,26 +64,25 @@
         <configuration>
           <images>
             <image>
-              <name>mysql/mysql-server:5.7</name>
-              <alias>mysql</alias>
+              <name>postgres</name>
+              <alias>postgres</alias>
               <run>
                 <env>
-                  <MYSQL_ROOT_PASSWORD>password</MYSQL_ROOT_PASSWORD>
-                  <MYSQL_DATABASE>saga</MYSQL_DATABASE>
-                  <MYSQL_USER>saga</MYSQL_USER>
-                  <MYSQL_PASSWORD>password</MYSQL_PASSWORD>
+                  <POSTGRES_DB>saga</POSTGRES_DB>
+                  <POSTGRES_USER>saga</POSTGRES_USER>
+                  <POSTGRES_PASSWORD>password</POSTGRES_PASSWORD>
                 </env>
                 <wait>
-                  <log>Starting MySQL 5.7</log>
+                  <log>database system is ready to accept connections</log>
                   <tcp>
                     <ports>
-                      <port>3306</port>
+                      <port>5432</port>
                     </ports>
                   </tcp>
                   <time>60000</time>
                 </wait>
                 <ports>
-                  <port>mysql.port:3306</port>
+                  <port>postgres.port:5432</port>
                 </ports>
               </run>
             </image>
@@ -181,7 +180,7 @@
                   </JAVA_OPTS>
                 </env>
                 <links>
-                  <link>mysql:mysql.servicecomb.io</link>
+                  <link>postgres:postgres.servicecomb.io</link>
                   <link>payment:payment.servicecomb.io</link>
                   <link>membership:membership.servicecomb.io</link>
                   <link>inventory:inventory.servicecomb.io</link>
@@ -200,7 +199,7 @@
                   <port>saga.port:8080</port>
                 </ports>
                 <dependsOn>
-                  <dependsOn>mysql</dependsOn>
+                  <dependsOn>postgres</dependsOn>
                 </dependsOn>
               </run>
             </image>
diff --git a/saga-demo/conditional-transaction-demo/docker-compose.yaml b/saga-demo/conditional-transaction-demo/docker-compose.yaml
index 11e20d5..45c72c3 100755
--- a/saga-demo/conditional-transaction-demo/docker-compose.yaml
+++ b/saga-demo/conditional-transaction-demo/docker-compose.yaml
@@ -18,18 +18,17 @@
 version: '2.1'
 
 services:
-  mysql:
-    image: "mysql/mysql-server:5.7"
-    hostname: mysql
+  postgres:
+    image: "postgres"
+    hostname: postgres
     environment:
-      - MYSQL_ROOT_PASSWORD=password
-      - MYSQL_DATABASE=saga
-      - MYSQL_USER=saga
-      - MYSQL_PASSWORD=password
+      - POSTGRES_DB=saga
+      - POSTGRES_USER=saga
+      - POSTGRES_PASSWORD=password
     ports:
-      - "3306:3306"
+      - "5432:5432"
     healthcheck:
-        test: ["CMD-SHELL", "nc -z localhost 3306 &> /dev/null; echo $$?"]
+        test: ["CMD-SHELL", "nc -z localhost 5432 &> /dev/null; echo $$?"]
         interval: 30s
         timeout: 10s
         retries: 5
@@ -62,7 +61,7 @@ services:
     image: "saga-spring:0.0.3-SNAPSHOT"
     hostname: saga
     links:
-      - "mysql:mysql.servicecomb.io"
+      - "postgres:postgres.servicecomb.io"
       - "payment:payment.servicecomb.io"
       - "membership:membership.servicecomb.io"
       - "inventory:inventory.servicecomb.io"
@@ -72,5 +71,5 @@ services:
     ports:
       - "8083:8080"
     depends_on:
-      mysql:
+      postgres:
         condition: service_healthy
diff --git a/saga-demo/dependency-free-transaction-demo/demo-tests/pom.xml b/saga-demo/dependency-free-transaction-demo/demo-tests/pom.xml
index 59b60ed..81594b4 100644
--- a/saga-demo/dependency-free-transaction-demo/demo-tests/pom.xml
+++ b/saga-demo/dependency-free-transaction-demo/demo-tests/pom.xml
@@ -82,26 +82,25 @@
               </run>
             </image>
             <image>
-              <name>mysql/mysql-server:5.7</name>
-              <alias>mysql</alias>
+              <name>postgres</name>
+              <alias>postgres</alias>
               <run>
                 <env>
-                  <MYSQL_ROOT_PASSWORD>password</MYSQL_ROOT_PASSWORD>
-                  <MYSQL_DATABASE>saga</MYSQL_DATABASE>
-                  <MYSQL_USER>saga</MYSQL_USER>
-                  <MYSQL_PASSWORD>password</MYSQL_PASSWORD>
+                  <POSTGRES_DB>saga</POSTGRES_DB>
+                  <POSTGRES_USER>saga</POSTGRES_USER>
+                  <POSTGRES_PASSWORD>password</POSTGRES_PASSWORD>
                 </env>
                 <wait>
-                  <log>Starting MySQL 5.7</log>
+                  <log>database system is ready to accept connections</log>
                   <tcp>
                     <ports>
-                      <port>3306</port>
+                      <port>5432</port>
                     </ports>
                   </tcp>
                   <time>60000</time>
                 </wait>
                 <ports>
-                  <port>mysql.port:3306</port>
+                  <port>postgres.port:5432</port>
                 </ports>
               </run>
             </image>
@@ -213,7 +212,7 @@
                 </env>
                 <links>
                   <link>service-center:sc.servicecomb.io</link>
-                  <link>mysql:mysql.servicecomb.io</link>
+                  <link>postgres:postgres.servicecomb.io</link>
                   <link>car:car.servicecomb.io</link>
                   <link>flight:flight.servicecomb.io</link>
                   <link>hotel:hotel.servicecomb.io</link>
@@ -232,7 +231,7 @@
                   <port>saga.port:8080</port>
                 </ports>
                 <dependsOn>
-                  <dependsOn>mysql</dependsOn>
+                  <dependsOn>postgres</dependsOn>
                 </dependsOn>
               </run>
             </image>
diff --git a/saga-demo/dependency-free-transaction-demo/docker-compose.yaml b/saga-demo/dependency-free-transaction-demo/docker-compose.yaml
index 523a322..3ad2cc7 100755
--- a/saga-demo/dependency-free-transaction-demo/docker-compose.yaml
+++ b/saga-demo/dependency-free-transaction-demo/docker-compose.yaml
@@ -24,18 +24,17 @@ services:
     ports:
       - "30100:30100"
 
-  mysql:
-    image: "mysql/mysql-server:5.7"
-    hostname: mysql
+  postgres:
+    image: "postgres"
+    hostname: postgres
     environment:
-      - MYSQL_ROOT_PASSWORD=password
-      - MYSQL_DATABASE=saga
-      - MYSQL_USER=saga
-      - MYSQL_PASSWORD=password
+      - POSTGRES_DB=saga
+      - POSTGRES_USER=saga
+      - POSTGRES_PASSWORD=password
     ports:
-      - "3306:3306"
+      - "5432:5432"
     healthcheck:
-        test: ["CMD-SHELL", "nc -z localhost 3306 &> /dev/null; echo $$?"]
+        test: ["CMD-SHELL", "nc -z localhost 5432 &> /dev/null; echo $$?"]
         interval: 30s
         timeout: 10s
         retries: 5
@@ -76,7 +75,7 @@ services:
     image: "saga-spring:0.0.3-SNAPSHOT"
     hostname: saga
     links:
-      - "mysql:mysql.servicecomb.io"
+      - "postgres:postgres.servicecomb.io"
       - "service-center:sc.servicecomb.io"
       - "car-rental-service:car.servicecomb.io"
       - "flight-booking-service:flight.servicecomb.io"
@@ -87,7 +86,7 @@ services:
     ports:
       - "8080:8080"
     depends_on:
-      mysql:
+      postgres:
         condition: service_healthy
 
   web:
diff --git a/saga-persistence/pom.xml b/saga-persistence/pom.xml
new file mode 100644
index 0000000..5f7bc20
--- /dev/null
+++ b/saga-persistence/pom.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <artifactId>saga</artifactId>
+    <groupId>org.apache.servicecomb.saga</groupId>
+    <version>0.0.3-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>saga-persistence</artifactId>
+  <packaging>pom</packaging>
+  <modules>
+    <module>saga-persistence-jpa</module>
+  </modules>
+
+
+</project>
diff --git a/saga-persistence/saga-persistence-jpa/pom.xml b/saga-persistence/saga-persistence-jpa/pom.xml
new file mode 100644
index 0000000..3373aec
--- /dev/null
+++ b/saga-persistence/saga-persistence-jpa/pom.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <artifactId>saga-persistence</artifactId>
+    <groupId>org.apache.servicecomb.saga</groupId>
+    <version>0.0.3-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>saga-persistence-jpa</artifactId>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-dependencies</artifactId>
+        <version>${spring.boot.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-data-jpa</artifactId>
+      <exclusions>
+        <exclusion>
+          <groupId>org.hibernate</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.persistence</groupId>
+      <artifactId>org.eclipse.persistence.jpa</artifactId>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>com.ethlo.persistence.tools</groupId>
+        <artifactId>eclipselink-maven-plugin</artifactId>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/EclipseLinkJpaConfiguration.java b/saga-persistence/saga-persistence-jpa/src/main/java/org/apache/servicecomb/saga/persistence/jpa/EclipseLinkJpaConfiguration.java
similarity index 93%
rename from alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/EclipseLinkJpaConfiguration.java
rename to saga-persistence/saga-persistence-jpa/src/main/java/org/apache/servicecomb/saga/persistence/jpa/EclipseLinkJpaConfiguration.java
index 4061c49..1ad7879 100644
--- a/alpha/alpha-server/src/main/java/org/apache/servicecomb/saga/alpha/server/EclipseLinkJpaConfiguration.java
+++ b/saga-persistence/saga-persistence-jpa/src/main/java/org/apache/servicecomb/saga/persistence/jpa/EclipseLinkJpaConfiguration.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.saga.alpha.server;
+package org.apache.servicecomb.saga.persistence.jpa;
 
 import java.util.Collections;
 import java.util.Map;
@@ -31,7 +31,7 @@ import org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter;
 import org.springframework.transaction.jta.JtaTransactionManager;
 
 @Configuration
-class EclipseLinkJpaConfiguration extends JpaBaseConfiguration {
+public class EclipseLinkJpaConfiguration extends JpaBaseConfiguration {
   EclipseLinkJpaConfiguration(DataSource dataSource,
       JpaProperties properties,
       ObjectProvider<JtaTransactionManager> jtaTransactionManagerProvider) {
diff --git a/saga-spring/src/main/resources/application.yaml b/saga-persistence/saga-persistence-jpa/src/main/resources/META-INF/spring.factories
similarity index 69%
copy from saga-spring/src/main/resources/application.yaml
copy to saga-persistence/saga-persistence-jpa/src/main/resources/META-INF/spring.factories
index fb71738..1d6b850 100644
--- a/saga-spring/src/main/resources/application.yaml
+++ b/saga-persistence/saga-persistence-jpa/src/main/resources/META-INF/spring.factories
@@ -14,24 +14,5 @@
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
-spring:
-  profiles: prd
-  datasource:
-    username: saga
-    password: password
-    driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://mysql.servicecomb.io:3306/saga?useSSL=false
-    platform: mysql
-    continue-on-error: true
-  jpa:
-    properties:
-      hibernate:
-        dialect: org.hibernate.dialect.MySQL5Dialect
-    hibernate:
-      ddl-auto: none
-
-saga:
-  thread:
-    count: 32
-  retry:
-    delay: 3000
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+  org.apache.servicecomb.saga.persistence.jpa.EclipseLinkJpaConfiguration
diff --git a/saga-spring/pom.xml b/saga-spring/pom.xml
index 48be07b..b96b2a9 100755
--- a/saga-spring/pom.xml
+++ b/saga-spring/pom.xml
@@ -103,12 +103,17 @@
       <artifactId>spring-boot-starter-actuator</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.springframework.boot</groupId>
-      <artifactId>spring-boot-starter-data-jpa</artifactId>
+      <groupId>javax.persistence</groupId>
+      <artifactId>javax.persistence-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb.saga</groupId>
+      <artifactId>saga-persistence-jpa</artifactId>
     </dependency>
     <dependency>
-      <groupId>mysql</groupId>
-      <artifactId>mysql-connector-java</artifactId>
+      <groupId>org.postgresql</groupId>
+      <artifactId>postgresql</artifactId>
+      <scope>runtime</scope>
     </dependency>
     <dependency>
       <groupId>io.kamon</groupId>
diff --git a/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaEventEntity.java b/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaEventEntity.java
index 420655a..6be3501 100644
--- a/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaEventEntity.java
+++ b/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaEventEntity.java
@@ -21,13 +21,14 @@ import java.util.Date;
 
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
 import javax.persistence.Id;
 
 @Entity
 public class SagaEventEntity {
   @Id
-  @GeneratedValue
-  private long id;
+  @GeneratedValue(strategy = GenerationType.IDENTITY)
+  private Long id;
   private String sagaId;
   private Date creationTime;
   private String type;
diff --git a/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaEventRepo.java b/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaEventRepo.java
index 45cfe8c..1f1132b 100644
--- a/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaEventRepo.java
+++ b/saga-spring/src/main/java/org/apache/servicecomb/saga/spring/SagaEventRepo.java
@@ -28,9 +28,9 @@ import org.springframework.data.repository.PagingAndSortingRepository;
 interface SagaEventRepo extends PagingAndSortingRepository<SagaEventEntity, Long> {
 
   // TODO: 8/21/2017 replace with hql?
-  @Query(value = "SELECT * FROM saga_event_entity "
-      + "WHERE saga_id NOT IN ("
-      + "  SELECT DISTINCT saga_id FROM saga_event_entity"
+  @Query(value = "SELECT * FROM SagaEventEntity "
+      + "WHERE sagaId NOT IN ("
+      + "  SELECT DISTINCT sagaId FROM SagaEventEntity"
       + "  WHERE type = 'SagaEndedEvent'"
       + ")", nativeQuery = true)
   List<SagaEventEntity> findIncompleteSagaEventsGroupBySagaId();
diff --git a/saga-spring/src/main/resources/application.yaml b/saga-spring/src/main/resources/application.yaml
index fb71738..6ed0d9d 100644
--- a/saga-spring/src/main/resources/application.yaml
+++ b/saga-spring/src/main/resources/application.yaml
@@ -19,16 +19,9 @@ spring:
   datasource:
     username: saga
     password: password
-    driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://mysql.servicecomb.io:3306/saga?useSSL=false
-    platform: mysql
-    continue-on-error: true
-  jpa:
-    properties:
-      hibernate:
-        dialect: org.hibernate.dialect.MySQL5Dialect
-    hibernate:
-      ddl-auto: none
+    url: jdbc:postgresql://postgres.servicecomb.io:5432/saga?useSSL=false
+    platform: postgresql
+#    continue-on-error: true
 
 saga:
   thread:
diff --git a/saga-spring/src/main/resources/schema-mysql.sql b/saga-spring/src/main/resources/schema-mysql.sql
deleted file mode 100644
index cf713ad..0000000
--- a/saga-spring/src/main/resources/schema-mysql.sql
+++ /dev/null
@@ -1,9 +0,0 @@
-CREATE TABLE IF NOT EXISTS `saga_event_entity` (
-  `id` bigint NOT NULL AUTO_INCREMENT,
-  `saga_id` varchar(36) NOT NULL,
-  `creation_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
-  `type` varchar(50) NOT NULL,
-  `content_json` JSON NOT NULL,
-  PRIMARY KEY (`id`),
-  INDEX `running_sagas_index` (`saga_id`, `type`)
-) DEFAULT CHARSET=utf8;
diff --git a/saga-spring/src/main/resources/schema-postgresql.sql b/saga-spring/src/main/resources/schema-postgresql.sql
new file mode 100644
index 0000000..3900fd3
--- /dev/null
+++ b/saga-spring/src/main/resources/schema-postgresql.sql
@@ -0,0 +1,9 @@
+CREATE TABLE IF NOT EXISTS SagaEventEntity (
+  id BIGSERIAL PRIMARY KEY,
+  sagaId varchar(36) NOT NULL,
+  creationTime timestamp(6) NOT NULL DEFAULT CURRENT_DATE,
+  type varchar(50) NOT NULL,
+  contentJson JSON NOT NULL
+);
+
+CREATE INDEX IF NOT EXISTS running_sagas_index ON SagaEventEntity (sagaId, type);
diff --git a/saga-spring/src/test/resources/data.sql b/saga-spring/src/test/resources/data.sql
index 6ace806..d0db33e 100644
--- a/saga-spring/src/test/resources/data.sql
+++ b/saga-spring/src/test/resources/data.sql
@@ -1,12 +1,12 @@
-DROP TABLE IF EXISTS saga_event_entity;
+DROP TABLE IF EXISTS SagaEventEntity;
 
-CREATE TABLE `saga_event_entity` (
+CREATE TABLE `SagaEventEntity` (
   `id` bigint NOT NULL AUTO_INCREMENT,
-  `saga_id` varchar(36) NOT NULL,
-  `creation_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `sagaId` varchar(36) NOT NULL,
+  `creationTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
   `type` varchar(50) NOT NULL,
-  `content_json` clob NOT NULL DEFAULT '{}',
+  `contentJson` clob NOT NULL DEFAULT '{}',
   PRIMARY KEY (`id`)
 ) DEFAULT CHARSET=utf8;
 
- CREATE INDEX running_sagas_index ON saga_event_entity(saga_id, type);
+ CREATE INDEX running_sagas_index ON sagaEventEntity(sagaId, type);

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.