easy rules 사용 [7] MVEL Rule 예시

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

728x90