WEB开发网
开发学院数据库DB2 使用 solidDB、WMB和 DB2 pureXML 实现应用程序日... 阅读

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

 2009-07-23 16:14:20 来源:WEB开发网   
核心提示:开始之前关于本教程在本教程中,您将学习如何结合几个 IBM 产品创建应用程序日志的基础设施,使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志,使用 IBM solidDB(一个快速的内存数据库)作为应用程序端的缓存,以分离日志基础设施的应用程序,而不会影响基础设施本身,使用 DB2 及其 SQL

开始之前

关于本教程

在本教程中,您将学习如何结合几个 IBM 产品创建应用程序日志的基础设施。使用 IBM solidDB(一个快速的内存数据库)作为应用程序端的缓存,以分离日志基础设施的应用程序。使用 WebSphere Message Queue 永久将消息存储并转移到 WebSphere Message Broker 中,在其中可以分析消息并将其转换成不同的 XML 输出格式。最后,在 DB2 for Linux®、UNIX® 和 Windows® 中存储消息。pureXML 功能使它能够使用本机 XML 格式存储日志文件,稍后查询和分析日志。

目标

本教程介绍应用程序日志的挑战,介绍如何在此上下文中使用 XML,如何设置能将应用程序日志带入到业务中的基础设施。

在本教程中,学习如何使用各种 IBM 工具,包括 IBM solidDB、WebSphere Message Broker 和 DB2 for Linux, UNIX, and Windows。

先决条件

本文专门针对技术和经验水平为初中级的用户。您应该对安装和使用软件有个大概了解,尤其是 DB2、WebSphere 和 solidDB。

系统需求

要设置本教程中介绍的基础设施,您需要 Windows box(Server 2003、Vista 或 Server 2008),至少 2GB 的磁盘空间,完全的管理员权限,一天中能够多次重启系统。您最好不要使用生产服务器,而是一个可以安全操作的目标系统。

应用程序日志

随着法律的不断变化(比如 Sarbanes-Oxley-Act 的出台),公司需要详细记录活动以及最新的经济变动,比如面向服务和随需应变业务,跟踪谁在企业内做了什么,因此应用程序日志正变得日益重要。

日志不再是一个在应用程序内部出现问题时进行调试的功能,而是一个让所有事务都能被跟踪和审计的永久流程。在业务关键应用程序中(比如客户数据库或 ATM 终端),日志是跟踪所有事件的关键所在。因此,必须要可靠地存储日志并能对其进行搜索。

XML 是 SOA 和 Web 服务的核心。此外,它很灵活,对于随时要增加信息、新日志类型和应用程序的日志消息,它是理想的选择。

客户通常要区分至少两种日志类型:捕获环境消息(机器类型,操作系统类型等)的技术日志和捕获所做操作的功能日志。这两种日志类型都可以混合为一个结构。

这两种类型的日志都包含了许多信息;有些部分是业务关键的,另一些只提供信息。通常,会生成大量日志文件 —— 应用程序执行的每个操作和步骤都会生成一个。因此,一个企业每月会积累成千上万个日志文件。除了量的问题之外,所有的文件都需要有效、准确地处理,不能丢失。此外,日志文件处理不能影响到客户端应用程序。

假设一个日志文件的大小在 1KB 到 20KB 之间,而每天必须处理最多 1000 万日志文件,那么每天将需要 35GB 的存储空间存储未压缩的数据,一个月将需要约 3TB 的存储空间存储未压缩数据。由于生成日志文件的客户端都在轻量级的专用硬件上运行,他们无法提供存储空间加载它们生成的日志文件。

因此,您需要使用大容量的集中存储,以便存储和分析日志文件。数据库被证明是可用于此类任务的最佳存储系统。数据库管理系统能够本机存储和查询 XML 文档,这有利于应用程序日志。清单 1 展示了一个样例 XML 文件:

清单 1. 样例 XML 文件

   
<?xml version="1.0" encoding="US-ASCII"?> 
<File> 
<Record> 
<Header version="1"> 
<Time>2002-11-15 18:19:17.6</Time> 
<Type>INFORMATION</Type> 
<Id>-471559096676384768</Id> 
</Header> 
<Application> 
<Name>SecurityWebService</Name> 
<Function>GetValue</Function> 
<User>JDoe</User> 
<Result>3171861797959368704</Result> 
<Params> 
<Param> 
<Type>Object</Type> 
<Value>Object</Value> 
</Param> 
<Param> 
<Type>Object</Type> 
<Value>security.ssl</Value> 
</Param> 
<Param> 
<Type>Object</Type> 
<Value>0</Value> 
</Param> 
</Params> 
<CallTime>2004-11-15 16:19:17.7</CallTime> 
<StartTime>2006-10-18 12:18:14.7</StartTime> 
<EndTime>2000-11-16 18:14:16.4</EndTime> 
<ReturnTime>2004-11-12 10:10:12.7</ReturnTime> 
</Application> 
<System> 
<Name>INTRANET01</Name> 
<State>498308015556919296</State> 
</System> 
 
[..] 
 
</Record> 
</File>

日志发布

中央日志存储库(例如,数据库系统)可用于整合各种应用程序的活动。可以分析这些数据,形成所有应用程序的 “完整画面”。

让应用程序将其日志直接插入中央存储库是不可行的,原因有很多。要可靠地将日志信息从应用程序移动到数据库,要使用消息队列。要进一步将应用程序从消息队列中分离出来,可以使用一个小型的内存数据库系统。它还在峰值加载期间支持缓冲消息。

由于绝对不能丢失失败情况下的日志文件,日志发布中涉及的所有系统都必须是事务型的。

场景

图 1 展示您在本教程中设置的样例场景架构:

图 1. 本教程的架构

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

假设有多个客户端应用程序生成日志文件并存储在 solidDB 缓冲数据库。IBM solidDB 是一个快速内存缓存数据库,它的性能得到了优化。由于它在内存中保存所有数据,除了持久性事务日志之外不会向磁盘写入任何数据,因此它既快又可靠。

然后,将使用一个 Java 工具提取日志文件并将其传输到 WebSphere Message Queue。WebSphere Message Queue 将分析文件并将其传输到 DB2 支持的数据库。

为了模拟应用程序日志客户端,该教程使用 Java 工具生成 XML 文件并将其加载到缓冲数据库。可在本文中下载工具 —— Java Load Generator Tool(见 下载)。通过运行无需命令行选项的工具,它可以打印使用信息。本教程使用该工具将消息加载到 solidDB 中。

为了将日志文件发布到后端数据库,本教程使用 IBM WebSphere Message Queue。它提供事务、持久消息队列以及路由机制,以将消息从一个位置转移到另一个位置。此外,您可以使用 WebSphere Message Broker 分析和转换消息。图 2 展示了本教程中介绍的消息流:

图 2. WebSphere 消息流

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

从两个队列读取消息,保留不同的消息格式。Queue 1 (Q1) 保留的消息由一个名为 Record 的元素组成。每个消息将路由到另一个队列 Queue (Q3) 或后端数据库。

Queue 2 (Q2) 保存由一个或多个 Record 元素组成的 File 消息。每个 File 消息能够分为一个 Record 消息及其对应的摘要消息。然后 Record 消息可以路由到后端数据库,而将在另一个队列 (Q4) 中存储 Summary 消息。

WebSphere 可以与 IBM DB2 交互,以存储消息事务。这样一来,没有消息会由于(网络)失败而丢失。IBM DB2 for Linux、UNIX 和 Windows 最终可以存储所有消息。它使用 pureXML 在专用数据结构中存储 XML 文件。这样一来,可以有效地执行查询,同时保留原来的结构。DB2 还支持压缩的 XML 文件,这将节省许多存储空间。

准备

首先,您需要下载和安装以下软件包:

WebSphere Message Queue 7.0

WebSphere Message Broker 6.1

WebSphere Message Broker Toolkit V6.1

solidDB 6.3

DB2 9.5 Express-C

每个软件包都应该使用默认选项安装。本教程以下几节将描述如何设置和配置这些软件。

数据库配置

为了存储日志文件,本教程使用简单的单表格方法,使用以下用于 solidDB 和 DB2 的 DDL 语句(对于生产系统,物理设计可以应用增强的特性):

表 1. 数据库定义

solidDBDB2
使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

清单 2. solidDB 的 DDL 语句

     
CREATE TABLE LOGS ( 
LOGTIME TIMESTAMP, 
DOC CLOB 
) 

清单 3. DB2 的 DDL 语句

     
CREATE TABLE LOGAPP.LOGS ( 
LOGTIME TIMESTAMP, 
DOC XML 
)

前端的 solidDB 不需要架构名称。对于后端 DB2,使用 LOGAPP 作为架构名称。

添加新的消息队列

从 solidDB 读取的所有消息都将存储到 WebSphere Message Queue。因此,需要使用专门的队列保存消息。

如表 2 所示,您需要 5 个新的队列(注意用于 “Application Logging” 的前缀 AL_):

表 2. 消息队列

Q1: AL_INQUEUE1

Q2: AL_INQUEUE2

可以使用两个队列保存 solidDB 的输入消息。两者之间的不同之处在于保存日志文件的格式:

AL_INQUEUE1 保存类型为 Record 的消息。

AL_INQUEUE2 保存类型为 File 的消息。

Q3: AL_OUTQUEUE 该队列只是一个消息池。
Q4: AL_SUMMARYQUEUE 该队列获取所有日志摘要消息以供最终存储。
Q5: AL_XMLFILES 输入该队列的消息将插入 DB2。

图 3. 深入查看 WebSphere Message Queue Explorer

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

现在您已经设置了工作环境并开始应用程序日志设置。

开始使用 Message Broker Toolkit

本教程使用 WebSphere Message Broker Toolkit,这是一个基于 Eclipse 的工具,用于开发消息流应用程序。当您第一次启动应用程序时,需要设置工作区文件夹用于存放所有项目文件。

图 4. 选择工作区

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

现在需要创建一个新的消息流项目,以保存之后开发的所有消息流项目。右键单击空的项目列表,然后选择 New > Message Flow Project:

图 5. 新建消息流项目

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

弹出一个窗口,询问新的项目名称。输入 logApp 作为新项目的名称:

图 6. 新建消息流项目

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

Message Broker 连接

接下来,建立一个到之前创建的 Message Broker 域实例的连接。使用该连接,您稍后可以与 Message Broker 进行交互。要做到这一点,右键单击新建的项目,然后选择 New > Other:

图 7. 新的域连接

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

在打开的窗口中,查找并选择项 Domain Connection:

图 8. 新的域连接

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

现在您需要输入您的 Queue Manager 名称。因为我们使用的是默认配置,它的名称为 WBRK61_DEFAULT_QUEUE_MANAGER,使用端口 2414:

图 9. 新的域连接

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

输入 logAppConnection 作为连接名称。单击 Finish 之后,确认您希望在打开的消息框中创建一个新的服务器项目:

图 10. 新的域连接

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

现在连接到了 Message Broker。这对于部署和运行项目来说是必需的。

导入消息定义

接下来,我们导入将在 Message Broker Toolkit 中使用的的 XML 模式定义。这样一来,WebSphere 将能够识别并解析来自 solidDB 的消息。

让我们将这两个文件导入 WebSphere Message Broker Toolkit。首先,需要将 Message Set 添加到您的项目。该集合将保存所有消息定义。

右键单击消息流项目,然后选择 New > Message Set:

图 11. 新的消息集

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

接下来,为新消息集指定一个名称。因为工作区没有包含消息集项目,您还需要为新项目输入名称。这个包含新消息集的新项目将添加到您的工作集中。

将消息集命名为 logAppMessages,将项目命名为 logAppMessageSet:

图 12. 新消息集

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

您需要指定新消息集保存的数据类型。因为您需要处理 XML 数据,请选择 XML 文档:

图 13. 新消息集

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

现在已经输入了所有所需的信息,已经可以创建消息集了。

图 14. 新消息集

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

该消息集将是本教程使用的所有自定义消息格式的容器。

您可以开始将 XML 模式文件导入消息集。右键单击消息集项目,然后选择 New > Message Definition File From > XML Schema File:

图 15. 导入消息定义

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

接下来,输入日志文件架构文档的路径:

图 16. 导入消息定义

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

最后,选择希望导入的数据类型和消息。在本例中,单击 Select All 按钮选择所有对话框:

图 17. 导入消息定义

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

您已经成功地将第一个 XML 模式定义导入 WebSphere。要将架构 LogSummary.xsd 导入工作区,请重复上述步骤。

您需要修改消息集以支持消息中的单个 Record 元素。双击工作区的 LogFile 消息定义,在右边的面板中打开定义。

图 18. 修改消息定义

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

您需要将 RecordType 重命名为 Record,否则包含 Record 的所有根元素消息都将命名为 RecordType 而不是 Record。重命名在图 19 中完成:

图 19. 修改消息定义

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

现在可以使用定义创建不同格式之间的映射。

使用 Java 从 solidDB 中读取消息

首先,您需要将日志消息从 solidDB 缓冲中传输到 WebSphere Message Queue。通常,有几种方法可以与 WebSphere 中的数据库交互。但不幸的是,solidDB 的 ODBC 驱动程序不提供对 WebSphere 的支持,而 solidDB 的 JDBC 驱动程序也不支持分散的事务。这些限制使我们只能选择使用自定义 Java 程序从 solidDB 中读取消息。

您还要确保 Java 程序或者类路径中包含 solidDB 的 jar 文件 (SolidDriver2.0.jar)。否则,您将无法连接 solidDB。

下面的清单 4 提供了连接 solidDB 的代码片段,但是在连接之前,您必须直接填写参数(host、port、user 和 pass):

清单 4. 连接到 solidDB

   
String connString; 
connString = "jdbc:solid://" + host + ":" + port + "/" + user + "/" + pass; 
 
Class.forName("solid.jdbc.SolidDriver").newInstance(); 
 
Connection connection = DriverManager.getConnection(connString); 
 
Statement statement; 
statement = connection.createStatement(); 
 
ResultSet resultSet; 
resultSet = statement.executeQuery("SELECT doc FROM LOGS"); 

清单 5 提供了另一个连接消息队列的代码清单:

清单 5. 连接 WebSphere Message Queue

   
String queueManagerName = "WBRK61_DEFAULT_QUEUE_MANAGER"; 
String queueName = "AL_INQUEUE1"; // or AL_INQUEUE2 
 
MQQueueManager queueManager; 
queueManager = new MQQueueManager(queueManagerName); 
 
MQQueue queue; 
queue = queueManager.accessQueue( 
queueName, CMQC.MQOO_OUTPUT, null, null, null); 

在建立了对日志消息源和日志消息池的连接之后,您需要循环输入消息并将他们都插入队列:

清单 6. 将 solidDB 中的消息传输到 WebSphere Message Queue

   
while (resultSet.next()) { 
 byte[] message; 
 message = resultSet.getBytes(1); 
 
 MQMessage queueMessage; 
 queueMessage = new MQMessage(); 
 
 queueMessage.correlationId = CMQC.MQCI_NONE; 
 queueMessage.messageId = CMQC.MQMI_NONE; 
 
 queueMessage.write(message); 
 
 queue.put(queueMessage, queueMessageOptions); 
} 
        

完整的 Java 代码片段见 下载 一节。

队列中有了消息之后,可能需要执行一些操作才能将其直接保存到后端数据库。因此让我们开始学习一些如何使用 WebSphere Message Broker 修改 XML 消息的示例。

使用 WebSphere 分析和转换消息

为了使用之前创建的代理连接和导入的消息类型,您需要将引用添加到消息流项目。要选择引用的项目,请打开消息流项目 logApp 的属性页面,右键单击并选择 Properties。

在打开的窗口中,选择 Project References。单击右边的选项框 —— logAppMessageSet 和 Servers。

图 20. 消息流项目属性

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

现在可以在 WebSphere Message Broker Toolkit 中创建消息流了。单击消息流项目,然后选择 New > Message Flow:

图 21. 新的消息流

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

输入 logFlow1 作为消息流名称,然后单击 Finish:

图 22. 新的消息流

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

新的消息流将在右上方的窗口中打开,因此您可以在其中添加和配置节点。您可以定义源、池、转换以及其他要对消息执行的操作。

根据内容路由消息

我们首先了解如何在流中分析消息并根据内容路由。路由可以用来分离消息类型。例如,您可以将开发人员机器和业务关键型消息调试消息(比如订单或账单信息)转发到持久存储器。

图 23 展示了将在本节中设置的消息流。MQINput 节点将从队列中读取消息。然后路由节点根据内容将消息重定向到不同的池。有些消息将使用映射节点映射到不同的格式。

图 23. 样本消息流

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

首先,插入可从消息队列读取消息的 MQInput 节点,然后将它们插入消息流。在窗口左边的菜单中,选择 WebSphere Message Broker,然后将 MQInput 节点拖放到右边的空窗口。

从队列中提取的消息是源单词。您需要指定要从中读取消息的队列的名称。单击新插入的节点,然后在左上方的窗口中查看属性。在字段 Queue name 中,输入 AL_INQUEUE1。正如我们提到的,AL_INQUEUE1 将保存类型为 Record 的消息。

下一个节点是 ResetContentDescriptor 节点(见 图 23)。该节点对于告诉 WebSphere 消息内容是 XML 而不仅仅是 BLOB 是必要的。使用以下首选项插入节点并进行配置(如图 24 所示):

选择所有复选框重置消息域、重置消息集、重置消息类并充值消息格式。

指定 XMLNSC 作为消息域。

指定 logAppMessages 作为消息集。

图 24. ResetContentDescriptor 节点

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

要查看图 24 的大图,请单击 此处。

现在使用路由节点检查消息的内容并根据内容进行路由。假设该队列保存类型为 Record 的消息,您需要根据标题元素 ID 值的奇偶将它们路由到不同的输出终端。

将路由节点插入流之后,右键单击并使用上下文菜单将输入终端重命名为 Odd 和 Even。

图 25. 路由节点上下文菜单

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

接下来,向节点添加两个模式,告诉它如何路由消息。在上方的面板中选择路由节点,了解它的属性页面:

图 26. 路由节点属性页面

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

要让路由节点的属性页面如图 26 所示,必须向筛选器表格添加两个筛选器模式。单击 Add… 打开新的对话框,可以在其中输入第一个表达式:$Body/Record/Header/Id mod 2 = 0。该模式应用于所有消息,在标题中还包含了消息 ID。在添加了第一个模式之后,重复这些步骤添加第二个模式,应用于所有偶数 ID。第二个筛选器模式:$Body/Record/Header/Id mod 2 = 1。使用该配置,到达该节点的消息将根据内容路由到一个输出终端。您现在可以将两个输出终端连接到不同的继承者。

将消息转换为不同的格式

接下来,您将使用映射节点将消息转换为另一种格式。您需要将映射节点插入到流并将其连接到一个路由节点的输出终端。连接到奇输出终端还是偶输出终端没有关系。双击新插入的节点。将出现一个新窗口,可以用来指定输入和输出消息类型:

图 27. 新消息映射

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

因为我们希望从该流中得到 Record 消息,选择 Record 作为输入类型。LogSummary 将成为输出类型,如 图 27 所示。在下一个窗口中,您可以定义映射 —— 将元素从左(输入)边拖放到右(输出)边,或者为每个元素输入映射表达式。您还可以使用图 28 下方的面板中显示的集成函数(比如 fn:concat):

图 28. 新消息映射

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

要查看图 28 的大图,请单击 此处。

最后,您需要插入两个 MQOutput 节点以将消息写回队列。将剩下的路由节点终端连接到一个输出队列,并将映射节点的输出终端连接到第二个输出接点。您的流现在应该类似于 图 23 中的样例。最后,需要配置 MQOutput 节点并指定消息的目标队列。使用 AL_OUTQUEUE 作为连接到路由节点的 MQOutput 节点的目标,使用 AL_SUMMARYQUEUE 作为连接到映射节点的节点目标。

使用映射节点分离消息

在本节中,使用 WebSphere 将输入消息分离为几个输出消息,并根据格式将输出消息分离为不同的输出终端。假设您希望将大文件分离为更小的部分并为每个部分创建一个摘要,则如图 29 所示:

图 29. 分离和总结消息

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

图 30 展示了要设置的流:

图 30. 分离和总结消息

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

将使用已经介绍过的 ResetContentDescriptor 节点连接 MQInput 节点,后跟映射节点(名为 Split)。这是对之前创建流的扩展。来自第一个流的输入连接在顶部可见,附加到名为 SUMMARY 的 MQOutput 节点。您可以根据第一个图插入所有节点。MQInput 节点将从 AL_INQUEUE2 读取消息,因此您必须确保该节点的配置与 ResetContentDescriptor 节点一样。后一个节点使用的配置与 ResetContentDescriptor 相同,因此可以轻松复制。

右键单击节点打开窗口,其中您可以输入源和目标消息格式,如 图 31 所示。选择 File 作为输入类型,假设队列保存该类型的消息。此时,选择两个消息作为映射/输出目标:LogSummary 和 Record。这样一来,您可以将输入消息分离为多个输出消息。

图 31. 定义映射的消息类型

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

现在,对于到达该节点的每个消息,您应该将每个内部 Record 元素映射到自己的消息,并为每个 Record 生成一个摘要消息 (LogSummary)。图 32 和 图 33 展示映射。下面屏幕截屏中的 for 表达式在输入中迭代 Record 元素并为每个元素生成一个单独的输出消息。

图 32. 映射节点视图

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

要查看图 32 的大图,请单击 此处。

图 33. 映射节点详细信息

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

要查看图 33 的大图,请单击 此处。

在映射和分离之后,您需要处理一个问题:Record 和 LogSummary 这两个消息类型都将输出到相同的输出终端。您需要将这两个消息分离为不同的流。使用 JavaCompute 节点处理这个问题。将节点插入到流之后,双击打开帮助新建 Java 项目的助手。将自动生成的代码替换为清单 7 中的样例代码。(该代码包含在 下载 一节)。

清单 7. 使用 JavaCompute 路由消息

   
public class JavaRouteNode extends MbJavaComputeNode { 
 public void evaluate(MbMessageAssembly assembly) throws MbException { 
 MbOutputTerminal out = getOutputTerminal("out"); 
 MbOutputTerminal alt = getOutputTerminal("alternate"); 
 
 MbMessage message = assembly.getMessage(); 
 
 MbElement logMessage = message.getRootElement().getLastChild(); 
 
 if (logMessage.getFirstElementByPath("./Record") != null) { 
  // Message is a complete log record 
  out.propagate(assembly); 
 } else if (logMessage.getFirstElementByPath("./LogSummary") != null) { 
  // Message is a summary 
  alt.propagate(assembly); 
 }else{ 
  throw new IllegalArgumentException(); 
 } 
 } 
 }

每个消息都调用该节点,它执行两个 XQueries 确定消息是 Record 还是 LogSummary。根据 XQuery 的结果,消息将发送输出终端或可替换终端(另一个输出终端)。

现在介绍如何使用 WebSphere 以几种方式路由、转换和分析消息。接下来,了解如何存储队列中等待进入后端数据库的某些消息。

将消息保存到 DB2

连接 DB2

要将消息直接从 WebSphere Message Queue 写入 DB2,您需要首先设置连接到目标数据库的 ODBC 连接。

要添加新的 ODBC 连接,必须在 Windows 控制面板中打开 ODBC 数据源配置。

单击 Add… 新建一个到数据库的 ODBC 连接:

图 34. ODBC 数据源管理器

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

因为您需要连接到默认的 DB2 实例,请选择 IBM DB2 ODBC DRIVER – DB2COPY1:

图 35. 新建 ODBC 数据源

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

在下一个窗口中,输入 LOGAPPDB 作为数据源名称,然后单击 Add 按钮:

图 36. 新建 ODBC 数据源

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

现在需要输入 WebSphere 将用来连接数据库的用户名和密码。确保您勾选了 Save password 复选框。

图 37. 新建 ODBC 数据源

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

在下一个面板中,输入数据库名称、它的主机名和端口。

由于 WebSphere Message Broker 和 DB2 驻留在同一台机器上,您可以输入 localhost 作为主机名。单击 OK 之后,可以关闭所有打开的 ODBC 窗口然后返回 WebSphere Message Broker Toolkit。

图 38. 新建 ODBC 数据源

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志 

导入数据库布局

配置数据库连接之后,需要通知 WebSphere 数据库表格布局。要做到这一点,可以直接从 DB2 导入数据库布局 —— 添加到 Message Broker Toolkit 的连接。在 Broker 应用程序开发视图中,切换到 Database Explorer 选项卡并新建数据库连接。将弹出一个窗口,其中可以指定连接参数。

使用我们的参数填写表单后,可以单击 Finish。

图 39. 在 WebSphere Message Broker Toolkit 中创建数据库连接

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

现在连接到了数据库。接下来,必须将数据库定义导入 WebSphere 以支持到数据库表格的消息映射。右键单击项目列表,然后选择 New > Database Definition:

图 40. 新数据库定义

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

打开新窗口。项目列表为空,因为项目列表不包含任何数据设计项目。单击 New 添加数据设计项目,用于保存数据库定义。

命名新项目 databaseDefinitions 然后单击 Next:

图 41. 新数据设计项目

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

您不需要选择任何对其他项目的引用,因此直接单击 Finish:

图 42. 新数据设计项目

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

创建数据设计项目之后,需要回到数据定义窗口。已经选好了新创建的项目名称。确保选择正确的 DB2 版本:

图 43. 新数据库定义

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

在下一个窗口中,选择之前创建的数据库连接:

图 44. 在 WebSphere Message Broker Toolkit 中创建数据库连接

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

现在,输入用户 ID 和密码连接到数据库:

图 45. 新数据库连接

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

WebSphere 连接到数据库并检索所有架构列表。选择 LOGAPP 架构:

图 46. 新数据库定义

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

在下一个窗口中,至少选择表格定义:

图 47. 新数据库定义

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

导入表格定义之后,可以使用表格处理消息流了。

创建流

现在,您可以创建一个从消息队列 (AL_XMLQUEUE) 中读取消息并将其存储到 DB2 的新流。

流的名称为 storageFlow。它由三个节点组成:MQInput 节点用于从 AL_XMLQUEUE 中读取消息;之后是 ResetContentDescriptor 节点和 DatabaseInsert 节点。图 48 展示了流布局:

图 48. 将消息存储到 DB2 的消息流

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

单击 DatabaseInsert 节点(图 48 中名为 Backend),并切换到基本属性。输入之前创建的 ODBC 数据源 (LOGAPPDB) 的名称。邮件单击新的 DatabaseInsert 节点。将出现一个新窗口,询问输入和输出消息格式。选择 Record 作为输入消息类型,选择数据库表格 LOGS 作为输出目标:

图 49. 存储流的新消息映射

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

在映射窗口中,可以将元素从表格列的左边拖放到右边。因为 WebSphere 不知道 DB2 的新 pureXML 特性以及存储 XML 的功能,您不能将复杂的类型拖动到列中。通过该操作,WebSphere 可以创建一个子映射(假设您需要将复杂类型的特定部分映射到一个列中)。WebSphere 期望您连接或汇总子元素以适应单个数据库列。

要将整个元素及其子元素映射到数据库列,需要使用能序列化整个文档的功能。这可以使用 esql:asbitstream($source/Record) 完成,如图 50 所示:

图 50. 消息映射视图

使用 solidDB、WMB和 DB2 pureXML 实现应用程序日志

您已经开发了所有必要的消息流节点,该项目应该能够运行在 Message Broker 上。

注意:将项目部署到 Message Broker 不在本文讨论之列。要获取如何创建 Broker Archive (BAR) 和在 Message Broker 中部署的信息,请参考 WebSphere Message Broker Information Center。

结束语

本教程展示了如何使用几个 IBM 产品设置应用程序日志的基础设施。将 IBM solidDB 作为内存缓存以分离应用程序和日志基础设施。WebSphere Message Queue 和 WebSphere Message Broker 用于发布、分析和转换 XML 消息。最后,DB2 for Linux、UNIX 和 Windows 及其 pureXML 特性用于有效存储和管理 XML 数据。没有单个产品能够提供完整的日志基础设施,但是,正如本教程所述,快速地构建这样一种应用程序日志基础设施是可能的。XML 是核心部分,因为它能够灵活地更改和添加消息格式,而不会影响基础设施本身。使用 DB2 及其 SQL/XML 和 XQuery 支持,可以查询 XML 数据进行失败分析和审计分析。

下载

描述名字大小下载方法
XML 模式定义文件(文件)LogFile.xsd4KBHTTP
ToXgene 模板文件1LogFile.tox7KBHTTP
XML 模式定义文件(摘要)LogSummary.xsd2KBHTTP
代码2JavaRouteNode.java2KBHTTP
solidDB 和 MQ 连接代码3solidDB2MQ.java2KBHTTP
Java Load Generator Tool4LoadGenerator.jar5MBHTTP

Tags:使用 solidDB WMB

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接