Java/easy rules

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

CatTower 2021. 8. 19. 16:13

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