从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