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(-)
----------------------------------------------------------------------