Search in sources :

Example 21 with NarCloseable

use of org.apache.nifi.nar.NarCloseable in project nifi by apache.

the class TestStandardProcessorNode method testUpdateOtherPropertyDoesNotImpactClasspath.

@Test
public void testUpdateOtherPropertyDoesNotImpactClasspath() throws MalformedURLException {
    final MockReloadComponent reloadComponent = new MockReloadComponent();
    final PropertyDescriptor classpathProp = new PropertyDescriptor.Builder().name("Classpath Resources").dynamicallyModifiesClasspath(true).addValidator(StandardValidators.NON_EMPTY_VALIDATOR).build();
    final PropertyDescriptor otherProp = new PropertyDescriptor.Builder().name("My Property").addValidator(StandardValidators.NON_EMPTY_VALIDATOR).build();
    final ModifiesClasspathProcessor processor = new ModifiesClasspathProcessor(Arrays.asList(classpathProp, otherProp));
    final StandardProcessorNode procNode = createProcessorNode(processor, reloadComponent);
    try (final NarCloseable narCloseable = NarCloseable.withComponentNarLoader(procNode.getProcessor().getClass(), procNode.getIdentifier())) {
        // Should not have any of the test resources loaded at this point
        final URL[] testResources = getTestResources();
        for (URL testResource : testResources) {
            if (containsResource(reloadComponent.getAdditionalUrls(), testResource)) {
                fail("found resource that should not have been loaded");
            }
        }
        // Simulate setting the properties of the processor to point to the test resources directory
        final Map<String, String> properties = new HashMap<>();
        properties.put(classpathProp.getName(), "src/test/resources/TestClasspathResources");
        procNode.setProperties(properties);
        // Should have all of the resources loaded into the InstanceClassLoader now
        for (URL testResource : testResources) {
            assertTrue(containsResource(reloadComponent.getAdditionalUrls(), testResource));
        }
        // Should pass validation
        assertTrue(procNode.isValid());
        // Simulate setting updating the other property which should not change the classpath
        final Map<String, String> otherProperties = new HashMap<>();
        otherProperties.put(otherProp.getName(), "foo");
        procNode.setProperties(otherProperties);
        // Should STILL have all of the resources loaded into the InstanceClassLoader now
        for (URL testResource : testResources) {
            assertTrue(containsResource(reloadComponent.getAdditionalUrls(), testResource));
        }
        // Should STILL pass validation
        assertTrue(procNode.isValid());
        // Lets update the classpath property and make sure the resources get updated
        final Map<String, String> newClasspathProperties = new HashMap<>();
        newClasspathProperties.put(classpathProp.getName(), "src/test/resources/TestClasspathResources/resource1.txt");
        procNode.setProperties(newClasspathProperties);
        // Should only have resource1 loaded now
        assertTrue(containsResource(reloadComponent.getAdditionalUrls(), testResources[0]));
        assertFalse(containsResource(reloadComponent.getAdditionalUrls(), testResources[1]));
        assertFalse(containsResource(reloadComponent.getAdditionalUrls(), testResources[2]));
        assertEquals(ModifiesClasspathProcessor.class.getCanonicalName(), reloadComponent.getNewType());
        // Should STILL pass validation
        assertTrue(procNode.isValid());
    } finally {
        ExtensionManager.removeInstanceClassLoader(procNode.getIdentifier());
    }
}
Also used : NarCloseable(org.apache.nifi.nar.NarCloseable) PropertyDescriptor(org.apache.nifi.components.PropertyDescriptor) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) ModifiesClasspathProcessor(org.apache.nifi.test.processors.ModifiesClasspathProcessor) URL(java.net.URL) Test(org.junit.Test)

Example 22 with NarCloseable

use of org.apache.nifi.nar.NarCloseable in project nifi by apache.

the class TestStandardProcessorNode method testSomeNonExistentPropertiesDynamicallyModifyClasspath.

@Test
public void testSomeNonExistentPropertiesDynamicallyModifyClasspath() throws MalformedURLException {
    final MockReloadComponent reloadComponent = new MockReloadComponent();
    final PropertyDescriptor classpathProp1 = new PropertyDescriptor.Builder().name("Classpath Resource 1").dynamicallyModifiesClasspath(true).addValidator(StandardValidators.NON_EMPTY_VALIDATOR).build();
    final PropertyDescriptor classpathProp2 = new PropertyDescriptor.Builder().name("Classpath Resource 2").dynamicallyModifiesClasspath(true).addValidator(StandardValidators.NON_EMPTY_VALIDATOR).build();
    final ModifiesClasspathProcessor processor = new ModifiesClasspathProcessor(Arrays.asList(classpathProp1, classpathProp2));
    final StandardProcessorNode procNode = createProcessorNode(processor, reloadComponent);
    try (final NarCloseable narCloseable = NarCloseable.withComponentNarLoader(procNode.getProcessor().getClass(), procNode.getIdentifier())) {
        // Should not have any of the test resources loaded at this point
        final URL[] testResources = getTestResources();
        for (URL testResource : testResources) {
            if (containsResource(reloadComponent.getAdditionalUrls(), testResource)) {
                fail("found resource that should not have been loaded");
            }
        }
        // Simulate setting the properties pointing to two of the resources
        final Map<String, String> properties = new HashMap<>();
        properties.put(classpathProp1.getName(), "src/test/resources/TestClasspathResources/resource1.txt");
        properties.put(classpathProp2.getName(), "src/test/resources/TestClasspathResources/DoesNotExist.txt");
        procNode.setProperties(properties);
        // Should have resources 1 and 3 loaded into the InstanceClassLoader now
        assertTrue(containsResource(reloadComponent.getAdditionalUrls(), testResources[0]));
        assertFalse(containsResource(reloadComponent.getAdditionalUrls(), testResources[1]));
        assertFalse(containsResource(reloadComponent.getAdditionalUrls(), testResources[2]));
        assertEquals(ModifiesClasspathProcessor.class.getCanonicalName(), reloadComponent.getNewType());
        // Should pass validation
        assertTrue(procNode.isValid());
    } finally {
        ExtensionManager.removeInstanceClassLoader(procNode.getIdentifier());
    }
}
Also used : NarCloseable(org.apache.nifi.nar.NarCloseable) PropertyDescriptor(org.apache.nifi.components.PropertyDescriptor) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) ModifiesClasspathProcessor(org.apache.nifi.test.processors.ModifiesClasspathProcessor) URL(java.net.URL) Test(org.junit.Test)

Example 23 with NarCloseable

use of org.apache.nifi.nar.NarCloseable in project nifi by apache.

the class TestStandardProcessorNode method testPropertyModifiesClasspathWhenProcessorMissingAnnotation.

@Test
public void testPropertyModifiesClasspathWhenProcessorMissingAnnotation() throws MalformedURLException {
    final MockReloadComponent reloadComponent = new MockReloadComponent();
    final ModifiesClasspathNoAnnotationProcessor processor = new ModifiesClasspathNoAnnotationProcessor();
    final StandardProcessorNode procNode = createProcessorNode(processor, reloadComponent);
    try (final NarCloseable narCloseable = NarCloseable.withComponentNarLoader(procNode.getProcessor().getClass(), procNode.getIdentifier())) {
        final Map<String, String> properties = new HashMap<>();
        properties.put(ModifiesClasspathNoAnnotationProcessor.CLASSPATH_RESOURCE.getName(), "src/test/resources/TestClasspathResources/resource1.txt");
        procNode.setProperties(properties);
        final URL[] testResources = getTestResources();
        assertTrue(containsResource(reloadComponent.getAdditionalUrls(), testResources[0]));
        assertFalse(containsResource(reloadComponent.getAdditionalUrls(), testResources[1]));
        assertFalse(containsResource(reloadComponent.getAdditionalUrls(), testResources[2]));
        assertEquals(ModifiesClasspathNoAnnotationProcessor.class.getCanonicalName(), reloadComponent.getNewType());
        // Should pass validation
        assertTrue(procNode.isValid());
    } finally {
        ExtensionManager.removeInstanceClassLoader(procNode.getIdentifier());
    }
}
Also used : NarCloseable(org.apache.nifi.nar.NarCloseable) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) ModifiesClasspathNoAnnotationProcessor(org.apache.nifi.test.processors.ModifiesClasspathNoAnnotationProcessor) URL(java.net.URL) Test(org.junit.Test)

Example 24 with NarCloseable

use of org.apache.nifi.nar.NarCloseable in project nifi by apache.

the class StandardProcessGroup method removeControllerService.

@Override
public void removeControllerService(final ControllerServiceNode service) {
    boolean removed = false;
    writeLock.lock();
    try {
        final ControllerServiceNode existing = controllerServices.get(requireNonNull(service).getIdentifier());
        if (existing == null) {
            throw new IllegalStateException("ControllerService " + service.getIdentifier() + " is not a member of this Process Group");
        }
        service.verifyCanDelete();
        try (final NarCloseable x = NarCloseable.withComponentNarLoader(service.getControllerServiceImplementation().getClass(), service.getIdentifier())) {
            final ConfigurationContext configurationContext = new StandardConfigurationContext(service, controllerServiceProvider, null, variableRegistry);
            ReflectionUtils.quietlyInvokeMethodsWithAnnotation(OnRemoved.class, service.getControllerServiceImplementation(), configurationContext);
        }
        for (final Map.Entry<PropertyDescriptor, String> entry : service.getProperties().entrySet()) {
            final PropertyDescriptor descriptor = entry.getKey();
            if (descriptor.getControllerServiceDefinition() != null) {
                final String value = entry.getValue() == null ? descriptor.getDefaultValue() : entry.getValue();
                if (value != null) {
                    final ControllerServiceNode referencedNode = getControllerService(value);
                    if (referencedNode != null) {
                        referencedNode.removeReference(service);
                    }
                }
            }
        }
        controllerServices.remove(service.getIdentifier());
        onComponentModified();
        // For any component that references this Controller Service, find the component's Process Group
        // and notify the Process Group that a component has been modified. This way, we know to re-calculate
        // whether or not the Process Group has local modifications.
        service.getReferences().getReferencingComponents().stream().map(ConfiguredComponent::getProcessGroupIdentifier).filter(id -> !id.equals(getIdentifier())).forEach(groupId -> {
            final ProcessGroup descendant = findProcessGroup(groupId);
            if (descendant != null) {
                descendant.onComponentModified();
            }
        });
        flowController.getStateManagerProvider().onComponentRemoved(service.getIdentifier());
        removed = true;
        LOG.info("{} removed from {}", service, this);
    } finally {
        if (removed) {
            try {
                ExtensionManager.removeInstanceClassLoader(service.getIdentifier());
            } catch (Throwable t) {
            }
        }
        writeLock.unlock();
    }
}
Also used : OnRemoved(org.apache.nifi.annotation.lifecycle.OnRemoved) ConfigurationContext(org.apache.nifi.controller.ConfigurationContext) Size(org.apache.nifi.connectable.Size) FlowComparison(org.apache.nifi.registry.flow.diff.FlowComparison) StringUtils(org.apache.commons.lang3.StringUtils) ReflectionUtils(org.apache.nifi.util.ReflectionUtils) PropertyDescriptor(org.apache.nifi.components.PropertyDescriptor) SecureRandom(java.security.SecureRandom) NiFiRegistryException(org.apache.nifi.registry.client.NiFiRegistryException) ComponentType(org.apache.nifi.registry.flow.ComponentType) VersionedProcessGroup(org.apache.nifi.registry.flow.VersionedProcessGroup) SnippetUtils(org.apache.nifi.util.SnippetUtils) Map(java.util.Map) HashCodeBuilder(org.apache.commons.lang3.builder.HashCodeBuilder) RootGroupPort(org.apache.nifi.remote.RootGroupPort) Connectable(org.apache.nifi.connectable.Connectable) Connection(org.apache.nifi.connectable.Connection) Bundle(org.apache.nifi.registry.flow.Bundle) FlowFilePrioritizer(org.apache.nifi.flowfile.FlowFilePrioritizer) FlowDifferenceFilters(org.apache.nifi.util.FlowDifferenceFilters) VersionedFlowStatus(org.apache.nifi.registry.flow.VersionedFlowStatus) Set(java.util.Set) VersionedFlowCoordinates(org.apache.nifi.registry.flow.VersionedFlowCoordinates) VersionedRemoteGroupPort(org.apache.nifi.registry.flow.VersionedRemoteGroupPort) FlowController(org.apache.nifi.controller.FlowController) StandardCharsets(java.nio.charset.StandardCharsets) StateManagerProvider(org.apache.nifi.components.state.StateManagerProvider) Position(org.apache.nifi.connectable.Position) ScheduledState(org.apache.nifi.controller.ScheduledState) ControllerService(org.apache.nifi.controller.ControllerService) ExtensionManager(org.apache.nifi.nar.ExtensionManager) StandardVersionControlInformation(org.apache.nifi.registry.flow.StandardVersionControlInformation) Resource(org.apache.nifi.authorization.Resource) FlowComparator(org.apache.nifi.registry.flow.diff.FlowComparator) StaticDifferenceDescriptor(org.apache.nifi.registry.flow.diff.StaticDifferenceDescriptor) StandardComparableDataFlow(org.apache.nifi.registry.flow.diff.StandardComparableDataFlow) SiteToSiteTransportProtocol(org.apache.nifi.remote.protocol.SiteToSiteTransportProtocol) ReentrantReadWriteLock(java.util.concurrent.locks.ReentrantReadWriteLock) ArrayList(java.util.ArrayList) Relationship(org.apache.nifi.processor.Relationship) ControllerServiceReference(org.apache.nifi.controller.service.ControllerServiceReference) ControllerServiceProvider(org.apache.nifi.controller.service.ControllerServiceProvider) VersionedLabel(org.apache.nifi.registry.flow.VersionedLabel) LinkedHashSet(java.util.LinkedHashSet) VersionedFlowState(org.apache.nifi.registry.flow.VersionedFlowState) EvolvingDifferenceDescriptor(org.apache.nifi.registry.flow.diff.EvolvingDifferenceDescriptor) ConfiguredComponent(org.apache.nifi.controller.ConfiguredComponent) Positionable(org.apache.nifi.connectable.Positionable) ExecutionNode(org.apache.nifi.scheduling.ExecutionNode) IOException(java.io.IOException) VersionedFlowSnapshot(org.apache.nifi.registry.flow.VersionedFlowSnapshot) NiFiRegistryFlowMapper(org.apache.nifi.registry.flow.mapping.NiFiRegistryFlowMapper) Lock(java.util.concurrent.locks.Lock) NiFiProperties(org.apache.nifi.util.NiFiProperties) VariableImpact(org.apache.nifi.attribute.expression.language.VariableImpact) FlowFileQueue(org.apache.nifi.controller.queue.FlowFileQueue) ProcessorInstantiationException(org.apache.nifi.controller.exception.ProcessorInstantiationException) BundleCoordinate(org.apache.nifi.bundle.BundleCoordinate) URL(java.net.URL) ConnectableType(org.apache.nifi.connectable.ConnectableType) ConnectableComponent(org.apache.nifi.registry.flow.ConnectableComponent) VariableDescriptor(org.apache.nifi.registry.VariableDescriptor) LoggerFactory(org.slf4j.LoggerFactory) Port(org.apache.nifi.connectable.Port) StandardFlowComparator(org.apache.nifi.registry.flow.diff.StandardFlowComparator) Query(org.apache.nifi.attribute.expression.language.Query) ResourceType(org.apache.nifi.authorization.resource.ResourceType) TemplateDTO(org.apache.nifi.web.api.dto.TemplateDTO) SchedulingStrategy(org.apache.nifi.scheduling.SchedulingStrategy) VersionedPort(org.apache.nifi.registry.flow.VersionedPort) VersionedRemoteProcessGroup(org.apache.nifi.registry.flow.VersionedRemoteProcessGroup) StandardProcessScheduler(org.apache.nifi.controller.scheduling.StandardProcessScheduler) VersionedComponent(org.apache.nifi.registry.flow.VersionedComponent) DifferenceType(org.apache.nifi.registry.flow.diff.DifferenceType) VersionedConnection(org.apache.nifi.registry.flow.VersionedConnection) Template(org.apache.nifi.controller.Template) Label(org.apache.nifi.controller.label.Label) FlowRegistryClient(org.apache.nifi.registry.flow.FlowRegistryClient) OnShutdown(org.apache.nifi.annotation.lifecycle.OnShutdown) MutableVariableRegistry(org.apache.nifi.registry.variable.MutableVariableRegistry) Authorizable(org.apache.nifi.authorization.resource.Authorizable) UUID(java.util.UUID) ComponentLifeCycleException(org.apache.nifi.controller.exception.ComponentLifeCycleException) Snippet(org.apache.nifi.controller.Snippet) Collectors(java.util.stream.Collectors) ResourceFactory(org.apache.nifi.authorization.resource.ResourceFactory) Objects(java.util.Objects) List(java.util.List) BatchSize(org.apache.nifi.registry.flow.BatchSize) VersionedFunnel(org.apache.nifi.registry.flow.VersionedFunnel) ToStringBuilder(org.apache.commons.lang3.builder.ToStringBuilder) VersionControlInformation(org.apache.nifi.registry.flow.VersionControlInformation) Optional(java.util.Optional) LocalPort(org.apache.nifi.connectable.LocalPort) StandardProcessContext(org.apache.nifi.processor.StandardProcessContext) ProcessorNode(org.apache.nifi.controller.ProcessorNode) Revision(org.apache.nifi.web.Revision) Funnel(org.apache.nifi.connectable.Funnel) ControllerServiceNode(org.apache.nifi.controller.service.ControllerServiceNode) ToStringStyle(org.apache.commons.lang3.builder.ToStringStyle) HashMap(java.util.HashMap) CompletableFuture(java.util.concurrent.CompletableFuture) AtomicReference(java.util.concurrent.atomic.AtomicReference) Function(java.util.function.Function) FlowRegistry(org.apache.nifi.registry.flow.FlowRegistry) HashSet(java.util.HashSet) StringEncryptor(org.apache.nifi.encrypt.StringEncryptor) ComparableDataFlow(org.apache.nifi.registry.flow.diff.ComparableDataFlow) Objects.requireNonNull(java.util.Objects.requireNonNull) StandardConfigurationContext(org.apache.nifi.controller.service.StandardConfigurationContext) NarCloseable(org.apache.nifi.nar.NarCloseable) LogLevel(org.apache.nifi.logging.LogLevel) VersionedProcessor(org.apache.nifi.registry.flow.VersionedProcessor) Logger(org.slf4j.Logger) StateManager(org.apache.nifi.components.state.StateManager) RemoteGroupPort(org.apache.nifi.remote.RemoteGroupPort) StandardRemoteProcessGroupPortDescriptor(org.apache.nifi.remote.StandardRemoteProcessGroupPortDescriptor) VersionedFlow(org.apache.nifi.registry.flow.VersionedFlow) VersionedControllerService(org.apache.nifi.registry.flow.VersionedControllerService) TimeUnit(java.util.concurrent.TimeUnit) ComponentVariableRegistry(org.apache.nifi.registry.ComponentVariableRegistry) FlowDifference(org.apache.nifi.registry.flow.diff.FlowDifference) VersionedPropertyDescriptor(org.apache.nifi.registry.flow.VersionedPropertyDescriptor) Collections(java.util.Collections) LogRepositoryFactory(org.apache.nifi.logging.LogRepositoryFactory) NarCloseable(org.apache.nifi.nar.NarCloseable) ConfigurationContext(org.apache.nifi.controller.ConfigurationContext) StandardConfigurationContext(org.apache.nifi.controller.service.StandardConfigurationContext) PropertyDescriptor(org.apache.nifi.components.PropertyDescriptor) VersionedPropertyDescriptor(org.apache.nifi.registry.flow.VersionedPropertyDescriptor) ConfiguredComponent(org.apache.nifi.controller.ConfiguredComponent) StandardConfigurationContext(org.apache.nifi.controller.service.StandardConfigurationContext) ControllerServiceNode(org.apache.nifi.controller.service.ControllerServiceNode) VersionedProcessGroup(org.apache.nifi.registry.flow.VersionedProcessGroup) VersionedRemoteProcessGroup(org.apache.nifi.registry.flow.VersionedRemoteProcessGroup) Map(java.util.Map) HashMap(java.util.HashMap)

Example 25 with NarCloseable

use of org.apache.nifi.nar.NarCloseable in project nifi by apache.

the class StandardProcessGroup method removeProcessor.

@Override
public void removeProcessor(final ProcessorNode processor) {
    boolean removed = false;
    final String id = requireNonNull(processor).getIdentifier();
    writeLock.lock();
    try {
        if (!processors.containsKey(id)) {
            throw new IllegalStateException(processor.getIdentifier() + " is not a member of this Process Group");
        }
        processor.verifyCanDelete();
        for (final Connection conn : processor.getConnections()) {
            conn.verifyCanDelete();
        }
        try (final NarCloseable x = NarCloseable.withComponentNarLoader(processor.getProcessor().getClass(), processor.getIdentifier())) {
            final StandardProcessContext processContext = new StandardProcessContext(processor, controllerServiceProvider, encryptor, getStateManager(processor.getIdentifier()), () -> false);
            ReflectionUtils.quietlyInvokeMethodsWithAnnotation(OnRemoved.class, processor.getProcessor(), processContext);
        } catch (final Exception e) {
            throw new ComponentLifeCycleException("Failed to invoke 'OnRemoved' methods of processor with id " + processor.getIdentifier(), e);
        }
        for (final Map.Entry<PropertyDescriptor, String> entry : processor.getProperties().entrySet()) {
            final PropertyDescriptor descriptor = entry.getKey();
            if (descriptor.getControllerServiceDefinition() != null) {
                final String value = entry.getValue() == null ? descriptor.getDefaultValue() : entry.getValue();
                if (value != null) {
                    final ControllerServiceNode serviceNode = controllerServiceProvider.getControllerServiceNode(value);
                    if (serviceNode != null) {
                        serviceNode.removeReference(processor);
                    }
                }
            }
        }
        processors.remove(id);
        onComponentModified();
        flowController.onProcessorRemoved(processor);
        LogRepositoryFactory.getRepository(processor.getIdentifier()).removeAllObservers();
        final StateManagerProvider stateManagerProvider = flowController.getStateManagerProvider();
        scheduler.submitFrameworkTask(new Runnable() {

            @Override
            public void run() {
                stateManagerProvider.onComponentRemoved(processor.getIdentifier());
            }
        });
        // must copy to avoid a concurrent modification
        final Set<Connection> copy = new HashSet<>(processor.getConnections());
        for (final Connection conn : copy) {
            removeConnection(conn);
        }
        removed = true;
        LOG.info("{} removed from flow", processor);
    } finally {
        if (removed) {
            try {
                ExtensionManager.removeInstanceClassLoader(id);
            } catch (Throwable t) {
            }
        }
        writeLock.unlock();
    }
}
Also used : NarCloseable(org.apache.nifi.nar.NarCloseable) PropertyDescriptor(org.apache.nifi.components.PropertyDescriptor) VersionedPropertyDescriptor(org.apache.nifi.registry.flow.VersionedPropertyDescriptor) Connection(org.apache.nifi.connectable.Connection) VersionedConnection(org.apache.nifi.registry.flow.VersionedConnection) ComponentLifeCycleException(org.apache.nifi.controller.exception.ComponentLifeCycleException) NiFiRegistryException(org.apache.nifi.registry.client.NiFiRegistryException) IOException(java.io.IOException) ProcessorInstantiationException(org.apache.nifi.controller.exception.ProcessorInstantiationException) ComponentLifeCycleException(org.apache.nifi.controller.exception.ComponentLifeCycleException) ControllerServiceNode(org.apache.nifi.controller.service.ControllerServiceNode) StandardProcessContext(org.apache.nifi.processor.StandardProcessContext) Map(java.util.Map) HashMap(java.util.HashMap) StateManagerProvider(org.apache.nifi.components.state.StateManagerProvider) LinkedHashSet(java.util.LinkedHashSet) HashSet(java.util.HashSet)

Aggregations

NarCloseable (org.apache.nifi.nar.NarCloseable)48 ComponentLog (org.apache.nifi.logging.ComponentLog)13 PropertyDescriptor (org.apache.nifi.components.PropertyDescriptor)12 Processor (org.apache.nifi.processor.Processor)12 HashMap (java.util.HashMap)9 ControllerServiceNode (org.apache.nifi.controller.service.ControllerServiceNode)9 SimpleProcessLogger (org.apache.nifi.processor.SimpleProcessLogger)9 URL (java.net.URL)8 LinkedHashMap (java.util.LinkedHashMap)8 ProcessorInstantiationException (org.apache.nifi.controller.exception.ProcessorInstantiationException)8 ReportingTask (org.apache.nifi.reporting.ReportingTask)8 Map (java.util.Map)7 ControllerService (org.apache.nifi.controller.ControllerService)6 IOException (java.io.IOException)5 InvocationTargetException (java.lang.reflect.InvocationTargetException)5 ArrayList (java.util.ArrayList)5 ComponentLifeCycleException (org.apache.nifi.controller.exception.ComponentLifeCycleException)5 ControllerServiceInstantiationException (org.apache.nifi.controller.exception.ControllerServiceInstantiationException)5 Relationship (org.apache.nifi.processor.Relationship)5 ComponentVariableRegistry (org.apache.nifi.registry.ComponentVariableRegistry)5