使用 Drools 规则引擎实现业务逻辑
2010-04-02 00:00:00 来源:WEB开发网清单 6. WorkingEnvironmentCallback 接口
public interface WorkingEnvironmentCallback {
void initEnvironment(WorkingMemory workingMemory) throws FactException;
}
所以,应该是 executeRules() 方法的调用者将知识插入到 WorkingMemory 实例中的。稍后将展示这是如何实现的。
TestsRulesEngine 类
清单 7 展示了 TestsRulesEngine 类,它也位于 demo 包中:
清单 7. TestsRulesEngine 类
public class TestsRulesEngine {
private RulesEngine rulesEngine;
private TestDAO testDAO;
public TestsRulesEngine(TestDAO testDAO) throws RulesEngineException {
super();
rulesEngine = new RulesEngine("testRules1.drl");
this.testDAO = testDAO;
}
public void assignTests(final Machine machine) {
rulesEngine.executeRules(new WorkingEnvironmentCallback() {
public void initEnvironment(WorkingMemory workingMemory) {
// Set globals first before asserting/inserting any knowledge!
workingMemory.setGlobal("testDAO", testDAO);
workingMemory.insert(machine);
};
});
}
}
TestsRulesEngine 类只有两个实例变量。rulesEngine 属性是 RulesEngine 类的实例。 testDAO 属性保存对 TestDAO 接口的具体实现的引用。 rulesEngine 对象是使用 "testRules1.drl" 字符串作为其构造函数的参数实例化的。testRules1.drl 文件以声明方式捕获 要解决的问题 中的业务规则。 TestsRulesEngine 类的 assignTests() 方法调用 RulesEngine 类的 executeRules() 方法。在这个方法中,创建了 WorkingEnvironmentCallback 接口的一个匿名实例,然后将该实例作为参数传递给 executeRules() 方法。
更多精彩
赞助商链接