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】用户自定义规则;
作者:@琴水玉
转载请注明出处:https://www.cnblogs.com/lovesqcc/archive/2011/01/18/4037861.html
微信扫一扫下面的二维码,关注我的公众号 编程大观园 :)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了