Java Drools5.1 规则流基础【示例】(下)

 

六、测试代码:

 

Employ:

package sample;

public class Employ {
    
    public static final double BONUS = 1000;
    
    private String eduInfo;
    private String resume;
    private String annualExam;
    private String awardPunish;
    
    private double basicSalary;
    private double dutySalary;
    private double bonus;
    private double percent;
    
    private double totalSalary;
    
    public String getEduInfo() {
        return eduInfo;
    }
    public void setEduInfo(String eduInfo) {
        this.eduInfo = eduInfo;
    }
    public String getResume() {
        return resume;
    }
    public void setResume(String resume) {
        this.resume = resume;
    }
    public String getAnnualExam() {
        return annualExam;
    }
    public void setAnnualExam(String annualExam) {
        this.annualExam = annualExam;
    }
    public String getAwardPunish() {
        return awardPunish;
    }
    public void setAwardPunish(String awardPunish) {
        this.awardPunish = awardPunish;
    }
    
    public double getBasicSalary() {
        return basicSalary;
    }
    public void setBasicSalary(double basicSalary) {
        this.basicSalary = basicSalary;
    }
    
    public double getDutySalary() {
        return dutySalary;
    }
    public void setDutySalary(double dutySalary) {
        this.dutySalary = dutySalary;
    }

    public double getBonus() {
        return bonus;
    }
    public void setBonus(double bonus) {
        this.bonus = bonus;
    }
    
    public double getPercent() {
        return percent;
    }
    public void setPercent(double percent) {
        this.percent = percent;
    }
    
    public double getTotalSalary() {
        return totalSalary;
    }
    public void setTotalSalary(double totalSalary) {
        this.totalSalary = totalSalary;
    }
    
    public String toString() {
        return "[" + eduInfo + " " + resume + " " + annualExam + " " +
                     awardPunish + " " + basicSalary + " " + dutySalary + " " +
                     bonus + " " + totalSalary + "]";   
    }
    
}

 

EmployTest:

package sample;

import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.drools.logger.KnowledgeRuntimeLogger;
import org.drools.logger.KnowledgeRuntimeLoggerFactory;
import org.drools.runtime.StatefulKnowledgeSession;

public class EmployTest {
    
    public static void main(String[] args) {
        
        try {
            // load up the knowledge base
            KnowledgeBase kbase = readKnowledgeBase();
            StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
            KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");
            // go !
            Employ emp = new Employ();
            emp.setEduInfo("master");
            emp.setResume("tech");
            emp.setAnnualExam("good");
            emp.setAwardPunish("award");
            ksession.insert(emp);
            ksession.startProcess("myrules.salary");
            ksession.fireAllRules();    
            System.out.println("Basic Salary: " + emp.getBasicSalary());
            System.out.println("Duty Salary: " + emp.getDutySalary());
            System.out.println("Bonus      : " + emp.getBonus());
            System.out.println("rate       : " + emp.getPercent());
            System.out.printf("Total Salary: %.0f" , emp.getTotalSalary());
            logger.close();
        } catch (Throwable t) {
            t.printStackTrace();
        }            
        
    }
        
    private static KnowledgeBase readKnowledgeBase() throws Exception {
        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
        kbuilder.add(ResourceFactory.newClassPathResource("rules/EduInfoRule.drl"), ResourceType.DRL);
        kbuilder.add(ResourceFactory.newClassPathResource("rules/ResumeRule.drl"), ResourceType.DRL);
        kbuilder.add(ResourceFactory.newClassPathResource("rules/BonusRule.drl"), ResourceType.DRL);
        kbuilder.add(ResourceFactory.newClassPathResource("rules/AwardPunish.drl"), ResourceType.DRL);
        kbuilder.add(ResourceFactory.newClassPathResource("rules/TotalRule.drl"), ResourceType.DRL);
        kbuilder.add(ResourceFactory.newClassPathResource("rules/salary.rf"), ResourceType.DRF);
        KnowledgeBuilderErrors errors = kbuilder.getErrors();
        if (errors.size() > 0) {
            for (KnowledgeBuilderError error: errors) {
                System.err.println(error);
            }
            throw new IllegalArgumentException("Could not parse knowledge.");
        }
        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
        kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
        return kbase;
    }    

} 

              

测试结果:

         execrule Technician ...

        execrule Master ...

execrule Good ...

execrule Award ...

execrule Total ...

BasicSalary: 2500.0

DutySalary: 2000.0

Bonus : 900.0

rate : 1.1

TotalSalary: 5940

 

 

七、总结


Javadrools规则流基础:

1】掌握规则引擎的基本工作原理;

2】掌握规则文件的编写;

3】掌握规则流图的绘制及应用程序集成。

4】掌握规则组合的两种基本方式【并发和顺序】的实现方式。


下一步:

1】更复杂的规则组合;

2】规则文件的组织、管理;

3】规则文件的自动生成;

4】用户自定义规则;

   

 

posted @ 2011-01-18 18:30  琴水玉  阅读(867)  评论(0编辑  收藏  举报