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

java

 

六、测试代码:

 

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】用户自定义规则;

   

 

以上是 Java Drools5.1 规则流基础【示例】(下) 的全部内容, 来源链接: utcz.com/z/391156.html

回到顶部