Drools:对同一知识库的两个相同调用don';我不会给出同样的结果。。。为什么?

Drools:对同一知识库的两个相同调用don';我不会给出同样的结果。。。为什么?,drools,stateless,Drools,Stateless,我使用drools处理一些用户规则(Excel方式)。 如果我在过程中的不同时间使用完全相同的数据调用规则,则不会得到相同的结果。(我正在使用无状态会话) 有人能解释一下为什么吗 下面是我如何使用它的更多信息: Excel规则类似于 | CONDITION | CONDITION | ACTIVATION-GROUP | ACTION | | myFact : MyFact | myFact

我使用drools处理一些用户规则(Excel方式)。 如果我在过程中的不同时间使用完全相同的数据调用规则,则不会得到相同的结果。(我正在使用无状态会话)

有人能解释一下为什么吗

下面是我如何使用它的更多信息:
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.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]
==>[ActivationCreatedEvent:getActivation()=[Activation rule=process status_14,act#=0,salience=65522,tuple=[fact 0:2:1494868136:199421486:2:DEFAULT:MyFact(…,status=NONE)],getKnowledgeRuntime()=org.drools.impl。StatefulKnowledgeSessionImpl@5febd2b9]
=>[ObjectInsertedEventImpl:getFactHandle()=[fact 0:2:1494868136:199421486:2:默认值:MyFact(……状态=无)],getObject()=MyFact(……状态=无),getKnowledgeRuntime()=org.drools.impl。StatefulKnowledgeSessionImpl@5febd2b9,getPropagationContext()=PropagationContextImpl[activeActivations=0,dormantActivations=0,entryPoint=entryPoint::DEFAULT,factHandle=[fact 0:2:149488136:199421486:2:DEFAULT:MyFact(…,status=NONE)],leftTuple=null,originOffset=-1,propagationNumber=2,rule=null,type=0]]
=>[BeforeActivationConfigRedEvent:getActivation()=[Activation rule=process status_14,act#=0,salience=65522,tuple=[fact 0:2:1494868136:199421486:2:DEFAULT:MyFact(…,status=NONE)],getKnowledgeRuntime()=org.drools.impl。StatefulKnowledgeSessionImpl@5febd2b9]
=>[AfterActivationConfigRedEvent:getActivation()=[Activation rule==进程状态,act=0,显著性=65522,元组=[fact 0:2:1494868136:199421486:2:DEFAULT:MyFact(……状态=DONE)],getKnowledgeRuntime()=org.drools.impl。StatefulKnowledgeSessionImpl@5febd2b9]
正如您所看到的,在这次调用之后,myFact上的状态变为“完成”

现在,在其他人使用完全不同的数据调用此规则(大约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]]
==>[ObjectInsertedEventImpl:getFactHandle()=[fact 0:2:1929411279:-1926420662:2:默认值:MyFact(……状态=无)],getObject()=MyFact(……状态=无)),getKnowledgeRuntime()=org.drools.impl。StatefulKnowledgeSessionImpl@5febd2b9,getPropagationContext()=PropagationContextImpl[activeActivations=0,dormantActivations=0,entryPoint=entryPoint::DEFAULT,factHandle=[fact 0:2:1929411279:-1926420662:2:DEFAULT:MyFact(…,status=NONE)],leftTuple=null,originOffset=-1,propagationNumber=2,rule=null,type=0]]
就是这样:没有规则被激活

猜猜看?是因为“激活组”吗?如果是,为什么…它应该是无状态的


感谢您的所有想法!

这是5.5.0.Final版本的一个bug。 如果我将项目升级到5.6.0.FINAL,它就会工作


这在drools用户列表中得到了回答:

这里不是讨论调试的合适地方。需要一个小而完整的代码集来重现问题,特别是电子表格drools版本生成的DRL,……您能在drools用户列表中发布详细信息吗?好的,您的意思是drools中可能存在错误吗?无论如何,我不会我想明天在Drools用户列表上发布这个,但是我不能提供更多的代码,因为它和我在帖子中写的一样简单。我还将生成DRL文件(Drools版本是5.5.0.Final)只要这个问题可以被复制。谢谢。很抱歉回答得太晚:我很难让它复制和简单。不管怎样,我在drools用户列表上发布了这个问题:来源可以在这里找到:谢谢