easy rules 사용 [9] MVEL Rule 응용(method 사용)

MVEL Rule 환경 설정

MVEL Rule을 이용하여 easy rules 응용을 진행해보겠다. 우선 easy rules 및 MVEL Rule을 사용하기 위한 maven 추가를 진행하겠다.

<!-- Rule Engine / Easy Rules -->
<dependency>
    <groupId>org.jeasy</groupId>
    <artifactId>easy-rules-core</artifactId>
    <version>4.1.0</version>
</dependency>

<!-- Rule Engine / MVEL -->
<dependency>
    <groupId>org.mvel</groupId>
    <artifactId>mvel2</artifactId>
    <version>2.4.12.Final</version>
</dependency>

 

MVEL Rule 사용을 위한 component를 생성하도록 하자. easy rules 사용 [3] MVEL Rule 게시물의 'MVELRule을 이용한 규칙 생성에 필요한 Component' -를 참고하면 된다. 다음의 class 파일들을 적당한 위치에 놔두도록 하자.

  • MVELAction.java
  • MVELCondition.java
  • MVELRule.java

 


 

MVEL Rule 응용 방식

이전 포스팅에서 필자가 MVEL Rule 방식을 사용할 경우, method를 사용할 수 있음을 확인하지 못하였다고 기록하였다. 하지만 어쩌면 우회라면 우회, 편법이라면 편법으로 method를 사용할 수 있음을 확인하였다. 우선 easy rules에 대한 기본적인 이해가 필요한데, rule의 condition 조건에 값을 넣기 위해 HashMap 형태의 facts 변수를 사용한다. method를 사용하기 위해서는 이 facts 변수를 사용하면 된다.

 

기본적으로 MVEL Rule 방식을 사용할 때에 이렇게 사용하고 있을 것이다.

public static void main(String[] args) {
	// facts 정의
	Facts facts = new Facts();
	facts.put("position", true);
	
	// rules 정의
	Rule testMVELRule = new MVELRule()
		.name("MVEL rule")
		.description("MVEL Approval Rule")
		.when("position == true")
		.then("System.out.println('It works!');");
	
	Rules rules = new Rules();
	rules.register(testMVELRule);
	
	// rules engine 정의 및 구동
	RulesEngine rulesEngine = new DefaultRulesEngine();
	rulesEngine.fire(rules, facts);
}

facts를 정의하고, ruels를 정의한 후 등록하고, rules engine을 구동하여 rule 검증을 시도한다. method를 사용하는 방법 또한 기존과 다를 것이 없다. MVEL Rule 방식에서 method를 사용하는 방법은 다음과 같다.

  • method를 선언해놓은 class 파일 작성
  • 메인이 되는 class에서 위의 class 파일 선언
  • 위에서 선언한 class 파일을 facts 변수에 put
  • MVEL Rule Action에서 해당 method 사용

 


 

MVEL Rule 응용

예시 소스코드를 보도록 하자. 우선 method를 선언한 class 파일을 작성한다.

public class SampleLogic {	
	public void methodCheck() {
		System.out.println("methodCheck !");
	}
}

 

다음으로 메인이 되는 class를 수정한다.

public static void main(String[] args) {
	// method class 정의
	SampleLogic method = new SampleLogic();
    
	// facts 정의
	Facts facts = new Facts();
	facts.put("position", true);
	facts.put("method", method);
	
	// rules 정의
	Rule testMVELRule = new MVELRule()
		.name("MVEL rule")
		.description("MVEL Approval Rule")
		.when("position == true")
		.then("method.methodCheck();");
	
	Rules rules = new Rules();
	rules.register(testMVELRule);
	
	// rules engine 정의 및 구동
	RulesEngine rulesEngine = new DefaultRulesEngine();
	rulesEngine.fire(rules, facts);
}

 

이제 해당 project를 구동하면, 다음과 같은 console 화면을 확인할 수 있다.

설정한 when에 대하여 true값이 반환되었을 경우, then에 해당하는 method 호출이 정상적으로 이뤄지는 것을 확인할 수 있다.

 

 

 


 

 

 

[ 출처 ]

Easy Rules 필요 Component 및 사용법 : https://github.com/j-easy/easy-rules

Easy Rules MVEL Rule 응용 방식 : https://pythonq.com/so/mvel/1593907

728x90