使用 Drools 规则引擎实现业务逻辑
2010-04-02 00:00:00 来源:WEB开发网示例程序使用 Drools 规则引擎对 Machine 类的实例求值。基于 Machine 实例的 type 和 functions 属性的值,规则引擎确定应分配给 tests 和 testsDueTime 属性的值。
在 demo 包中,还会发现 Test 对象的数据访问对象 (TestDAOImpl) 的实现,它允许您按照 ID 查找 Test 实例。该数据访问对象极其简单;它不连接任何外部资源(比如关系数据库)以获得 Test 实例。相反,在其定义中硬编码了预定义的 Test 实例集合。在现实世界中,您可能会具有连接外部资源以检索 Test 对象的数据访问对象。
RulesEngine 类
demo 中比较重要(如果不是最重要的)的一个类是 RulesEngine 类。该类的实例用作封装逻辑以访问 Drools 类的包装器对象。可以在您自己的 Java 项目中容易地重用该类,因为它所包含的逻辑不是特定于示例程序的。清单 4 展示了该类的属性和构造函数:
清单 4. RulesEngine 类的实例变量和构造函数
public class RulesEngine {
private RuleBase rules;
private boolean debug = false;
public RulesEngine(String rulesFile) throws RulesEngineException {
super();
try {
// Read in the rules source file
Reader source = new InputStreamReader(RulesEngine.class
.getResourceAsStream("/" + rulesFile));
// Use package builder to build up a rule package
PackageBuilder builder = new PackageBuilder();
// This parses and compiles in one step
builder.addPackageFromDrl(source);
// Get the compiled package
Package pkg = builder.getPackage();
// Add the package to a rulebase (deploy the rule package).
rules = RuleBaseFactory.newRuleBase();
rules.addPackage(pkg);
} catch (Exception e) {
throw new RulesEngineException(
"Could not load/compile rules file: " + rulesFile, e);
}
}
...
更多精彩
赞助商链接