论坛首页 综合技术论坛

规则引擎开发规范--程序开发类规范<连载1>

浏览 1409 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2016-04-08  
1.1.Java程序调用规则

   Java程序可以通过engine.jar中提供的API调用规则包或者规则包中的一级规则,调用时,简单的调用代码如下:
RuleEngine ruleEngine = RuleEngineFactory.newInstance().getRuleEngine();
ruleEngine.put("export_0", "测试");
try {
ruleEngine.execute("simple.helloworld");
System.out.println(ruleEngine.get("export"));
} catch (Exception e) {
e.printStackTrace();
}
以上是标准的调用方法。
RuleEngineFactory.newInstance().getRuleEngine()是得到一个引擎实例,每个引擎实例会分配一个单独的map用于接收java端调用的数据。
ruleEngine.put方法用于将调用的数据存入map中,ruleEngine.execute执行后,会根据传入的规则包名称,找到具体的规则包,并且将map中的所有数据传给此规则包。当规则包所有的规则执行完毕后,会将执行完毕的值,写回到map中。ruleEngine.execute执行时会出现异常,如果出现com.flagleader.engine.RuleEngineException:  103 : 导入规则包simple.helloworld,发现路径中/simple/helloworld.rsc文件不存在 这类错误则检查classpath是否存在simple/helloworld.rsc文件或者在engine.conf配置文件中指定的ruleEngineClassDir目录下是否存在simple/helloworld.rsc文件。
ruleEngine.get方法,可以读取map中的返回值。
因此,如果需要连续调用两个规则包,则需要执行两次RuleEngineFactory.newInstance().getRuleEngine(),否则这两次调用会共用同一个map,除非第二次调用的规则包需要用到前一次调用结果。

1.2.Java程序调用规则包中的内部规则

如果要调用规则包中的内部规则,则可以使用ruleEngine.execute(String)方法,该方法中的规则包名称可以使用@来访问规则包中的内部规则,比如:
ruleEngine.execute("simple.helloworld@规则1");
表示执行simple.helloworld规则包下面的规则1子规则。
注意,子规则最多可以调用二级,也就是说第三层的子规则不能被访问。
比如 规则集@规则集@规则,并不能被访问。
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics