2016-12-30 2 views
1

규칙을 실행 한 모든 개별 조건을 가져오고 싶습니다. 나는 다음과 같은 규칙이있는 경우규칙 실행을 초래 한 모든 조건을 얻으십시오.

예를 들어, :

  • booleanPredicate1() resulted in rule execution. :

    package app1; 
    
    rule 'rule1' 
    when 
        MyObjectType1(booleanPredicate1()) 
        or 
        (
         MyObjectType2(booleanPredicate2()) 
         and 
         MyObjectType3(booleanPredicate3()) 
        ) 
        or 
        MyObjectType4(booleanPredicate4()) 
    then 
        System.out.println("In rule - " + drools.getRule().getName()); 
    end 
    

    booleanPredicate1(), booleanPredicate2()booleanPredicate4()은 내가 다음과 같은 출력을 얻으려면, true 있습니다

  • ,

는 지금까지 시도 이러한 모든 조건 방법의 구현 안에 한 무엇, 그 방법은 반환하는 것입니다 경우에만 실행됩니다 로깅 문을 추가 한 true :

boolean booleanPredicate1() 
{ 
    boolean ret = false; 
    ... 
    ... 
    if (<business-logic-defined-predicate>) 
    { 
    ret = true; 
    } 
    if(ret) 
    { 
    addToLog("booleanPredicate1 became true."); 
    } 
    return ret; 
} 

그러나이 솔루션을 사용하면 출력이 booleanPredicate2() resulted in rule execution.으로 잘못 표시됩니다.

정확한 로깅 결과를 얻을 수있는 방법이 있습니까?

답변

0

my paper on rule design patterns에 질문에 대답하는 부분이 있습니다.

여기에 요약하면 : 사실 또는 일부 사실의 조합에 대해 사실 인 것을 등록하기 위해 개별 진리 값에 대한 규칙이 필요합니다. 이제 규칙은 레지스트리의 부울 값을 조합 한 다음 레지스트리에 문제의 답이 포함됩니다.

+0

감사합니다. @laune! 그 종이의 어느 부분에이 문제에 대한 해결책이 담겨 있는지 정확히 설명해 주시겠습니까? –

+0

그냥 읽으십시오 - 다른 섹션은 규칙 기반 시스템에 대한 이해를 해치지 않습니다. – laune