实时数据集成和 WebSphere DataStage 的简介
RTI 是 IBM WebSphere DataStage(以下简称为 DataStage)中的一个组件,它允许您创建可共享的标准服务,包括 Web 服务。您可以调用这些代表 DataStage 作业的数据集成功能的服务,而无需全面地了解数据集成逻辑。将 DataStage 作业作为可共享的服务进行部署,这将为您带来很多的优点,其中包括:
- 提供对不同数据源(内部的和外部的)的单点标准访问。
- 实时地重用来自 DataStage 作业的逻辑。
- 通过为每个应用程序提供统一的服务,可以更快地部署应用程序,这将极大地减少冗余代码。
图 1 显示了 RTI 的体系结构。
图 1. RTI 的体系结构
本文说明了如何将 RTI 作业作为 Web 服务进行部署。让我们将这个过程分为下面几个部分进行介绍:
- RTI 作业拓扑的简介
- 使用 DataStage 一步一步地开发一个示例数据集成组件
- 将数据集成组件作为 Web 服务进行发布
- 开发一个 Java 客户端,以调用您所发布的 Web 服务
RTI 服务器支持以下三种作业拓扑:
- 拓扑一:批处理作业
- 拓扑二:包含 RTI 输出组件的批处理作业
- 拓扑三:完全与 RTI 兼容的作业
拓扑一使用新的或者现有的、作为 RTI 服务公开的批处理作业。(请注意,这种拓扑不包含任何 RTI 组件,如 RTI 输入组件或者 RTI 输出组件,在下面的部分中将对它们进行说明。)基于批处理作业的 RTI 服务可以接受作业参数作为输入参数。这种类型的服务不返回任何输出。当您配置部署时,可以为作业参数设置相应的值。图 2 显示了这种拓扑的一个示例。
图 2. 批处理作业
拓扑一和拓扑二之间唯一的区别在于,拓扑二包含 RTI 输出组件。RTI 输出组件 是作业的退出点,并且作为服务响应,它将为客户端应用程序返回一行或者多行内容。RTI 输出组件支持一个输入链。它的表定义可以映射为 RTI 服务的输出参数。请参见图 3 中关于这种拓扑结构的示例。
图 3. 包含 RTI 输出组件的批处理作业
在拓扑三中,作业可以同时使用 RTI 输入组件和 RTI 输出组件。RTI 输入组件 是作业的入口点,在服务请求期间接受一行或者多行内容。RTI 输入组件支持一个输出链。它的表定义可以映射为 RTI 服务的输入参数,如 Web 服务操作的输入参数。符合拓扑三的作业始终是开启的。在您将这个作业作为 Web 服务进行了部署之后,您将发现该作业的一个实例正在 DataStage Director 中运行。图 4 显示了这种拓扑的一个示例。
图 4. 完全与 RTI 兼容的作业
现在,让我们来创建一个示例 RTI 作业,以便从数据库表中提取位置信息。您使用的参数是 employeeid,将该参数组织为数组,这样您就可以同时传递多个参数。然后,该作业返回输入参数所指定的雇员的位置信息。这个 RTI 作业使用名为 RFIDLOCATION(请参见表 1 中该表的定义)的表,该表存储在一个名为 GBPMDB 的 IBM DB2® 数据库中。在表 2 和表 3 中分别显示了 RTI 输入组件和 RTI 输出组件的表定义。请注意,表 1 中包括了表 2 和 3 中所有的列。因此,当您使用 DataStage Designer 导入表定义的时候,您可以由表 1 中的表定义得到表 2 和 3 的表定义。
表 1. 表 RFIDLOCATION 的表定义
| 列名 | 主键 | 类型 | 长度 | 可否为空 |
|---|---|---|---|---|
| RFIDRecordLocationID | 是 | Integer | 10 | 不能为空 |
| EmployeeID | 否 | Varchar | 60 | 不能为空 |
| LocationID | 否 | Integer | 10 | 不能为空 |
| RecordTime | 否 | Timestamp | 26 | 不能为空 |
表 2. RTI 输入组件的表定义
| 列名 | 主键 | 类型 | 长度 | 可否为空 |
|---|---|---|---|---|
| EmployeeID | 否 | Varchar | 60 | 不能为空 |
表 3. RTI 输出组件 LocationInfo 的表定义
| 列名 | 主键 | 类型 | 长度 | 可否为空 |
|---|---|---|---|---|
| EmployeeID | 否 | Varchar | 60 | 不能为空 |
| LocationID | 否 | Integer | 10 | 不能为空 |
| RecordTime | 否 | Timestamp | 26 | 不能为空 |
- 在 DataStage Designer 的存储库中,右键单击 Table Definitions,然后选择 Import > Plug-in Meta Data Definitions。
- 在 Name 栏中选择 DSDB2,并单击 OK。
- 在下一个窗口(请参见图 5)中,从下拉列表中选择服务器的名称(在这个示例中,选择 GBPMDB)。该服务器的名称即为您创建的数据库的名称,该数据库中包含您希望导入的表。
- 键入用户名
db2inst1和密码passw0rd,以连接到服务器。 - 选择 Tables 复选框,并单击 Next 以继续。
图 5. 选择数据库
- 现在,从 Select Table(s) 列表中选择 RFIDLOCATION 表,然后单击 Import,以导入 RFIDLOCATION 表的表定义。
您现在应该可以在 DataStage Designer 存储库中的 DSDB2 子类别中看到您刚刚导入的表定义,如图 6 所示。
图 6. 表定义
- 现在,在 DataStage Designer 中创建一个新的并行作业(请参见图 10 中这个作业的布局)。这个作业中包含一个 DB2/API UDB 组件、一个 RTI 输入组件、一个 RTI 输出组件和一个连接组件,它们通过链接组件连接在一起。
图 7. 作业布局
- 将新的作业保存为 sampleRTI。
- 在 DataStage Designer 中单击 Job Properties 图标,以打开 Job Properties 窗口(请参见图 8)。
- 在 General 选项卡中,选择 Allow Multiple Instance 和 RTI Service Enabled。
- 单击 OK,然后保存该配置。
图 8. 作业属性的配置
- 双击 DB2/UDB API 组件的 RFIDLOCATION,以打开如图 9 所示的窗口。
图 9. 配置数据库连接信息
- 在这个窗口中,指定服务器的名称(即您希望连接到的数据库的名称),在这个示例中,使用
GBPMDB。 - 输入用户 ID
db2inst1和密码passw0rd。保留其他的配置作为缺省配置。 - 单击位于该窗口顶部的 Output 选项卡。
- 在 Output 页面的 General 选项卡(请参见图 10)中的 Table names 字段中输入
RFIDLOCATION,并从 Query type 下拉列表中选择 Generated SQL query。 - 保留剩余的缺省设置,并单击 Columns 选项卡。
图 10. 配置表信息
- 在 Columns 选项卡中,单击 Load 按钮,以加载表定义。这时将弹出一个窗口,显示您在存储库中选择的表定义。
- 在 DSDB2 子类别中选择 RTILOCATION,然后单击 OK。
- 现在来选择列(如图 11 所示),然后单击 OK。
图 11. 选择列
- 您将看到如图 12 所示的结果。单击 OK,并保存该作业。
图 12. 导入结果
- 双击 RTI 输入组件 Employeeid,并在 Outout 页面中选择 Columns 选项卡。
- 将在这里加载表定义。(为 Employeeid RTI 输入组件加载表定义的步骤与在配置 DB2/UDB 组件部分中所描述的步骤是一样的。)
- 在加载了表定义之后,单击 OK,并保存该作业。
- 双击 RTI 输入组件 LocationInfo,并转到 Input 页面中的 Columns 选项卡。
- 加载表定义。(为 Employeeid RTI 输入组件加载表定义的步骤与在配置 DB2/UDB 组件部分中所描述的步骤是一样的。)
- 在加载了表定义之后,单击 OK,并保存该作业。
- 双击 JoinByEmployeeid,以便对它进行设置。
- 转到 Stage 页面中的 Properties 选项卡,然后选择 EMPLOYEEID 将其作为连接键,并选择 Inner 作为连接类型,如图 13 所示。
图 13. 配置连接组件
- 现在,转到 Output 选项卡。您可以看到,DataStage 已经在源和目标之间生成了一个映射关系。保留这些缺省设置,并单击 OK。
单击 DataStage Designer 中的 Compile 图标。这时将打开 Compile Job 窗口,同时显示一条 Job successfully compiled 的消息,假定在整个过程期间没有出现任何错误的话。现在,该作业已做好了部署的准备。
将 RTI 作业 sampleRTI 作为 Web 服务进行部署
本文剩下的部分描述了如何使用 RTI 控制台将 RTI 作业作为 Web 服务进行部署。
- 在 Current Task 窗格中,打开 RTI 控制台,并单击 Register an RTI Server。这个操作将打开 RTI Server Wizard,如图 14 所示。
- 在 RTI Server Name 字段中,输入 RTI 服务器的计算机名称。端口号可能不同,这取决于您的 RTI 服务器运行时所处的应用服务器。例如,如果该应用服务器是 IBM WebSphere Application Server,那么端口号是 9080。
- 保留所有其他字段的缺省设置,并单击 Finish。
图 14. 设置 RTI 服务器
- 您刚注册的 RTI 服务器现在作为一个图标出现在右边的窗格中。双击该图标。
- 在 Current Tasks 窗格中,单击 Register a DataStage Machine 以打开 DataStage Machine Registration Wizard(请参见图 15)。
- 在 Machine name 字段中,输入运行 DataStage 服务器或者 DataStage TX 主机的计算机名称。
- 对于 DataStage 服务器计算机,在 User 和 Password 字段中输入您的有效凭证。RTI Agent 的缺省侦听端口是 2000。如果您的 DataStage 管理员更改了这个端口,那么请进行下面的操作:
- 选择 User-defined port 按钮。
- 输入新的端口号。
- 单击 Finish。
图 15. 设置 DataStage 计算机
- 在 Current Tasks 窗格中,单击 Add a New Service to the RTI Server 以打开 RTI Service Wizard。
- 在 Service name 字段中,输入新服务的名称,然后单击 Finish。
- 您刚创建的服务现在作为一个图标出现在右边的窗格中。双击这个 sampleRTI 图标。
- 在 Current Tasks 窗格中,单击 Add Support for Service Bindings 以便打开 Add Support for Service Bindings Wizard。
- 在右边的窗格列表中选择 Soap over HTTP,然后单击 Next。
- 在 Additional binding-specific description 字段中,可以输入一个绑定的描述,将它添加到 Web 服务描述语言(WSDL)中。
- 从 Style 列表中,为 SOAP 消息选择一个编码类型。您的选择取决于客户端应用程序所能接受的类型。
- 单击 Finish。这个绑定图标出现在 Results 窗格中。
- 在 Current Tasks 窗格中,选择 Add an Operation 以打开 New Operation Wizard,如图 16 所示。您将看到注册的 DataStage Server 的列表和表示为节点的 DataStage TX 计算机。
- 选择作业 sampleRTI,即您刚创建的作业,然后单击 Next。
图 16. 选择 RTI 作业
- 在 Operation Name 字段中,如果需要的话可以更改这个名称。其缺省值是作业或者映射的名称。
- 在 Queue Size 字段中,使用服务请求来指定操作队列的大小。如果队列大小超出了指定值,那么将拒绝请求。缺省值为三个请求。
- 在 Wait delay 字段中,指定最大的等待时间,以毫秒为单位。如果等待时间超出了指定的最大时间,则拒绝请求。缺省值是 100 毫秒。
- 单击 Next。
- 下拉 Options 列表并选择 Array(请参见图 17)。对于那些接受或需要在单个请求中包含多行内容的任务,应该将它们的输入参数组织为数组。在这个示例中,您作为 Web 服务部署的作业可以在单个请求中接受多行内容,因此您必须从 Options 列表中选择 Array。
图 17. 创建新的操作
- 这个 RTI 作业在单个请求中返回多行内容,因此在 Options 列表中再次选择 Array。
- 单击 Next。
- 您现在应该处于 New Operation Wizard - Messages Summary 窗口中,如图 18 所示。在 Service Request 和 Response Messages 字段中,检查该操作的输入和输出参数,然后单击 Finish。
图 18. 检查输入和输出参数
现在,您可以设置运行时参数。
- 在 Minimum 字段中,输入可以在任何给定时间运行的并发作业实例的最小数目。
- 在 Maximum 字段中,输入可以在任何给定的时间运行的并发作业和映射实例的最大数目。其缺省值为 5,最大值的缺省值是 500。
- 保留其他字段的缺省设置,并单击 Next。
- 在下一个窗口中,如果需要的话,替换缺省用户凭证,然后单击 Finish。
- 当 Opertion Created 窗口弹出时,单击 OK。
- 右键单击位于右边的窗格中的绑定图标,并选择 Activate,如图 19 所示。
图 19. 激活该绑定
- 双击您创建的操作。在右边的窗格中,您将发现您刚附加到该操作的作业。
- 在 Global Tasks 列表中,单击 Browse the RTI Registry 以打开 RTI Registry Web 页面。您将在列表中发现您刚刚注册的 RTI 服务 sampleRTI(请参见图 20)。
图 20. RTI 服务列表
- 单击 sampleRTI 显示它的注册信息。
- 要在 Web 浏览器中显示该服务的 WSDL,单击 WSDL 链接。通过这个 WSDL 文件,您可以调用所开发的这个 RTI 作业。
这个部分说明了如何使用 Java 客户端调用您刚刚部署的 Web 服务,而您的主要任务是开发这个 Java 客户端。在开始之前,您需要准备好下面的环境:
- Eclipse IDE 版本 3.0 或更高版本 — 您可以使用 Eclipse 开发该 Java 项目;准备一个 Eclipse IDE,这样您可以很容易地遵循本文中所介绍的步骤。
- JDK 1.4 或者 1.5 — 这是开发 Java 项目的基本要求。
- Apache Axis — 您使用 Axis 从 Web 服务生成本地 Java 存根,这使得可以很容易地调用 Web 服务。
现在,您可以开始开发您的 Java 客户端了。
- 创建一个 Java 项目,并将其命名为
TestRTIJob。 - 右键单击该项目,并选择 Properties。打开一个如图 21 所示的窗口。
- 单击 Libraries 选项卡,如图 21 所示,添加 Axis .jar 文件。
图 21. 添加 .jar 文件
- 从 Eclipse IDE 中选择 Run > Run 以打开一个如图 22 所示的窗口。
图 22. 生成 Java 存根
- 在这个窗口中的左侧创建一个新的 Java 应用程序实例,然后单击右边的 Search 按钮。
- 从打开的 Choose Main Type 窗口中,选择 WSDL2Java 类。Axis 提供了这个类,以便由 WSDL 文件生成本地 Java 存根。
- 单击 OK。
- 复制您刚发布到 Program arguments 字段的 Web 服务的 WSDL 文件的 URL,如图 23 所示。
图 23. 复制 WSDL 文件的 URL
- 单击 Run。当完成该程序时,您将注意到在您的项目中生成了一些存根类,如图 24 所示。这些类可以帮助您调用该 Web 服务。
图 24. 生成的 Java 存根类
- 现在,您需要创建一个名为
TestRTIJob的类,以便通过刚生成的存根类来调用 Web 服务。清单 1 中提供了这个类的源代码。
清单 1. 调用 Web 服务package com.ascential.rti.sample; import java.rmi.RemoteException; import javax.xml.rpc.ServiceException; public class TestRTIJob { public static void main(String[] args){ SampleLocator locator = new SampleLocator(); SampleDOCLIT service = null; try { service = locator.getsampleSoap(); String name = service.RTIJob("001"); System.out.println("The name is: " + name); } catch (ServiceException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } } }
- 运行这个类。Java 控制台打印出了用户的位置信息。
到这里为止,您完成了全部的工作!您已经完成了从开发一个 RTI 作业,到作为 Web 服务发布它,以便从 Java 客户端调用该服务的全部过程。
IBM WebSphere DataStage 提供一种便利的方法,用于将 DataStage 作业作为 Web 服务进行部署。在本文中,您了解了 RTI 以及其所有的特性,然后您开发了一个示例 RTI 作业,并将其发布为一个 Web 服务。最后,您使用 Java 客户端调用了这个 Web 服务。希望您能够更加熟悉 DataStage 以及它如何无缝地与 SOA 进行结合。
学习
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文 。
- 阅读“使用 XML-RPC 为 C++ 应用程序启用 Web 服务”(developerWorks,2006 年 9 月),这篇文章分步指导您如何将 C++ 方法公开为服务。
- 访问 developerWorks 的 Architecture 专区,以获取用以提高您在体系结构方面的技能的各种资源。
- IBM developerWorks SOA and Web services 专区 提供了大量的文章,以及关于如何开发 Web 服务应用程序的初级、中级和高级教程。
-
IBM SOA 网站 提供 SOA 的概述,并介绍 IBM 是如何帮助您实现 SOA 的。
- 了解关于 developerWorks 技术事件和网络广播的最新消息。请特别关注以下 SOA 和 Web 服务技术讲座:
- Get started on SOA with WebSphere's proven, flexible entry points
- Building SOA solutions and managing the service lifecycle
- SCA/SDO:To drive the next generation of SOA
- SOA reuse and connectivity
- 访问 Safari 书店,浏览有关这些技术主题以及其他方面的书籍。
- 快速查看 Web 服务按需演示。
获得产品和技术
- 使用 IBM 试用软件开发您的下一个项目,可下载或索取 DVD 光盘。
讨论
- 参与论坛讨论。
- 通过参与 developerWorks Blog 从而加入到 developerWorks 社区,其中包括下面的与 SOA 和 Web 服务相关的 Blog:
- Service Oriented Architecture -- Off the Record,作者 Sandy Carter
- Best Practices in Service-Oriented Architecture,作者 Ali Arsanjani
- WebSphere SOA and J2EE in Practice,作者 Bobby Woolf
- Building SOA applications with patterns,作者 Dr. Eoin Lane
- Client Insights, Concerns and Perspectives on SOA,作者 Kerrie Holley
- Service-Oriented Architecture and Business-Level Tooling,作者 Simon Johnston
- SOA, ESB and Beyond,作者 Sanjay Bose
- SOA, Innovations, Technologies, Trends...and a little fun,作者 Mark Colan
