룰엔진 실습교육 가이드 (ver1.0)

From JCFWiKi

(룰엔진 개발환경에서 넘어옴.)
Jump to: navigation, search

그림:check.gif

  • 산출물 : JCF3.0™ -룰엔진 기반 개발가이드
  • 작성자: 고경철
  • 작성일 : 2008/02/20
  • 버전 : 0.9
  • 개정이력 :

Copyright © 2008 Daewoo Information Systems Co., Ltd.

그림:forbidden.gif

JCF 룰엔진 도입을 결정한 후, 룰엔진 기반 아키텍쳐의 개발에 관련된 적용가이드

목차

[편집] 룰엔진 개발환경

[편집] 필수 라이블러리

  • drools-core.jar
  • drools-compiler.jar
  • drools-jsr94.jar
  • 다운받기:media:drools.zip

[편집] drools 이클립스 플러그인 설치방법

그림:warning.gif

업데이트 사이트 : http://downloads.jboss.com/drools/updatesite3.3

[편집] 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;   
private String rule="family";
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-loop

when 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-loop

when e : Employee (children > 0, children <=4) then e.setBasicpay(e.getBasicpay() + (e.getChildren() *5)); String log ="가족수당-부양가족" + e.getBasicpay(); e.message.add(log);

end