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

Reply via email to