引言
IBM® WebSphere® Business Integration Server Foundation V5.1.1 包括了可以创建、储存并分发事件的公共事件基础架构(CEI)。CEI 在通用业务事件(Common Business Event,CBE)中收到压缩的系统或业务信息。当有重大事件发生的时候,利用发射器创建并将 CBE 发送到 CEI 服务器中,在此它可能被持久保存或被重新分发或两种皆可。
您可以在新的事务或当前的用户事务中,通过配置 CEI 启用应用程序来同步或异步地向服务器发送事件。发射器可能与过滤器有关联,以便只有包含专门信息的 CBEs 才能被发送到 CEI 中。用户可以配置 CEI 服务器本身,以事件持久保存到数据库中或/及分发它们到 JMS 队列或主题中。
本文主要目的是概要性地介绍怎样使用 WebSphere 管理控制台为 CEI 提供配置选项。
公共事件基础架构(CEI)概述
图 1 提供了 CEI 的简单概述。应用程序可被看作创建事件的事件源。这些应用程序在发送 CBE 到 CEI 服务器之前,它们会从 JNDI 中获取发射器,并利用系统或业务信息来创建、组装 CBE。本文并没有专门描述如何获得发射器或如何用数据组装 CBE,而仅仅提供了对 CEI 概念性的概述。
CEI 服务器一旦收到 CBE,它就可能被持久保存或被分发。如果服务器的配置是分发事件,那么事件消费者应用程序可以监听队列或订阅的主题来接收指定的事件信息。
配置公共事件基础架构
本章节描述了如何利用管理控制台配置 CEI 的简单场景。“配置发射器”章节将示例如何创建同步、异步发射器和发射器如何过滤事件。本章节的最后部分重在事件分配并说明如何能合乎逻辑地将事件组合起来。
在本文中,我们假设已经安装和配置了 CEI 来使用默认的 CEI 数据库。为了简单起见,本文将集中介绍怎样在单个的 WebSphere 应用程序服务器上配置 CEI。
实例场景
CEI 可能从许多事件源中接收事件,但是本文仅仅考虑两个。当有新命令产生时,第一个事件源发送事件到 CEI;而第二个事件源仅发送问题严重级别为 70 的事件。本文不是专门来介绍 CBE 可以包括的不同事件属性和值,不过在这个场景中,"NewOrder" 及 "Severity=70" 将被用来表示两个类型的事件。如果第二个事件用生成的 CBE 的问题严重级别不是 70,发射器将丢弃该事件,因此只有问题严重级别为 70 的 CBE 才会被发送到 CEI 服务器。
这里配置事件源 1 使用同步发射器来通过 EJB 界面发送事件,而事件源 2 利用异步发射器发送事件到 JMS 队列。要获得更多关于 EJB 和 JMS 的信息请参考本文最后的章节中的参考资料部分。
可以配置分发服务来把事件发送到多个队列和主题中,不过在本文的场景中,来自事件源 1 的事件将被发送到 JMS 主题,而来自事件源 2 的事件将被发送到 JMS 队列。图 2 示例了即将使用的简单场景。
配置公共事件基础架构(CEI)服务器
在 WebSphere 管理控制台中,可以通过选择 Resources => Common Event Infrastructure Provider => Event Server Profile 来找到服务器的配置页面。
事件服务器概要设置定义了 CEI 服务器的持久性和分发行为。在 WebSphere 安装中创建了一个默认的事件服务器概要,如下面的图 3 中所示。找到默认事件服务器概要,并确保已选择了 Enable Event Distribution 和 Enable Data Store 的检查框,以便持久性和分发都将发生。
在本场景中用到数据源的 JNDI 名称符合 CEI 默认数据源定义。
配置发射器
事件源利用发射器发送 CBE 到 CEI 服务器,并且利用发射器工厂概要来配置发射器。在 WebSphere 管理控制台中选择 Resources => Common Event Infrastructure Provider => Emitter Factory Profile 来定位设置。对于应用程序服务器中配置的每一个发射器工厂概要,在服务器启动时都会有一个 EmitterFactory 对象被绑定到 JNDI 上。事件源从 JNDI 中获得 EmitterFactory 对象,并利用该对象来创建带有指定行为的发射器。
图 4 示例了发射器工厂概要使用的配置源。
通过选择 Preferred Synchronization Mode 的复选框来配置发射器工厂概要同步或异步地发送事件。如果已经选择了该复选框,那么传输的首选模式是同步的,并且 Synchronous Transmission Profile JNDI Name 需要使用 Event Bus Transmission Profile JNDI 名称来指定。如果没有使用发射器 API 覆盖该设置,那么用该发射器工厂概要创建的发射器将通过 EJB 调用来同步地发送事件。
上面描述的两种发射器工厂概要设置将在下面的两个章节中进行介绍。
同步发射器
要配置同步发射器,需要在 WebSphere 管理控制台中选择 Resources => Common Event Infrastructure Provider => Emitter Factory Profile 来定位发射器工厂概要页面。要创建一个新的发射器工厂概要,选择 new 按钮并输入如下面表 1 所示的信息。
表 1:同步发射器的配置设定值
配置选项 | 配置值 |
Name | NewOrderEmitter |
JNDI 名称 | com/ibm/events/configuration/emitter/NewOrderEmitter |
Synchronous Transmission Profile JNDI Name | com/ibm/events/configuration/bus-transmission/Default |
Preferred Synchronous Transmission Mode | Unchecked |
Filtering Enabled | Unchecked |
图 5 展示了同步发射器工厂概要配置面板
同步传输概要 JNDI 名称是事件总线传输概要资源的 JNDI 名称。 WebSphere 安装会自动配置一个默认事件总线传输概要,这里使用该概要来同步发送 CBE 到服务器中,如图 6 所示。
在传输概要中指定的事件总线 JNDI 名称是 CEI 服务器 EJB 界面的 JNDI 名称。通过选择 Resource => Common Event Infrastructure Provider => Event Bus Transmission Profile 来定位事件总线传输概要,并选择合适的概要,如图 6 所示。
异步发射器
异步发射器使用 JMS 发送事件到 CEI 服务器。要使服务器能够监听进来的事件队列,需要配置和安装 MDB 和监听器端口。CEI 提供了配置和安装诸如 MDB 的脚本。该教本位于在 WebSphere\AppServer\event\application 目录下的位 event-message.jacl 文件中,并使用下面的参数来执行。
|
该脚本会安装一个名为 CommonEventInfrastructure_JMSApp 的应用程序,该应用程序包括了一个 MDB,CEI 服务器将使用这个 MDB 来来监听进入的 CBEs。在定义的范围中使用下面的 JMS 队列、队列连接工厂 JNDI 名称及发射器工厂概要来配置 JMS 传输概要。重启应用程序服务器之后,找到概要 CommonEventInfrastructure_JMSApp-TransmissionProfile 和 CCommonEventInfrastructure_JMSApp-EmitterProfile,如图 7 和图 8 所示的那样。CommonEventInfrastructure_JMSApp-TransmissionProfile 指定了对 JMS 队列连接工厂和目标队列的 JNDI 名称,并且发射器将使用它们来发送事件到 CEI 服务器。在管理控制台中,通过选择 Resources => <JMS provider> 来配置实际的 JMS 队列和队列连接工厂资源。本文并没有介绍如何配置 JMS 资源,在此提到它们仅仅是为了本文的完整性。
在此场景中,异步发射器也过滤了不需要的 CBE。启用过滤功能,在发射器工厂概要资源里选择 Filtering Enabled 复选框,并在 Filter Factory JNDI Name 中输入 filters/highSeverityFilter
。如图 8 所示。
过滤器工厂的 JNDI 名称一定要与过滤器工厂概要资源的 JNDI 名称一致。当发射器接收到 CBE 时,它将使用过滤器决定是否把该事件发送到 CEI 服务器。要创建过滤器工厂概要,选择 Resources => Common Event Infrastructure Provider => Filter Factory Profile 并点击 new。输入如下面表 2 和图 9 中所示的信息。
表 2:过滤工厂概要的配置设置值
配置选项 | 配置值 |
Name | High Severity Filter |
JNDI Name | filters/highSeverityFilter |
Filter Configuration String | CommonBaseEvent[@severity=70] |
过滤器配置字符串是用于过滤器 CBE 的 XPath 表述。要获得关于 XPath 的更多信息,请参阅参考资料部分。
配置事件分发如果已在事件服务器概要中启用了分发,那么当 CEI 服务器接收到事件后,服务器会检查事件是否与事件组相匹配。通过在管理控制台中选择 Resources => Common Event Infrastructure Provider => Event Group Profile List, 在事件组概要清单中配置事件组。WebSphere 安装缺省会创建一个默认的事件组概要清单,CEI 服务器将被自动配置来使用该事件组概要清单。选择默认的事件组概要清单,如下面的图 10 中所示的那样,并点击表示为红色的 Event Group Profiles。
每一个事件组概要配置会定义一个逻辑事件组。一个事件能与许多事件组概要相匹配,但是在本文中,我们为本场景用到的每一个事件类型仅配置一个事件组概要。配置第一个事件组概要,选择 new。 输入如表 3 中所示的事件组概要信息。此概要如图 11 所示。表 3:NewOrder 事件组的配置设置值
配置选项 | 配置值 |
Name | NewOrder |
Event Selector String | CommonBaseEvent[@extensionName='NewOrder'] |
Topic JNDI Name | jms/cei/NewOrderTopic |
Topic Connection Factory JNDI Name | jms/cei/NewOrderTCF |
事件选择器字符串应当是有效的 XPath 表达,CEI 服务器利用它来匹配事件。如果接受到带 NewOrder 的 extensionName 的事件,CEI 服务器将发送该事件到配置的 JMS 主题中。可以为事件组概要配置 JMS 队列,但在本例中仅仅需要 JMS 主题。
为第二个事件组创建一个新的事件组概要,如图 12 所示。输入表 4 中指定的概要信息。表 4:HighSeverityAlert 事件组配置设定值
配置选项 | 配置值 |
Name | HighSeverityAlert |
Event Selector String | CommonBaseEvent[@severity=70] |
Topic JNDI Name | none |
Topic Connection Factory JNDI Name | none |
虽然您可以配置事件组概要使用多个分发队列资源,但在本场景中仅创建一个。在图 12 中选择显示为红色的 DistributionQueues。
创建一个新的分发队列资源(参阅图 13);点击 new 并输入表 5 中指定的信息。表 5:分发队列的配置设定值
配置选项 | 配置值 |
Queue JNDI Name | jms/cei/HighSeverityAlterQ |
Queue Connection Factory JNDI Name | jms/cei/HighSeverityAlterQCF |
如果要求 CEI 服务器接收问题严重级别为 70 的 CBE,那么 CBE 将匹配这个事件组概要,并将分发到配置的 JMS 队列中。上面描述的两种配置事件组概要都使用了 JMS 队列和主题 JNDI 名称。为了让本文描述的场景能真正工作起来,这些实际的 JMS 资源 必须在相应的 JMS Provider 上配置。但是为了简单起见,本文不对其进行描述。
结束语
公共事件基础架构(CEI)能配置来接收、持久保存和分发事件。WebSphere 管理控制台可以用来在单个应用程序服务器和跨多个服务器间创建多个不同配置。本文描述了如何利用发射器工厂概要改变发射器行为,并展示了如何配置服务器来持久保留和分发事件。 以事件组概要的形式来定义逻辑组,然后通过该逻辑组来分发事件,而且可以将它们与 JMS 主题和队列关联起来。尽管本文并没有考虑分发系统,但是也展示了一些可以构建在其上的公共事件基础架构的配置功能。
(责任编辑:城尘)