面向 WLI 用户的 SOA 套件概要 比较 WLI 数据库事件生成器与 Oracle 数据库适配器作者:Nacho Lafuente 和 Miquel Lopez-Miralpeix 面向 WLI 用户的 SOA 套件概要系列的这一部分将介绍与 WebLogic Integration 的数据库事件功能相对应的 Oracle BPEL 流程管理器功能。2009 年 4 月发布
本文内容: 简介信息系统的主要目的之一就是实现数据处理自动化。当前大多数 IT 需求都基于数据存储、转换和交换。迄今为止,数据库仍是以结构化及可访问方式持久保存信息的一种最常用的选择。集成操作通常需要与数据库交互,以便更新某一资产,或者接收事件通知并采取某种操作。 本文重点介绍 WebLogic Integration (WLI) 和 Oracle SOA 套件(主要是 BPEL 流程管理器 (BPEL PM))如何监听数据库中发生的事件。本文还分析这些事件的接收和处理(一旦检测到事件)。 本文包含的信息将帮助有经验的 WLI 用户了解 BPEL PM 中使用的数据库事件概念,并在这些用户学习 SOA 套件时为其提供快速入门。 有关 BPEL PM 的更多信息,请参阅 Oracle BPEL 流程管理器。 WLI 数据库事件生成器WLI 事件生成器简介WLI 引入了事件生成器 (EG) 的概念。事件生成器触发事件以响应与事件生成器关联的系统中发生的活动。发生特定事件时,事件生成器负责通过消息代理通道发布有关此事件的信息。消息代理通道是支持发布和订阅操作的独立通信管道,与 JMS 主题非常类似。 每个事件生成器都旨在监视和通知检测到的事件,以便 WLI 流程能够处理此事件。 WLI 事件生成器可以使用不同方法监视系统变更:
根据部署类型,事件生成器还分为可集群化的和固定的两类。可集群化的事件生成器统一部署到集群的每个实例。固定事件生成器仅部署到集群的单个实例 — 如果出现故障,则必须将事件生成器迁移到另一个实例。 WLI 10.x 当前支持下表所述的事件生成器。
数据库事件生成器体系结构数据库事件生成器在有关 WLI 的文章中被称作 RDBMS 事件生成器。请参阅 RDBMS 事件生成器用户指南,以获得数据库事件生成器、支持的特性和限制的说明。 数据库事件生成器旨在提供与数据库的集成,以便检测特定事件并使用消息代理通道将其在内部发布到 WLI。 有两种不同的策略支持事件检测:事件触发器 和 SQL 前/后查询。 事件触发器 策略旨在利用数据库触发器,使事件生成器能够检测到任何插入/更新/删除的 行。 当事件生成器配置为使用事件触发器时,它将创建一个触发器,用于检测用户表的更改并将更改复制到影子表。影子表是在配置数据库事件生成器时由 WLI 创建的一个辅助表,用于临时存储仍在等待轮询的事件。 示例: 某公司每次聘用新员工时都需要启动一个业务流程。将员工信息存储在 Oracle 数据库的一个表中。该业务流程将使用 WLI 实施,并且只需要员工标识即可继续。 应该使用 WLI 数据库事件生成器检测对员工表执行的插入。将选择事件触发器策略,并且 WLI 将创建一个触发器以处理对员工表的插入操作。此触发器将员工标识复制到影子表,并且将添加一些内部信息(如时间戳)。事件生成器最后将轮询影子表,从中检索最新插入的员工标识。此信息将发布到消息代理通道,同时将激活 WLI 业务流程。 SQL 前/后查询 策略旨在使用自定义 SQL 查询检测事件,此查询将选择数据、发布数据然后执行后查询。每当触发器不足以捕获所需全部信息(例如,信息可能是两个表之间联接的结果)时,建议使用此策略。
示例: 某网上商店每次在系统中下订单时都需要启动一个业务流程。订单信息将分散到 Oracle 数据库的不同表中。一个表存储订单项目;另一个表存储每个项目的物理位置;最后,再一个表存储常规订单信息。该业务流程将使用 WLI 实施,并且需要这三个表中的信息才能继续。业务流程应该只在订单中的标记设置为“ready”状态时才启动。执行 WLI 业务流程之后,此标记应该更改为“done”。无法保证何时设置此标记 — 插入/更新和标记修改之间不存在任何关系。 应该使用 WLI 数据库事件生成器将更改插入订单表。但是,事件触发器策略效率较低,因为不允许它检查任何条件。它可以在每次插入或更新订单时生成事件,以便 WLI 流程可以检查标记状态。我们认为此方法效率较低。 我们认为 SQL 前/后查询策略可以更高效地处理这种情况。可以对前查询进行配置,使其有选择地对来自订单、位置和项目的信息进行联接。后查询可以是一个将订单标记更改为“processing”的更新。 数据库事件生成器轮询最后将执行前查询并检索某些行的信息。检索到的信息将发布到消息代理通道。对于检索到信息的每行,数据库事件生成器都将执行后查询并将标记更改为“processing”状态。将激活 WLI 业务流程,并且在成功完成之后将状态标记更新为“done”。 下图表示数据库事件生成器体系结构的逻辑视图。用户信息为绿色,数据库事件生成器构件为橙色,用户应用程序构件为蓝色。 数据库事件生成器遵循以下过程:
数据库事件生成器高级概念数据库事件生成器配置高级配置信息在 事件生成器中进行了解释。请仔细阅读有关适用于数据库事件生成器的不同设置的信息。消息代理通道 数据库事件生成器将已检索信息发布到消息代理通道。此信息可以使用 XML 或原始格式表示,具体取决于通道类型。 以下 XML 模式代码段显示不同消息代理通道的定义 <?xml version="1.0"?> <channels xmlns="http://www.bea.com/wli/broker/channelfile" channelPrefix="/DatabaseEventGenerator" xmlns:eg="http://www.bea.com/wli/eventGenerator" xmlns:dp="http://www.bea.com/wli/control/dynamicProperties" xmlns:foo="http://www.bea.com/WLI/RDBMS_EG/databaseeg"> <!- A channel passing XML, the XML is element TableRowSet in the foo namespace -> <channel name ="TypedXml" messageType="xml" qualifiedMessageType="foo:TableRowSet"/> <!- A simple channel passing XML -> <channel name ="SimpleXml" messageType="xml"/> <!- A simple channel passing String -> <channel name ="SimpleString" messageType="string"/> <!- A simple channel passing rawData -> <channel name ="SimpleRaw" messageType="rawData"/> </channels> 使用控制台配置数据库事件生成器时,WLI 将自动创建一个 XML 模式,此模式可反映将发布到消息代理通道的 XML 文档的格式。此模式定义的内容取决于针对数据库事件生成器所选择的表列。 此 XML 模式可位于域根目录中以事件生成器规则命名的目录内。默认情况下,此 XML 模式名为 TableRowSet.xsd。此模式将定义一个名为 TableRowSet 的包装顶端元素。此顶端元素的作用是在单个 XML 文档中表示一组行,以便到消息代理通道的单个发布可以同时表示多个行。每行都包含在 TableRow 元素内。下图显示一个示例 XML 模式。 每个轮询和事件的最大行数数据库事件生成器提供了配置参数以限制在单个轮询中处理的事件数和行数。 此特性是否能够限制最大返回行数取决于数据库供应商。请注意,某些数据库供应商不支持此特性。 有两个参数可控制此行为:
让我们使用示例来分析这些参数。激活数据库事件生成器轮询器。要查询的数据库包含一个有 500 个记录的表。下表显示了上述参数如何影响已发布事件的数量和内容。
事务处理行为每个 WLI 流程都是事务流程,并且数据库事件处理也得益于此行为。WLI 利用 Oracle WebLogic Server JTA 支持和执行事务。每个 WLI 流程都定义一个在激活流程时启动的隐式事务。成功完成后,将提交此事务;如果出现任何错误,则将回滚此事务。 WLI 消息代理基于 WebLogic JMS — 它也支持事务处理行为。数据库事件生成器在内部利用 JMS 事务以确保在事务内处理事件。将数据库事件生成器实施为一个 MDB(消息驱动的 EJB),并利用 EJB 容器事务特性。 下图表示使用数据库事件生成器时涉及的事务边界。消息代理将划分此流程中涉及的事务的界限。 事务 1 与事件生成器的内部处理相关。事件生成器激活时该事务启动,该事务包含数据库操作、事件组合和事件发布。如果不存在错误,将提交此事务。如果发现任何错误,则将回滚此事务 — 丢弃数据库中的更改,并且不发布任何事件。 消息代理将事件生成与事件处理相分离。事务 2 在 WLI 引擎启动 WLI 流程(订阅包含数据库事件的消息代理通道)的新实例时启动。如果 WLI 流程成功处理了来自消息代理的事件,则将提交此事务 — 否则,将回滚此事务。 Oracle 数据库适配器Oracle 应用服务器适配器简介Oracle 应用服务器 (AS) 适配器是 Oracle 融合中间件的一个组件,非常适用于 SOA 解决方案,并可为 200 多个打包应用程序提供强健、可伸缩的灵活连接平台。Oracle AS 适配器可以由其他 SOA 套件组件(如 BPEL PM)和 JEE 应用程序使用。 对于任何其他 SOA 套件组件,Oracle AS 适配器能够在 WebLogic 和 OC4J 之外的平台(包括 Websphere)上运行。Oracle AS 适配器能够重用现有资产,方法是将这些资产公开为可以与新应用程序集成并提供“完全集成”的服务。Oracle AS 适配器将底层后端应用程序公开为服务,并将它们表达为可以由其他 Oracle 融合中间件产品调用的 WSDL 文件。Oracle AS 适配器支持多种标准 — Web 服务定义语言 (WSDL)、Web 服务调用框架 (WSIF)、Java 连接器体系结构 (JCA) 以及 XML。 适配器提供以下类型的服务以简化应用程序之间的通信:
|