Установить обработку событий в STREAM с правилами из проекта Maven (KieScanner) - PullRequest
0 голосов
/ 06 июня 2018

У меня есть проект Maven с правилами в .drl файлах и другой проект, который является SpringBoot веб-сервером.Правила могут быть отправлены POST-запросом на сервер, после чего они добавляются в проект Maven и могут быть активированы, как если бы они были там с самого начала.

Правила «замечены», потому что я обновляюПроект правил Maven (вызывая его mvn clean install) каждый раз, когда передается новое правило.

Я перепробовал множество конфигураций, наиболее «логичными» кадрами являются следующие два:

Первыйtry:

@Bean
public KieSession kieSession() {
    KieServices ks = KieServices.Factory.get();
    KieContainer kContainer = ks.newKieContainer(ks.newReleaseId("ftn.bsep9","drools-spring-kjar", "0.0.1-SNAPSHOT"));

    KieBaseConfiguration config = ks.newKieBaseConfiguration();
    config.setOption(EventProcessingOption.STREAM);

    KieBase kieBase = kContainer.newKieBase("myKBase", config);
    KieSession kSession = kieBase.newKieSession();

    KieScanner kScanner = ks.newKieScanner(kContainer);
    kScanner.start(10000); // check for rule changes every 10 seconds

    return kSession;
}

...

N-й try:

@Bean
public KieSession kieSession() {
    KieServices ks = KieServices.Factory.get();
    KieFileSystem kfs = ks.newKieFileSystem();
    KieModuleModel kModule = ks.newKieModuleModel();

    KieBaseModel baseModel = kModule.newKieBaseModel("defaultKieBase")
            .setDefault(true)
            .setEventProcessingMode(EventProcessingOption.STREAM);
    baseModel.newKieSessionModel("defaultKSession")
            .setDefault(true)
            .setClockType(ClockTypeOption.get("pseudo"));

    kfs.writeKModuleXML(kModule.toXML());
    KieBuilder kieBuilder = ks.newKieBuilder( kfs ).buildAll();
    System.out.println("ERRORS: " + kieBuilder.getResults().getMessages(Message.Level.ERROR).size());

    KieContainer kContainer = ks.newKieContainer(ks.newReleaseId(
            "ftn.bsep9","drools-spring-kjar", "0.0.1-SNAPSHOT"));
    KieSession kSession = kContainer.newKieSession();

    KieScanner kScanner = ks.newKieScanner(kContainer);
    kScanner.start(10000); // check for rule changes every 10 seconds

    return kSession;
}

Любая помощь приветствуется, особенно с объяснением того, почему ваш код работает, а мойне делает.:)


Примечание: приведенный ниже код работает, но я не могу использовать выражение over window:time(5m) drools, поскольку для него требуется STREAM EventProcessing.

@Bean
    public KieSession kieSession() {
        KieServices ks = KieServices.Factory.get();
        KieContainer kContainer = ks.newKieContainer(ks.newReleaseId("ftn.bsep9","drools-spring-kjar", "0.0.1-SNAPSHOT"));
        KieScanner kScanner = ks.newKieScanner(kContainer);
        kScanner.start(10000);
        return kContainer.newKieSession();
}

1 Ответ

0 голосов
/ 08 июня 2018

Мне наконец удалось решить проблему, правильно установив зависимости.Я использую 6.2.0.Final версию kie-ci и kie-spring артефактов.Я пробовал версии: 7.7.0, 7.2.0, 6.5.0 и 6.4.0, но ни одна из них не работала.

KieSession Бин создается следующим образом:

@Bean
public KieSession kieSession() {
    final KieServices kieServices = KieServices.Factory.get();
    final ReleaseId releaseId = kieServices.newReleaseId(groupId, artifactId, version);
    final KieContainer kieContainer = kieServices.newKieContainer(releaseId);
    final KieSession kieSession = kieContainer.newKieSession();

    final KieScanner kieScanner = kieServices.newKieScanner(kieContainer);
    kieScanner.start(10000);

    log.warn(":) created a KIE Container - returning...");
    return kieSession;
}

Ниже приведена часть pom.xml файла, содержащего версию артефактов KIE:

...
<properties>
    <kie.version>6.2.0.Final</kie.version>
</properties>
...
<dependencies>
...
<dependency>
    <groupId>org.kie</groupId>
    <artifactId>kie-ci</artifactId>
    <version>${kie.version}</version>
</dependency>
<dependency>
    <groupId>org.kie</groupId>
    <artifactId>kie-spring</artifactId>
    <version>${kie.version}</version>
</dependency>
...
</dependencies>

Что помогло в процессе: mvn dependency:tree и проверка, какие версии каких артефактов / проектов

Вот ссылка на полный файл pom.xml , который работал для меня.Дерево зависимостей, сгенерированное из mvn dependency:tree, можно найти || здесь || .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...