[
https://issues.apache.org/jira/browse/NIFI-5073?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16469247#comment-16469247
]
ASF GitHub Bot commented on NIFI-5073:
--------------------------------------
Github user markap14 commented on a diff in the pull request:
https://github.com/apache/nifi/pull/2653#discussion_r187131152
--- Diff:
nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/main/java/org/apache/nifi/jms/cf/JMSConnectionFactoryProvider.java
---
@@ -159,13 +159,15 @@ public void enable(ConfigurationContext context)
throws InitializationException
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);
--- End diff --
The problem with this approach I think is that we're now creating the
ClassLoader and using it to create the connection factory. However, when we do
that, we would need to ensure that any access to the connection factory
instance also is performed using the ClassLoader. Since all calls into this
Controller Service could come from different threads, I think this is going to
cause a problem.
I think the typical pattern here is to update the property descriptor of
CLIENT_LIB_DIR_PATH to include .dynamicallyModifiesClassPath(true). In this
case, the framework will automatically handle creating the appropriate
ClassLoader for each instance of the controller service and will also ensure
that the appropriate ClassLoader is set when any method on this Controller
Service is invoked.
> JMSConnectionFactory doesn't resolve 'variables' properly
> ---------------------------------------------------------
>
> Key: NIFI-5073
> URL: https://issues.apache.org/jira/browse/NIFI-5073
> Project: Apache NiFi
> Issue Type: Bug
> Components: Core Framework
> Affects Versions: 1.5.0, 1.6.0
> Reporter: Matthew Clarke
> Assignee: Sivaprasanna Sethuraman
> Priority: Major
> Attachments:
> 0001-NIFI-5073-JMSConnectionFactoryProvider-now-resolves-.patch
>
>
> Create a new process Group.
> Add "Variables" to the process group:
> for example:
> broker_uri=tcp://localhost:4141
> client_libs=/NiFi/custom-lib-dir/MQlib
> con_factory=blah
> Then while that process group is selected, create a controller service.
> Create JMSConnectionFactory.
> Configure this controller service to use EL for PG defined variables above:
> ${con_factory}, ${con_factory}, and ${broker_uri}
> The controller service will remain invalid because the EL statements are not
> properly resolved to their set values.
> Doing the exact same thing above using the external NiFi registry file works
> as expected.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)