From 07850b416da9293e715f09f481cbaab849908a7d Mon Sep 17 00:00:00 2001
From: Ludovic Claude <ludovic.claude54@gmail.com>
Date: Fri, 21 Dec 2018 16:45:17 +0100
Subject: [PATCH] Fix spring configuration

---
 docker/config/application.tmpl                    |  4 ++++
 pom.xml                                           |  2 +-
 src/main/java/eu/hbp/mip/MIPApplication.java      | 13 +++++++++++--
 .../hbp/mip/configuration/AkkaConfiguration.java  |  2 +-
 ...gsnagConfig.java => BugsnagConfiguration.java} |  2 +-
 .../configuration/PersistenceConfiguration.java   | 15 ++++++++++++++-
 src/main/java/eu/hbp/mip/model/Article.java       |  2 ++
 7 files changed, 34 insertions(+), 6 deletions(-)
 rename src/main/java/eu/hbp/mip/configuration/{BugsnagConfig.java => BugsnagConfiguration.java} (92%)

diff --git a/docker/config/application.tmpl b/docker/config/application.tmpl
index 9a56dad4c..fcdc4ec92 100644
--- a/docker/config/application.tmpl
+++ b/docker/config/application.tmpl
@@ -21,6 +21,10 @@ spring:
       username: {{ default .Env.FEATURES_DB_USER "postgres" }}
       password: {{ .Env.FEATURES_DB_PASSWORD }}
       driver-class-name: org.postgresql.Driver
+  data:
+    jpa:
+      repositories:
+        bootstrap-mode: default
   jpa:
     hibernate:
       dialect: org.hibernate.dialect.PostgreSQL9Dialect
diff --git a/pom.xml b/pom.xml
index 4963d1dbd..911818e6e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -27,7 +27,7 @@
         <asciidoctor.maven.plugin.version>1.5.5</asciidoctor.maven.plugin.version>
         <asciidoctorj.pdf.version>1.5.0-alpha.15</asciidoctorj.pdf.version>
         <asciidoctorj.version>1.5.5</asciidoctorj.version>
-        <spring-data-commons.version>1.13.17.RELEASE</spring-data-commons.version>
+        <spring-data-commons.version>1.12.11.RELEASE</spring-data-commons.version>
         <angularjs.version>1.5.7</angularjs.version>
         <jquery.version>3.0.0</jquery.version>
         <bootstrap.version>3.3.7</bootstrap.version>
diff --git a/src/main/java/eu/hbp/mip/MIPApplication.java b/src/main/java/eu/hbp/mip/MIPApplication.java
index df70ba78a..b3f8648cd 100644
--- a/src/main/java/eu/hbp/mip/MIPApplication.java
+++ b/src/main/java/eu/hbp/mip/MIPApplication.java
@@ -4,10 +4,19 @@
 
 package eu.hbp.mip;
 
+import eu.hbp.mip.configuration.*;
 import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
 
-@SpringBootApplication
+
+@Configuration
+@EnableAutoConfiguration(exclude = { ValidationAutoConfiguration.class })
+@Import({ AkkaConfiguration.class, BugsnagConfiguration.class,
+        CacheConfiguration.class, PersistenceConfiguration.class,
+        SecurityConfiguration.class, WebConfiguration.class})
 public class MIPApplication {
 
     public static void main(String[] args) {
diff --git a/src/main/java/eu/hbp/mip/configuration/AkkaConfiguration.java b/src/main/java/eu/hbp/mip/configuration/AkkaConfiguration.java
index d85bf5d3a..6e679f671 100644
--- a/src/main/java/eu/hbp/mip/configuration/AkkaConfiguration.java
+++ b/src/main/java/eu/hbp/mip/configuration/AkkaConfiguration.java
@@ -27,7 +27,7 @@ import static eu.hbp.mip.akka.SpringExtension.SPRING_EXTENSION_PROVIDER;
 
 @Configuration
 @ComponentScan
-class AkkaConfiguration {
+public class AkkaConfiguration {
 
     protected final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
 
diff --git a/src/main/java/eu/hbp/mip/configuration/BugsnagConfig.java b/src/main/java/eu/hbp/mip/configuration/BugsnagConfiguration.java
similarity index 92%
rename from src/main/java/eu/hbp/mip/configuration/BugsnagConfig.java
rename to src/main/java/eu/hbp/mip/configuration/BugsnagConfiguration.java
index 4bc042fe8..b02b1e6a1 100644
--- a/src/main/java/eu/hbp/mip/configuration/BugsnagConfig.java
+++ b/src/main/java/eu/hbp/mip/configuration/BugsnagConfiguration.java
@@ -8,7 +8,7 @@ import org.springframework.context.annotation.Import;
 
 @Configuration
 @Import(BugsnagSpringConfiguration.class)
-public class BugsnagConfig {
+public class BugsnagConfiguration {
     @Bean
     public Bugsnag bugsnag() {
         return new Bugsnag("dff301aa15eb795a6d8b22b600586f77");
diff --git a/src/main/java/eu/hbp/mip/configuration/PersistenceConfiguration.java b/src/main/java/eu/hbp/mip/configuration/PersistenceConfiguration.java
index 069f65525..d1a57c654 100644
--- a/src/main/java/eu/hbp/mip/configuration/PersistenceConfiguration.java
+++ b/src/main/java/eu/hbp/mip/configuration/PersistenceConfiguration.java
@@ -11,9 +11,12 @@ import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.context.annotation.*;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.orm.jpa.JpaTransactionManager;
 import org.springframework.orm.jpa.JpaVendorAdapter;
 import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
 import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 import javax.sql.DataSource;
 
@@ -22,7 +25,8 @@ import javax.sql.DataSource;
  */
 
 @Configuration
-@EnableJpaRepositories(value = "eu.hbp.mip.repositories")
+@EnableJpaRepositories("eu.hbp.mip.repositories")
+@EnableTransactionManagement
 @EntityScan(basePackages = "eu.hbp.mip.model")
 public class PersistenceConfiguration {
 
@@ -67,11 +71,20 @@ public class PersistenceConfiguration {
     public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
         LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
         em.setDataSource(portalDataSource());
+        em.setPackagesToScan("eu.hbp.mip.model");
+        em.setPersistenceUnitName("portal");
         JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
         em.setJpaVendorAdapter(vendorAdapter);
         return em;
     }
 
+    @Bean
+    public PlatformTransactionManager transactionManager() {
+        JpaTransactionManager txManager = new JpaTransactionManager();
+        txManager.setEntityManagerFactory(entityManagerFactory().getNativeEntityManagerFactory());
+        return txManager;
+    }
+
     @Bean(name = "flyway", initMethod = "migrate")
     public Flyway migrations() {
         Flyway flyway = new Flyway();
diff --git a/src/main/java/eu/hbp/mip/model/Article.java b/src/main/java/eu/hbp/mip/model/Article.java
index 220839623..4fdfc40b8 100644
--- a/src/main/java/eu/hbp/mip/model/Article.java
+++ b/src/main/java/eu/hbp/mip/model/Article.java
@@ -7,6 +7,7 @@ package eu.hbp.mip.model;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.annotations.ApiModel;
+import org.springframework.validation.annotation.Validated;
 
 import javax.persistence.*;
 import javax.validation.constraints.NotNull;
@@ -19,6 +20,7 @@ import java.util.List;
 @Table(name = "`article`")
 @ApiModel
 @JsonInclude(JsonInclude.Include.NON_NULL)
+@Validated
 public class Article {
 
     @Id
-- 
GitLab