CC&B核心模块——Batch(批服务)
在CC&B平台开发中,BATCH是少不了的,CC&B的BATCH支持JAVA和COBOL两种语言开发的程序,这里只介绍JAVA开发的BATCH。但系统中核心部份的BATCH大部分是采用COBOL开发,属于出厂时已经存在的。
1. BATCH的功能:
BATCH(批)是一种离线的批处理程序,可以单独运行,不依赖WEB服务,是用来执行各类批量业务数据的程序。BATCH具有灵活,重复使用等特点,多个批服务串联到一起成为一个任务流(Job Stream)来处理一系列的后台业务。
2. 命名规范
说明:
1. Name : 是程序类命,CmlQueryAccountInformationBatch,以Cml开头,以Batch结尾,Cml中“Cm”是Core Model/核心模块,l是local/本接化,Batch结属表明这个类是一个Batch程序。
2. Multi Threaded/Rerunnable勾选说明这个Batch支待多线程。
3. Worker Class Name是内部类的名字,这里输入的同类命一样,但在后面加上Worker,变成CmlQueryAccountInformationBatchWorker,工具生成出来的代码有个小bug,在内部类的继承类前多写了一个类名,CmlQueryAccountInformationBatchWorkerCmlQueryAccountInformationBatchWorker_Gen,因此需要手工去掉前面一部份。
4.Single record per unit 是否单个记录执行。
3. 程序结构
A: 版权声明注释, 三个部分,第一部份版权说明,第二部份程序描述,第三部份修改记录。
B:头注解:作者,是否多线程支持,参数。
其中参数部分,name是参数的名字,在SQL配置阶段按照这个来配,required该参数在运行时是否必须给值,type,参数类型,除JAVA基本类型String和integer外,还可以是entity 类型,如果定义entity类型,必须指定entityName.
如何查找entityName,如果对CC&B系统熟悉,根据CC&B的命名规范很容易猜出是什么,最准确的办法是,在CC&B的英文界面,找到要配置的参数前面的英文描述,在Oracle提供的数据字典中找到表名,然后根据表名在系统中找到对应的JAVA对象名。
C. 外部类参数变量和工作临时变量,注意注释说明
D. 初始化和验证参数是滞有效: validateSoftParameters(),此方法最早执行。
E. 外部类的getJobWork()方法,此方法在初始化完成后运行,相当于普通JAVA类的main()方法。通常情况下,在这个方法中,将要处理的数据,全部查询出来。然后交给内部类一条一条的去处理。
F. 使用getThreadWorkerClass()方法得到内部类的实例对象(使用CC&B内部机制)。
G. 内部类,内部类用于执行外部类查询出来的结果,通常都要是一条记录一条记录来处理。同样,内部类里面也有几个系统内置的方法,结构如下:
G.1. 内部类参数变量和工作临时变量,注意注释说明, 这要要说明一下,内部类不要使用外部类的全局变量,以往的经验,会有NullpointException的风验。
G.2. 初始化和验证参数变量
G.3. 指定事务的提交策略。(三种)
G.4. 直正执行任务
G.5. 最终退出之前处理
4. 开发说明
1, 在注解中的Batch参数定义好之后,并且将内部类的超类的名字修改正确后,要生成外部类和内部类的GEN类,然后清理整个项目,最后刷新项目即可进行业务逻辑的编码。
2, 内部类和外部类的变量不要共用。
3, 所有的参数,一定要在初始化之后验证。
4, 尽理在外部类的getJobWork()方法中一次性把查出的数据过滤完成,不要放在内部类中去过滤每条数理该不该处理,内部类严格上来说对每条记录都做处理。
5. 注册
将已开发好的BATCH注册到CC&B的数据库中。
步骤: A. 将已开发好的BATCH程序发布到WEB服务器,并启动WEB服务器;
B. 在CC&B页面管理菜单/系统下,添加Batch Control/批控制。
6. 调试(前提是已发布的程序所在的BATCH服务已正确启动)
A. 命令行调式
命令行提交,按照页面提交所需要的元素值,填写到配置文件,然后运行BATCH提交命令。
B. 页面提交
在页面点提交就行,这里不多说。