简介 本文介绍了一种最佳实践,可用它来监视使用了 Oracle 数据库的非 BPEL EntERPrise Information Systems (EIS) 过程。这种最佳实践利用在本文的 下载 部分提供的 Oracle Emitter 工具转换事件数据,甚至在需要的时候扩大(augment)事件数据,然后再将数据继续前递以供使用。借助少许定制,就可以很轻松地将 Oracle Emitter 安装到现有的 WebSphere Business Monitor(本文简称为 Monitor)平台或 WebSphere Application Server(本文简称为 Application Server)。 Common Base Event (CBE) 是一种数据格式,用来打包和发送供 Monitor 使用的事件。只要流入业务系统的业务数据可被捕获并转变为 CBE 事件,Monitor 就能提供一种近乎实时的监控业务活动的能力并进而捕获任何性能症状。我们在本文中将要使用的这个场景展示了一种端对端的解决方案,其中使用 Oracle Emitter 发出并转换供 Monitor 监视的业务数据。能反映业务活动情况的结果指标会被呈现至 Monitor 的 Business Space 仪表盘供报告用。 在本文随后的章节中,我们将讨论: 这个场景 如何使用 Oracle Emitter Oracle Emitter 如何工作 场景 图 1 显示了我们在本文中使用的这个场景。 图 1. Oracle Emitter 场景 业务监控的原理是所实现的业务过程被设计为能够在指定的数据点生成事件。之后,这些事件可被定义并扩大来承载能反映所发生的业务活动的数据和指标,比如变量状态和值变更。这些变更活动以及相应的数据都被记录到一个事件表内。这些事件记录然后用于触发事件的发出以便进行监控。这一过程中的主要阶段总结如下: 业务过程与底层的 Oracle 数据库交互并在一些应用程序表内存储或修改数据。 Oracle Emitter 捕获这些来自数据库的操作(比如插入、更新和删除)、检索相应的数据、将数据转变为 CBE 并将其作为事件发出。 Monitor 模型从 Common Event Infrastructure (CEI) 接收这些 CBE 并计算业务度量。 这些业务度量和 KPI 显示在 Business Space 内。 如何使用 Oracle Emitter 本节介绍了如何在现有的 Monitor 安装内使用 Oracle Emitter。我们将使用 Clips and Tacks Order Handling Future 1 Process 作为示例。 Clips and Tacks Order Handling Future 1 Process 是随 IBM BPM 产品套件发布的一个公共示例。这个示例的主要特点就是针对涉及到订单处理与验证以及送货处理的常规客户订单处理过程有非常详细的处理模型。这个过程包含三个活动:Place Order、Review Order 和 Ship Order。订单信息存储于四个表内:Customer、Product、Order 及 OrderItem。 开始之前,先下载 Clips And Tacks 示例 和 Oracle Emitter 包。遵照 Clips And Tacks 示例中的指导来设置 Clips And Tacks 过程。 完成如下这些步骤来设置 Oracle Emitter。 为 Oracle Emitter 配置环境。 开发监控模型。 为 Oracle Emitter 配置环境 在安装 Oracle Emitter 应用程序之前,需要配置数据源、调度程序和系统表。为此,需要完成如下步骤: 为 Emitter Scheduler 和 Oracle Emitter 创建一个身份验证别名: 启动 Monitor 服务器管理控制台。 选择 Security => Secure administration, applications, and infrastructure => Java Authentication and Authorization Service => J2C authentication data。 单击 New 通过如下属性创建一个新的身份验证别名: Alias: DBEmitterAlias User ID: WBMEMIT Password: (Specify the password for user WBMEMIT to connect to the database.) Description: Authentication Alias for Scheduler and DB Emitter to Connect to database 为 Emitter Scheduler 和 Oracle Emitter 创建一个 JDBC Provider: 启动这个管理控制台。 选择 Resources => JDBC Providers 并将范围设置为 Server。 创建一个名为 Oracle JDBC Driver (XA) For DBEmitter 的 JDBC Provider。 指定存放 Oracle JDBC 驱动程序 (ojdbc14.jar) 的目录为 Oracle_JDBC_DRIVER_PATH。比如,在 Windows 下: <oracle\product\version>\db1\jdbc\lib\ojdbc14.jar 为 Emitter Scheduler 创建一个数据源: 选择新创建的这个 provider,然后选择 Additional Properties 部分中的 Data sources。 单击 New 通过如下属性新建一个数据源: Name: SKDLR Datasource JNDI name: jdbc/skdlr Component-managed authentication alias: <Node Name>/DBEmitterAlias Description: JDBC data source for SKDLR database URL: URL to the Monitor database. For example, jdbc:oracle:thin:@localhost:1521:orcl Data store helper class name: Oracle 10g data store helper 复选 Use this Data Source in container managed persistence (CMP) 为 Oracle Emitter 创建一个调度程序: 启动这个管理控制台。 选择 Resources => Schedulers 并将范围设置为 Server。 单击 New 通过如下属性创建一个新的调度程序: Name: Poller for DB Emitter JNDI name: sched/Poller(这是在 EJB 部署描述符中作为一个环境项指定的默认设置) Description: Scheduler for DB Emitter''s Event Table Poller Data source JNDI name: jdbc/skdlr Data source alias: <Node Name>/DBEmitterAlias Table prefix: DBEMTR_ Poll interval: 30 Work managers: wm/default 单击 OK,然后单击 Save。 在 Schedulers 页面上,选择最新创建的 Poller 调度程序并单击 Create tables。 创建此事件及可由 Oracle Emitter 使用的日志表: 用用户 id system 打开 sqlplus。 运行随本文所附带的 createEventAndLogTable.ddl 脚本。这会创建可由 Oracle Emitter 使用的事件表、日志表以及一些必需进程。 为 Oracle Emitter 创建一个数据源: 在 JDBC providers 页面,单击新创建的 Oracle JDBC Driver (XA) For DBEmitter,然后单击 Additional Properties 部分中的 Data sources。 单击 New 通过如下属性创建一个新的数据源: Name: DB Emitter Datasource JNDI name: jdbc/DBEmitter (这是在 EJB 部署描述符中作为一个环境项指定的默认设置) Component-managed authentication alias: <Node Name>/DBEmitterAlias Description: DBC Datasource for DBEmitter URL: 连接到 monitor 数据库的那个 URL。例如,jdbc:oracle:thin:@localhost:1521:orcl Data store helper class name: Oracle 10g data store helper 复选 Use this Data Source in container managed persistence (CMP)。 创建必需的目录。如下的这个表列出了 Windows™ 系统上的默认目录。
使用管理控制台部署这个 Oracle Emitter 企业应用程序(DBEmitterEAR.ear)。接受所有默认值并在部署完成后保存配置。 将随本文附带的事件配置文件复制到 <EventConfDir>。针对订单处理过程有三个事件配置文件: OrderCreate.XML、OrderItemAdd.xml 和 OrderUpdate.xml。 重启 Monitor 服务器来运行这个调度程序。 让浏览器指向 http://<hostname>:<WC_defaulthost port>/DBEmitterWeb/CreateTriggerServlet。 这将会在此数据库中为所有在 <EventConfDir> 目录中定义的事件定义一个触发器。每当改变事件定义文件、添加新的事件定义文件或者改变应用程序表的结构时,都需要重启 Oracle Emitter 并将浏览器指向上述链接来创建或更新触发器。 开发监控模型 在本文中,我们将不会介绍常见的一些监控模型的开发任务,比如创建指标、触发器、秒表、度量、规格以及 KPI。有关监控模型创建的完整步骤,请参阅 Clips and Tacks 示例 。在本文中,我们将只介绍使用 Oracle Emitter 扩展监控能力所需要的步骤。 为了根据配置为所有事件创建事件模式,需要让浏览器指向 http://<hostname>:<WC_defaulthost port>/DBEmitterWeb/CreateSchemaServlet。事件模式在 <EventSchemaDir> 目录中生成并可在监控模型创建时作为事件定义导入到这个监视模型内。每当改变事件定义文件、添加新的事件定义文件或者改变应用程序表的结构时,都需要重启这个 Oracle Emitter 并将浏览器指向上述链接来创建或更新这个模式。 将如图 2 所示的事件模式作为事件定义导入到这个监控模型。 我们要创建一个具有导入事件模式的监控模型。因为由 Oracle Emitter 发送的 CBE 不包含任何 BPEL 数据,比如 ECSParentID、ECSCurrentID 等,所以只能使用业务逻辑来关联所有的事件。在订单处理过程的监控模型中,有两个监控上下文:OrderMM MC 和 OrderItemMC。 接下来,我们需要创建入站事件。有关如何创建入站事件的指导,请参阅 Clips And Tacks 示例文档。图 3 给出在此模型中使用的一个入站事件的例子。请特别留意过滤器条件和相关表达式,它们均与业务逻辑相关。过滤器条件确保只有相关的事件才会被特定的模型接受,而相关表达式则确保事件能被应用到正确的实例。 为监控上下文指定键。有关如何指定键的详细指导,请参阅 Clips And Tacks 示例文档。如前所述,我们将使用业务逻辑及其相应的有效负载数据来关联事件与监控上下文实例。在这个示例模型中,Order Number 被设置为 OrderMM MC 的键。 Product Number 被设置为 OrderItemMC 的键。在子监控上下文(MC)中的事件应该与父 MC 内的键相关联。这样一来,Order Number 和 Product Number 被用来关联此模型中的这三个事件。这样的键关系与数据库中的主和外键关系是一致的。Order Number 是 OrderMain 表的主键,而 Order Number 和 Product Number 则是 OrderItem 表的主键。Order Number 是 OrderItem 表的外键,它引用 Order 表。图 4 给出了 OrderMM MC 的键。 此外,还需要定义触发器以便在订单处理过程结束时终止这个监控上下文。当订单被拒或已经发货后,订单处理过程实例就会终止,所以需要定义两个触发器来终止 OrderMM MC:一个是 OrderShipTr,另一个是 OrderDeclinedTr。图 5 展示了这个 OrderShipTr。 在完成入站事件创建、键设置和触发器后,接下来就需要继续扩大这个监控模型。更多信息,请参考本文随附的 OrderMM 模型。 现在,就可以用这个模型来消费订单处理过程通过 Oracle 数据库发射器发出的事件了。为了简便起见,在 sqlplus 内执行 insertData.ddl 以便模拟订单处理过程的运行,然后检查业务空间来查看监控结果,如图 6、7 和 8 所示。
Oracle Emitter 如何工作 有了 Oracle Emitter 工具,我们就可以借助从运行于 Oracle 数据库上的非 BPEL 过程发出的业务事件来监控业务活动。Oracle Emitter 是一个运行在 WebSphere Application Server 上的 J2EE 应用程序。图 9 展示了 Oracle Emitter 的过程流。 图 9. Oracle Emitter 过程流 事件表和日志表是可由 Oracle Emitter 使用的系统表。 Oracle Emitter 本身包含两个部分:一个事件配置加载器和一个发射器。事件配置加载器(图 9 左侧)负责从文件中读取事件配置信息、从数据库中获取应用程序表的元数据、创建触发器以插入监控模型所用的事件记录及事件定义(模式)文件。在应用程序启动期间,事件配置加载器只调用或初始化一次。发射器(在图 9 的右侧)是通过扩展来自 Event Framework API 的一些类和特定的接口实现的。其任务列表涵盖:从事件表轮询(poll)数据、从应用程序表获取应用程序数据、将业务数据转变为 CBE 事件有效负载的 V6.1 xsd 格式、将事件发送至 CEI、删除事件记录以及记录结果。在接下来的章节中,我们将详细地逐一讨论这些组件。 事件配置文件 由用户定义的事件配置文件为 Oracle Emitter 指定应该监视哪个源表、该源表应该引用哪些表以及感兴趣的是哪些列。事件配置文件增进了 Oracle Emitter 的灵活性,用户无需实现 retriever 和 formatter 类。事件配置文件为 XML 格式并遵循如下所示的模式结构。 清单 1. 事件配置文件的模式
事件配置文件应包括如下信息: 事件名(必须的):在系统中事件名应该惟一。Emitter 使用事件名作为查找每个事件记录相应的事件配置信息的键。 要在此表上执行的操作(必须的):它将是这三个值中的一个:C 代表插入一个记录;U 代表更新一个记录;D 代表删除一个记录。 源表(必须的):这个表是与业务处理交互的那个表。表名和模式都必须要提供。 相关表(可选的):如果源表不能提供足够的监视信息,就可以指定由源表引用的额外的表。例如,顾客信息表就可以是订单表的相关表。 源表或相关表的 选定列(可选的):可以通过指定选定列来只包括将要被转变为 CBE 的那些列。这将减少 CBE 的有效负载并提高性能。如果没有指定选定列,则此表中的所有列都会包括到所生成的这个 CBE 中。对于删除操作,只有主键可被设置为选定列。 相互关系(为每个相关表所需):它定义了各表之间的外键关系。属性 ref_schema 和 ref_table 分别指的是模式名和引用表的表名。 ref_column 是引用表的外键。属性列指的是所引用的表的主键。 清单 2 给出了一个示例事件配置文件。 清单 2. 一个示例事件配置文件
事件表和日志表 为了记录和获取在应用程序表上执行的所有操作,需要一个事件表来记录每次发生的操作。Oracle Emitter 查询此事件表并检索有关该操作的详细信息。事件表内的记录包含有关在此应用程序表内发生的事件的总结信息。它还会存储这个应用程序表记录的主键,而这个主键可被用来检索有关该事件的全部信息。表 1 列出了 Oracle Emitter 所用的这个事件表的模式。 表 1. 事件表的结构
注意:由于 “;” 被用来分隔复合主键,因此 “;” 不能出现于任何主键值中。否则,Oracle Emitter 将不能正确工作。 图 10 给出了在事件表记录中所存储的信息的来源。 图 10. 事件表记录 若此发射器想要处理一个事件记录,那么它就会删除事件记录并在日志表内记录结果,而不管此操作是否成功。日志表的结构,如表 2 所示,与事件表的结构是一样的,只不过添加了 Result 和 LOGTIMESTAMP 列。 表 2. 日志表的结构
触发器 应用程序表必须由合适的触发器配置,当源表上发生了某个感兴趣的操作时,这些触发器会在事件表内创建一个记录。清单 3 显示了触发器的模板。 清单 3. 触发器模板
注意:对于插入操作,应该使用 REFERENCING NEW AS NEWROW,对于更新或删除操作,应该使用 REFERENCING OLD AS OLDROW。 清单 4 显示了触发器的一个示例。如果有一个记录插入到 orderitem 表,这个触发器就会插入一个事件记录。请注意 orderitem 表使用的是一个复合主键,并且键值被 “;” 分隔。 清单 4. 一个示例触发器
数据类型到 XSD 类型的映射 Oracle Emitter 还创建了事件模式,这些模式作为事件定义被导入到 Monitor Model 编辑器来进行模型创建。数据库内的数据类型不同于 XSD 模式内的类型。要生成事件模式,我们需要先解决数据类型映射问题。表 3 总结了常用数据类型与 Oracle Emitter 内所用的 XSD 类型间的映射。 表 3. 数据类型与 XSD 类型间的映射
将数据库数据映射到 CBE 在生成 CBE 模式之前,我们还需要确定数据库数据到 CBE 元素之间的转变规则。由 Oracle Emitter 发出的这些 CBE 的头由通用值设置,而源表和相关表(如果有)内的数据则被作为 wbi:any 元素的子元素转变。详细的映射如表 4 所示。 表 4. 数据库数据到 CBE 的映射
CBE 事件模式示例 在解决了数据类型和数据映射之后,发射器就可以使用这些表的元数据创建这个事件模式了。OrderItemAdd 事件的事件模式如清单 5 所示。 清单 5. CBE 事件模式示例
CBE 示例 Oracle Emitter 还通过实现 retriever 和 formatter 接口扩展了事件框架。有关此事件框架的更多信息,请参考 DB2 Event Emitter Sample for WebSphere Business Monitor V6.0.2。 在运行时,发射器按固定间隔由 WebSphere Application Server 内的一个调度程序调用。在每个调用中,它都会轮询事件表来查看是否有任何新的记录被转换。如果有,它就会检索相应的应用程序数据并将其格式化成 CBE。此 CBE 之后被发出至 CEI 以便再前递给 Monitor。Oracle Emitter 删除事件表内的记录并将结果记录在日志表内。 清单 6 显示了由 Oracle Emitter 生成的一个 CBE 示例 (OrderItemAdd)。 清单 6. CBE 示例
结束语 在本文中,您对 Oracle Emitter 有了一定的了解,这个工具让您能够通过 Oracle 数据库的中介体(intermediary)监视业务处理事件。您了解了为了使用这个工具该如何设置现有的 Monitor 安装。此外,本文还介绍了 Oracle Emitter 框架的各组成组件的设计。 本文示例源代码或素材下载 (责任编辑:admin) |