批处理程序是任何企业IT环境的传统且必不可少的组成部分。 当前批处理的发展趋势是利用在线和批处理程序的内部Java技能来确保:
最大限度地重复使用执行。 由于使用了相同的工具集,因此更易于开发和维护。 在执行企业标准和服务质量方面保持一致。IBM已经开发了提供一致的批处理程序管理范例的解决方案。 IBM WebSphere Application Server的Modern Batch功能(在WebSphere Application Server V8,适用于Modern Batch的WebSphere Application Server V7.0功能包和IBM WebSphere Extended Deployment Compute Grid V8.0中提供)提供了一个批处理中间件框架,该框架提供:
容器管理的批处理作业的执行:提供Java批处理应用程序所需的结构和支持功能,并帮助您避免“自定义中间件陷阱”。 作业控制界面:一个XML文件,描述了批处理步骤中使用的Java类文件以及批处理作业中包含的步骤。 作业检查点和重新启动功能:能够基于记录计数或时间创建检查点的功能 。 这样可以从已知的检查点重新启动作业。 通用批处理数据流(BDS):包含将数据抽象为易于访问的记录格式的功能,以便批处理编程可以专注于业务功能,而不是用于读取和写入数据的基本代码。拥有这样的框架为开发自定义批处理中间件提供了一种受欢迎的替代方法,并使开发人员可以专注于实现核心业务目标。 使用Modern Batch,开发批处理应用程序简化为简单地编写作业的业务逻辑。 业务逻辑和“管道”代码之间的这种关注分离是批处理框架的重要优势。 它实现了批处理功能的更有效的模块化,从而可以更好地重用,并且能够将批处理公开为模块化服务。
现代批处理支持两种批处理编程范例:
计算密集型:对于执行计算密集型工作且不需要重新启动功能的简单作业。 事务批处理:适用于需要容器管理的检查点和重新启动机制的作业。 如果计划内或计划外的中断中断了批处理作业,则可以从最后一个检查点重新启动批处理作业。本文着眼于计算密集型模型,并提供了使用IBM Rational Application Developer v8中提供的新功能的示例实现。
请参阅相关的话题上一批平台的重要性的详细信息,对现代批中间件框架的细节,和WebSphere的作用Extended Deployment的计算网格。
计算密集型编程包含以下元素:
控制器bean:无状态会话bean,它使运行时环境可以控制应用程序的作业。 此无状态会话bean(CIControllerBean)的实现由应用程序服务器提供。 作业步骤实现类:作业步骤表示要由作业执行的业务逻辑。 它由实现com.ibm.websphere.ci.CIWork接口的类的实例表示。 CIWork界面包含以下方法: CI作业运行时将执行run()方法。 提供了getProperties()和setProperties()方法以通过客户端的属性获取输入值。 当作业需要在执行过程中被客户端中断时,调用release()方法。 如果工作是长期的,那么isDaemon()方法将返回“ true”。 xJCL文件:基于XML的配置文件,提交给作业调度程序以运行。 作业计划程序使用此文件中的信息来确定作业在何处以及何时运行,其输入和输出。 作业的xJCL定义不属于批处理应用程序。图1显示了计算密集型编程模型。 (这是实际编程模型的简化版本,将在第2部分中详细讨论。)
要开发计算密集型工作,您需要:
定义xJCL文件。 创建用于实现CIWork接口的Java类,以及用于每个作业步骤的业务逻辑。 正确包装CIWork,并使用无状态会话bean指向com.ibm.ws.ci.CIControllerBean作为实现类。在构建示例计算密集型作业之前,重要的是首先了解运行时间上计算密集型应用程序的行为。 总而言之,发生的事情( 有关更多详细信息,请参阅参考资料)是,应用程序服务器使用xJCL文件查找并调用控制器bean。 Bean读取xJCL文件,对于xJCL中的每个作业步骤,Bean:
使用CIWork类的无参数构造函数实例化由作业的xJCL中的类名元素指定的应用程序CIWork对象。 调用CIWork对象的setProperties()方法以传递在xJCL中为作业步骤定义的任何属性。 查找在企业bean模块的部署描述符中定义的工作管理器,并使用它异步调用CIWork对象的run()方法。了解了编程模型之后,让我们看一下开发计算密集型应用程序的步骤。
此处提供的示例是使用Rational Application Developer V8.0开发的,并已部署在WebSphere Application Server V8.0上。 用于WebSphere V8和更高版本的Rational Software Architect也提供了用于开发批处理程序的工具支持。 WebSphere Application Server V7.0.0.11和更高版本中具有Modern Batch功能包提供了对Modern Batch的运行时支持,并且在V8中作为集成组件提供了对它的运行时支持。
在此示例场景中,企业是一个金融组织,在不同的州都有许多分支机构。 组织的客户将申请提交给分支机构进行处理。 计算密集型应用程序示例将生成一个报告,其中总结了每个州的应用程序数量以及组织的其他指标。
要开发此应用程序:
在Rational Application Developer中,通过导航到File> New> Batch Project来创建一个名为dWSampleBatch的新批处理项目 。 完成后单击Finish (图2)。 这还将创建一个EJB项目,其中包含无状态会话Bean和EAR项目。在这里,示例应用程序将从Rational Application Developer部署和运行。 在第2部分中,当讨论事务批处理时,将演示在应用程序服务器上的部署,以及从各种接口(如作业管理控制台,EJB客户端,Web服务客户端或命令行)调用作业的过程。
要从Rational Application Developer运行样本:
右键单击dWSampleBatchEAR,然后选择运行方式>在服务器上运行 。 选择您要使用的服务器,然后单击Finish (图13)。WebSphere Application Server的现代批处理功能提供了一个强大的批处理框架,使您能够以最少的精力开发批处理程序。 作为WebSphere Application Server的一部分,该解决方案内置了WebSphere产品提供的可靠性。 它提供了一个基于Java的简单编程模型,使您可以利用Java技能来构建可靠的批处理程序,而无需重新发明该框架。 它还为IT经理提供了将作业移至托管WebSphere Application Server环境的机会。
第2部分将讨论事务批处理编程模型,并给出另一个工作示例。
作者感谢Edward McCarthy审阅本文并提供了宝贵的意见。
翻译自: https://www.ibm.com/developerworks/websphere/techjournal/1203_narain/1203_narain.html
相关资源:bank-spring-batch:具有多处理器的Spring Batch项目-源码