2009年7月17日星期五

CommonProcess之二

commonce process模块是用Quartz进行调度的,网上说它是个“作业调度集”,因为common process模块是用轮询的方式去获得三类文件的,所以考虑把对三类文件的轮询看作是各个作业,用Quartz来进行调度。 BSGCommonJob.java里的类BSGCommonJob实现了接口StatefulJob,这个接口也是Quartz里的。

有 了GSGCommonJob类,还要有一个调度类来调度作业,根据Quartz框架,这就涉及到触发器,有两个最常用的是SimpleTrigger和 CronTrigger,在代码里用的是SimpleTrigger,调度类是BSGCommonScheduler.java的 BSGCommonScheduler,其中的方法scheduleJob使用了SimpleTrigger。

在 BSGCommonScheduler里使用了JobConfig,这个类包含了所有关于轮询获取三类文件业务的属性和参数,这些属性和参数是从一个配置 文件CommonConfig.xml读取的,这个文件中设置了文件存放的ftp地址,轮询的间隔等等关键的参数。BSGCommonScheduler 要根据这些信息来调度。

servicelayer包里面的两个文件目前看还不太清楚作用,ConfigServlet.java应该是从 CommonConfig.xml里读出配置项并设置。前面提到的调度BSGCommonScheduler是在StartupServlet.java 里的init方法里设置的。

BSGCommonProcess及其三个派生类是真正干活的,各个××××process类几乎包含了所有 操作所需要的内容,包括:数据库,ftp,文件的解析(xml文件的解析是用SAX方式)等等。从ftp相应的地址处获取文件是在方法 initiateFetch完成的,它从ftp地址获取所有的文件。文件被取回后,文件名和时间戳等信息会被存放到数据库的相应的表中,这些操作是用 “VO”包中的类完成的。所有的已经处理或者未处理的文件的名字应该都存储在数据库的相应的表中,这样就可以清楚地知道当前文件处理的状态。文件的处理是 在方法processFiles中,处理的细节有点像状态机,文件有好几个状 态:BSGCommonConstants.FILE_START,BSGCommonConstants.FILE_PROCESSED,BSGCommonConstants.FILE_CORRUPT 和BSGCommonConstants.FILE_FINISH,不同的状态有不同的方法处理,最终使得文件到达 BSGCommonConstants.FILE_FINISH状态。

handler包里面的代码都是用来处理相应xml文件的,因为common process是使用SAX的方式解析xml的,所以类BSGCommonHandler是从DefaultHandler派生的,

request实时流的入口:public void doGet(HttpServletRequest request, HttpServletResponse response)

没有评论:

发表评论