Drools学习 入门实例
2011-12-23 16:07
323 查看
http://blog.sina.com.cn/s/blog_67d6d5df0100jyqk.html
在Eclipse新建Drools工程就可以导入自带的例子进行学习。
接下来:
如此,就可以对实例进行学习了。
下面只是参照HelloWorld写的一个小例子,当做笔记。
设计场景是银行借贷,当借贷款额小于1000时,直接借出,否则,需交由总经理处理。
1 新建工程,命名:drools,导入Drools相关jar包。
2 新建Package,命名:aaron.loan,在此包中建立class文件:pojo.java
pojo.java
package aaron.loan;
public class pojo {
int moneycount;
public int getMoneycount() {
return moneycount;
}
public void setMoneycount(int moneycount) {
this.moneycount = moneycount;
}
}
3 新建规则文件:DecisionRule.drl
Decision.drl
import aaron.loan.pojo;
rule "A"
when
$m:pojo(moneycount<1000);
then
System.out.println("Done!");
end
rule "B"
when
$m:pojo(moneycount>=1000);
then
System.out.println("Pass it to the management!");
end
4 在aaron.loan包中新建class文件:deploy.java
deploy.java
package aaron.loan;
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 deploy {
public void loanrool(int moneycount) throws Exception {
// TODO Auto-generated method stub
pojo p=new pojo();
try {
KnowledgeBase kbase = readKnowledgeBase();
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory
.newFileLogger(ksession, "test");
p.setMoneycount(moneycount);
ksession.insert(p);
ksession.fireAllRules();
System.out.print("moneycount:"+p.getMoneycount());
logger.close();
} catch (Throwable t) {
t.printStackTrace();
}
}
private KnowledgeBase readKnowledgeBase() throws Exception {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("DecisionRule.drl"), ResourceType.DRL);
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;
}
}
5 建立测试文件:test.java
test.java
package aaron.loan;
public class test {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
deploy dp=new deploy();
pojo pj=new pojo();
pj.setMoneycount(900); //此处900是任意设的值。
int mc=pj.getMoneycount();
dp.loanrool(mc);
}
}
运行test.java文件,控制台结果如下:
Done!
moneycount:900
到此,Drools小实例就运行成功了
。
another drl example:
#ident "%W%"
#created on: Nov 4, 2011
package rules.com.citi.gcd.ptrs
#list any import classes here.
import com.citi.apollo.fmk.limit2.LimitRequest;
import java.util.List;
import java.util.ArrayList;
import com.citi.apollo.fmk.limit.PortfolioLimitResult;
import com.citi.apollo.fmk.limit.PortfolioLimitStatus;
import com.citi.apollo.fmk.util.aggregation.Aggregate;
import com.citi.apollo.fmk.limit.LimitAggregate;
import com.citi.apollo.fmk.limit.LimitRange;
# functions
import function com.citi.apollo.fmk.limit2.Limit2Util.setDefaultResult;
import function com.citi.apollo.fmk.limit2.Limit2Util.totalOf;
function void calcSomething(LimitRequest req, Double value, Double total) {
List<Aggregate> l = new ArrayList<Aggregate>();
LimitAggregate a = new LimitAggregate(new Aggregate(value, total));
a.setPercentValue(total/total);
l.add(a);
req.result.addAggregates(l);
req.result.setStatus(PortfolioLimitStatus.PASS);
LimitRange lr = new LimitRange(req.getLimit().getMinValue(),
req.getLimit().getMaxValue(),
req.getLimit().getMinPerValue(),
req.getLimit().getMaxPerValue());
lr.setExcessConcentration(false);
req.result.setLimitRange(lr);
}
#declare any global variables here
rule "Commitment"
no-loop true
when
$req : LimitRequest ( limit.limitName == "Commitment" )
then
double total = totalOf($req, "commitmentamount");
calcSomething($req, total, total);
setDefaultResult($req, total, total);
end
在Eclipse新建Drools工程就可以导入自带的例子进行学习。
接下来:
如此,就可以对实例进行学习了。
下面只是参照HelloWorld写的一个小例子,当做笔记。
设计场景是银行借贷,当借贷款额小于1000时,直接借出,否则,需交由总经理处理。
1 新建工程,命名:drools,导入Drools相关jar包。
2 新建Package,命名:aaron.loan,在此包中建立class文件:pojo.java
pojo.java
package aaron.loan;
public class pojo {
int moneycount;
public int getMoneycount() {
return moneycount;
}
public void setMoneycount(int moneycount) {
this.moneycount = moneycount;
}
}
3 新建规则文件:DecisionRule.drl
Decision.drl
import aaron.loan.pojo;
rule "A"
when
$m:pojo(moneycount<1000);
then
System.out.println("Done!");
end
rule "B"
when
$m:pojo(moneycount>=1000);
then
System.out.println("Pass it to the management!");
end
4 在aaron.loan包中新建class文件:deploy.java
deploy.java
package aaron.loan;
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 deploy {
public void loanrool(int moneycount) throws Exception {
// TODO Auto-generated method stub
pojo p=new pojo();
try {
KnowledgeBase kbase = readKnowledgeBase();
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory
.newFileLogger(ksession, "test");
p.setMoneycount(moneycount);
ksession.insert(p);
ksession.fireAllRules();
System.out.print("moneycount:"+p.getMoneycount());
logger.close();
} catch (Throwable t) {
t.printStackTrace();
}
}
private KnowledgeBase readKnowledgeBase() throws Exception {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("DecisionRule.drl"), ResourceType.DRL);
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;
}
}
5 建立测试文件:test.java
test.java
package aaron.loan;
public class test {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
deploy dp=new deploy();
pojo pj=new pojo();
pj.setMoneycount(900); //此处900是任意设的值。
int mc=pj.getMoneycount();
dp.loanrool(mc);
}
}
运行test.java文件,控制台结果如下:
Done!
moneycount:900
到此,Drools小实例就运行成功了
。
another drl example:
#ident "%W%"
#created on: Nov 4, 2011
package rules.com.citi.gcd.ptrs
#list any import classes here.
import com.citi.apollo.fmk.limit2.LimitRequest;
import java.util.List;
import java.util.ArrayList;
import com.citi.apollo.fmk.limit.PortfolioLimitResult;
import com.citi.apollo.fmk.limit.PortfolioLimitStatus;
import com.citi.apollo.fmk.util.aggregation.Aggregate;
import com.citi.apollo.fmk.limit.LimitAggregate;
import com.citi.apollo.fmk.limit.LimitRange;
# functions
import function com.citi.apollo.fmk.limit2.Limit2Util.setDefaultResult;
import function com.citi.apollo.fmk.limit2.Limit2Util.totalOf;
function void calcSomething(LimitRequest req, Double value, Double total) {
List<Aggregate> l = new ArrayList<Aggregate>();
LimitAggregate a = new LimitAggregate(new Aggregate(value, total));
a.setPercentValue(total/total);
l.add(a);
req.result.addAggregates(l);
req.result.setStatus(PortfolioLimitStatus.PASS);
LimitRange lr = new LimitRange(req.getLimit().getMinValue(),
req.getLimit().getMaxValue(),
req.getLimit().getMinPerValue(),
req.getLimit().getMaxPerValue());
lr.setExcessConcentration(false);
req.result.setLimitRange(lr);
}
#declare any global variables here
rule "Commitment"
no-loop true
when
$req : LimitRequest ( limit.limitName == "Commitment" )
then
double total = totalOf($req, "commitmentamount");
calcSomething($req, total, total);
setDefaultResult($req, total, total);
end
相关文章推荐
- ArcGIS API for Silverlight 入门学习笔记(三):基础地图实例
- Spring框架的学习(零)-简单介绍与入门实例
- Spring学习笔记:第二章 Spring中IoC的入门实例
- 从零开始学习 webservice第一集,java webservice简单实例入门教程
- RabbitMQ学习总结(3)——入门实例教程详解
- java struts2入门学习实例--将客户端IP地址和访问方式输出到浏览器
- SpringMVC入门学习(一) 环境搭建+实例演示
- Drools 6.0入门:时钟实例
- 入门学习Linux常用必会60个命令实例详解 Linux必学的60个命令
- activiti学习笔记 最简单入门实例
- cocos2d x 入门学习(一)实例制作简单的射击小游戏Star Fighter
- Android 开发实例教程 零基础学习 1小时入门 图解说明教程 化复杂为简单 配置好的android开发环境 带实例
- ReactJS 入门实例学习
- 正则表达式的学习入门实例(java篇)
- 【Drools-开源业务规则引擎】入门实例(含源码)
- RabbitMQ学习总结(3)——入门实例教程详解
- 【Spring】Spring学习笔记-01-入门级实例
- 学习日志01 spring入门实例
- Spring 入门实例 简易登录系统(精通Spring+4.x++企业应用开发实战 学习笔记一)
- JS基础学习第六天:JavaScript对象入门(构造函数和实例对象)