我正在使用drools来处理一些用户规则(Excel方式)。 如果我在过程中的不同时间用完全相同的数据调用规则,我得不到相同的结果。 (我正在使用StateLessSession)Drools:2个相同的调用相同的知识库不会给出相同的结果...为什么?
有人可以解释我为什么吗?
这里是我如何使用它的详细信息:
的Excel的规则是一样的东西
| CONDITION | CONDITION | ACTIVATION-GROUP | ACTION |
| myFact : MyFact | myFact |
| isOK | isBuild | | setStatus("$param") |
-----------------------------------------------------------------
| true | | firstmatch | DONE |
| | true | firstmatch | TODO |
宣言和春天:
<drools-spring:kbase id="kbase">
<drools-spring:resources>
<drools-spring:resource type="DTABLE" source="classpath:rules/myRule.xls" >
<drools-spring:decisiontable-conf input-type="XLS" worksheet-name="processStatus"/>
</drools-spring:resource>
</drools-spring:resources>
</drools-spring:kbase>
<drools-spring:ksession id="ksession" type="stateless" kbase="kbase" />
使用在代码 :
ksession.addEventListener(new DebugAgendaEventListener());
ksession.addEventListener(new DebugWorkingMemoryEventListener());
ksession.execute(myFact);
日志(与事件侦听器),当我把它在第一
==>[ActivationCreatedEvent: getActivation()=[Activation rule=process status_14, act#=0, salience=65522, tuple=[fact 0:2:1494868136:199421486:2:DEFAULT:MyFact(...<identical data>..., status=NONE)]], getKnowledgeRuntime()=org.drools.impl.Statef[email protected]]
==>[ObjectInsertedEventImpl: getFactHandle()=[fact 0:2:1494868136:199421486:2:DEFAULT:MyFact(...<identical data>..., status=NONE)], getObject()=MyFact(...<identical data>..., status=NONE), getKnowledgeRuntime()[email protected], getPropagationContext()=PropagationContextImpl [activeActivations=0, dormantActivations=0, entryPoint=EntryPoint::DEFAULT, factHandle=[fact 0:2:1494868136:199421486:2:DEFAULT:MyFact(...<identical data>..., status=NONE)], leftTuple=null, originOffset=-1, propagationNumber=2, rule=null, type=0]]
==>[BeforeActivationFiredEvent: getActivation()=[Activation rule=process status_14, act#=0, salience=65522, tuple=[fact 0:2:1494868136:199421486:2:DEFAULT:MyFact(...<identical data>..., status=NONE)]], getKnowledgeRuntime()[email protected]]
==>[AfterActivationFiredEvent: getActivation()=[Activation rule==process status_14, act#=0, salience=65522, tuple=[fact 0:2:1494868136:199421486:2:DEFAULT:MyFact(...<identical data>..., status=DONE)]], getKnowledgeRuntime()[email protected]]
正如你可以看到,这个电话咨询,myFact状态更改为“完成”
现在,经过,其他后调用此规则有完全不同的数据(约20个电话),这里是使用相同的数据通话如上日志:
==>[ObjectInsertedEventImpl: getFactHandle()=[fact 0:2:1929411279:-1926420662:2:DEFAULT:MyFact(...<identical data>..., status=NONE)], getObject()=MyFact(...<identical data>..., status=NONE)), getKnowledgeRuntime()[email protected], getPropagationContext()=PropagationContextImpl [activeActivations=0, dormantActivations=0, entryPoint=EntryPoint::DEFAULT, factHandle=[fact 0:2:1929411279:-1926420662:2:DEFAULT:MyFact(...<identical data>..., status=NONE)], leftTuple=null, originOffset=-1, propagationNumber=2, rule=null, type=0]]
就是这样:没有规则激活...
任何猜测?是因为“ACTIVATION-GROUP”吗?如果是这样,为什么......它应该是无状态的?
感谢您的所有想法!
这里不讨论调试正确的地方。需要一小部分但完整的代码来重现问题,特别是该电子表格Drools版本生成的DRL ...您能否在Drools用户列表上发布详细信息? – laune
好吧,你的意思是说这可能是一个在Drools内的错误?无论如何,我会尽量在明天发布在Drools用户列表上,但我不能再提供更多的代码,因为它与我在帖子中写的一样简单。我也会生成DRL文件(Drools版本是5.5.0.Final) – antoine
只要问题可以转载。谢谢。 – laune