Как настроить потоковый режим в Drools - PullRequest
0 голосов
/ 16 марта 2020

Невозможно получить правильную конфигурацию, позволяющую запускать Drools в потоковом режиме. Идет Получение Запрошенная KieBase "defaultKieBase" настроена для работы в режиме CLOUD, но требует наличия функций, доступных только в режиме STREAM

Коду kieContainer нужно что-то, чтобы применить конфигурацию KieBaseConfiguration к KieBuilder kieBuilder

Есть идеи, как этого добиться, или исправьте приведенный ниже код

@Bean
KieContainer kieContainer() {
    logger.info("Creating kieContainer with '" + rulesFile + "'");
    KieServices kieServices = KieServices.Factory.get();

    KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
    kieFileSystem.write(kieServices.getResources().newClassPathResource(rulesFile));


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

    KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
    kieBuilder.buildAll();
    KieModule kieModule = kieBuilder.getKieModule();

    return kieServices.newKieContainer(kieModule.getReleaseId());
}

1 Ответ

0 голосов
/ 17 марта 2020

Кажется, работает следующее

@Bean
KieContainer kieContainer() {
    logger.info("Creating kieContainer with '" + rulesFile + "'");
    KieServices kieServices = KieServices.Factory.get();
    KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
    kieFileSystem.write(kieServices.getResources().newClassPathResource(rulesFile));
    KieModuleModel kieModuleModel = kieServices.newKieModuleModel();
    KieBaseModel baseModel = kieModuleModel.newKieBaseModel("defaultKBase")
            .setDefault(true)
            .setEventProcessingMode(EventProcessingOption.STREAM);
    baseModel.newKieSessionModel("defaultKSession")
             .setDefault(true);
    kieFileSystem.writeKModuleXML(kieModuleModel.toXML());        
    KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
    kieBuilder.buildAll();

    KieModule kieModule = kieBuilder.getKieModule();
    return kieServices.newKieContainer(kieModule.getReleaseId());
}    
...