룰엔진 실습교육 가이드 (ver1.0)
From JCFWiKi
Copyright © 2008 Daewoo Information Systems Co., Ltd. |
|
JCF 룰엔진 도입을 결정한 후, 룰엔진 기반 아키텍쳐의 개발에 관련된 적용가이드 |
목차 |
[편집] 룰엔진 개발환경
[편집] 필수 라이블러리
- drools-core.jar
- drools-compiler.jar
- drools-jsr94.jar
- 다운받기:media:drools.zip
[편집] drools 이클립스 플러그인 설치방법
[편집] drools 이클립스 플러그인 사용방법
[편집] 룰 서비스 가이드
[편집] 룰 서비스 작성 가이드
[편집] 서비스 java 파일
- xxService.java
public Employee findEmployee(int employeeId ) throws Exception { final Employee employee = employeeDao.findEmployee(employeeId); employee.message = new ArrayList(); delegate = new AgendaGroupDelegate(); this.session=delegate.getSession(); /** * * 룰엔진에 주입할 fact들을 세션에 insert함 */ this.session.insert(employee); //fact 주입 /** * * delegate에서 만든 룰엔진 적용 메소드를 call함 */ if (employee.getLevel() != 1) { // 직원에 관한 룰 적용 this.delegate.employee(); } else if (employee.getLevel() ==4){ //임원에 관한 룰 적용 this.delegate.employee(); // this.delegate.allEmployee(); } session.dispose(); return employee; }
[편집] 룰 deligate 파일
- 룰 엔진 설정
public class AgendaGroupDelegate implements RuleDelegate { private StatefulSession session; public AgendaGroupDelegate() {//룰 파일 부름 final Reader drl = new InputStreamReader( AgendaGroupDelegate.class.getResourceAsStream( "payScript.drl" ) ); try { PackageBuilder builder = new PackageBuilder(); builder.addPackageFromDrl( drl ); //룰 파일을 rulebase에 넣음 RuleBase ruleBase = RuleBaseFactory.newRuleBase(); ruleBase.addPackage( builder.getPackage() ); //룰 세션 설정 this.session = ruleBase.newStatefulSession(); } catch ( Exception e ) { throw new RuntimeException( e ); }
}
- 룰 메소드 만들기
/** *룰은 agenda-group으로 나오기 때문에 session에 setfocus()를 사용 *fireAllRules()를 사용하여 세션을 실행시킴 */ public void employee() { session.setFocus(rule);session.fireAllRules();}
[편집] 룰 작성 가이드
[편집] drl 파일 작성법
- import와 패키지 선언
package jcf.showcase.employee.service import java.lang.Object; import java.lang.String; import java.util.*; import jcf.showcase.employee.model.Employee import jcf.showcase.employee.service.EmployeeService import java.io.InputStreamReader; import java.io.BufferedReader;
- Agenda Group로 룰 파일 작성하기
- 예제
- 예를 들어 가족수당을 룰로 만들경우에 가족수당 룰도 여러개가 나올 수 있으므로 agenda 그룹으로 만들어야 함
- 예제
rule "family-wifCn-pay"agenda-group "family"no-loopwhen e : Employee (marry =="Y") then e.setBasicpay(e.getBasicpay() + 10); String log ="가족수당-배우자" + e.getBasicpay(); e.message.add(log); end
rule "family-supCn-pay"
agenda-group "family"no-loopwhen e : Employee (children > 0, children <=4) then e.setBasicpay(e.getBasicpay() + (e.getChildren() *5)); String log ="가족수당-부양가족" + e.getBasicpay(); e.message.add(log);
end
