MVEL Maven 추가
MVEL이란, MVFLEX Expression Language의 약자로서 Java 플랫폼 용 동적 / 정적 형식의 내장형 표현 언어 및 런타임을 뜻한다. 필자가 진행한 사용 테스트에는 MVEL Maven 추가가 필요하다.
<!-- Rule Engine / MVEL -->
<dependency>
<groupId>org.mvel</groupId>
<artifactId>mvel2</artifactId>
<version>2.4.12.Final</version>
</dependency>
MVELRule을 이용한 규칙 생성에 필요한 Component
필자의 경우, MVEL Maven 추가만으로 모든 component를 가져올 수는 없었다. 그리하여 j-easy Github에 올라와있는 easy-rules-mvel 하위 directory를 참조하였다. https://github.com/j-easy/easy-rules 좌측의 링크를 접속하면, 다음과 같은 화면이 출력된다.
해당 Github의 root directory 내 easy-rules-mvel directory를 클릭하여 다음과 같은 directory 경로로 이동하도록 한다.
해당 경로에는 다음과 같은 java class들이 존재할 것이다.
필자는 다음과 같은 class 파일들을 test 목적 project에 추가하였다.
- MVELAction.java
- MVELCondition.java
- MVELRule.java
해당 class들을 project에 추가하는 방법은 간단하다. 해당 파일을 클릭한 후, 복사와 붙여넣기를 통해 소스코드를 가져온 후, 상단에 정의된 package 및 import를 수정만 하면 된다.
MVELRule을 이용한 규칙 생성
이전 게시물인 easy rules 사용 [1] 및 easy rules 사용 [2]에서 사용한 방식과는 조금 다른 방식을 사용한다. (필자는 다양한 방식을 익혀보고자 하는 목적으로 여러 방식을 사용하는 것이다. 굳이 필자의 방식에 맞추지 않아도 되며, 출처에 있는 링크를 통하면 다른 방식들을 지원하는 예제가 많음을 미리 알린다) 우선 규칙을 정의했던 EasyRulesController.java class는 더이상 사용하지 않아도 된다.
필자는 메인이 되는 class에서 facts 및 rules, rules engine을 정의하고 구동할 것이다. 메인 class를 다음과 같이 작성하도록 하겠다.
import org.jeasy.rules.api.Facts;
import org.jeasy.rules.api.Rule;
import org.jeasy.rules.api.Rules;
import org.jeasy.rules.api.RulesEngine;
import org.jeasy.rules.core.DefaultRulesEngine;
import easyRulesTest.controller.MVELRule;
public class Launcher {
public static void main(String[] args) {
// facts 정의
Facts facts = new Facts();
facts.put("rain", true);
// rules 정의
Rule weatherRule = new MVELRule()
.name("weather rule")
.description("if it rains then take an umbrella")
.when("rain == true")
.then("System.out.println(\"It rains, take an umbrella!\");");
Rules rules = new Rules();
rules.register(weatherRule);
// rules engine 정의 및 구동
RulesEngine rulesEngine = new DefaultRulesEngine();
rulesEngine.fire(rules, facts);
}
}
사실상 이로서 설정은 완료되었다. 이제 해당 project를 구동하면, 다음과 같은 console 화면을 확인할 수 있다.
[ 출처 ]
MVEL 정의 : https://en.wikipedia.org/wiki/MVEL
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 사용 [6] YML 예시 (0) | 2021.08.23 |
---|---|
easy rules 사용 [5] YML (0) | 2021.08.19 |
easy rules 사용 [4] jeasy API(Controller 추가 없음) (0) | 2021.08.19 |
easy rules 사용 [2] RuleBook (0) | 2021.08.19 |
easy rules 사용 [1] jeasy API(Controller 추가 있음) (0) | 2021.08.19 |