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
'Java > easy rules' 카테고리의 다른 글
easy rules 사용 [10] MVEL Rule 응용(여러 조건 적용 및 변수 return) (0) | 2022.04.20 |
---|---|
easy rules 사용 [8] jeasy API(Controller 추가 있음) 예시 (0) | 2021.08.23 |
easy rules 사용 [7] MVEL Rule 예시 (0) | 2021.08.23 |
easy rules 사용 [6] YML 예시 (0) | 2021.08.23 |
easy rules 사용 [5] YML (0) | 2021.08.19 |