从Drools 6中的数据库加载和更新规则

在启动时如何从数据库表中加载规则并从Drools 6.2.0中的同一表中更新规则呢?我找到了一个使用Drools 5

的示例,我可能可以将它从Scala转换为Java,但看起来API发生了巨大变化……例如,我看不到RuleBaseFactory类。

任何样品或文件将不胜感激。

回答:

我不确定从哪儿org.drools.RuleBaseFactory拿来的。以下是在Drools 5.3(可能更早)至5.6中的完成方式:

KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();

kbuilder.add( ..., ResourceType.DRL);

if( kbuilder.hasErrors() ){

System.err.println( "### compilation errors ###" );

KnowledgeBuilderErrors errors = kbuilder.getErrors();

for( KnowledgeBuilderError err: errors ){

System.err.println( err.toString() );

}

throw new IllegalStateException( "compile errors" );

}

KnowledgeBase kbase = kbuilder.newKnowledgeBase();

StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();

省略号指示用于插入包含规则文本的数据的位置。检查API是否适合类型;一个java.lang.String应该可以接受的。

这是我在6.2中使用的方式:

KieServices kieServices = KieServices.Factory.get();

KieFileSystem kfs = kieServices.newKieFileSystem();

kfs.write( "src/main/resources/simple.drl", ... );

KieBuilder kieBuilder = kieServices.newKieBuilder( kfs ).buildAll();

Results results = kieBuilder.getResults();

if( results.hasMessages( Message.Level.ERROR ) ){

System.out.println( results.getMessages() );

throw new IllegalStateException( "### errors ###" );

}

KieContainer kieContainer =

kieServices.newKieContainer( kieServices.getRepository().getDefaultReleaseId() );

KieBase kieBase = kieContainer.getKieBase();

kieSession = kieContainer.newKieSession();

以上是 从Drools 6中的数据库加载和更新规则 的全部内容, 来源链接: utcz.com/qa/424835.html

回到顶部