MVEL Rule 예시 [1] 단일 조건
이전에 작성한 easy rules 사용 [3] MVEL Rule 게시물의 예시를 작성해보겠다. 우선 메인이 되는 class를 다음과 같이 수정하도록 하겠다.
public static void main(String[] args) {
// 변수 선언
// 1:사원 2:대리 3:과장 4:부장
int position = 3;
boolean positionReal = false;
String responsePosition = "홍길동 이사";
String answer = "'결재 요청 인원 직급 : " + position + " / 결재자 : " + responsePosition + "'";
// 임의 if문 지정
// 과장 이상부터 결재 가능
if(position>2){
positionReal = true;
} else {
positionReal = false;
}
// facts 정의
Facts facts = new Facts();
facts.put("position", positionReal);
// rules 정의
Rule testMVELRule = new MVELRule()
.name("MVEL rule")
.description("MVEL Approval Rule")
.when("position == true")
.then("System.out.println(\n" + answer + "\n);");
Rules rules = new Rules();
rules.register(testMVELRule);
// rules engine 정의 및 구동
RulesEngine rulesEngine = new DefaultRulesEngine();
rulesEngine.fire(rules, facts);
}
해당 예시를 구동하면 다음과 같은 console 화면을 확인할 수 있다.
MVEL Rule 예시 [2] 다중 조건
다중 조건을 적용하기 위해서는 여러 rule을 등록해주면 된다. 생각보다 쉽지만 이 방법을 알아내기까지 여러 docs를 돌아다니며 원문을 번역하는 등 상당한 시간이 소모되었다... 부디 이 포스팅을 읽는 독자들은 그러지 않았으면 한다. 메인이 되는 class를 다음과 같이 수정하도록 하겠다.
public static void main(String[] args) {
// facts 정의
Facts facts = new Facts();
facts.put("position", true);
facts.put("authLevel", 4);
// rules 정의
Rule myRule_1 = new MVELRule()
.name("rule_1")
.description("rule step 1")
.priority(1)
.when("position == true")
.then("System.out.println(\"position true\");");
Rule myRule_2 = new MVELRule()
.name("rule_2")
.description("rule step 2")
.priority(2)
.when("authLevel > 3")
.then("System.out.println(\"authLevel is checked\");");
Rules rules = new Rules();
rules.register(myRule_1);
rules.register(myRule_2);
// rules engine 정의 및 구동
RulesEngine rulesEngine = new DefaultRulesEngine();
rulesEngine.fire(rules, facts);
}
반드시 선언된 rules에 rigister() method를 이용하여 생성한 rule을 등록해주는 것을 잊지말자. 그리고 rule 속성 중 priority(int n) 속성은 우선순위를 뜻한다.
해당 예시를 구동하면 다음과 같은 console 화면을 확인할 수 있다.
설정한 condition(조건) 및 actions(결과 행동)이 priority(순위)에 따라 정상적으로 실행되고 있음을 알 수 있다.
[ 출처 ]
Easy Rules 필요 Component 및 사용법 : https://github.com/j-easy/easy-rules
Easy Rules Multiple Rules : https://github.com/j-easy/easy-rules/wiki/defining-rules#rules-priorities
'Java > easy rules' 카테고리의 다른 글
easy rules 사용 [9] MVEL Rule 응용(method 사용) (0) | 2021.08.30 |
---|---|
easy rules 사용 [8] jeasy API(Controller 추가 있음) 예시 (0) | 2021.08.23 |
easy rules 사용 [6] YML 예시 (0) | 2021.08.23 |
easy rules 사용 [5] YML (0) | 2021.08.19 |
easy rules 사용 [4] jeasy API(Controller 추가 없음) (0) | 2021.08.19 |