Skip to content
Permalink
Browse files
Merge pull request #8 from ebenezergraham/FINCN-2
Migrated ORM to EclipseLink
  • Loading branch information
Izakey committed Aug 25, 2019
2 parents 237f2dc + 00351f8 commit d05b439890d4a108f2265236f08647dc7c0a85ab
Showing 3 changed files with 105 additions and 36 deletions.
@@ -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'
@@ -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, "false");
return properties;
}
}
@@ -31,6 +31,7 @@
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 @@
@SuppressWarnings("WeakerAccess")
@Configuration
@ConditionalOnProperty(prefix = "mariadb", name = "enabled", matchIfMissing = true)
@EnableTransactionManagement
@EnableApplicationName
@Import(EclipseLinkJpaConfiguration.class)
public class MariaDBJavaConfiguration {

private final Environment env;
@@ -64,32 +65,6 @@ public Logger logger() {
return LoggerFactory.getLogger(MariaDBConstants.LOGGER_NAME);
}

@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 MetaDataSourceWrapper metaDataSourceWrapper() {
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;
}
}

0 comments on commit d05b439

Please sign in to comment.