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

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

 2010-04-02 00:00:00 来源:WEB开发网   
核心提示: 清单 6. WorkingEnvironmentCallback 接口publicinterfaceWorkingEnvironmentCallback{voidinitEnvironment(WorkingMemoryworkingMemory)throwsFactException;}所以,

清单 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() 方法。

上一页  5 6 7 8 9 10 

Tags:使用 Drools 规则

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