jeasy API를 이용한 규칙 생성
이전 게시물에서는 MVELRule을 이용하여 rule engine을 구현해 보았다. 이번에는 순수하게 jeasy API만을 사용하여 구현해보도록 하겠다.
순수 jeasy API만을 사용할 경우, easy rules 사용 [3] MVEL Rule에서 사용한 것과 같이 메인이 되는 class에서 처리가 가능하다. 메인이 되는 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 org.jeasy.rules.core.RuleBuilder;
public class Launcher {
public static void main(String[] args) {
// facts 정의
Facts facts_ = new Facts();
facts_.put("rain", true);
// rules 정의
Rule testRule = new RuleBuilder()
.name("testRule")
.description("Rule Engine Test")
.when(facts -> facts.get("rain").equals(true))
.then(facts -> System.out.println("비오니까 우산 가져가 !"))
.build();
Rules rules = new Rules();
rules.register(testRule);
// rules engine 정의 및 구동
RulesEngine rulesEngine = new DefaultRulesEngine();
rulesEngine.fire(rules, facts_);
}
}
이제 해당 project를 구동하면, 다음과 같은 console 화면을 확인할 수 있다.
Tip
jeasy API 사용 시, 기본 내장되어있는 조건은 true / false 값만을 비교할 수 있다. 아래는 내장 class의 RuleBuilder 메소드에 사용할 수 있는 조건들 중 when(Condition condition) 메소드에 관한 interface이다.
/**
* This interface represents a rule's condition.
*
* @author Mahmoud Ben Hassine (mahmoud.benhassine@icloud.com)
*/
@FunctionalInterface
public interface Condition {
/**
* Evaluate the condition according to the known facts.
*
* @param facts known when evaluating the rule.
*
* @return true if the rule should be triggered, false otherwise
*/
boolean evaluate(Facts facts);
/**
* A NoOp {@link Condition} that always returns false.
*/
Condition FALSE = facts -> false;
/**
* A NoOp {@link Condition} that always returns true.
*/
Condition TRUE = facts -> true;
}
보다시피, 매개변수로 받는 condition 값에는 true 혹은 false만을 가질 수 있다.
[ 출처 ]
Easy Rules 사용법 : https://github.com/j-easy/easy-rules
728x90
'Java > easy rules' 카테고리의 다른 글
easy rules 사용 [6] YML 예시 (0) | 2021.08.23 |
---|---|
easy rules 사용 [5] YML (0) | 2021.08.19 |
easy rules 사용 [3] MVEL Rule (0) | 2021.08.19 |
easy rules 사용 [2] RuleBook (0) | 2021.08.19 |
easy rules 사용 [1] jeasy API(Controller 추가 있음) (0) | 2021.08.19 |