PostActivationServlet的init方法里初始化了两个job:PostActivationJob和NewDistributionJob。
PostActivationJob 是调用PostActivationHandler的invokeProcess方法,这个方法的功能是“This method is used for getting Pricehandle from BrewZone webservice and updating into database table, for generating Feedback file and ftping it to FTPSubsystem.”。貌似这个方法把所有的事情都做了,从BrewZone取得price handle,更新数据库,产生回执文件。
但是粗看了PostActivationHandler的invokeProcess方法,感觉里面用到的很多数据都是已经保存在数据库中了,所以我感觉应该是另一个job,也就是NewDistributionJob执行过后,得到并保存了数据,PostActivationJob才可以顺序地进行,所以决定先看NewDistributionJob。
NewDistributionJob调用了 NewDistributionHandler.invokeProcess方法,这个方法的功能是“This method is used for getting catalog info from BrewZone webservice and updating into database table”,也就是它从BrewZone获得数据并保存到数据库中。invokeProcess调用BREWZoneBase.getInfo方法,它的返回值是InfoVO对象,InfoVO类的成员很简单,值得关注的一个成员是catalogId。得到的InfoVO中的信息又被保存到 CatalogInfoVO对象中。CatalogInfoVO中也有catalogId和其它信息。最后把信息保存到数据库中。
回到 PostActivationHandler.invokeProcess方法,它回频繁地调用getCatalogInfo获得catalog的信息(主要是catalogId),这些信息就是NewDistributionHandler.invokeProcess保存到数据库中的。 invokeProcess调用getPriceHandles获得price handle,但是这个方法没看太懂,它的参数是url和catalogId,很明显,就是到url的地址去获取符合catalogId的price handle。但是细看这个方法的实现,发现好像没做什么,它先是调用brewZoneClient.getTopLevelCategories去获得List
随后PostActivationHandler.invokeProcess调用getFeedBackInformation,它返回ProductsVO对象,ProductsVO类有必要关注一下它的成员:
ProductsVO { List
ProductVO { String productId; List
ContentVO { private String contentId; private List
ItemDetailVO { private String itemURL; private int opFlag; private String itemId; }
从这些类包含的成员,再对照PriceHandle_2009042900000001.xml文件,就可以发现,这些类成员和pricehandle的xml文件的tag是一一对应的。
当 getFeedBackInformation方法返回ProductsVO对象后,pricehandle的xml文档的内容基本上就确定了。随后 uploadFeedBackFile方法被调用生成feedback file,也就是PriceHandle_2009042900000001.xml文件。
就目前来看,对语言信息来说,虽然语言信息保存到了OPCatchVO中了,但是在代码里貌似并没有使用这个OPCatchVO,而是用ProductsVO来构建了price handle xml文件,xml文件里也没有包含语言信息。
没有评论:
发表评论