Как использовать контроллер сервиса api из зависимости - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть специальная служба контроллера, которую я хочу использовать вместе с процессором ConnectWebSocket. Служба контроллера зависит от nifi-websocket-services-api и не требует специального API (папка my-customer-controller-service-api пуста). Я написал тест для службы контроллера, и он проходит.

Однако я не могу выбрать службу контроллера, потому что ConnectWebSocket принимает только API службы контроллера из nifi-websocket-service-api-nar.

enter image description here

Я хочу избежать перекодирования всего процессора ConnectWebSocket. Итак, мой вопрос:

Можно ли настроить зависимости таким образом, чтобы моя служба настраиваемого контроллера использовала API, полученный из nifi-websocket-service-api-nar?

pom.xml контроллера-сервиса:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
    <groupId>com.mydomain</groupId>
    <artifactId>nifi-controllerservice-bundle</artifactId>
    <version>1.9.2</version>
</parent>

<artifactId>nifi-controllerservice</artifactId>
<packaging>jar</packaging>

<dependencies>

    <!-- normal dependencies -->

    <dependency>
        <groupId>org.apache.nifi</groupId>
        <artifactId>nifi-api</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.nifi</groupId>
        <artifactId>nifi-processor-utils</artifactId>
        <version>1.9.2</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.nifi</groupId>
        <artifactId>nifi-websocket-services-api</artifactId>
        <version>1.9.2</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.nifi</groupId>
        <artifactId>nifi-websocket-services-jetty</artifactId>
        <version>1.9.2</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.nifi</groupId>
        <artifactId>nifi-ssl-context-service-api</artifactId>
        <scope>provided</scope>
    </dependency>

    <!-- Test dependencies -->
</dependencies>

pom.xml controller-service-nar

<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.mydomain</groupId>
        <artifactId>nifi-controllerservice-bundle</artifactId>
        <version>1.9.2</version>
    </parent>

    <artifactId>nifi-controllerservice-nar</artifactId>
    <version>1.9.2</version>
    <packaging>nar</packaging>
    <properties>
        <maven.javadoc.skip>true</maven.javadoc.skip>
        <source.skip>true</source.skip>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.mydomain</groupId>
            <artifactId>nifi-controllerservice</artifactId>
            <version>1.9.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.nifi</groupId>
            <artifactId>nifi-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.nifi</groupId>
            <artifactId>nifi-websocket-services-jetty</artifactId>
            <version>1.9.2</version>
            <scope>nar</scope>
        </dependency>
    </dependencies>

</project>

root pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.nifi</groupId>
        <artifactId>nifi-nar-bundles</artifactId>
        <version>1.9.2</version>
    </parent>

    <groupId>com.mydomain</groupId>
    <artifactId>nifi-controllerservice-bundle</artifactId>
    <version>1.9.2</version>
    <packaging>pom</packaging>

    <modules>
        <module>nifi-comtom</module>
        <module>nifi-comtom-nar</module>
    </modules>

</project>

1 Ответ

2 голосов
/ 23 апреля 2019

Это должен быть стандартный способ работы процессоров и служб контроллера ...

Процессоры зависят от интерфейса, который исходит от NAR API службы, и реализации интерфейса контроллера реализуют этот интерфейс.Фреймворк тогда знает все реализации этого интерфейса, который позволяет предоставлять возможные сервисы, которые можно использовать.

Не видя ваш проект и poms, трудно сказать, в чем проблема, но, скорее всего, это так.проблема зависимости.В структуре вашего проекта должно быть два модуля Maven, один из которых создает jar-файл для вашей службы, позволяет вызывать эту специальную службу, а затем тот, который упаковывает NAR, позволяет вызывать эту пользовательскую службу-nar.

У модуля custom-service должна быть обеспеченная зависимость от nifi-websocket-services-api, это позволяет его компилировать, но мы не хотим связывать этот API, так как во время выполнения он будет получен из другого NAR.

Модуль custom-service-nar должен иметь зависимость типа NAR от nifi-websocket-services-api-nar.

https://cwiki.apache.org/confluence/display/NIFI/Maven+Projects+for+Extensions#MavenProjectsforExtensions-LinkingProcessorsandControllerServices

...