Мы используем KieFileSystem для динамического управления правилами Drools. Когда у меня есть новое правило, я добавляю его в KieServices с помощью KieFileSystem, но я перезаписываю свои правила, а не добавляю их. Как только я вставляю другое правило, объявлений, которые я создал в предыдущих правилах, больше нет.
- Я смоделировал свой код после этого теста IncrementalCompilationTest.java
- Простой пример KieFileSystemExample.java
- Ссылка на Drools 4.2.2.4. Программное определение KieModule
Должен быть способ добавить эти правила, или не было бы способа их изменить? Эффект, который я ищу, может быть достигнут с помощью метода, указанного в AddRemoveRulesTest.java.
KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder();
builder.add( ResourceFactory.newReaderResource( new StringReader( ruleBuilder.getRule() ) ), ResourceType.DRL);
if(builder.hasErrors()){
_log.error( builder.getErrors().toString() );
return;
}
//This is where the magic happens. How equivalent with versioned deployable artifacts?
base.addKnowledgePackages(builder.getKnowledgePackages());
Если я правильно следую IncrementalCompilationTest, мне кажется, что мне нужно будет найти способ получить существующие правила и добавить их в новую банку с новым правилом, как AddRemoveRuleTest. Я бы предпочел не возвращаться к базе данных, чтобы подобрать существующие правила. Как?
Если я продвигаюсь вперед с этим более неудобным, но совместимым с maven методом, мне нужно выяснить, какой из них является лучшим способом динамического добавления правил в сеанс? Насколько я могу судить, мы используем добавление версионированных артефактов Kie в качестве практики maven, а метод AddRemoveRulesTest не использует эту практику. См. drools-6-add-rules-to-a-running-kiession