【发布时间】:2014-02-05 18:37:22
【问题描述】:
我正在使用drools 来处理一些用户规则(Excel 方式)。 如果我在流程的不同时间用完全相同的数据调用规则,我不会得到相同的结果。 (我正在使用 StateLessSession)
谁能解释一下为什么?
这里有更多关于我如何使用它的信息:
Excel 规则 类似于
| CONDITION | CONDITION | ACTIVATION-GROUP | ACTION |
| myFact : MyFact | myFact |
| isOK | isBuild | | setStatus("$param") |
-----------------------------------------------------------------
| true | | firstmatch | DONE |
| | true | firstmatch | TODO |
Spring 声明:
<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.StatefulKnowledgeSessionImpl@5febd2b9]
==>[ObjectInsertedEventImpl: getFactHandle()=[fact 0:2:1494868136:199421486:2:DEFAULT:MyFact(...<identical data>..., status=NONE)], getObject()=MyFact(...<identical data>..., status=NONE), getKnowledgeRuntime()=org.drools.impl.StatefulKnowledgeSessionImpl@5febd2b9, 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()=org.drools.impl.StatefulKnowledgeSessionImpl@5febd2b9]
==>[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()=org.drools.impl.StatefulKnowledgeSessionImpl@5febd2b9]
如您所见,在此调用之后,myFact 上的状态更改为“DONE”
现在,在其他人使用完全不同的数据(大约 20 次调用)调用此规则之后,这里是使用与上述相同数据的调用的日志:
==>[ObjectInsertedEventImpl: getFactHandle()=[fact 0:2:1929411279:-1926420662:2:DEFAULT:MyFact(...<identical data>..., status=NONE)], getObject()=MyFact(...<identical data>..., status=NONE)), getKnowledgeRuntime()=org.drools.impl.StatefulKnowledgeSessionImpl@5febd2b9, 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]]
就是这样:没有激活规则...
你猜?是因为“激活组”吗?如果是这样,为什么..它应该是无国籍的?
感谢您的所有想法!
【问题讨论】:
-
这里不适合讨论调试。需要一小部分完整的所有代码来重现问题,尤其是由该电子表格生成的 DRL,Drools 版本,...您可以在 Drools 用户列表上发布详细信息吗?
-
好的,你的意思是这可能是drools中的一个错误吗?无论如何,我明天会尝试在 Drools 用户列表上发布这个,但我将无法提供更多代码,因为它就像我在帖子中写的一样简单。我还将生成 DRL 文件(Drools 版本为 5.5.0.Final)
-
只要问题可以重现。谢谢。
-
很抱歉回答迟了:我很难让它可重现和简单。无论如何,我在drools用户列表上发布了这个问题:drools.46999.n3.nabble.com/…,可以在这里找到来源:filedropper.com/using-drools谢谢