介绍 Modern Batch 和计算密集型的编程模型
简介
批处理程序是任何企业 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 中所提供的新功能。
计算密集型的编程模型
计算密集型的编程包含以下元素:
控制器 bean:一种无状态的会话 bean,支持运行时环境控制应用程序的作业。此无状态会话 bean (CIControllerBean) 的实现由应用服务器提供。
作业步骤实现类:作业步骤表示作业将执行的业务逻辑。它由一个实现 com.ibm.websphere.ci.CIWork 接口的类的实例表示。CIWork 接口包含以下方法:
run() 方法将在 CI 作业运行时执行。
getProperties() 和 setProperties() 方法用于通过来自客户端的属性获取输入值。
release() 方法在需要通过客户端中断正在执行过程中的作业时调用。
如果工作是长期的,而不是短期的,那么 isDaemon() 方法会返回 “true”。
xJCL 文件:一个基于 XML 的配置文件,提交给作业计划程序运行。作业计划程序使用此文件中的信息确定作业运行的位置和时间、它的输入和输出。作业的 xJCL 定义不是批处理应用程序的一部分。
图 1 显示了计算密集型编程模型。(这是实际编程模型的一个简化版本,实际的模型将在第 2 部分中详细探讨。)
图 1. 计算密集型编程模型
要开发计算密集型作业,您需要:
定义 xJCL 文件。
创建实现 CIWork 接口的 Java 类,包含将对每个作业步骤执行的业务逻辑。
使用指向 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 中以一个集成的组件的形式提供。
此示例场景中的企业是一个在不同州拥有许多分支的金融组织。该组织的客户向分支机构提交应用程序,以便进行相应处理。计算密集型应用程序示例将生成一个报告,总结来自每个州的应用程序数量,以及该组织的其他指标。
要开发此应用程序,请执行以下步骤:
在 Rational Application Developer 中,导航到 File > New > Batch Project,创建一个名为 dWSampleBatch 的新批处理项目。完成此操作之后单击 Finish(参见图 2)。这还会创建一个 EJB 项目,它拥有无状态会话 bean 和 EAR 项目。
图 2. 创建一个新批处理项目