You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ma...@apache.org on 2018/05/24 15:30:56 UTC
[1/2] nifi git commit: NIFI-5073: JMSConnectionFactoryProvider now
resolves EL Expression from VariableRegistry - CLIENT_LIB_PATH is updated to
include 'dynamicallyModifiesClasspath(true)'
Repository: nifi
Updated Branches:
refs/heads/master 716587d09 -> 1597492fe
NIFI-5073: JMSConnectionFactoryProvider now resolves EL Expression from VariableRegistry
- CLIENT_LIB_PATH is updated to include 'dynamicallyModifiesClasspath(true)'
Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/db259628
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/db259628
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/db259628
Branch: refs/heads/master
Commit: db259628c7ea359c0783a3cb800f5d58da9e09ed
Parents: 716587d
Author: zenfenan <si...@gmail.com>
Authored: Tue Apr 24 21:05:05 2018 +0530
Committer: Mark Payne <ma...@hotmail.com>
Committed: Thu May 24 11:29:47 2018 -0400
----------------------------------------------------------------------
.../nifi-jms-bundle/nifi-jms-processors/pom.xml | 15 +++++
.../jms/cf/JMSConnectionFactoryProvider.java | 58 +++++---------------
.../main/java/org/apache/nifi/jms/cf/Utils.java | 39 -------------
.../cf/JMSConnectionFactoryProviderTest.java | 46 ++++++++++++++--
.../src/test/resources/dummy-lib-2.jar | 0
.../src/test/resources/dummy-lib.jar | 0
.../src/test/resources/dummy.conf | 0
7 files changed, 70 insertions(+), 88 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/nifi/blob/db259628/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/pom.xml
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/pom.xml b/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/pom.xml
index 55d1e8a..306a272 100644
--- a/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/pom.xml
+++ b/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/pom.xml
@@ -80,4 +80,19 @@
<scope>test</scope>
</dependency>
</dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <configuration>
+ <excludes combine.children="append">
+ <exclude>src/test/resources/dummy.conf</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
</project>
http://git-wip-us.apache.org/repos/asf/nifi/blob/db259628/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/main/java/org/apache/nifi/jms/cf/JMSConnectionFactoryProvider.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/main/java/org/apache/nifi/jms/cf/JMSConnectionFactoryProvider.java b/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/main/java/org/apache/nifi/jms/cf/JMSConnectionFactoryProvider.java
index e9c24d5..c61305c 100644
--- a/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/main/java/org/apache/nifi/jms/cf/JMSConnectionFactoryProvider.java
+++ b/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/main/java/org/apache/nifi/jms/cf/JMSConnectionFactoryProvider.java
@@ -23,7 +23,6 @@ import java.util.List;
import java.util.Map.Entry;
import javax.net.ssl.SSLContext;
-import java.io.File;
import javax.jms.ConnectionFactory;
@@ -44,6 +43,7 @@ import org.apache.nifi.processor.util.StandardValidators;
import org.apache.nifi.reporting.InitializationException;
import org.apache.nifi.ssl.SSLContextService;
import org.apache.nifi.ssl.SSLContextService.ClientAuth;
+import org.apache.nifi.util.file.classloader.ClassLoaderUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -78,9 +78,9 @@ public class JMSConnectionFactoryProvider extends AbstractControllerService impl
private volatile ConnectionFactory connectionFactory;
- static final String BROKER = "broker";
- static final String CF_IMPL = "cf";
- static final String CF_LIB = "cflib";
+ private static final String BROKER = "broker";
+ private static final String CF_IMPL = "cf";
+ private static final String CF_LIB = "cflib";
public static final PropertyDescriptor CONNECTION_FACTORY_IMPL = new PropertyDescriptor.Builder()
.name(CF_IMPL)
@@ -97,8 +97,9 @@ public class JMSConnectionFactoryProvider extends AbstractControllerService impl
.description("Path to the directory with additional resources (i.e., JARs, configuration files etc.) to be added "
+ "to the classpath. Such resources typically represent target MQ client libraries for the "
+ "ConnectionFactory implementation.")
- .addValidator(new ClientLibValidator())
+ .addValidator(StandardValidators.createListValidator(true, true, StandardValidators.createURLorFileValidator()))
.required(true)
+ .dynamicallyModifiesClasspath(true)
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
.build();
@@ -159,13 +160,15 @@ public class JMSConnectionFactoryProvider extends AbstractControllerService impl
if (logger.isInfoEnabled()) {
logger.info("Configuring " + this.getClass().getSimpleName() + " for '"
+ context.getProperty(CONNECTION_FACTORY_IMPL).evaluateAttributeExpressions().getValue() + "' to be connected to '"
- + BROKER_URI + "'");
+ + context.getProperty(BROKER_URI).evaluateAttributeExpressions().getValue() + "'");
}
+
// will load user provided libraries/resources on the classpath
- Utils.addResourcesToClasspath(context.getProperty(CLIENT_LIB_DIR_PATH).evaluateAttributeExpressions().getValue());
+ final String clientLibPath = context.getProperty(CLIENT_LIB_DIR_PATH).evaluateAttributeExpressions().getValue();
+ ClassLoader customClassLoader = ClassLoaderUtils.getCustomClassLoader(clientLibPath, this.getClass().getClassLoader(), null);
+ Thread.currentThread().setContextClassLoader(customClassLoader);
this.createConnectionFactoryInstance(context);
-
this.setConnectionFactoryProperties(context);
}
this.configured = true;
@@ -312,48 +315,13 @@ public class JMSConnectionFactoryProvider extends AbstractControllerService impl
* evaluation
*/
static class NonEmptyBrokerURIValidator implements Validator {
-
@Override
public ValidationResult validate(String subject, String input, ValidationContext context) {
- String value = input;
if (context.isExpressionLanguageSupported(subject) && context.isExpressionLanguagePresent(input)) {
- value = context.getProperty(BROKER_URI).evaluateAttributeExpressions().getValue();
+ return new ValidationResult.Builder().subject(subject).input(input).explanation("Expression Language Present").valid(true).build();
}
- return StandardValidators.NON_EMPTY_VALIDATOR.validate(subject, value, context);
+ return StandardValidators.NON_EMPTY_VALIDATOR.validate(subject, input, context);
}
}
- /**
- *
- */
- static class ClientLibValidator implements Validator {
-
- @Override
- public ValidationResult validate(String subject, String input, ValidationContext context) {
- String libDirPath = context.getProperty(CLIENT_LIB_DIR_PATH).evaluateAttributeExpressions().getValue();
- StringBuilder invalidationMessageBuilder = new StringBuilder();
- if (libDirPath != null) {
- File file = new File(libDirPath);
- if (!file.isDirectory()) {
- invalidationMessageBuilder
- .append("MQ Client library directory path must point to a directory. Was '")
- .append(file.getAbsolutePath())
- .append("'.");
- }
- } else {
- invalidationMessageBuilder.append("'MQ Client Libraries path' must be provided. \n");
- }
- String invalidationMessage = invalidationMessageBuilder.toString();
- ValidationResult vResult;
- if (invalidationMessage.length() == 0) {
- vResult = new ValidationResult.Builder().subject(subject).input(input)
- .explanation("Client lib path is valid and points to a directory").valid(true).build();
- } else {
- vResult = new ValidationResult.Builder().subject(subject).input(input)
- .explanation("Client lib path is invalid. " + invalidationMessage)
- .valid(false).build();
- }
- return vResult;
- }
- }
}
http://git-wip-us.apache.org/repos/asf/nifi/blob/db259628/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/main/java/org/apache/nifi/jms/cf/Utils.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/main/java/org/apache/nifi/jms/cf/Utils.java b/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/main/java/org/apache/nifi/jms/cf/Utils.java
index 912f2c0..a70d8e3 100644
--- a/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/main/java/org/apache/nifi/jms/cf/Utils.java
+++ b/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/main/java/org/apache/nifi/jms/cf/Utils.java
@@ -16,10 +16,7 @@
*/
package org.apache.nifi.jms.cf;
-import java.io.File;
import java.lang.reflect.Method;
-import java.net.URL;
-import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@@ -101,40 +98,4 @@ public final class Utils {
}
}
- /**
- * Adds content of the directory specified with 'path' to the classpath. It
- * does so by creating a new instance of the {@link URLClassLoader} using
- * {@link URL}s created from listing the contents of the directory denoted
- * by 'path' and setting it as thread context class loader.
- */
- static void addResourcesToClasspath(String path) {
- if (logger.isDebugEnabled()) {
- logger.debug("Adding additional resources from '" + path + "' to the classpath.");
- }
- if (path == null) {
- throw new IllegalArgumentException("'path' must not be null");
- }
- File libraryDir = new File(path);
- if (libraryDir.exists() && libraryDir.isDirectory()) {
- String[] cpResourceNames = libraryDir.list();
- URL[] urls = new URL[cpResourceNames.length];
- try {
- for (int i = 0; i < urls.length; i++) {
- urls[i] = new File(libraryDir, cpResourceNames[i]).toURI().toURL();
- if (logger.isDebugEnabled()) {
- logger.debug("Identifying additional resource to the classpath: " + urls[i]);
- }
- }
- } catch (Exception e) {
- throw new IllegalStateException(
- "Failed to parse user libraries from '" + libraryDir.getAbsolutePath() + "'", e);
- }
-
- URLClassLoader cl = new URLClassLoader(urls, Utils.class.getClassLoader());
- Thread.currentThread().setContextClassLoader(cl);
- } else {
- throw new IllegalArgumentException("Path '" + libraryDir.getAbsolutePath()
- + "' is not valid because it doesn't exist or does not point to a directory.");
- }
- }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/nifi/blob/db259628/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/test/java/org/apache/nifi/jms/cf/JMSConnectionFactoryProviderTest.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/test/java/org/apache/nifi/jms/cf/JMSConnectionFactoryProviderTest.java b/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/test/java/org/apache/nifi/jms/cf/JMSConnectionFactoryProviderTest.java
index 9ddfb3f..25f4398 100644
--- a/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/test/java/org/apache/nifi/jms/cf/JMSConnectionFactoryProviderTest.java
+++ b/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/test/java/org/apache/nifi/jms/cf/JMSConnectionFactoryProviderTest.java
@@ -17,12 +17,16 @@
package org.apache.nifi.jms.cf;
import org.apache.nifi.processor.Processor;
+import org.apache.nifi.reporting.InitializationException;
import org.apache.nifi.util.TestRunner;
import org.apache.nifi.util.TestRunners;
+import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.net.URISyntaxException;
+
import static org.mockito.Mockito.mock;
/**
@@ -46,16 +50,50 @@ public class JMSConnectionFactoryProviderTest {
}
@Test
- public void validateNotValidForNonDirectoryPath() throws Exception {
+ public void validateELExpression() throws InitializationException, URISyntaxException {
TestRunner runner = TestRunners.newTestRunner(mock(Processor.class));
+ runner.setValidateExpressionUsage(true);
JMSConnectionFactoryProvider cfProvider = new JMSConnectionFactoryProvider();
+ String clientLib = this.getClass().getResource("/dummy-lib.jar").toURI().toString();
runner.addControllerService("cfProvider", cfProvider);
- runner.setProperty(cfProvider, JMSConnectionFactoryProvider.BROKER_URI, "myhost:1234");
- runner.setProperty(cfProvider, JMSConnectionFactoryProvider.CLIENT_LIB_DIR_PATH, "pom.xml");
+ runner.setVariable("broker.uri", "tcp://0.0.0.0:616161");
+ runner.setVariable("client.lib", clientLib);
+
+ runner.setProperty(cfProvider, JMSConnectionFactoryProvider.BROKER_URI, "${broker.uri}");
+ runner.setProperty(cfProvider, JMSConnectionFactoryProvider.CLIENT_LIB_DIR_PATH, "${client.lib}");
runner.setProperty(cfProvider, JMSConnectionFactoryProvider.CONNECTION_FACTORY_IMPL,
"org.apache.nifi.jms.testcflib.TestConnectionFactory");
- runner.assertNotValid(cfProvider);
+ runner.assertValid(cfProvider);
+ }
+
+ @Test
+ public void testClientLibResourcesLoaded() throws InitializationException, URISyntaxException {
+ TestRunner runner = TestRunners.newTestRunner(mock(Processor.class));
+ runner.setValidateExpressionUsage(true);
+
+ JMSConnectionFactoryProvider cfProvider = new JMSConnectionFactoryProvider();
+
+ String clientLib = this.getClass().getResource("/dummy-lib.jar").toURI().toString() + "," +
+ this.getClass().getResource("/dummy-lib-2.jar").toURI().toString() + "," +
+ this.getClass().getResource("/dummy.conf").toURI().toString() + ",";
+
+ runner.addControllerService("cfProvider", cfProvider);
+
+ runner.setVariable("broker.uri", "tcp://0.0.0.0:616161");
+ runner.setVariable("client.lib", clientLib);
+
+ runner.setProperty(cfProvider, JMSConnectionFactoryProvider.BROKER_URI, "${broker.uri}");
+ runner.setProperty(cfProvider, JMSConnectionFactoryProvider.CLIENT_LIB_DIR_PATH, "${client.lib}");
+ runner.setProperty(cfProvider, JMSConnectionFactoryProvider.CONNECTION_FACTORY_IMPL,
+ "org.apache.nifi.jms.testcflib.TestConnectionFactory");
+
+ runner.assertValid(cfProvider);
+
+ ClassLoader loader = runner.getClass().getClassLoader();
+ Assert.assertTrue(loader.getResource("dummy.conf") != null);
+ Assert.assertTrue(loader.getResource("dummy-lib.jar") != null);
+ Assert.assertTrue(loader.getResource("dummy-lib-2.jar") != null);
}
@Test(expected = IllegalStateException.class)
http://git-wip-us.apache.org/repos/asf/nifi/blob/db259628/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/test/resources/dummy-lib-2.jar
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/test/resources/dummy-lib-2.jar b/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/test/resources/dummy-lib-2.jar
new file mode 100644
index 0000000..e69de29
http://git-wip-us.apache.org/repos/asf/nifi/blob/db259628/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/test/resources/dummy-lib.jar
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/test/resources/dummy-lib.jar b/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/test/resources/dummy-lib.jar
new file mode 100644
index 0000000..e69de29
http://git-wip-us.apache.org/repos/asf/nifi/blob/db259628/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/test/resources/dummy.conf
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/test/resources/dummy.conf b/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/test/resources/dummy.conf
new file mode 100644
index 0000000..e69de29
[2/2] nifi git commit: NIFI-5073: Removed unneeded code for changing
ClassLoader since it is now managed by framework
Posted by ma...@apache.org.
NIFI-5073: Removed unneeded code for changing ClassLoader since it is now managed by framework
This closes #2653.
Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/1597492f
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/1597492f
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/1597492f
Branch: refs/heads/master
Commit: 1597492fed749c13a97f44d0d8ed633787702d3c
Parents: db25962
Author: Mark Payne <ma...@hotmail.com>
Authored: Thu May 24 11:29:28 2018 -0400
Committer: Mark Payne <ma...@hotmail.com>
Committed: Thu May 24 11:30:39 2018 -0400
----------------------------------------------------------------------
.../nifi/jms/cf/JMSConnectionFactoryProvider.java | 15 ++++-----------
1 file changed, 4 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/nifi/blob/1597492f/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/main/java/org/apache/nifi/jms/cf/JMSConnectionFactoryProvider.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/main/java/org/apache/nifi/jms/cf/JMSConnectionFactoryProvider.java b/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/main/java/org/apache/nifi/jms/cf/JMSConnectionFactoryProvider.java
index c61305c..ecb4e7a 100644
--- a/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/main/java/org/apache/nifi/jms/cf/JMSConnectionFactoryProvider.java
+++ b/nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/main/java/org/apache/nifi/jms/cf/JMSConnectionFactoryProvider.java
@@ -22,13 +22,9 @@ import java.util.Collections;
import java.util.List;
import java.util.Map.Entry;
-import javax.net.ssl.SSLContext;
-
import javax.jms.ConnectionFactory;
+import javax.net.ssl.SSLContext;
-import org.apache.nifi.components.ValidationContext;
-import org.apache.nifi.components.ValidationResult;
-import org.apache.nifi.components.Validator;
import org.apache.nifi.annotation.behavior.DynamicProperty;
import org.apache.nifi.annotation.documentation.CapabilityDescription;
import org.apache.nifi.annotation.documentation.SeeAlso;
@@ -36,6 +32,9 @@ import org.apache.nifi.annotation.documentation.Tags;
import org.apache.nifi.annotation.lifecycle.OnDisabled;
import org.apache.nifi.annotation.lifecycle.OnEnabled;
import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.components.ValidationContext;
+import org.apache.nifi.components.ValidationResult;
+import org.apache.nifi.components.Validator;
import org.apache.nifi.controller.AbstractControllerService;
import org.apache.nifi.controller.ConfigurationContext;
import org.apache.nifi.expression.ExpressionLanguageScope;
@@ -43,7 +42,6 @@ import org.apache.nifi.processor.util.StandardValidators;
import org.apache.nifi.reporting.InitializationException;
import org.apache.nifi.ssl.SSLContextService;
import org.apache.nifi.ssl.SSLContextService.ClientAuth;
-import org.apache.nifi.util.file.classloader.ClassLoaderUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -163,11 +161,6 @@ public class JMSConnectionFactoryProvider extends AbstractControllerService impl
+ context.getProperty(BROKER_URI).evaluateAttributeExpressions().getValue() + "'");
}
- // will load user provided libraries/resources on the classpath
- final String clientLibPath = context.getProperty(CLIENT_LIB_DIR_PATH).evaluateAttributeExpressions().getValue();
- ClassLoader customClassLoader = ClassLoaderUtils.getCustomClassLoader(clientLibPath, this.getClass().getClassLoader(), null);
- Thread.currentThread().setContextClassLoader(customClassLoader);
-
this.createConnectionFactoryInstance(context);
this.setConnectionFactoryProperties(context);
}