我们使用 KieFileSystem 来动态管理 Drools 规则。当我有一个新规则时,我使用 KieFileSystem 将它添加到 KieServices 但我正在覆盖我的规则,而不是附加它们。一旦我插入另一个规则,我在以前的规则中创建的声明就不再存在了。
- 我在这个测试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,在我看来,我需要找到一种方法来检索现有规则并将它们附加到带有新规则的新 jar 中,以 AddRemoveRuleTest 的方式。我宁愿不返回数据库来获取现有规则。如何?
如果我要继续使用这种更尴尬但符合 maven 的方法,我需要弄清楚哪种方法是向会话动态添加规则的更好方法?据我所知,我们使用添加版本的 Kie 工件作为 maven 实践,而 AddRemoveRulesTest 方法不使用该实践。请参阅drools-6-add-rules-to-a-running-kiesession