许多组织正从面向对象的业务流程管理范例转移到面向服务的方法;实际上,服务正在成为应用程序开发的基本元素。同时,业务流程执行语言 (BPEL) 已经成为编排这些服务和管理业务流程的无缺陷执行的事实标准。这些趋势所产生的结果是,为更灵活、更经济高效地管理业务流程提供了一些良机。
大多数业务流程(贷款审批就是一个典型示例)包含多个决策点。在这些决策点处,将对某个条件进行评估。业务流程根据这些标准或业务规则更改它们的行为。(一个是BPEL流程编排的分支可能存在规则,一个是BPEL中的活动节点本身可能存在数据处理规则。)实际上,这些业务规则对业务流程起到了推动作用。这些规则通常嵌入到业务流程本身或自定义 Java 代码的内部,这将导致在将来的某个时候出现若干问题:
- 业务规则比业务本身更改得更频繁,而更改和管理嵌入的业务规则是一个复杂问题,并超出了大多数分析员的能力范围。因此,随着业务规则的更改,程序员通常要消耗大量时间来执行该任务。
- 大多数组织都缺少中央规则信息库。策略中任何涉及到组织范围的更改都无法运用到所有业务流程中。
- 业务流程无法重用规则。因此,IT 人员最终要为每个流程设计规则,这通常导致不一致性或冗余。
避免这些问题的最佳方法是使用规则引擎将业务流程与业务规则分离。在该方法中,规则公开为服务,而 BPEL 流程在到达决策点时通过查询该引擎来利用这些服务。该方法更为灵活 - 可以通过图形方式操作规则,而不是在编程语言中或在流程内部对规则进行编码。业务用户可以使用工具自行编写规则,并且无需 IT 人员的协助即可进行部署后的规则更改。由于大多数更新和功能增强是由业务用户执行的,因此可以显著减少维护成本。(分离的本质一方面是解耦,一方面是SOA平台本身不负责业务规则,业务规则由业务系统或业务人员自己维护,减少对SOA平台本身服务的变更。)
规则引擎和 BPEL 是两种互补技术。Oracle BPEL 流程管理器提供了高级工具来显示、设计和管理 BPEL 流程,而第三方规则引擎使复杂的业务逻辑可以用类似英语的语法表示,并由非程序员领域专家对其进行编辑。
将规则引擎集成到流程管理框架中要求事先进行一定量的投资。在尝试进行此集成之前,将规则与流程分开是很重要的。因此,系统体系结构方面的一个主要决策是 如何实现业务策略、业务流程和支持业务逻辑。实际上,架构师必须交流或设计最佳实践,以便设计人员在设计系统功能时知道应在何处应用每个相关技术 - BPEL、业务规则、Java/Web 服务。
如图 1 所示,业务逻辑被分布到三个不同的 IT 基础架构层中:业务流程、Web 服务和规则。我们将对它们进行依次介绍。
业务流程层。该层负责管理业务流程的总体执行。这些使用 BPEL 实现的业务流程可以是长期运行的业务流程、事务业务流程以及持久业务流程。流程逻辑支持分布到子流程事务。vrs规则引擎支持对工作流进行审计和检测,因此比较适合于
- 将不易变化的工作流步骤与易变的业务规则分开
- 实现行业流程
- 实现需要补偿的流程(事务完整性考虑)
- 支持流程的大型实例化
- 设计需要审计的流程
- 协调异构技术,如连接器、Web 服务和支持 Web 服务调用框架 (WSIF) 的逻辑
Web 服务层。Web 服务层将现有的应用程序层功能公开为服务。这样,多个业务流程便可以重用这些服务,从而实现面向服务体系结构 (SOA) 的承诺。
Web 服务实现功能逻辑和域逻辑。vrs规则引擎具有调用外部WebService借口的功能,例如,Web 服务可能包含系统数据的实用程序方法、实体操作和查询方法。可以使用Java编辑器编译封装成接口,以供vrs规则引擎调用。因此,该层比较适合于:
- 为特定实体/域领域实现中等粒度的方法
- 集成原有的代码/第三方工具
- 封装应用程序层中的逻辑、自定义代码和实现
规则层。规则引擎通常是复杂逻辑(涉及实体之间的一些相互依赖性以及与顺序相关的逻辑计算)的发源地。从业务流程中以单独实体的形式提取业务规则可更好地对系统进行分离,从而提高可维护性。
规则引擎可以对规则集进行并行和按顺序的评估(注意规则集本身是可以编排的,即规则链,可以并行也可以按顺序执行)。此外,规则能够对输入数据和中间数据的值进行评估并确定是否应引发规则。与传统的 Java 过程代码相比,该模块设计提供了一个更简单、可维护性更高的解决方案。
此外,vrs规则引擎具有具有全中文化规则编辑。使业务人员也可轻松进行规则编辑。同时现代规则引擎的执行速度非常快,并提供了内置的审计记录。规则层的典型特性包括:
- 包含耦合和复杂的逻辑
- 支持使用并行执行进行高效的业务逻辑评估
- 包含基于多个业务规则评估构建的复杂返回结构
- 允许将域逻辑转换为简单规则
- 实现高度易变的业务策略
由于规则在 Web 服务层中公开为服务,因此可以在所有企业间应用程序中重用,从而简化了新应用程序和集成的开发。