WEB开发网
开发学院软件开发Java 使用 Drools 规则引擎实现业务逻辑 阅读

使用 Drools 规则引擎实现业务逻辑

 2010-04-02 00:00:00 来源:WEB开发网   
核心提示: 在清单 4 中可以看到,RulesEngine 类的构造函数接受字符串值形式的参数,使用 Drools 规则引擎实现业务逻辑(9),该值表示包含业务规则集合的文件的名称,该构造函数使用 PackageBuilder 类的实例解析和编译源文件中包含的规则,如果仔细看一下该方法的签名,将会注意到所传

在清单 4 中可以看到,RulesEngine 类的构造函数接受字符串值形式的参数,该值表示包含业务规则集合的文件的名称。该构造函数使用 PackageBuilder 类的实例解析和编译源文件中包含的规则。(注意: 该代码假设规则文件位于程序类路径中名为 rules 的文件夹中。)然后,使用 PackageBuilder 实例将所有编译好的规则合并为一个二进制 Package 实例。然后,使用这个实例配置 Drools RuleBase 类的一个实例,后者被分配给 RulesEngine 类的 rules 属性。可以将这个类的实例看作规则文件中所包含规则的内存中表示。

清单 5 展示了 RulesEngine 类的 executeRules() 方法:

清单 5. RulesEngine 类的 executeRules() 方法

public void executeRules(WorkingEnvironmentCallback callback) { 
  WorkingMemory workingMemory = rules.newStatefulSession(); 
  if (debug) { 
   workingMemory 
     .addEventListener(new DebugWorkingMemoryEventListener()); 
  } 
  callback.initEnvironment(workingMemory); 
  workingMemory.fireAllRules(); 
} 

executeRules() 方法几乎包含了 Java 代码中的所有魔力。调用该方法执行先前加载到类构造函数中的规则。Drools WorkingMemory 类的实例用于断言或声明知识,规则引擎应使用它来确定应执行的结果。(如果满足规则的所有条件,则执行该规则的结果。)将知识当作规则引擎用于确定是否应启动规则的数据或信息。例如,规则引擎的知识可以包含一个或多个对象及其属性的当前状态。

规则结果在调用 WorkingMemory 对象的 fireAllRules() 方法时执行。您可能奇怪(我希望您如此)知识是如何插入到 WorkingMemory 实例中的。如果仔细看一下该方法的签名,将会注意到所传递的参数是 WorkingEnvironmentCallback 接口的实例。executeRules() 方法的调用者需要创建实现该接口的对象。该接口只需要开发人员实现一个方法(参见清单 6 ):

上一页  4 5 6 7 8 9 10  下一页

Tags:使用 Drools 规则

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接