2009年8月14日星期五

PostActivation,price handle的获取

对于PostActivation,PostActivationServlet类的doGet方法到没多少内容,它调用PostActivationHandler.fetchItemDetails方法,这个方法返回OPCacheVO对象,查看OPCacheVO的内容,发现有不少东西,productID,contentID,四元组,price handle,还有语言信息,几乎包含了所有必要的信息。随后doGet调用fetchProductIDContentID方法将这些信息都保存到数据库中。

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,但是奇怪的是虽然调用了getTopLevelCategories,但它的返回值并没有被保存到一个List对象中,也就是说这里调用getTopLevelCategories貌似没起作用。然后有调用OPCacheDAO.opCacheReload,这个方法也奇怪,就在数据库中设置了一下时间戳而已。

随后PostActivationHandler.invokeProcess调用getFeedBackInformation,它返回ProductsVO对象,ProductsVO类有必要关注一下它的成员:
ProductsVO { List product; }

ProductVO { String productId; List content; }

ContentVO { private String contentId; private List ItemDetail; }

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文件里也没有包含语言信息。

没有评论:

发表评论