easy rules 사용 [4] jeasy API(Controller 추가 없음)

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