handoff 流程

1.main 读applicationxml配置文件到context中
2.context 生成一个handoff_generator_template类,这个类构造时指定需要使用什么hand_off_generator for haijie, it's the class <com.citi.dde.hoffs.templateimpl.DDEBgPbstFileAckGen>
3.通过刚才创建的DDEBgPbstFileAckGen对象中的getCommandLineParams()创建并返回引用HandOffCmdLineParams对象
[Code="java"]
/**
* In PbestFileAckGen, 创建这个命令行参数对象的时候期待三个键值
* 1.handoff_generator_class_name
* 2.pFileId the second parameter of HoffMain
* 3.pFileType the third-parameter of HoffMain
*
* opinional parameter: pRejectErrorCode the fourth parameter of HoffMain
*/
[/Code]
将返回的对象也保留了其引用在template对象中
4.初始化handoffenvironment
4.1调用handoff_main中的inithoffenv方法
4.11创建HoffService对象其实是创建了HoffServiceimpl对象,只是一个接口
4.12取得handoffparameter,HandOffParameter这个对象的构造器做的工作实际上是读取一个配置文件hoff_parameters.properties,将这个文件中的键值配置记录读到handoffparameter对象中的parameterCache里。
4.13取得handoffparameter中的handoff_id
4.14通过取得的handoff_id利用HoffServiceimpl对象的getProcessId去数据库中的getProcessId方法执行select process_id from hoff_config_master where hoff_id=?取得process_id
4.15同上利用HoffServiceimpl中的getLogFileNames方法取得tracefile_name和logfile_name select tracefile_name, logfile_name from hoff_config_files where hoff_id=?
4.16将cmdLineParameters中的map取回,将上面取得的handoff_id,process_id,tracefile_name,logfile_name存放到cmdlineparameter里

4.17创建HoffEnv对象并且执行Initialize(cmdLineParams)方法,一开始就从handoff_paramter对象中读取D_ENV_FILE_NAME属性对应的值,
这个值其实就是一个配置文件的路径和ddenv.ini作用貌似是一样的。
将这个文件中配置的属性装载到properties成员中,创建processInfoVOCache对象,这个就是一个HashMap<String, ProcessInfoVO>,
而其中的ProcessInfoVO保存了processId processName applicationName packetSize四个属性,ProcessInfoVO有set和get的方法。
执行loadProcessInfo(cmdLineParams)方法
通过EnvVar.D_CFG_DIR取得procDataFilePath=D:\workspace\dde_handoffs_frmwrk\src
通过取得EnvVar.D_PROCDATA_FILE_NAME并且和上面的D_CFG_DIR进行拼接得到了procDataFile=D:\workspace\dde_handoffs_frmwrk\src\proc_info.dat
从cmdlinparameter中取得process_id
在proc_info.dat文件中读取含有process_id的属性最终将processId processName applicationName packetSize四个属性装载到上面提及到的ProcessInfoVO对象中。
processInfoVOCache,也将process_id和ProcessInfoVO装入他的map
4.18使用cmdlineparamteter创建TraceLogger
使用cmdlineparamteter创建SqlLogger
使用cmdlineparamteter创建TivoliLogger

5.执行hoffTemplate().generateHoff
gethandoffgenerator().sethandoffcmdlineparameters(handoffcmdlineparameter);
gethandoffgenerator().initilizer();初始化handoffgenernator.
validateCmdParameter
先取得handoffcmdlineparameter 调用log4j printout handoffcmdlineparameter,只是简单的把cmdparameter容器打印出来而已。
create handoff_session创建一个handoff会话
什么是Hand off Session?
HoffSessionVO对象中使用Map<String, String>创建了一个session对象用来保存特定的一些程序参数,
使用这个对象的创建是通过使用复制另外一个Map<Stiring,String>来进行初始化,当前的版本中使用的是handoff cmd line parameter对象
对象初始化完成以后,通过特定的数据库交互的函数,获取ProcessName:根据SessionConstants.JOB_CODE SessionConstants.JOB_NUM + ProcessName
这个是hand-off enviroment对象的一个结构
HoffEnv< processInfoVoCache< ProcessInfoVO < processId processName applicationName packetSize > > >
HoffSession< HoffSessionVO< session<String, String > > >
session是使用handoff cmdline parameter创建的基本map,然后再加上一个ProcessName。
载入handoff配置:与数据库交互取得master,detail,mapping等配置信息到特定对象中的map容器中。
这里所指的是一个handoff_config:对象的结构
handoff_config< hoff_config_detail, hoff_config_mapping, hoff_config_master, hoff_config_files, hoff_config_othersps>
从HandoffSessionVO中读取到session,再从session中读取到handoff_id使用handoff_id取
hoff_config_detail:
hoff_config_mapping:存储过程的名称,存储过程调用期待的参数,存储过程获取结果是否分页。
hoff_config_master:包含了hand_off_generator类名,hoff_format_type,page_length, process_id, repeat_rectype_id, root_tag_name
hoff_config_files:包含了tracefile和logfile的名字对应特定的hoff_id
hoff_config_othersps:
HoffConfigKey< record_type, config_id >
updateSessionWithHoffConfig使用配置好的hoff_config对象来更新hoff_sessionVO:把hoff_config_files和hoff_config_master中的数据装载到
( HoffSession< HoffSessionVO< session<String, String > > > )session中
设置处理过的记录类型的列表

HoffEnvelope prepare
什么是hoffenvelope?
为当前会话取得hoff_config,files,masters
initialize
{
1.hoff_envelope object 先创建一个xml自对象, 然后从HoffEnv对象中取得env_root_element_ns.
2.get rootelement & create recordElementMap
}
processConfigMapRecord执行sp,格式化返回的结果记录:
1.resetConfigMapRecordSession
1.1在当前session中保留rectype_id_break配置
1.2给当前的session清除IS_LAST_RECORD标志位
1.3给当前session清楚IS_LAST_PAGE标志
2.把recordTypeId加到processedRecTypeIdList里
processedRecTypeIdList是什么?
3.processNFormatRecords:处理数据库返回的结果,处理,设定好格式,写到文件里生成handoff
由于结果是分类的,所以调用这个函数preparePaginatedRecords
调用前先要调用SqlUtil.getPaginatedQueryVO获取执行sp的语句,名字,参数
setCallableStatement 取得数据库连接,prepare执行语句,设置CallableStatement语句中的参数
在启用pagingUtil的时候,其构造函数使用已经拼凑好的sql调用语句调用pagingUtil.setPageStatistics,这时候就会执行需要调用的语句,如果没有记录返回,则会抛出一个异常和警告

formatVO就是对detail表中每条记录的映射对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值