zoukankan      html  css  js  c++  java
  • 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】用户自定义规则;

       

     

  • 相关阅读:
    XAMPP安装后启动Apache的Busy解决方法
    Win10 安装LoadRunner11遇到的问题及解决方案
    安装LoadRunner时提示缺少vc2005_sp1_with_atl_fix_redist解决方案
    Jmeter(十一)测试监听
    Jmeter(十)负载生成器
    session会话对象
    python enumarate方法的使用
    request 对于cookie,session, json的处理
    request 请求头的处理
    post请求中data参数的应用
  • 原文地址:https://www.cnblogs.com/lovesqcc/p/4037861.html
Copyright © 2011-2022 走看看