You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2015/04/29 16:28:30 UTC

tomee git commit: TOMEE-1567 supporting persistence unit overriding from app.properties

Repository: tomee
Updated Branches:
  refs/heads/master 50339ce99 -> 064aec704


TOMEE-1567 supporting persistence unit overriding from app.properties


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/064aec70
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/064aec70
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/064aec70

Branch: refs/heads/master
Commit: 064aec70409993f2f300acb1aa58ae6fad7f3b85
Parents: 50339ce
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Wed Apr 29 16:28:13 2015 +0200
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Wed Apr 29 16:28:13 2015 +0200

----------------------------------------------------------------------
 .../apache/openejb/config/AppInfoBuilder.java   | 45 ++++++++------
 .../config/AppPersistenceUnitOverrideTest.java  | 62 ++++++++++++++++++++
 2 files changed, 90 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/064aec70/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java b/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
index a8f3d6e..dcbb451 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
@@ -84,7 +84,6 @@ import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.Messages;
 import org.apache.openejb.util.References;
 
-import javax.xml.bind.JAXBException;
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
@@ -97,6 +96,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
+import javax.xml.bind.JAXBException;
 
 import static org.apache.openejb.util.URLs.toFile;
 
@@ -680,7 +680,7 @@ class AppInfoBuilder {
                 // Handle Properties
                 info.properties.putAll(persistenceUnit.getProperties());
 
-                PersistenceProviderProperties.apply(appModule.getClassLoader(), info);
+                PersistenceProviderProperties.apply(appModule, info);
 
 
                 // Persistence Unit Root Url
@@ -747,10 +747,11 @@ class AppInfoBuilder {
         }
 
         /**
-         * @param classLoader the temp classloader, take care to only use getResource here
+         * @param appModule the app module with its config and its temp classloader, take care to only use getResource here
          * @param info        the persistence unit info
          */
-        private static void apply(final ClassLoader classLoader, final PersistenceUnitInfo info) {
+        private static void apply(final AppModule appModule, final PersistenceUnitInfo info) {
+            final ClassLoader classLoader = appModule.getClassLoader();
             overrideFromSystemProp(info);
 
             // The result is that OpenEJB-specific configuration can be avoided when
@@ -766,7 +767,7 @@ class AppInfoBuilder {
             if ("org.hibernate.ejb.HibernatePersistence".equals(info.provider) || "org.hibernate.jpa.HibernatePersistenceProvider".equals(info.provider)) {
 
                 // Apply the overrides that apply to all persistence units of this provider
-                override(info, "hibernate");
+                override(appModule.getProperties(), info, "hibernate");
 
                 String className = info.properties.getProperty(HIBERNATE_JTA_PLATFORM);
                 if (className == null) {
@@ -812,7 +813,7 @@ class AppInfoBuilder {
                 "oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider".equals(info.provider)) {
 
                 // Apply the overrides that apply to all persistence units of this provider
-                override(info, "toplink");
+                override(appModule.getProperties(), info, "toplink");
 
                 final String lookupProperty = "toplink.target-server";
                 final String openejbLookupClass = MakeTxLookup.TOPLINK_FACTORY;
@@ -831,7 +832,7 @@ class AppInfoBuilder {
             } else if ("org.eclipse.persistence.jpa.PersistenceProvider".equals(info.provider) || "org.eclipse.persistence.jpa.osgi.PersistenceProvider".equals(info.provider)) {
 
                 // Apply the overrides that apply to all persistence units of this provider
-                override(info, "eclipselink");
+                override(appModule.getProperties(), info, "eclipselink");
 
                 final String className = info.properties.getProperty(ECLIPSELINK_TARGET_SERVER);
 
@@ -858,7 +859,7 @@ class AppInfoBuilder {
             } else if (info.provider == null || "org.apache.openjpa.persistence.PersistenceProviderImpl".equals(info.provider)) {
 
                 // Apply the overrides that apply to all persistence units of this provider
-                override(info, "openjpa");
+                override(appModule.getProperties(), info, "openjpa");
 
                 final String existing = info.properties.getProperty(OPENJPA_RUNTIME_UNENHANCED_CLASSES);
 
@@ -904,7 +905,7 @@ class AppInfoBuilder {
             }
 
             // Apply the overrides that apply to just this persistence unit
-            override(info);
+            override(appModule.getProperties(), info);
         }
 
         private static void overrideFromSystemProp(final PersistenceUnitInfo info) {
@@ -925,20 +926,30 @@ class AppInfoBuilder {
             }
         }
 
-        private static void override(final PersistenceUnitInfo info) {
-            override(info, info.name);
+        private static void override(final Properties appProperties, final PersistenceUnitInfo info) {
+            override(appProperties, info, info.name);
         }
 
-        private static void override(final PersistenceUnitInfo info, final String prefix) {
-
-            final Properties overrides = ConfigurationFactory.getSystemProperties(prefix, "PersistenceUnit");
+        private static void override(final Properties appProperties, final PersistenceUnitInfo info, final String prefix) {
+            final Properties propertiesToCheckForOverridings = new Properties();
+            propertiesToCheckForOverridings.putAll(appProperties);
+            propertiesToCheckForOverridings.putAll(System.getProperties());
+            propertiesToCheckForOverridings.putAll(SystemInstance.get().getProperties());
+            final Properties overrides = ConfigurationFactory.getOverrides(propertiesToCheckForOverridings, prefix, "PersistenceUnit");
 
             for (final Map.Entry<Object, Object> entry : overrides.entrySet()) {
                 final String property = (String) (prefix.equalsIgnoreCase(info.name) ? entry.getKey() : prefix + "." + entry.getKey());
-                final String value = (String) entry.getValue();
+                String value = (String) entry.getValue();
 
-                if ("openjpa.Log".equals(property) && info.properties.containsKey("openjpa.Log")) { // we set a default
-                    continue;
+                if ("openjpa.Log".equals(property) && "org.apache.openejb.openjpa.JULOpenJPALogFactory".equals(value)) { // we set a default
+                    if (info.properties.containsKey("openjpa.Log")) {
+                        continue;
+                    }
+                    if (appProperties.containsKey("openjpa.Log")) {
+                        value = appProperties.getProperty(property, value);
+                    } else {
+                        continue;
+                    }
                 }
 
                 if (info.properties.containsKey(property)) {

http://git-wip-us.apache.org/repos/asf/tomee/blob/064aec70/container/openejb-core/src/test/java/org/apache/openejb/config/AppPersistenceUnitOverrideTest.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/config/AppPersistenceUnitOverrideTest.java b/container/openejb-core/src/test/java/org/apache/openejb/config/AppPersistenceUnitOverrideTest.java
new file mode 100644
index 0000000..1bd1651
--- /dev/null
+++ b/container/openejb-core/src/test/java/org/apache/openejb/config/AppPersistenceUnitOverrideTest.java
@@ -0,0 +1,62 @@
+/**
+ * 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.openejb.config;
+
+import org.apache.openejb.api.configuration.PersistenceUnitDefinition;
+import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.testing.ApplicationConfiguration;
+import org.apache.openejb.testing.Classes;
+import org.apache.openejb.testing.SimpleLog;
+import org.apache.openejb.testng.PropertiesBuilder;
+import org.apache.openjpa.lib.log.Log;
+import org.apache.openjpa.lib.log.LogFactory;
+import org.apache.openjpa.lib.log.NoneLogFactory;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.Properties;
+
+import static org.junit.Assert.assertFalse;
+
+@RunWith(ApplicationComposer.class)
+@PersistenceUnitDefinition
+@Classes
+@SimpleLog
+public class AppPersistenceUnitOverrideTest {
+    @ApplicationConfiguration
+    public Properties properties() {
+        MyLogFactory.CHANNELS.clear();
+        return new PropertiesBuilder().p("openjpa.Log", MyLogFactory.class.getName()).build();
+    }
+
+    @Test
+    public void run() {
+        assertFalse(MyLogFactory.CHANNELS.isEmpty());
+    }
+
+    public static class MyLogFactory implements LogFactory {
+        public static final Collection<String> CHANNELS = new LinkedList<>();
+
+        @Override
+        public Log getLog(final String channel) {
+            CHANNELS.add(channel);
+            return new NoneLogFactory.NoneLog();
+        }
+    }
+}