规则引擎
嵌入在应用程序中的组件
规则引擎是从推理引擎演变而来的一种应用程序组件,它能够将复杂的业务决策从应用程序代码中分离出来,并使用预定义的语义模块来编写业务决策。规则引擎接收数据输入,解释并执行业务规则,从而作出相应的业务决策。
应用背景
企业在开发IT系统时面临以下挑战:
1. 需要自动化的管理流程以提高效率,尽管现代商业规则可能极为复杂。
2. 市场需求使得业务规则经常发生变化,因此IT系统必须能够快速、低成本地适应这些变化。
3. 为了快速、低成本地更新,业务人员应该能够直接管理和修改IT系统中的规则,而无需依赖于程序开发人员。
产品优点
规则引擎的优点在于它可以降低实现复杂业务逻辑的组件的复杂性,从而降低应用程序的维护和可扩展性成本。具体来说,规则引擎能够:
- 将商业决策者制定的商业决策逻辑与应用程序开发人员的技术决策相分离。
- 提高实现复杂逻辑的代码的可维护性。
- 允许在开发期间或部署后修复代码缺陷。
- 处理未预料的情况,即客户最初未能明确提出的业务逻辑。
- 支持组织对敏捷或迭代开发过程的需求。
代表企业
市场上有许多规则引擎可供选择,包括商业和开源版本。其中,Drools是开源规则引擎的一个例子,而VisualRules和iLog则是商业规则引擎的代表。
结合BPEL
随着越来越多的企业转向面向服务的方法,业务流程执行语言(BPEL)已成为协调服务和确保业务流程无缝执行的标准。这种趋势为企业提供了更加灵活和经济高效的业务流程管理机会。然而,在传统的业务流程中,决策点上的业务规则往往被嵌入到业务流程或自定义Java代码中,这可能导致未来的问题。为了避免这些问题,最佳实践是使用规则引擎将业务流程与业务规则分离,使业务用户能够独立地创建和修改规则,从而显着降低维护成本。
产品说明
规则引擎负责解析、调用和执行规则包。VisualRules规则引擎使用Java语言实现,并提供了多种外部调用接口,包括Java类接口、Socket、Servlet和SOAP等。Java类接口是核心接口,其他接口也通过此接口调用。为了简化规则引擎,规则包的解析已在规则编辑时完成,规则引擎仅处理规则包的调用和执行,并为其使用的数据库接口、Excel接口、内存表接口和XML接口提供默认实现。
执行原理
VisualRules规则引擎根据规则包名称获取对应的rsc文件,并将其加载到内存中,生成规则包执行上下文。随后,规则引擎将传递的参数传递到规则包执行上下文中,并开始执行规则包。执行完成后,规则引擎将规则包执行上下文中的数据返回给调用规则包的应用程序。这种简单的执行原理有助于保持规则引擎的稳定性和高性能。
接口信息
数据库接口
规则包的对象库中定义了数据库对象接口,如Database、Table、Select、View和Procedure。VisualRules规则引擎使用Java数据库连接实现这些接口,以确保良好的性能。用户也可以根据需要重新实现这些接口。
Excel接口
规则包需要调用的Excel接口主要包括IExcelBook、IExcelSheet、IExcelTableSheet和IExcelXYSheet。VisualRules规则引擎使用Apache POI实现Excel接口。
内存表格接口
规则包需要调用的内存表格接口为Sheet,VisualRules使用Object[][]实现内存表格接口。
Xml接口
规则包需要调用的XML接口为Node,VisualRules使用Jdom实现。
如何调用
规则引擎是一组Java类,供外部Java程序调用规则包。这些类包含在engine.jar中。外部Java程序调用规则包时,主要使用com.flagleader.engine.RuleEngine和com.flagleader.engine.RuleEngineFactory这两个类。RuleEngineFactory是获得规则引擎实例的工厂类,一般代码为RuleEngine ruleEngine = RuleEngineFactory.newInstance().getRuleEngine();之后,可以调用规则引擎中的put、execute和get方法。put方法用于传递输入值,execute方法用于运行指定的规则包,get方法用于获取输出值。典型的调用代码为:ruleEngine.put(传入对象);ruleEngine.execute("规则包调用名");传出对象 = ruleEngine.get("传出对象名");因此,外部程序调用规则包非常简单,只需几行代码即可完成。
目录
概述
应用背景
产品优点
代表企业
结合BPEL
产品说明
执行原理
接口信息
数据库接口
Excel接口
内存表格接口
Xml接口
如何调用
参考资料