【发布时间】:2014-01-03 10:16:29
【问题描述】:
我正在向 drools 规则引擎插入数据,但我无法理解它如何处理插入的数据。插入数据的代码是:
final StatefulKnowledgeSession session = getSession()
new Thread() {
@Override public void run() {
Thread.currentThread().setName("RuleEngineThread")
println 'engine starting fire'+Thread.currentThread().getName()
session.fireUntilHalt();
}
}.start();
WorkingMemoryEntryPoint entrypoint=session.getWorkingMemoryEntryPoint("Multiple Stream")
entrypoint.insert(new Categories([categoryid:120,name:"catN1"]))
entrypoint.insert(new Test(100,120))
entrypoint.insert(new Categories([categoryid:121,name:"catN2"]))
entrypoint.insert(new Test(100,121))
entrypoint.insert(new Categories([categoryid:1220,name:"catN3"]))
entrypoint.insert(new Test(100,1220))
entrypoint.insert(new Categories([categoryid:1202,name:"catN4"]))
entrypoint.insert(new Test(100,1202))
println "Thread sleeeping for 3 secs"
Thread.currentThread().sleep(3000)
不用担心语法,这是 groovy 文件。 规则是:
rule "multiple-opt"
//duration 120
no-loop true
when
$c: Categories() from entry-point "Multiple Stream"
$t: Test() from entry-point "Multiple Stream"
then
System.out.println("@@Multiple "+$c.getName()+":"+$t.getPrice());
end
我得到的输出很奇怪,所以我认为我对 drools 运行时的了解较少。输出是:
engine starting fireRuleEngineThread
Thread sleeeping for 3 secs
@@Multiple catN1:100
@@Multiple catN4:100
@@Multiple catN3:100
@@Multiple catN2:100
@@Multiple catN1:100
@@Multiple catN4:100
@@Multiple catN3:100
@@Multiple catN2:100
@@Multiple catN1:100
@@Multiple catN3:100
@@Multiple catN2:100
@@Multiple catN1:100
@@Multiple catN2:100
当我插入对象的次数少于我收到的输出数量时,我无法理解规则是如何被触发这么多次的。
如果我缺少有关流口水的一些知识,请提供帮助。在此先感谢
【问题讨论】: