[
https://issues.apache.org/jira/browse/NIFI-2909?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15630059#comment-15630059
]
ASF GitHub Bot commented on NIFI-2909:
--------------------------------------
Github user bbende commented on the issue:
https://github.com/apache/nifi/pull/1156
@olegz thanks for reviewing, I posted a couple of replies to the inline
comments.
I also wanted to mention that after submitting this PR, I realized that a
slight modification to the approach might open this feature up to a wider
variety of use cases...
In the current PR, when the component is annotated with
@RequiresInstanceClassLoading it creates an InstanceClassLoader which copies
all of the URL resources from the NAR ClassLoader. This was necessary to solve
the HBase + Phoenix problem, but it many other cases it may be acceptable to
just make a new InstanceClassLoader with a parent of the NAR ClassLoader.
So I started working on a change where every single processor, cs,
reporting task will get an InstanceClassLoader and by default it will be empty
and have a parent of the NAR ClassLoader. Only components with the
@RequiresInstanceClassLoading will force a full copy of the resources.
This should lets the HBaseControllerService use
@RequiresInstanceClassLoading, and other components can still have properties
that modify the classpath without making full copies.
> Provide a framework mechanism for loading additional classpath resources
> ------------------------------------------------------------------------
>
> Key: NIFI-2909
> URL: https://issues.apache.org/jira/browse/NIFI-2909
> Project: Apache NiFi
> Issue Type: Improvement
> Reporter: Bryan Bende
> Assignee: Bryan Bende
> Fix For: 1.1.0
>
>
> We currently have several components with a property for specifying
> additional classpath resources (DBCP connection pool, scripting processors,
> JMS). Each of these components is responsible for handling this in its own
> way.
> The framework should provide a more integrated solution to make it easier for
> component developers to deal with this scenario. Some requirements that need
> to be met by this solution:
> - Multiple instances of the same component with different resources added to
> the classpath and not interfering with each other (i.e. two DBCP connection
> pools using different drivers)
> - Ability to modify the actual ClassLoader of the component to deal with
> frameworks that use Class.forName() without passing in a ClassLoader, meaning
> if a processor loads class A and class A calls Class.forName(classBName),
> then class B needs to be available in the ClassLoader that loaded the
> processor's class which in turn loaded class A
> - A component developer should be able to indicate that a given
> PropertyDescriptor represents a classpath resource and the framework should
> take care of the ClassLoader manipulation
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)