pb模型多batch_介绍Modern Batch和计算密集型编程模型
WebSphere Application Server中基于Java的现代化批处理,第1部分
内容系列:
此内容是#在系列的一部分#: 在WebSphere Application Server现代化的基于Java的批处理,第1部分
此内容是该系列的一部分: WebSphere Application Server中基于Java的现代化批处理,第1部分
请继续关注本系列中的其他内容。
批处理程序是任何企业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部分中详细讨论。)
图1.计算密集型编程模型
要开发计算密集型工作,您需要:
- 定义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中,通过导航到File> New> Batch Project来创建一个名为
dWSampleBatch
的新批处理项目 。 完成后单击Finish (图2)。 这还将创建一个EJB项目,其中包含无状态会话Bean和EAR项目。图2.创建一个新的批处理项目
- 现在,您已经设置了项目,您需要为该批次创建作业定义。 右键单击刚创建的新批处理项目中的xJCL文件夹,创建批处理作业定义,然后选择“ 新建”>“批处理作业” (图3)。
图3.创建一个新的批处理作业
- 为作业类型选择Compute Intensive ,
SummaryReportJob
为作业名称输入SummaryReportJob
(图4)。 单击下一步 。图4.创建xJCL文件
- 在“创建批次步骤”面板上,输入
SingleStep
作为步骤名称,然后为作业步骤模式选择默认的预定义CI Work (图5)。 CI Work模式可确保Job Step类按照计算密集型编程模型的要求实现CIWork接口。图5.创建批处理步骤
- 现在,您需要为CIWork接口创建实现类。 创建SummaryReport类,该类将实现CIWork并具有满足业务需求的逻辑,在这种情况下,该逻辑将创建Summary报告。 单击Create Class按钮创建实现类(图5)。 输入详细信息,如图6所示,然后单击Finish 。
图6.创建批处理步骤实现类
- 您将返回到“批处理步骤创建”面板。 下一步是为批处理作业程序SummaryReport.java创建参数。 通过选择Add (每个),然后单击 Finish (图7),创建下面列出的两个Required Properties。
- InputFileLocation:保存要处理的数据的输入文件的位置。
- OutputFileLocation:保存输出Summary报告文件的位置。
图7.添加必需的属性
- 上一步中创建的“必需属性”可以用值进行硬编码,也可以在运行时通过xJCL文件传递。 对于此样本,它们将通过xJCL文件传递。 为此,请双击xJCL文件夹下的SummaryReportJob.xml文件。 这将在xJCL编辑器中打开XML作业定义文件,如图8所示。
图8.编辑xJCL文件
- 您想在运行时通过xJCL传递文件位置的值。 您可以使用“替换属性”来执行此操作,该属性使您能够创建可在xJCL中使用的默认名称/值对。 通过单击Add ,然后在Add Item对话框中选择Substitution Properties,创建Substitution Properties,然后单击OK (图9)。
图9.添加替换属性
- 在Substitution Properties对话框中添加下面列出的属性,然后单击Finish (图10)。
- inputFile:分配默认值
C:\\InputFile.txt
- outputFile:分配默认值
C:\\OutputFile.txt
图10.添加替代属性
- inputFile:分配默认值
- 在xJCL编辑器中,使用相应的替换属性更新所需的属性值(图11):
- InputFileLocation到
${inputFile}
- OutputFileLocation到
${outputFile}
图11.更新所需的属性
- InputFileLocation到
- 您可能已经注意到,Rational工具也会生成EJB和EAR项目。 查看EJB项目,以确保将资源引用正确设置为CIWorkManager 。 在EJB绑定编辑器中,通过双击EJB项目下的ibm-ejb-jar-bnd.xml文件来执行此操作(图12)。 现在已配置批处理作业。
图12.验证资源参考
- SummaryReport.java实现了以下业务逻辑:读取数据文件(InputFile.txt),准备报告,然后将其写入输出文件(OutputFile.txt)。 使用SummaryReport.java文件以及本文随附的文件进行下载以实现此业务逻辑。 另外,将InputFile.txt文件放置在为输入文件位置选择的目录下,以便Summary程序可以读取它。 现在您可以部署和测试批处理应用程序了。
运行样本
要从Rational Application Developer运行样本:
- 右键单击dWSampleBatchEAR,然后选择运行方式>在服务器上运行 。 选择您要使用的服务器,然后单击Finish (图13)。
图13.在服务器上运行批处理应用程序
- 要将xJCL提交到服务器运行时,请右键单击SummaryReportJob.xml文件,然后选择“运行方式”>“现代批处理作业” (图14)。
图14.提交xJCL作业
- 如果在此服务器上启用了安全性 ,请选中此框并输入有效的用户ID和密码。 如果将inputFile.txt文件放置在C:\\ InputFile.txt以外的其他位置,请使用新值更新该位置。 点击运行 。 作业将提交到服务器运行时,并在Modern Batch Job Management Console中打开作业日志文件(图16)。
图15.修改替换属性
图16.作业日志
- 要查看正在运行的作业的日志,可以通过在服务器视图中右键单击服务器运行时并选择Modern Batch Job Management Console或使用URL,来访问Modern Batch Job Management控制台:
http://<hostname>:<wc_defaulthost port>/jmc/console.jsp
该控制台旨在管理批处理作业,并有意与WebSphere Application Server管理控制台保持隔离,因为操作批处理环境和管理中间件基础结构是两件事。 图17显示了Modern Batch Job Management Console,它提供了许多用于管理作业的功能。图17.现代批处理作业管理控制台
- 运行完成后,提交的作业应在C:\\ outputFile.txt中生成一个Summary报告,作为文件,包括测试。
结论
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