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对象
 
/**
   * 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
   */

   将返回的对象也保留了其引用在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表中每条记录的映射对象

你可能感兴趣的:(数据结构,sql,log4j)