2014-02-05 48 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

回答

相關問題