以上介绍是我对业务描述的xml的介绍,下面该介绍我们是怎么来运行这个xml的业务描述的了。
首先,介绍一下我们采用的一些技术和工具。
1 ibatis-一个简单的orm工具。它很好的完成了将数据访问的实现逻辑写到xml文件中,以及它支持hashmap对象的使用。这两点是我们能实现通用的至关重要的两点。 因为,我们要实现java代码与业务无关那么我们代码应该与具体业务无关。第一步,我们通过使用ibatis基本实现将数据访问逻辑写道xml文件中,第二,在使用数据对象时候我们采用ibatis支持的hashmap。这样我们操作的就都是抽象的与具体业务无关的对象。
2 castor -一个对应于xml的orm工具。简化了我们对配置xml的读取工作
3 线程池-
4 对象池 -
5 Vfs 一个虚拟文件系统 重要用来实现我们的文件远程传输。
下图是对现在程序流程的一个简单描述
一 任务管理器
因为通用推送是针对不同的业务而言,我们通过配置文件来描述不同的推送任务。
二 单一业务的配置
以下是我们对单个任务的描述信息。
xml 代码
- <config>
- <task id="##" interval="300000">
- <source id="1" name="website" isTranstion="false" isMuTheard="true" futrueid="ID">
- <query id="sender.getAllHrWebsites" name="getAllHrWebsites" type="select"/>
- <source id="1.1" name="unsendedcompany" isTranstion="true" isMuTheard="false"
- interval="1000">
- <query id="sender.getUnsendedHrCompanies" name="getUnsendedHrCompanies" type="page"
- loggInfo="ID,COMPANY_NAME" maxField="ID">
- <fieldRef name="WEB_MAPID" parentref="MAP_ID"/>
- query>
- <update id="sender.insertHrCompanies" name="insertHrCompanies" type="insert"
- index="1"/>
- <update id="sender.updateSendedHrCompanies" name="updateSendedHrCompanies"
- type="update" index="2"/>
- <source id="1.1.1" name="unsendjob" isTranstion="false" isMuTheard="false"
- futrueid="">
- <query id="sender.getUnsendedPositions" name="getUnsendedPositions"
- type="select">
- <fieldRef name="WEB_MAPID" parentref="WEB_MAPID"/>
- <fieldRef name="COMP_ID" parentref="SEND_ID"/>
- query>
- <update id="sender.insertPositions" name="insertPositions" type="insert"
- index="1"/>
- <update id="sender.updateSendedPositions" name="updateSendedPositions"
- type="update" index="2"/>
- <source id="1.1.1.1" isMuTheard="false" isTranstion="false"
- name="unsendpositionsinc">
- <query id="sender.getPositionRegions" type="select"
- name="getPositionRegions"/>
- <update id="sender.insertRegions" name="insertRegions" type="insert"
- index="1"/>
- source>
- source>
- <source id="1.1.2" name="sendedjob" isTranstion="false" isMuTheard="false">
- <query id="sender.getSendedPositions" name="getSendedPositions" type="select"/>
- <update id="sender.updatePosition" name="updatePosition" type="insert" index="1"/>
- <update id="sender.updateSendedPositions" name="updateSendedPositions"
- type="update" index="2"/>
- source>
- source>
- <source id="1.2" name="sendedcompany" isTranstion="false" isMuTheard="false"
- interval="1000">
- <query id="sender.getSendedHrCompanies" name="getSendedHrCompanies" type="page"
- loggInfo="ID,COMPANY_NAME" maxField="ID">
- <fieldRef name="WEB_MAPID" parentref="MAP_ID"/>
- query>
- <source id="1.2.1" name="unsendjob" isTranstion="false" isMuTheard="false"
- futrueid="">
- <query id="sender.getUnsendedPositions" name="getUnsendedPositions"
- type="select">
- <fieldRef name="WEB_MAPID" parentref="WEB_MAPID"/>
- <fieldRef name="COMP_ID" parentref="SEND_ID"/>
- query>
- <update id="sender.insertPositions" name="insertPositions" type="insert"
- index="1"/>
- <update id="sender.updateSendedPositions" name="updateSendedPositions"
- type="update" index="2"/>
- <source id="1.2.1.1" isMuTheard="false" isTranstion="false" name="unsendregion">
- <query id="sender.getPositionRegions" type="select"
- name="getPositionRegions"/>
- <update id="sender.insertRegions" name="insertRegions" type="insert"
- index="1">
- <fieldRef name="POSITION_ID" parentref="SEND_ID"/>
- update>
- source>
- source>
- <source id="1.2.2" name="sendedjob" isTranstion="false" isMuTheard="false">
- <query id="sender.getSendedPositions" name="getSendedPositions" type="select"/>
- <update id="sender.updatePosition" name="updatePosition" type="insert" index="1"/>
- <update id="sender.updateSendedPositions" name="updateSendedPositions"
- type="update" index="2"/>
- source>
- source>
- source>
- task>
- config>
而我们的任务管理器是可以管理多个这样任务的。