You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2018/01/23 12:59:04 UTC

[1/3] cayenne git commit: Added logging of unused runtime properties.

Repository: cayenne
Updated Branches:
  refs/heads/master 54bb53ae7 -> 14f175365


Added logging of unused runtime properties.


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

Branch: refs/heads/master
Commit: ab67522cae0a3a82e0f642ef0b4e3c9177c2a9df
Parents: 54bb53a
Author: Maxim Petrusevich <ma...@gmail.com>
Authored: Tue Jan 23 14:36:40 2018 +0300
Committer: Maxim Petrusevich <ma...@gmail.com>
Committed: Tue Jan 23 14:36:40 2018 +0300

----------------------------------------------------------------------
 .../server/DelegatingDataSourceFactory.java     | 64 ++++++++++++++++----
 .../DefaultDataSourceFactoryLoaderTest.java     | 53 +++++++++++++++-
 2 files changed, 102 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/ab67522c/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/DelegatingDataSourceFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/DelegatingDataSourceFactory.java b/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/DelegatingDataSourceFactory.java
index 522918b..5bfbc2b 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/DelegatingDataSourceFactory.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/DelegatingDataSourceFactory.java
@@ -43,7 +43,7 @@ import java.util.concurrent.ConcurrentHashMap;
  * (or <em>cayenne.jdbc.url</em>) and <em>cayenne.jdbc.driver.domain_name.node_name</em>
  * (or <em>cayenne.jdbc.driver</em>), any DataSourceFactory configured in the
  * DataNodeDescriptor is ignored, and the {@link PropertyDataSourceFactory} is used.
- * 
+ *
  * @since 3.1
  */
 public class DelegatingDataSourceFactory implements DataSourceFactory {
@@ -60,7 +60,7 @@ public class DelegatingDataSourceFactory implements DataSourceFactory {
     protected Map<DataSource, ScopeEventListener> managedDataSources;
 
     public DelegatingDataSourceFactory() {
-        managedDataSources = new ConcurrentHashMap<DataSource, ScopeEventListener>();
+        managedDataSources = new ConcurrentHashMap<>();
     }
 
     @Override
@@ -94,7 +94,7 @@ public class DelegatingDataSourceFactory implements DataSourceFactory {
     }
 
     protected DataSourceFactory getDataSourceFactory(DataNodeDescriptor nodeDescriptor) {
-        String typeName = null;
+        String typeName;
 
         if (shouldConfigureDataSourceFromProperties(nodeDescriptor)) {
             typeName = PropertyDataSourceFactory.class.getName();
@@ -116,6 +116,46 @@ public class DelegatingDataSourceFactory implements DataSourceFactory {
         return objectFactory.newInstance(DataSourceFactory.class, typeName);
     }
 
+    private String getDataNodePropertyName(DataNodeDescriptor nodeDescriptor, String propertyConstant) {
+        return propertyConstant
+                + "."
+                + nodeDescriptor.getDataChannelDescriptor().getName()
+                + "."
+                + nodeDescriptor.getName();
+    }
+
+    private void findUnusedProperties(DataNodeDescriptor nodeDescriptor) {
+        boolean found = false;
+        StringBuilder logResult = new StringBuilder();
+        String nodeName = nodeDescriptor.getDataChannelDescriptor().getName()
+                + "."
+                + nodeDescriptor.getName();
+        logResult.append("Found unused runtime properties for '").append(nodeName).append("': ");
+        String[] verifiableProperties = new String[] {
+                Constants.JDBC_USERNAME_PROPERTY, Constants.JDBC_PASSWORD_PROPERTY,
+                Constants.JDBC_MAX_CONNECTIONS_PROPERTY, Constants.JDBC_MIN_CONNECTIONS_PROPERTY,
+                Constants.JDBC_MAX_QUEUE_WAIT_TIME, Constants.JDBC_VALIDATION_QUERY_PROPERTY
+        };
+        for (String propertyConstant : verifiableProperties) {
+            String property = properties.get(getDataNodePropertyName(nodeDescriptor, propertyConstant));
+            if (property != null) {
+                logResult.append(getDataNodePropertyName(nodeDescriptor, propertyConstant)).append(", ");
+                found = true;
+            }
+            property = properties.get(propertyConstant);
+            if (property != null) {
+                logResult.append(propertyConstant).append(", ");
+                found = true;
+            }
+        }
+        if (found) {
+            logResult.delete(logResult.length() - 2, logResult.length());
+            logResult.append(". This runtime properties was ignored. Configuration were taken from project DataSource. ");
+            logResult.append("For using configuration from runtime properties, move driver and url configuration to properties.");
+            logger.info(logResult.toString());
+        }
+    }
+
     protected boolean shouldConfigureDataSourceFromProperties(
             DataNodeDescriptor nodeDescriptor) {
 
@@ -126,28 +166,26 @@ public class DelegatingDataSourceFactory implements DataSourceFactory {
         String driver = properties.get(Constants.JDBC_DRIVER_PROPERTY);
 
         if (driver == null && channelName != null) {
-            driver = properties.get(Constants.JDBC_DRIVER_PROPERTY
-                    + "."
-                    + nodeDescriptor.getDataChannelDescriptor().getName()
-                    + "."
-                    + nodeDescriptor.getName());
+            driver = properties.get(getDataNodePropertyName(nodeDescriptor, Constants.JDBC_DRIVER_PROPERTY));
         }
 
         if (driver == null) {
+            if ((channelName != null) && (logger.isInfoEnabled())) {
+                findUnusedProperties(nodeDescriptor);
+            }
             return false;
         }
 
         String url = properties.get(Constants.JDBC_URL_PROPERTY);
 
         if (url == null && channelName != null) {
-            url = properties.get(Constants.JDBC_URL_PROPERTY
-                    + "."
-                    + nodeDescriptor.getDataChannelDescriptor().getName()
-                    + "."
-                    + nodeDescriptor.getName());
+            url = properties.get(getDataNodePropertyName(nodeDescriptor, Constants.JDBC_URL_PROPERTY));
         }
 
         if (url == null) {
+            if ((channelName != null) && (logger.isInfoEnabled())) {
+                findUnusedProperties(nodeDescriptor);
+            }
             return false;
         }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ab67522c/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DefaultDataSourceFactoryLoaderTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DefaultDataSourceFactoryLoaderTest.java b/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DefaultDataSourceFactoryLoaderTest.java
index b502b82..0b7b817 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DefaultDataSourceFactoryLoaderTest.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DefaultDataSourceFactoryLoaderTest.java
@@ -32,14 +32,17 @@ import org.apache.cayenne.di.Key;
 import org.apache.cayenne.di.Module;
 import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory;
 import org.apache.cayenne.di.spi.DefaultClassLoaderManager;
-import org.apache.cayenne.log.JdbcEventLogger;
 import org.apache.cayenne.log.Slf4jJdbcEventLogger;
+import org.apache.cayenne.log.JdbcEventLogger;
 import org.apache.cayenne.resource.ResourceLocator;
 import org.apache.cayenne.resource.mock.MockResourceLocator;
 import org.junit.Before;
 import org.junit.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -94,6 +97,52 @@ public class DefaultDataSourceFactoryLoaderTest {
     }
 
     @Test
+    public void testGetDataSourceFactory_UnusedProperties() throws Exception {
+        final RuntimeProperties properties = mock(RuntimeProperties.class);
+        when(properties.get(Constants.JDBC_DRIVER_PROPERTY)).thenReturn("x");
+        when(properties.get(Constants.JDBC_URL_PROPERTY)).thenReturn(null);
+        when(properties.get(Constants.JDBC_USERNAME_PROPERTY)).thenReturn("username");
+        when(properties.get(Constants.JDBC_PASSWORD_PROPERTY)).thenReturn("12345");
+
+        DataChannelDescriptor channelDescriptor = new DataChannelDescriptor();
+        channelDescriptor.setName("X");
+        DataNodeDescriptor nodeDescriptor = new DataNodeDescriptor();
+        nodeDescriptor.setName("node1");
+        nodeDescriptor.setDataSourceFactoryType(MockDataSourceFactory1.class.getName());
+        nodeDescriptor.setDataChannelDescriptor(channelDescriptor);
+
+        Module testModule = binder -> {
+            binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class);
+            binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
+            binder.bind(ResourceLocator.class).to(MockResourceLocator.class);
+            binder.bind(Key.get(ResourceLocator.class, Constants.SERVER_RESOURCE_LOCATOR)).to(MockResourceLocator.class);
+            binder.bind(RuntimeProperties.class).toInstance(properties);
+            binder.bind(JdbcEventLogger.class).to(Slf4jJdbcEventLogger.class);
+        };
+
+        Injector injector = DIBootstrap.createInjector(testModule);
+
+        DelegatingDataSourceFactory factoryLoader = new DelegatingDataSourceFactory();
+        injector.injectMembers(factoryLoader);
+        DataSourceFactory factory = factoryLoader.getDataSourceFactory(nodeDescriptor);
+        assertNotNull(factory);
+        assertFalse(factory instanceof PropertyDataSourceFactory);
+
+        nodeDescriptor.setName("node2");
+        when(properties.get(Constants.JDBC_MIN_CONNECTIONS_PROPERTY + ".X.node2")).thenReturn("3");
+        when(properties.get(Constants.JDBC_PASSWORD_PROPERTY + ".X.node2")).thenReturn("123456");
+        factory = factoryLoader.getDataSourceFactory(nodeDescriptor);
+        assertNotNull(factory);
+        assertFalse(factory instanceof PropertyDataSourceFactory);
+
+        nodeDescriptor.setName("node3");
+        when(properties.get(Constants.JDBC_URL_PROPERTY + ".X.node3")).thenReturn("url");
+        factory = factoryLoader.getDataSourceFactory(nodeDescriptor);
+        assertNotNull(factory);
+        assertTrue(factory instanceof PropertyDataSourceFactory);
+    }
+
+    @Test
     public void testGetDataSourceFactory_Property() throws Exception {
 
         final RuntimeProperties properties = mock(RuntimeProperties.class);


[3/3] cayenne git commit: Log ignored runtime JDBC properties rephrase message and cleanup

Posted by nt...@apache.org.
Log ignored runtime JDBC properties
  rephrase message and cleanup


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/14f17536
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/14f17536
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/14f17536

Branch: refs/heads/master
Commit: 14f1753652906fc5e2c8b3e0e23126397826937c
Parents: f46a304
Author: Nikita Timofeev <st...@gmail.com>
Authored: Tue Jan 23 15:58:01 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Tue Jan 23 15:58:01 2018 +0300

----------------------------------------------------------------------
 .../server/DelegatingDataSourceFactory.java      | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/14f17536/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/DelegatingDataSourceFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/DelegatingDataSourceFactory.java b/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/DelegatingDataSourceFactory.java
index 5bfbc2b..5381ca5 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/DelegatingDataSourceFactory.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/DelegatingDataSourceFactory.java
@@ -125,12 +125,15 @@ public class DelegatingDataSourceFactory implements DataSourceFactory {
     }
 
     private void findUnusedProperties(DataNodeDescriptor nodeDescriptor) {
+        if(!logger.isInfoEnabled() || nodeDescriptor.getDataChannelDescriptor() == null) {
+            return;
+        }
         boolean found = false;
         StringBuilder logResult = new StringBuilder();
         String nodeName = nodeDescriptor.getDataChannelDescriptor().getName()
                 + "."
                 + nodeDescriptor.getName();
-        logResult.append("Found unused runtime properties for '").append(nodeName).append("': ");
+        logResult.append("Following runtime properties were ignored for node '").append(nodeName).append("': ");
         String[] verifiableProperties = new String[] {
                 Constants.JDBC_USERNAME_PROPERTY, Constants.JDBC_PASSWORD_PROPERTY,
                 Constants.JDBC_MAX_CONNECTIONS_PROPERTY, Constants.JDBC_MIN_CONNECTIONS_PROPERTY,
@@ -149,9 +152,9 @@ public class DelegatingDataSourceFactory implements DataSourceFactory {
             }
         }
         if (found) {
-            logResult.delete(logResult.length() - 2, logResult.length());
-            logResult.append(". This runtime properties was ignored. Configuration were taken from project DataSource. ");
-            logResult.append("For using configuration from runtime properties, move driver and url configuration to properties.");
+            logResult.delete(logResult.length() - 2, logResult.length())
+                    .append(". Will use project DataSource configuration. ")
+                    .append("Set driver and url properties to enable DataSource configuration override. ");
             logger.info(logResult.toString());
         }
     }
@@ -170,9 +173,7 @@ public class DelegatingDataSourceFactory implements DataSourceFactory {
         }
 
         if (driver == null) {
-            if ((channelName != null) && (logger.isInfoEnabled())) {
-                findUnusedProperties(nodeDescriptor);
-            }
+            findUnusedProperties(nodeDescriptor);
             return false;
         }
 
@@ -183,9 +184,7 @@ public class DelegatingDataSourceFactory implements DataSourceFactory {
         }
 
         if (url == null) {
-            if ((channelName != null) && (logger.isInfoEnabled())) {
-                findUnusedProperties(nodeDescriptor);
-            }
+            findUnusedProperties(nodeDescriptor);
             return false;
         }
 


[2/3] cayenne git commit: Merge remote-tracking branch 'remotes/parent/pr/259' into asf-master

Posted by nt...@apache.org.
Merge remote-tracking branch 'remotes/parent/pr/259' into asf-master


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

Branch: refs/heads/master
Commit: f46a30428041431a7d7ef7fe35f6dd156018eff7
Parents: 54bb53a ab67522
Author: Nikita Timofeev <st...@gmail.com>
Authored: Tue Jan 23 15:10:58 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Tue Jan 23 15:10:58 2018 +0300

----------------------------------------------------------------------
 .../server/DelegatingDataSourceFactory.java     | 64 ++++++++++++++++----
 .../DefaultDataSourceFactoryLoaderTest.java     | 53 +++++++++++++++-
 2 files changed, 102 insertions(+), 15 deletions(-)
----------------------------------------------------------------------