Как динамически изменить правила данного сеанса Drools 6.3?

У меня есть сессия в Drools 6.3.x, содержащая несколько миллионов фактов.

Я создаю интерактивное приложение, которое, помимо прочего, позволяет пользователю фильтровать факты так, как он хочет. На мой взгляд, этот фильтр в основном шаблон. После того, как факты отфильтрованы, применяется логика для получения желаемого результата.

Из-за интерактивного характера приложения, я бы предпочел не ждать ввода пользователя для созданияKieBaseвыведитеKieSessionЗагрузите несколько миллионов фактов и постоянно применяйте правила.

В идеале я хотел бы создатьKieBase содержащий логику приложения один раз, получитьKieSession один раз, загрузите все факты один раз, и правила ввода / удаления на лету в зависимости от ввода пользователя. Как я могу сделать это в Drools 6.3? Я точно знаю, что это было возможно с Drools 5.

Некоторый код для контекстуализации моего вопроса. Этот фрагмент показывает, как настроить сеанс Drools:

    KieHelper helper = new KieHelper();

    String location = "/drools/logic.drl";
    InputStream stream = getClass().getResourceAsStream(location);
    Resource resource = ResourceFactory.newInputStreamResource(stream);
    helper.addResource(resource, ResourceType.DRL);

    Results results = helper.verify();
    if (results.hasMessages(Message.Level.ERROR)) {
        System.out.println(results.getMessages());
        System.exit(0);
    }

    KieBase base = helper.build();
    KieSession session = base.newKieSession();
    for (Source source : sources) {
        for (Object fact : source.getFacts()) {
            session.insert(fact);
        }
    }
    session.fireAllRules();

Насколько я вижу,KieBase не предоставляет никаких способов добавления новых правил (только способы их удаления). Так что я не знаю, как перейти от следующего фрагмента, если не инициализироватьKieSession с нуля...

    String rule = "package boot\n" +
            "\n" +
            "rule \"Stamp\"\n" +
            "when\n" +
            "\t$o: Object()\n" +
            "then\n" +
            "\tSystem.out.println($o);\n" +
            "end\n";
    InputStream ruleStream = new ByteArrayInputStream(rule.getBytes());
    Resource ruleResource = ResourceFactory.newInputStreamResource(ruleStream);
    helper.addResource(ruleResource, ResourceType.DRL);

Любое предложение?

Ответы на вопрос(0)

Ваш ответ на вопрос