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

ikamga pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract-cn-mariadb.git

commit 1e3ad9e6c58e727a99ef04280ed25aaaba427b33
Author: Ebenezer Graham <[email protected]>
AuthorDate: Mon Jul 15 17:34:26 2019 +0400

    Migrated ORM to EclipseLink
---
 build.gradle                                       | 12 ++-
 .../config/EclipseLinkJpaConfiguration.java        | 94 ++++++++++++++++++++++
 .../mariadb/config/MariaDBJavaConfiguration.java   | 35 +-------
 3 files changed, 105 insertions(+), 36 deletions(-)

diff --git a/build.gradle b/build.gradle
index 4e0721b..a558607 100644
--- a/build.gradle
+++ b/build.gradle
@@ -34,7 +34,8 @@ ext.versions = [
         springcontext        : '4.3.3.RELEASE',
         springboot           : '1.4.1.RELEASE',
         findbugs             : '3.0.1',
-        frameworklang        : '0.1.0-BUILD-SNAPSHOT'
+        frameworklang        : '0.1.0-BUILD-SNAPSHOT',
+        eclipselink          : '2.7.4'
 ]
 
 apply plugin: 'java'
@@ -59,9 +60,9 @@ dependencies {
             [group: 'org.springframework', name: 'spring-context', version: 
versions.springcontext],
             [group: 'com.google.code.findbugs', name: 'jsr305', version: 
versions.findbugs],
             [group: 'org.apache.fineract.cn', name: 'lang', version: 
versions.frameworklang],
-            [group: 'org.springframework.boot', name: 
'spring-boot-starter-data-jpa', version: versions.springboot],
             [group: 'com.jolbox', name: 'bonecp', version: '0.8.0.RELEASE'],
-            [group: 'org.flywaydb', name: 'flyway-core', version: '4.0.1']
+            [group: 'org.flywaydb', name: 'flyway-core', version: '4.0.1'],
+            [group: 'org.eclipse.persistence', name: 
'org.eclipse.persistence.jpa', version: versions.eclipselink]
     )
 
     //Workaround for bug described here: 
https://discuss.gradle.org/t/build-failure-when-4-1-0-of-net-java-dev-jna-jna-is-selected-in-place-of-3-3-0-due-to-change-in-artifacts-with-classifiers/9377/3
@@ -70,6 +71,11 @@ dependencies {
     compile('org.mariadb.jdbc:mariadb-java-client:1.4.3') {
         exclude group: 'net.java.dev.jna'
     }
+    compile(group: 'org.springframework.boot', name: 
'spring-boot-starter-data-jpa', version: versions.springboot)
+            {
+                exclude group: 'org.hibernate', module: 
'hibernate-entitymanager'
+                exclude group: 'org.hibernate', module: 'hibernate-core'
+            }
 
     compile 'net.java.dev.jna:jna:4.1.0'
     compile 'net.java.dev.jna:jna-platform:4.1.0'
diff --git 
a/src/main/java/org/apache/fineract/cn/mariadb/config/EclipseLinkJpaConfiguration.java
 
b/src/main/java/org/apache/fineract/cn/mariadb/config/EclipseLinkJpaConfiguration.java
new file mode 100644
index 0000000..62c6069
--- /dev/null
+++ 
b/src/main/java/org/apache/fineract/cn/mariadb/config/EclipseLinkJpaConfiguration.java
@@ -0,0 +1,94 @@
+/*
+ * 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.fineract.cn.mariadb.config;
+
+import org.eclipse.persistence.config.BatchWriting;
+import org.eclipse.persistence.config.PersistenceUnitProperties;
+import org.eclipse.persistence.config.TargetDatabase;
+import org.eclipse.persistence.logging.SessionLog;
+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.Bean;
+import org.springframework.context.annotation.Configuration;
+import 
org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
+import org.springframework.orm.jpa.JpaTransactionManager;
+import org.springframework.orm.jpa.vendor.AbstractJpaVendorAdapter;
+import org.springframework.orm.jpa.vendor.Database;
+import org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+import org.springframework.transaction.jta.JtaTransactionManager;
+
+import javax.persistence.EntityManagerFactory;
+import javax.sql.DataSource;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Ebenezer Graham
+ */
+
+@Configuration
+@EnableTransactionManagement
+@EntityScan({
+               "org.apache.fineract.cn.**.repository",
+               "org.apache.fineract.cn.mariadb.util"
+})
+public class EclipseLinkJpaConfiguration extends JpaBaseConfiguration {
+       
+       
+       protected EclipseLinkJpaConfiguration(DataSource dataSource, 
JpaProperties properties, ObjectProvider<JtaTransactionManager> 
jtaTransactionManagerProvider) {
+               super(dataSource, properties, jtaTransactionManagerProvider);
+       }
+       
+       @Bean
+       public PlatformTransactionManager 
transactionManager(EntityManagerFactory emf) {
+               final JpaTransactionManager transactionManager = new 
JpaTransactionManager();
+               transactionManager.setEntityManagerFactory(emf);
+               return transactionManager;
+       }
+       
+       @Bean
+       public PersistenceExceptionTranslationPostProcessor 
exceptionTranslation() {
+               return new PersistenceExceptionTranslationPostProcessor();
+       }
+       
+       @Bean
+       protected AbstractJpaVendorAdapter createJpaVendorAdapter() {
+               EclipseLinkJpaVendorAdapter vendorAdapter = new 
EclipseLinkJpaVendorAdapter();
+               vendorAdapter.setShowSql(true); // Todo: remove sql log
+               vendorAdapter.setDatabase(Database.MYSQL);
+               vendorAdapter.setGenerateDdl(false);
+               return vendorAdapter;
+       }
+       
+       @Bean
+       protected Map<String, Object> getVendorProperties() {
+               HashMap<String, Object> properties = new HashMap<>();
+               properties.put(PersistenceUnitProperties.WEAVING, "static");
+               properties.put(PersistenceUnitProperties.WEAVING_EAGER, "true");
+               properties.put(PersistenceUnitProperties.TARGET_DATABASE, 
TargetDatabase.MySQL);
+               properties.put(PersistenceUnitProperties.LOGGING_LEVEL, 
SessionLog.ALL_LABEL);// Todo: Reduce log level after test
+               properties.put(PersistenceUnitProperties.LOGGING_PARAMETERS, 
"true");
+               properties.put(PersistenceUnitProperties.DEPLOY_ON_STARTUP, 
"true");
+               return properties;
+       }
+}
diff --git 
a/src/main/java/org/apache/fineract/cn/mariadb/config/MariaDBJavaConfiguration.java
 
b/src/main/java/org/apache/fineract/cn/mariadb/config/MariaDBJavaConfiguration.java
index 9a6884d..2fce6a4 100644
--- 
a/src/main/java/org/apache/fineract/cn/mariadb/config/MariaDBJavaConfiguration.java
+++ 
b/src/main/java/org/apache/fineract/cn/mariadb/config/MariaDBJavaConfiguration.java
@@ -31,6 +31,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
 import org.springframework.core.env.Environment;
 import 
org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
 import org.springframework.orm.jpa.JpaTransactionManager;
@@ -47,8 +48,8 @@ import java.util.Properties;
 @SuppressWarnings("WeakerAccess")
 @Configuration
 @ConditionalOnProperty(prefix = "mariadb", name = "enabled", matchIfMissing = 
true)
-@EnableTransactionManagement
 @EnableApplicationName
+@Import(EclipseLinkJpaConfiguration.class)
 public class MariaDBJavaConfiguration {
 
   private final Environment env;
@@ -65,32 +66,6 @@ public class MariaDBJavaConfiguration {
   }
 
   @Bean
-  public LocalContainerEntityManagerFactoryBean entityManagerFactory(final 
DataSource dataSource) {
-    final LocalContainerEntityManagerFactoryBean em = new 
LocalContainerEntityManagerFactoryBean();
-    em.setPersistenceUnitName("metaPU");
-    em.setDataSource(dataSource);
-    em.setPackagesToScan("org.apache.fineract.cn.**.repository");
-
-    final JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
-    em.setJpaVendorAdapter(vendorAdapter);
-    em.setJpaProperties(additionalProperties());
-
-    return em;
-  }
-
-  @Bean
-  public PlatformTransactionManager transactionManager(EntityManagerFactory 
emf) {
-    final JpaTransactionManager transactionManager = new 
JpaTransactionManager();
-    transactionManager.setEntityManagerFactory(emf);
-    return transactionManager;
-  }
-
-  @Bean
-  public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
-    return new PersistenceExceptionTranslationPostProcessor();
-  }
-
-  @Bean
   public FlywayFactoryBean flywayFactoryBean(final ApplicationName 
applicationName) {
     return new FlywayFactoryBean(applicationName);
   }
@@ -131,10 +106,4 @@ public class MariaDBJavaConfiguration {
     boneCPDataSource.setDriverProperties(driverProperties);
     return new MetaDataSourceWrapper(boneCPDataSource);
   }
-
-  private Properties additionalProperties() {
-    final Properties properties = new Properties();
-    properties.setProperty("hibernate.dialect", 
"org.hibernate.dialect.MySQLDialect");
-    return properties;
-  }
 }

Reply via email to