2014-07-12 9 views
0

나는 Drools에 완전히 익숙하고 탐구하고 있습니다. 지금까지 나는 자바와 같은 조건이라면 우리가 사용하는 단일 규칙과 withing을 사용했다.Drools에서 규칙의 다중 끝

이제 일련의 조건 중 하나가 만족되면 여러 if 및 else chain을 사용해야하지만 복잡한 규칙을 사용해야합니다.

저는 Apache Camel에서 drools를 호출합니다. 규칙은 카멜에게 답장해야합니다.

이제 if와 else 조건 중 하나가 실패 할 때 규칙 체인을 중단 한 다음 Caller 코드 인 호출자에게 다시 응답을 보내려면 어떻게해야합니까?

1. 응답하려면 여러 개의 end 문을 사용할 수 있습니까?

2. 기능을 사용할 수 있으며 Java에서 함수를 작성하고 가져 오는 것이 좋습니다.

3. Drools에서 함수를 만들고 java와 똑같이 사용할 수 있습니까?

나는 Drools를 사용해야하는 방식으로 사용하고 있지는 않지만 지금까지 우리가 지금 사용하고있는 규칙만큼 복잡하지는 않았습니다. 어떤 도움이 나를 위해 유용합니다.

다음은 아래에서 사용할 수있는 방법이나 아래에 나와있는 다른 방법을 제안합니다.

rule "my rule" 
when 
#some condition 

then 

if(){ 

end 

}else if(){ 

#do something 

} 

if(){ 

    #do some other logic 

} 
end 

샘플 내 두 번째 의견

When 

object:SomeObject(); // This helps for my camel code to trigger this rule and this rule only 

then 

if(){ 

} 
else if() 
{ 

return; 
}else if() { 
} 

if(){ 

}else if(){ 
return; 
} 
if(){ 

} 
end 

답변

1

후 난 당신이 "규칙의 사슬을 깨는"무슨 뜻인지 모르겠어요. 3 :

  1. 번호 - - 내가 연결할 수 있습니다 그런 것은 없다 실행하는 더 이상 규칙 활성화가 없을 때 규칙을 평가하는 것은, 모든 iteself에 의해 1로

    답변 종료 "응답"이라는 용어가 있지만 "여러 규칙을위한 여러 문장"이 없습니다.

  2. 예, 정적 Java 함수를 사용할 수 있습니다. Java에서와 같이 클래스를 가져오고 호출하십시오.

  3. 예. 이것은 Drools 매뉴얼의 "Function"이라는 제목의 섹션에서 설명합니다. 이 예제는 설명서의 내용입니다.

    function hello (문자열 이름) { return "Hello"+ name + "!"; } 당신은 end 규칙의 endthen 사이에 실제 사용할 수 없습니다 질문

    에 나중에 추가 규칙에

코멘트. 규칙의 결과 부분을 종료하려면 Java return 문을 사용하십시오 (물론 표현식은 사용하지 마십시오).

결과에서 복잡한 조건문을 재검토하십시오. 논리 결정은 규칙의 조건 부분에서 표현되어야합니다.

훨씬 뒤 가능한 Guvnor 버그로 인한 대안 - 반환을 허용하지 않습니다. 답에 대한

boolean skip = false; 
if(){ 
} else 
if() { 
    skip = true; // return; 
} else 
if() { 
} 
if(! skip){ 
    if(){ 
    } else 
    if(){ 
     skip = true; // return; 
    } 
} 
if(! skip){ 
    if(){ 
    } 
} 

+0

감사합니다. 나는 그 기능 하나를 보았다. 하지만 난 지금 내 질문에 추가 한 샘플 코드처럼 싶습니다. 그걸로 확인할 수 있니? –

+0

@NaveenRaj 답변에 규칙에 대한 의견을 추가했습니다. – laune

+0

그것은 void 메소드가 값을 반환 할 수 없다고 말합니다. 너 나 좀 도와 줄 수있어? –