【发布时间】:2015-12-22 15:09:40
【问题描述】:
我正在尝试从 Drools 6 中的字符串加载规则,如下所示:
// the rule
def drl = '''
dialect "mvel"
rule "Person is over 18"
when
$person : Person(age > 18)
then
System.out.println("Person is "+$person.name);
end
'''
// setup for rule
KieServices kieServices = KieServices.Factory.get()
KieFileSystem kfs = kieServices.newKieFileSystem()
kfs.write( "src/main/resources/simple.drl",
kieServices.getResources().newReaderResource( new StringReader(drl) ) )
KieBuilder kieBuilder = kieServices.newKieBuilder( kfs ).buildAll()
// check there have been no errors for rule setup
Results results = kieBuilder.getResults();
if( results.hasMessages( Message.Level.ERROR ) ){
println( results.getMessages() )
throw new IllegalStateException( "### errors ###" )
}
KieContainer kieContainer =
kieServices.newKieContainer( kieBuilder.getKieModule().getReleaseId() )
KieSession kieSession = kieContainer.newKieSession()
// insert facts and fire rules
kieSession.insert(new Person("Jon Doe", 21))
kieSession.insert(new Person("Jon Darcy", 1))
kieSession.fireAllRules()
kieSession.dispose()
@Immutable
class Person {
String name
int age
}
我想要发生的事情是将人名打印出来。通过附加 eventlistener 和 logger,我可以看到添加和断言了事实。通过在 drl 中出现错误,我可以确保看到并编译了规则。但规则永远不会触发。
我很确定代码中的某个地方存在一个愚蠢的小错误。有人可以帮帮我吗?
【问题讨论】:
标签: drools