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; - } }
