WebSphere Application Server 中现代化的基于 Java 的批处理,第 1 部分: 介绍 Modern Batch 和计算密集型的编程模型

IBM® WebSphere® Application Server 的 Modern Batch 功能提供了一个健壮的 Java™ 批编程模型,支持在一个精心架构的框架中跨多个平台集成在线处理和批处理。本系列文章由两部分组成,将介绍 Modern Batch 功能提供的编程模型,并演示 IBM Rational® Application Developer V8.0 中提供的新功能,这些功能大大简化了提交作业所需的批处理应用程序及关联 xJCL 的开发。第 1 部分介将绍 Modern Batch,展示计算密集型编程模型的一个示例实现。第 2 部分将介绍事务批处理模型及批处理框架的其他方面,包括用于提交和控制作业的各种接口、与计划程序的集成以及故障排除技巧。 本文来自于 IBM WebSphere Developer Technical Journal 中文版

Shishir Narain, IT 架构师, IBM

Shishir Narain 的照片Shishir Narain 是 Open Group 认证的精英 IT 专家,掌握了成熟的 IBM 中间件产品方面的技能。他效力于位于古尔冈的印度软件实验室的 IBM Lab Services for WebSphere,拥有 12 年为多家客户开发解决方案的丰富经验。他拥有位于坎普尔的印度理工大学颁发的工学硕士学位。



Nafeezudeen Ahamed, 资深软件工程师, IBM

作者照片Nafeezudeen Ahamed 在印度的 IBM Global Services 工作。他的专攻领域主要包括使用 Rational 和 WebSphere 产品的基于 Java/J2EE 的技术,他专门从事 WebSphere BPM 解决方案和实践方面的工作。他拥有超过 7 年的设计和开发系统的 IT 经验。



2012 年 9 月 12 日

免费下载:IBM® WebSphere® Application Server 试用版
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

简介

批处理程序是任何企业 IT 领域的一个传统且不可或缺的组件。目前的批处理发展趋势是将内部的 Java 技能应用于在线程序和批处理程序上,以确保:

  • 最大限度地提高实现的重用。
  • 更轻松的开发和维护,因为使用了相同的工具集。
  • 企业标准和服务质量实施上的一致性。

IBM 开发的解决方案提供了一种具有凝聚力的批处理程序管理模式。IBM WebSphere Application Server 的 Modern Batch 功能(可用于 WebSphere Application Server V8、WebSphere Application Server V7.0 Feature Pack for Modern Batch 和 IBM WebSphere Extended Deployment Compute Grid V8.0 中)提供了一个批处理中间件框架,提供了:

  • 容器管理的批处理作业执行:提供了 Java 批处理应用程序所需的结构和支持功能,帮助您避免 “自定义中间件陷阱”。
  • 作业控制接口:一个 XML 文件,描述一个批处理步骤中使用的 Java 类文件和批处理作业中包含的步骤。
  • 作业检查点和重新启动功能:能够在记录数量或时间的基础上创建检查点。这支持从一个已知的检查点重新启动一个作业。
  • 通用批处理数据流 (BDS):包含将数据抽象为容易访问的记录格式的功能,使批处理编程能够重点关注业务功能,而不是读取和写入数据的基本代码。

拥有这样一个框架,可为开发自定义批处理中间件提供一种不错的替代方法,允许开发人员将精力集中在实现核心业务目标上。使用 Modern Batch,可以将批处理应用程序的开发精简为编写作业的业务逻辑。这种业务逻辑与 “管道” 代码之间的关注点分离是批处理框架的一个重要优势。它实现了批处理功能的一种更有效的模块化,这支持更有效的重用,能够将批处理公开为模块化服务。

Modern Batch 支持两种批处理编程模式:

  • 计算密集型:适用于执行计算密集型工作,且不需要重新启动功能的简单作业。
  • 事务批处理:适用于需要一个容器管理的检查点和一种重新启动机制的作业。如果因为计划或未计划的断电而中断,这支持批处理作业从上一个检查点重新启动。

本文分析计算密集型模型并提供一个示例实现,该实现使用了 IBM Rational Application Developer v8 中所提供的新功能。

请参阅 参考资料,了解有关批处理平台重要性的更多信息、有关 Modern Batch 中间件框架的详细信息,以及 WebSphere Extended Deployment Compute Grid 的用途。


计算密集型的编程模型

计算密集型的编程包含以下元素:

  • 控制器 bean:一种无状态的会话 bean,支持运行时环境控制应用程序的作业。此无状态会话 bean (CIControllerBean) 的实现由应用服务器提供。
  • 作业步骤实现类:作业步骤表示作业将执行的业务逻辑。它由一个实现 com.ibm.websphere.ci.CIWork 接口的类的实例表示。CIWork 接口包含以下方法:
    • run() 方法将在 CI 作业运行时执行。
    • getProperties() setProperties() 方法用于通过来自客户端的属性获取输入值。
    • release() 方法在需要通过客户端中断正在执行过程中的作业时调用。
    • 如果工作是长期的,而不是短期的,那么 isDaemon() 方法会返回 “true”。
  • xJCL 文件:一个基于 XML 的配置文件,提交给作业计划程序运行。作业计划程序使用此文件中的信息确定作业运行的位置和时间、它的输入和输出。作业的 xJCL 定义不是批处理应用程序的一部分。

图 1 显示了计算密集型编程模型。(这是实际编程模型的一个简化版本,实际的模型将在第 2 部分中详细探讨。)

图 1. 计算密集型编程模型
图 1. 计算密集型编程模型

要开发计算密集型作业,您需要:

  1. 定义 xJCL 文件。
  2. 创建实现 CIWork 接口的 Java 类,包含将对每个作业步骤执行的业务逻辑。
  3. 使用指向 com.ibm.ws.ci.CIControllerBean 的无状态会话 bean 将 CIWork 适当地包装为实现类。

在构建示例计算密集型作业之前,一定要先理解计算密集型应用程序在运行时期间的行为。总之,发生的事情(请参见 参考资料 了解更多详情)是:应用服务器使用 xJCL 文件查找并调用控制器 bean。bean 读取 xJCL 文件,对于 xJCL 中的每个作业步骤,bean 将执行以下操作:

  • 使用 CIWork 类的无参数构造函数实例化应用程序 CIWork 对象(由作业步骤的 xJCL 中的类名称元素指定)。
  • 调用 CIWork 对象的 setProperties() 方法传递作业步骤的 xJCL 中定义的任何属性。
  • 查找在企业 bean 模块的部署描述符中定义的工作管理器,使用它异步调用 CIWork 对象的 run() 方法。

有了对编程模型的这一理解之后,让我们看看开发计算密集型应用程序的步骤。


示例业务场景

相关产品和版本

这里提供的示例使用 Rational Application Developer V8.0 开发并部署在 WebSphere Application Server V8.0 上。Rational Software Architect for WebSphere V8 及更新版本也提供了开发批处理程序的工具支持。WebSphere Application Server V7.0.0.11 及更新版本通过 Modern Batch 功能包提供了对 Modern Batch 的运行时支持,Modern Batch 在 V8 中以一个集成的组件的形式提供。

此示例场景中的企业是一个在不同州拥有许多分支的金融组织。该组织的客户向分支机构提交应用程序,以便进行相应处理。计算密集型应用程序示例将生成一个报告,总结来自每个州的应用程序数量,以及该组织的其他指标。

要开发此应用程序,请执行以下步骤:

  1. 在 Rational Application Developer 中,导航到 File > New > Batch Project,创建一个名为 dWSampleBatch 的新批处理项目。完成此操作之后单击 Finish(参见图 2)。这还会创建一个 EJB 项目,它拥有无状态会话 bean 和 EAR 项目。
    图 2. 创建一个新批处理项目
    图 2. 创建一个新批处理项目
  2. 现在您已设置了项目,您需要创建此批处理项目的作业定义。创建批处理作业定义,方法是右键单击您刚创建的新批处理项目中的 xJCL 文件夹,然后选择 New > Batch Job(参见图 3)。
    图 3. 创建新批处理作业
    图 3. 创建新批处理作业
  3. 选择 Compute Intensive 作为作业类型并输入 SummaryReportJob 作为作业名称(参见图 4)。然后单击 Next
    图 4. 创建 xJCL 文件
    图 4. 创建 xJCL 文件
  4. 在 Batch Step Creation 面板上,输入 SingleStep 作为步骤的名称,选择默认的预定义 CI Work 作为作业步骤模式(参见图 5)。CI Work 模式可确保作业步骤类实现 CIWork 接口,这正是计算密集型编程模型所需要的。
    图 5. 创建批处理步骤
    图 5. 创建批处理步骤
  5. 现在,您需要创建 CIWork 接口的实现类。创建 SummaryReport 类,它将实现 CIWork 并拥有业务需求(在本例中是创建摘要报告)的逻辑。单击 Create Class 按钮创建实现类(参见图 5)。输入图 6 中所示的详细信息并单击 Finish
    图 6. 创建批处理步骤实现类
    图 6. 创建批处理步骤实现类
  6. 您将返回到 Batch Step Creation 面板。下一步是创建批处理作业程序 SummaryReport.java 的参数。创建下面列出的两个必需属性,方法是选择 Add(针对每个属性)并选择 Finish(参见图 7)。
    • InputFileLocation:包含要处理的数据的输入文件位置。
    • OutputFileLocation:包含输出摘要报告文件的位置。
    Batch Job 向导操作结束并在 xJCL 文件夹中创建了 SummaryReportJob.xml 文件(在第 3 步中指定)。
    图 7. 添加必需的属性
    图 7. 添加必需的属性
  7. 上一步中创建的必要属性既可使用值硬编码,也可在运行时通过 xJCL 文件传递。对于本示例,它们将通过 xJCL 文件传递。要实现此目的,请双击 xJCL 文件夹下的 SummaryReportJob.xml 文件将其打开。这会在 xJCL 编辑器中打开 XML 作业定义文件,如图 8 中所示。
    图 8. 编辑 xJCL 文件
    图 8. 编辑 xJCL 文件
  8. 您可能希望在运行时通过 xJCL 传递文件位置的值。为此,可使用替换属性 (Substitution Properties),这些属性使您能够创建可在 xJCL 中使用的默认的 “名称-值" 对。要创建替换属性,可以单击 Add,然后在 Add Item 对话框中选择 Substitution Properties,单击 OK(参见图 9)。
    图 9. 添加替换属性
    图 9. 添加替换属性
  9. 在 Substitution Properties 对话框中添加下面列出的属性,单击 Finish(参见图 10)。
    • inputFile:分配 C:\\InputFile.txt 的默认值
    • outputFile:分配 C:\\OutputFile.txt 的默认值
    图 10. 添加替换属性
    图 10. 添加替换属性
  10. 在 xJCL 编辑器中,使用相应的替换属性更新必需的属性值(参见图 11):
    • 将 InputFileLocation 替换为 ${inputFile}
    • 将 OutputFileLocation 替换为 ${outputFile}
    这样,您现在就已将作业定义中定义的必需属性与替换属性相链接。这允许您在运行时传递实际文件位置。
    图 11. 更新必需的属性
    图 11. 更新必需的属性
  11. 您可能已经注意到,Rational 工具也生成了 EJB 和 EAR 项目。检查 EJB 项目,确保资源引用已正确设置为 CIWorkManager。要在 EJB 绑定编辑器中执行此操作,可双击 EJB 项目下的 ibm-ejb-jar-bnd.xml 文件(参见图 12)。批处理作业现在已完成配置。
    图 12. 验证资源引用
    图 12. 验证资源引用
  12. SummaryReport.java 实现了读取数据文件 (InputFile.txt)、准备报告、然后将其写入输出文件 (OutputFile.txt) 的业务逻辑。结合使用 SummaryReport.java 文件和本文中包含的文件(可从 下载 部分获得)实现此业务逻辑。另外,将 InputFile.txt 文件放在为输入文件位置选择的目录下,以便 Summary 程序可以读取它。您现在可以部署和测试批处理应用程序了。

运行示例

部署选项

在这里,示例应用程序将从 Rational Application Developer 部署和运行。在第 2 部分中,在探讨事务批处理时,我们将演示应用服务器上的部署,以及从各种接口(比如作业管理控制台、EJB 客户端、Web 服务客户端或命令行)对作业的调用。

要从 Rational Application Developer 运行示例,请执行以下步骤:

  1. 右键单击 dWSampleBatchEAR 并选择 Run As > Run on Server。选择您希望使用的服务器并单击 Finish(参见图 13)。
    图 13. 在服务器上运行批处理应用程序
    图 13. 在服务器上运行批处理应用程序
  2. 要将 xJCL 提交到服务器运行时,可以右键单击 SummaryReportJob.xml 文件并选择 Run As > Modern Batch Job(参见图 14)。
    图 14. 提交 xJCL 作业
    图 14. 提交 xJCL 作业
  3. 如果在此服务器上启用了安全性,可以勾选此复选框,输入一个有效的用户 ID 和密码。如果已将 inputFile.txt 文件放在 C:\\InputFile.txt 以外的不同位置,可以使用新值更新该位置。单击 Run。该作业被提交到服务器运行时,并在 Modern Batch Job Management Console 中打开了作业日志文件(参见图 16)。
    图 15. 修改替换属性
    图 15. 修改替换属性
    图 16. 作业日志
    图 16. 作业日志
  4. 要查看作业运行的日志,可以访问 Modern Batch Job Management Console,方法是右键单击 Server 视图中的服务器运行时并选择 Modern Batch Job Management Console,或使用 URL:http://<hostname>:<wc_defaulthost port>/jmc/console.jsp。该控制台用于管理批处理作业并特意与 WebSphere Application Server 管理控制台相分离,因为操作批处理环境和管理中间件基础架构是两件非常不同的事。图 17 显示了 Modern Batch Job Management Console,它提供了许多管理作业的功能。
    图 17. Modern Batch Job Management Console
    图 17. Modern Batch Job Management Console
  5. 当运行完成时,提交的作业应该以文件的形式在 C:\\outputFile.txt 生成一个摘要报告,对测试结果进行总结。

结束语

WebSphere Application Server 的 Modern Batch 功能提供了一个健壮的批处理框架,使您能够以最少的工作开发批处理程序。作为 WebSphere Application Server 的一部分,WebSphere 产品所提供的可靠性已融入到解决方案中。它提供了一个基于 Java 的简单编程模型,使您能够利用 Java 技能构建值得信赖的批处理程序,无需重新发明该框架。它还为 IT 经理提供了将作业转移到一个托管的 WebSphere Application Server 环境的机会。

第 2 部分将探讨事务批处理编程模型,并使用另一个实用的示例进行展示。


致谢

作者感谢 Edward McCarthy 审核本文并提供宝贵的建议。


下载

描述名字大小
代码样例1203_narain_attachment.zip642 KB

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere, Rational
ArticleID=835023
ArticleTitle=WebSphere Application Server 中现代化的基于 Java 的批处理,第 1 部分: 介绍 Modern Batch 和计算密集型的编程模型
publish-date=09122012