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/24 13:50:40 UTC

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

Repository: cayenne
Updated Branches:
  refs/heads/STABLE-4.0 2f22b1e5b -> f0939cb6e


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/f4ca7af0
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/f4ca7af0
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/f4ca7af0

Branch: refs/heads/STABLE-4.0
Commit: f4ca7af030f0e042b38fc655a5fc309f4ce329d8
Parents: 2f22b1e
Author: Maxim Petrusevich <ma...@gmail.com>
Authored: Wed Jan 24 10:36:50 2018 +0300
Committer: Maxim Petrusevich <ma...@gmail.com>
Committed: Wed Jan 24 10:36:50 2018 +0300

----------------------------------------------------------------------
 .../server/DelegatingDataSourceFactory.java     | 61 ++++++++++++++++----
 .../DefaultDataSourceFactoryLoaderTest.java     | 49 ++++++++++++++++
 2 files changed, 98 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/f4ca7af0/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..7648193 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
@@ -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,49 @@ 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) {
+        if(!logger.isInfoEnabled() || nodeDescriptor.getDataChannelDescriptor() == null) {
+            return;
+        }
+        boolean found = false;
+        StringBuilder logResult = new StringBuilder();
+        String nodeName = nodeDescriptor.getDataChannelDescriptor().getName()
+                + "."
+                + nodeDescriptor.getName();
+        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,
+                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())
+                    .append(". Will use project DataSource configuration. ")
+                    .append("Set driver and url properties to enable DataSource configuration override. ");
+            logger.info(logResult.toString());
+        }
+    }
+
     protected boolean shouldConfigureDataSourceFromProperties(
             DataNodeDescriptor nodeDescriptor) {
 
@@ -126,28 +169,22 @@ 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) {
+            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) {
+            findUnusedProperties(nodeDescriptor);
             return false;
         }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/f4ca7af0/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 b592753..f9cdfab 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
@@ -102,6 +102,55 @@ 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 = new Module() {
+
+            public void configure(Binder 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);


[2/2] cayenne git commit: Merge remote-tracking branch 'remotes/parent/pr/258' into asf-STABLE-4.0

Posted by nt...@apache.org.
Merge remote-tracking branch 'remotes/parent/pr/258' into asf-STABLE-4.0


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

Branch: refs/heads/STABLE-4.0
Commit: f0939cb6ec962d3e9faf135d0a07577ea1bc2ff7
Parents: 2f22b1e f4ca7af
Author: Nikita Timofeev <st...@gmail.com>
Authored: Wed Jan 24 16:49:22 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Wed Jan 24 16:49:22 2018 +0300

----------------------------------------------------------------------
 .../server/DelegatingDataSourceFactory.java     | 61 ++++++++++++++++----
 .../DefaultDataSourceFactoryLoaderTest.java     | 49 ++++++++++++++++
 2 files changed, 98 insertions(+), 12 deletions(-)
----------------------------------------------------------------------