2014-02-05 46 views
2

我正在使用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”吗?如果是这样,为什么......它应该是无状态的?

感谢您的所有想法!

+0

这里不讨论调试正确的地方。需要一小部分但完整的代码来重现问题,特别是该电子表格Drools版本生成的DRL ...您能否在Drools用户列表上发布详细信息? – laune

+0

好吧,你的意思是说这可能是一个在Drools内的错误?无论如何,我会尽量在明天发布在Drools用户列表上,但我不能再提供更多的代码,因为它与我在帖子中写的一样简单。我也会生成DRL文件(Drools版本是5.5.0.Final) – antoine

+0

只要问题可以转载。谢谢。 – laune

回答

相关问题