Drools 是一个建立在Rete 模式匹配运算法则基础之上的规则引擎。
关于规则引擎可以参考http://www.mituosi.cn/create/java/182644787.html
我也是才开始用,感觉实现比较复杂的而且需要经常修改的业务逻辑比较方便,速度当然要查那么一点点,不过不是大问题啊.
下面就来说一说基本配置。
开发环境,必须要eclipse 3.2,因为要使用到其中一个jar文件。我就是在这里折磨了几天才搞明白。包名就是org.eclipse.jdt.core_3.2.0.v_671.jar。
1)取得规则
a. 得到规则脚本文件IO
Reader drl= new InputStreamReader(TestDrools.class.get...( "/testDrools.drl") );
Reader dsl= new InputStreamReader(TestDrools.class.get...(( "/testDrools.dsl") );
b. 使用builder取得一个package
PackageBuilder builder = new PackageBuilder();
c.用addPackageFromDrl向builder输入脚本
builder.addPackageFromDrl( drl,dsl );
//如果没有dsl文件
则为 builder.addPackageFromDrl( drl);
d. 构造baseRule
Package pkg = builder.getPackage();
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage( pkg );
2) 执行规则
a. 从规则中获取规则执行引擎WorkingMemory
WorkingMemory workingMemory = ruleBase.newWorkingMemory();
b. 向引擎中装载事实
workingMemory.assertObject(fact1);
workingMemory.assertObject(fact2);
c. 执行所有规则
workingMemory.fireAllRules();
d. 获取规则返回对象
Object returnObject = workingMemory.getObjects(class) ;
3) drl 和 dsl 文件
a.单独 drl文件
package packageName;
import class;
#expander dsl files
rule "rulename1"
agenda-group "ruleGroupName"
when
Object($object: condition1) //$object下面要使用的满足条件的对象
then
assert(new ReturnObject($object, ...));
end
rule "rulename2"
genda-group "ruleGroupName" // same with abovw
when
Object($object: condition2) //$object下面要使用的满足条件的对象
then
assert(new ReturnObject($object, ...));
end
b.drl 和 dsl文件
dsl: test.dsl
[when]Hello {name} = Object($object: name == {name} )
[then]print {name} = System.out.println("Hello "+{name});
drl: test.drl
package packageName;
import class;
expander test.dsl
rule "rulename1"
when
hello xiaohongli
then
print xiaohongli
end