You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/03/31 17:41:55 UTC

[isis] branch master updated: ISIS-2593: Recognize eclipselink.* configuration options and pass them over to the EclipseLink integration

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

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new 8ec6a6d  ISIS-2593: Recognize eclipselink.* configuration options and pass them over to the EclipseLink integration
8ec6a6d is described below

commit 8ec6a6df4132716c6338c9f6f6e9554a2e3ad1c3
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Mar 31 19:41:38 2021 +0200

    ISIS-2593: Recognize eclipselink.* configuration options and pass them
    over to the EclipseLink integration
---
 .../isis/core/config/IsisModuleCoreConfig.java     |  1 +
 .../confmenu/ConfigurationViewServiceDefault.java  |  1 +
 .../jdo/datanucleus/config/DnSettings.java         | 26 +------
 .../jpa/eclipselink/IsisModuleJpaEclipselink.java  | 17 ++---
 .../jpa/eclipselink/config/ElSettings.java         | 79 ++++++++++++++++++++++
 5 files changed, 88 insertions(+), 36 deletions(-)

diff --git a/core/config/src/main/java/org/apache/isis/core/config/IsisModuleCoreConfig.java b/core/config/src/main/java/org/apache/isis/core/config/IsisModuleCoreConfig.java
index 966cc88..1111ab7 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/IsisModuleCoreConfig.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/IsisModuleCoreConfig.java
@@ -70,6 +70,7 @@ public class IsisModuleCoreConfig {
         private Map<String, String> isis = Collections.emptyMap();
         private Map<String, String> resteasy = Collections.emptyMap();
         private Map<String, String> datanucleus = Collections.emptyMap();
+        private Map<String, String> eclipselink = Collections.emptyMap();
     }
 
 }
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/confmenu/ConfigurationViewServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/confmenu/ConfigurationViewServiceDefault.java
index fc6dca4..c16cd86 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/confmenu/ConfigurationViewServiceDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/confmenu/ConfigurationViewServiceDefault.java
@@ -143,6 +143,7 @@ implements
             configProps.getIsis().forEach((k, v)->add("isis." + k, v, map));
             configProps.getResteasy().forEach((k, v)->add("resteasy." + k, v, map));
             configProps.getDatanucleus().forEach((k, v)->add("datanucleus." + k, v, map));
+            configProps.getEclipselink().forEach((k, v)->add("eclipselink." + k, v, map));
         } else {
             // if properties are not visible, show at least the policy
             add("Configuration Property Visibility Policy",
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/config/DnSettings.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/config/DnSettings.java
index 8bad341..06e3f47 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/config/DnSettings.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/config/DnSettings.java
@@ -46,6 +46,7 @@ public class DnSettings {
 
     @Getter @Setter 
     private Map<String, String> datanucleus; //mapped by "datanucleus"
+    
     @Getter @Setter 
     private Map<String, String> javax; //mapped by "javax" filtered later for "javax.jdo"
     
@@ -97,32 +98,9 @@ public class DnSettings {
                 log.info("... and config properties for second '-nontx' JNDI datasource also found; {}", connectionFactory2Name);
             }
             // nothing further to do
-        } else {
-            // use JDBC connection properties; put if not present
-
-//XXX let Spring handle datasources instead            
-//            putIfNotPresent(props, "javax.jdo.option.ConnectionDriverName", "org.hsqldb.jdbcDriver");
-//            putIfNotPresent(props, "javax.jdo.option.ConnectionURL", "jdbc:hsqldb:mem:test");
-//            putIfNotPresent(props, "javax.jdo.option.ConnectionUserName", "sa");
-//            putIfNotPresent(props, "javax.jdo.option.ConnectionPassword", "");
-//
-//            if(log.isInfoEnabled()) {
-//                log.info("using JDBC connection '{}'", 
-//                        props.get("javax.jdo.option.ConnectionURL"));
-//            }
-        }
+        } 
         
     }
-
-//    private static void putIfNotPresent(
-//            final Map<String, Object> props,
-//            final String key,
-//            final String value) {
-//        
-//        if(!props.containsKey(key)) {
-//            props.put(key, value);
-//        }
-//    }
     
     
 }
\ No newline at end of file
diff --git a/persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/IsisModuleJpaEclipselink.java b/persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/IsisModuleJpaEclipselink.java
index 0c33cd6..c20a55c 100644
--- a/persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/IsisModuleJpaEclipselink.java
+++ b/persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/IsisModuleJpaEclipselink.java
@@ -19,17 +19,15 @@
 package org.apache.isis.persistence.jpa.eclipselink;
 
 import java.sql.SQLException;
-import java.util.HashMap;
 import java.util.Map;
 
 import javax.inject.Inject;
-import javax.inject.Provider;
 import javax.sql.DataSource;
 
-import org.eclipse.persistence.config.PersistenceUnitProperties;
 import org.springframework.beans.factory.ObjectProvider;
 import org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration;
 import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
 import org.springframework.dao.DataAccessException;
@@ -42,10 +40,9 @@ import org.springframework.orm.jpa.vendor.EclipseLinkJpaDialect;
 import org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter;
 import org.springframework.transaction.jta.JtaTransactionManager;
 
-import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.persistence.jpa.eclipselink.inject.BeanManagerForEntityListeners;
+import org.apache.isis.persistence.jpa.eclipselink.config.ElSettings;
 import org.apache.isis.persistence.jpa.integration.IsisModuleJpaIntegration;
 
 import lombok.SneakyThrows;
@@ -66,10 +63,11 @@ import lombok.extern.log4j.Log4j2;
 @Import({
     IsisModuleJpaIntegration.class
 })
+@EnableConfigurationProperties(ElSettings.class)
 @Log4j2
 public class IsisModuleJpaEclipselink extends JpaBaseConfiguration {
 
-    @Inject private Provider<ServiceInjector> serviceInjectorProvider;
+    @Inject private ElSettings elSettings;
 
     protected IsisModuleJpaEclipselink(
             IsisConfiguration isisConfiguration,
@@ -98,12 +96,7 @@ public class IsisModuleJpaEclipselink extends JpaBaseConfiguration {
 
     @Override
     protected Map<String, Object> getVendorProperties() {
-        HashMap<String, Object> jpaProps = new HashMap<>();
-        jpaProps.put(PersistenceUnitProperties.WEAVING, "false");
-//        jpaProps.put(PersistenceUnitProperties.SCHEMA_GENERATION_CREATE_DATABASE_SCHEMAS, "true");
-        jpaProps.put(PersistenceUnitProperties.DDL_GENERATION, PersistenceUnitProperties.CREATE_OR_EXTEND);
-        jpaProps.put(PersistenceUnitProperties.CDI_BEANMANAGER, new BeanManagerForEntityListeners(serviceInjectorProvider));
-        return jpaProps;
+        return elSettings.asMap();
     }
 
     /**
diff --git a/persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/config/ElSettings.java b/persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/config/ElSettings.java
new file mode 100644
index 0000000..ed0fe91
--- /dev/null
+++ b/persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/config/ElSettings.java
@@ -0,0 +1,79 @@
+/*
+ *  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.isis.persistence.jpa.eclipselink.config;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Provider;
+
+import org.eclipse.persistence.config.PersistenceUnitProperties;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+
+import org.apache.isis.applib.services.inject.ServiceInjector;
+import org.apache.isis.commons.internal.base._Lazy;
+import org.apache.isis.persistence.jpa.eclipselink.inject.BeanManagerForEntityListeners;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.val;
+
+/**
+ * @since 2.0
+ */
+@Configuration
+@Named("isis.persistence.jpa.ElSettings")
+@Primary
+@Qualifier("Eclipselink")
+@ConfigurationProperties(prefix = "")
+public class ElSettings {
+    
+    @Inject private Provider<ServiceInjector> serviceInjectorProvider;
+    
+    @Getter @Setter 
+    private Map<String, String> eclipselink; //mapped by "eclipselink"
+    
+    public Map<String, Object> asMap() {
+        return map.get();
+    }
+    
+    // -- HELPER
+    
+    private final _Lazy<Map<String, Object>> map = _Lazy.threadSafe(this::createMap);  
+    
+    protected Map<String, Object> createMap() {
+        val jpaProps = new HashMap<String, Object>();
+
+        // setup defaults
+        jpaProps.put(PersistenceUnitProperties.WEAVING, "false");
+//        jpaProps.put(PersistenceUnitProperties.SCHEMA_GENERATION_CREATE_DATABASE_SCHEMAS, "true");
+        jpaProps.put(PersistenceUnitProperties.DDL_GENERATION, PersistenceUnitProperties.CREATE_OR_EXTEND);
+        jpaProps.put(PersistenceUnitProperties.CDI_BEANMANAGER, new BeanManagerForEntityListeners(serviceInjectorProvider));
+        
+        // potentially overrides defaults from above
+        getEclipselink().forEach((k, v)->jpaProps.put("eclipselink." + k, v)); 
+        return jpaProps;
+    }
+
+}