本申請(qǐng)涉及工作流數(shù)據(jù)處理的技術(shù)領(lǐng)域,特別是涉及一種工作流數(shù)據(jù)持久化的方法和一種工作流數(shù)據(jù)持久化的裝置。
背景技術(shù):工作流(WorkFlow)就是工作流程的計(jì)算模型,即將工作流程中的工作如何前后組織在一起的邏輯和規(guī)則在計(jì)算機(jī)中以恰當(dāng)?shù)哪P瓦M(jìn)行表示并對(duì)其實(shí)施計(jì)算。工作流要解決的主要問題是:為實(shí)現(xiàn)某個(gè)業(yè)務(wù)目標(biāo),在多個(gè)參與者之間,利用計(jì)算機(jī),按某種預(yù)定規(guī)則自動(dòng)傳遞文檔、信息或者任務(wù)。簡(jiǎn)單地說,工作流就是一系列相互銜接、自動(dòng)進(jìn)行的業(yè)務(wù)活動(dòng)或任務(wù)。將整個(gè)業(yè)務(wù)過程看作是一條河,其中流過的河水就是工作流。工作流屬于計(jì)算機(jī)支持的協(xié)同工作(ComputerSupportedCooperativeWork,CSCW)的一部分。后者是普遍地研究一個(gè)群體如何在計(jì)算機(jī)的幫助下實(shí)現(xiàn)協(xié)同工作的。許多公司采用紙張表單,手工傳遞的方式,一級(jí)一級(jí)審批簽字,工作效率非常低下,對(duì)于統(tǒng)計(jì)報(bào)表功能則不能實(shí)現(xiàn)。而采用工作流軟件,使用者只需在電腦上填寫有關(guān)表單,會(huì)按照定義好的流程自動(dòng)往下跑,下一級(jí)審批者將會(huì)收到相關(guān)資料,并可以根據(jù)需要修改、跟蹤、管理、查詢、統(tǒng)計(jì)、打印等,大大提高了效率。工作流數(shù)據(jù)的持久化是一個(gè)工作流產(chǎn)品必不可少的組成部分,傳統(tǒng)工作流產(chǎn)品的數(shù)據(jù)持久化實(shí)現(xiàn)方式,無法靈活無侵入的滿足各種持久化需求,以現(xiàn)有技術(shù)中常用的JBPM3、JBPM4(JavaBusinessProcessManagement,業(yè)務(wù)流程管理)等產(chǎn)品為例,其實(shí)現(xiàn)了一種同步持久化工作流數(shù)據(jù)的方式,基于所述JBPM3、JBPM4等產(chǎn)品,現(xiàn)有技術(shù)還提出了一種改進(jìn)的工作流數(shù)據(jù)的持久化方式,具體包括如下步驟:步驟一:找到工作流持久化數(shù)據(jù)的代碼,在里面增加一個(gè)判斷機(jī)制。如果發(fā)現(xiàn)流程上下文中存在異步標(biāo)志,則調(diào)用異步隊(duì)列,做異步持久化數(shù)據(jù)操作。如果同步,則直接調(diào)用同步方法。步驟二:當(dāng)有一個(gè)新的持久化需求時(shí),例如:需要根據(jù)一個(gè)指定的路由,調(diào)用遠(yuǎn)程服務(wù)器異步持久化流程數(shù)據(jù)。這個(gè)時(shí)候再次改動(dòng)代碼,增加判斷和相應(yīng)的標(biāo)識(shí)符。可以看出,現(xiàn)有技術(shù)的方案是基于硬編碼的形式實(shí)現(xiàn),每當(dāng)增加一種持久化方式時(shí),都需要修改代碼。增加了維護(hù)的成本,不利于業(yè)務(wù)的擴(kuò)展。因此,目前本領(lǐng)域技術(shù)人員迫切需要解決的一個(gè)技術(shù)問題在于。如何創(chuàng)造性的提出一種工作流數(shù)據(jù)持久化的機(jī)制,用以節(jié)省維護(hù)成本,增強(qiáng)工作流產(chǎn)品的擴(kuò)展性。
技術(shù)實(shí)現(xiàn)要素:本申請(qǐng)的目的是提供一種工作流數(shù)據(jù)持久化的方法和裝置,用以提高計(jì)算機(jī)和各種用戶終端應(yīng)用的安全性,成為本領(lǐng)域技術(shù)人員迫切需要解決的問題。為了解決上述問題,本申請(qǐng)公開了一種工作流數(shù)據(jù)持久化的方法,包括:提取服務(wù)端配置文件中聲明的服務(wù)信息;其中,所述服務(wù)信息包括工作流數(shù)據(jù)持久化服務(wù)信息;為客戶端配置文件中聲明的服務(wù)接口創(chuàng)建動(dòng)態(tài)代理類,并生成所述服務(wù)接口的策略配置信息;其中,所述服務(wù)接口包括工作流數(shù)據(jù)持久化服務(wù)接口,所述策略配置信息包括工作流數(shù)據(jù)持久化的策略配置信息;獲得需要進(jìn)行持久化的目標(biāo)工作流數(shù)據(jù);調(diào)用所述工作流數(shù)據(jù)持久化服務(wù)接口獲得其動(dòng)態(tài)代理類,并在所述動(dòng)態(tài)代理類中將所述目標(biāo)工作流數(shù)據(jù)組裝成事件;按照所述工作流數(shù)據(jù)持久化策略的配置信息運(yùn)行所述事件,獲得所述事件對(duì)應(yīng)的工作流數(shù)據(jù)持久化服務(wù)信息,并按照所述工作流數(shù)據(jù)持久化服務(wù)信息對(duì)目標(biāo)工作流數(shù)據(jù)進(jìn)行持久化操作。優(yōu)選的是,所述工作流數(shù)據(jù)持久化服務(wù)信息包括:服務(wù)接口的實(shí)現(xiàn)類,服務(wù)接口實(shí)現(xiàn)類的地址,服務(wù)接口實(shí)現(xiàn)類中的方法以及方法中聲明的參數(shù)類型;在所述提取服務(wù)端配置文件中聲明的服務(wù)信息的步驟之后,所述的方法還包括:將所述服務(wù)信息按照預(yù)置的第一數(shù)據(jù)格式注冊(cè)到服務(wù)端容器中。優(yōu)選的是,所述預(yù)置的第一數(shù)據(jù)格式包括:服務(wù)容器及注冊(cè)類ServiceRegistry,其中,成員變量包括:表示包含各種不同名稱的服務(wù)信息集合staticMap<String,ServiceInfo>;服務(wù)接口實(shí)現(xiàn)的信息ServiceInfo,其中,成員變量包括:服務(wù)接口的實(shí)現(xiàn)類,暴露的服務(wù)接口,服務(wù)接口實(shí)現(xiàn)類的地址serviceURI,服務(wù)接口實(shí)現(xiàn)類中的方法信息集合Map<String,OperationInfo>;服務(wù)接口實(shí)現(xiàn)類中方法的信息OperationInfo,其中,成員變量包括:方法名,方法中聲明的參數(shù)信息集合List<ParameterInfo>,方法返回值信息ReturnInforeturnInfo)方法異常信息集合List<ExceptionInfo>,方法對(duì)象(Methodmethod);方法中聲明的參數(shù)信息ParameterInfo,其中,成員變量包括:參數(shù)類型StringtypeName,參數(shù)類型類Classtype;方法返回值信息ReturnInfo,其中,成員變量包括:返回值類型StringtypeName,返回值類型類Classtype;方法異常信息ExceptionInfo,其中,成員變量包括:異常類型StringtypeName,異常類型類Classtype。優(yōu)選的是,在為客戶端配置文件中聲明的服務(wù)接口創(chuàng)建動(dòng)態(tài)代理類的步驟之后,所述的方法還包括:將所述動(dòng)態(tài)代理類注冊(cè)到客戶端容器中。優(yōu)選的是,所述工作流數(shù)據(jù)持久化策略的配置信息包括:表示事件發(fā)生時(shí),執(zhí)行的行為動(dòng)作的事件策略eventName;表示存儲(chǔ)信息時(shí),采用某種存儲(chǔ)方式的存儲(chǔ)策略storeRule;表示消息傳遞的路由機(jī)制的路由策略routeRule;表示接口實(shí)現(xiàn)類所在的位置的服務(wù)實(shí)現(xiàn)地址endpointUrl;表示事件信息的調(diào)用方式的調(diào)用策略invokeType;和/或,表示消息被消費(fèi)成功后,自動(dòng)回調(diào)發(fā)起方的地址的回調(diào)地址callbackUri。優(yōu)選的是,所述事件為統(tǒng)一事件;所述調(diào)用工作流數(shù)據(jù)持久化服務(wù)接口獲得其動(dòng)態(tài)代理類,并在所述動(dòng)態(tài)代理類中將目標(biāo)工作流數(shù)據(jù)組裝成事件的步驟包括:從所述客戶端容器中調(diào)用工作流數(shù)據(jù)持久化服務(wù)接口;由所述工作流數(shù)據(jù)持久化服務(wù)接口調(diào)用對(duì)應(yīng)的動(dòng)態(tài)代理類;在所述動(dòng)態(tài)代理類中,根據(jù)所述服務(wù)接口實(shí)現(xiàn)類中的方法以及方法中聲明的參數(shù)類型,以及,工作流數(shù)據(jù)持久化的策略配置信息,將所述目標(biāo)工作流數(shù)據(jù)按照預(yù)置的第二數(shù)據(jù)格式組裝成統(tǒng)一事件。優(yōu)選的是,所述預(yù)置的第二數(shù)據(jù)格式包括:統(tǒng)一事件對(duì)象UniformEvent:其中,成員變量包括:事件序列IDeventId,事件名稱eventName,事件回調(diào)地址callbackUri,事件創(chuàng)建時(shí)間createdTime,事件發(fā)送時(shí)間sendedTime,事件上帶的統(tǒng)一消息對(duì)象UniformMessage;統(tǒng)一消息對(duì)象UniformMessage:其中,成員變量包括:消息IDmessageId,消息頭UniformMessageHeader,消息體UniformMessagePlayload,消息處理結(jié)果返回值Objectresponse;統(tǒng)一消息體對(duì)象UniformMessagePlayload:其中,成員變量包括:參數(shù)列表Object[]params;統(tǒng)一消息頭對(duì)象UniformMessageHeader:其中,成員變量包括:事件的名字eventName,事件回調(diào)地址callbackUri,消息產(chǎn)生的時(shí)間createdTime,消息發(fā)送時(shí)間sendedTime,服務(wù)端實(shí)現(xiàn)地址endpointUrl,方法名methodName,消息計(jì)劃消費(fèi)的時(shí)間planTime,存儲(chǔ)規(guī)則storeRule,路由規(guī)則routeRule,超時(shí)時(shí)間timeout,失敗重試次數(shù)retry,調(diào)用方式:同步/異步invokeType。優(yōu)選的是,所述按照工作流數(shù)據(jù)持久化策略的配置信息運(yùn)行所述事件,獲得所述事件對(duì)應(yīng)的工作流數(shù)據(jù)持久化服務(wù)信息,并按照所述工作流數(shù)據(jù)持久化服務(wù)信息對(duì)目標(biāo)工作流數(shù)據(jù)進(jìn)行持久化操作的步驟包括:獲取依據(jù)所述調(diào)用策略配置的事件中消息的調(diào)用方式,若為同步調(diào)用,則觸發(fā)所述事件,所述事件具有事件名稱;根據(jù)所述事件名稱獲取相應(yīng)的事件監(jiān)聽實(shí)現(xiàn)類,所述事件監(jiān)聽實(shí)現(xiàn)類依據(jù)所述事件策略配置生成;在所述事件監(jiān)聽實(shí)現(xiàn)類中,根據(jù)所述路由策略,查找位于本地或遠(yuǎn)程的服務(wù)接口實(shí)現(xiàn)類的地址;根據(jù)所述服務(wù)接口實(shí)現(xiàn)類的地址,從服務(wù)端容器中找到相應(yīng)的服務(wù)接口實(shí)現(xiàn)類;調(diào)用所述服務(wù)接口實(shí)現(xiàn)類,將所述目標(biāo)工作流數(shù)據(jù)保存在本地或遠(yuǎn)程的工作流數(shù)據(jù)庫(kù)中。優(yōu)選的是,在調(diào)用所述工作流數(shù)據(jù)持久化服務(wù)接口之前,所述的方法還包括:在預(yù)設(shè)的事務(wù)管理器中啟動(dòng)事務(wù);所述按照工作流數(shù)據(jù)持久化策略的配置信息運(yùn)行所述事件,獲得所述事件對(duì)應(yīng)的工作流數(shù)據(jù)持久化服務(wù)信息,并按照所述工作流數(shù)據(jù)持久化服務(wù)信息對(duì)目標(biāo)工作流數(shù)據(jù)進(jìn)行持久化操作的步驟包括:獲取依據(jù)所述調(diào)用策略配置的事件中消息的調(diào)用方式,若為異步調(diào)用,則創(chuàng)建事務(wù)同步器,并在所述事務(wù)管理器中注冊(cè)事務(wù)同步器;提交事務(wù),調(diào)用事務(wù)同步器,根據(jù)所述存儲(chǔ)策略保存事件中的消息,然后將事件加入異步隊(duì)列中;異步隊(duì)列監(jiān)聽器監(jiān)聽到有事件加入時(shí),觸發(fā)所述事件;根據(jù)所述事件的名稱獲取相應(yīng)的事件監(jiān)聽實(shí)現(xiàn)類,所述事件監(jiān)聽實(shí)現(xiàn)類依據(jù)所述事件策略配置生成;在所述事件監(jiān)聽實(shí)現(xiàn)類中,根據(jù)所述路由策略,查找位于本地或遠(yuǎn)程的服務(wù)接口實(shí)現(xiàn)類的地址;根據(jù)所述服務(wù)接口實(shí)現(xiàn)類的地址,從服務(wù)端容器中找到相應(yīng)的服務(wù)接口實(shí)現(xiàn)類;調(diào)用所述服務(wù)接口實(shí)現(xiàn)類,將所述目標(biāo)工作流數(shù)據(jù)保存在本地或遠(yuǎn)程的工作流數(shù)據(jù)庫(kù)中;若所述服務(wù)接口實(shí)現(xiàn)類調(diào)用成功,則根據(jù)所述存儲(chǔ)策略,刪除保存過的事件消息,然后根據(jù)所述回調(diào)地址,回調(diào)發(fā)起方通知操作成功;若所述服務(wù)接口實(shí)現(xiàn)類調(diào)用失敗,則根據(jù)所述回調(diào)地址,回調(diào)發(fā)起方執(zhí)行補(bǔ)償業(yè)務(wù)操作。優(yōu)選的是,所述獲得需要進(jìn)行持久化的目標(biāo)工作流數(shù)據(jù)的步驟包括:流程實(shí)例開始流轉(zhuǎn),遇到需要保存數(shù)據(jù)的節(jié)點(diǎn),將節(jié)點(diǎn)實(shí)例的數(shù)據(jù)保存到流程上下文中指定的有序隊(duì)列中;流程實(shí)例流轉(zhuǎn)結(jié)束,獲取所述有序隊(duì)列中的節(jié)點(diǎn)實(shí)例數(shù)據(jù)為需要進(jìn)行持久化的目標(biāo)工作流數(shù)據(jù)。本申請(qǐng)實(shí)施例還公開了一種工作流數(shù)據(jù)持久化的裝置,包括:服務(wù)端配置模塊,用于提取服務(wù)端配置文件中聲明的服務(wù)信息;其中,所述服務(wù)信息包括工作流數(shù)據(jù)持久化服務(wù)信息;客戶端配置模塊,用于為客戶端配置文件中聲明的服務(wù)接口創(chuàng)建動(dòng)態(tài)代理類,并生成所述服務(wù)接口的策略配置信息;其中,所述服務(wù)接口包括工作流數(shù)據(jù)持久化服務(wù)接口,所述策略配置信息包括工作流數(shù)據(jù)持久化的策略配置信息;工作流數(shù)據(jù)獲取模塊,用于獲得需要進(jìn)行持久化的目標(biāo)工作流數(shù)據(jù);代理類調(diào)用模塊,用于調(diào)用所述工作流數(shù)據(jù)持久化服務(wù)接口獲得其動(dòng)態(tài)代理類,并在所述動(dòng)態(tài)代理類中將所述目標(biāo)工作流數(shù)據(jù)組裝成事件;事件執(zhí)行模塊,用于按照所述工作流數(shù)據(jù)持久化策略的配置信息運(yùn)行所述事件,獲得所述事件對(duì)應(yīng)的工作流數(shù)據(jù)持久化服務(wù)信息,并按照所述工作流數(shù)據(jù)持久化服務(wù)信息對(duì)目標(biāo)工作流數(shù)據(jù)進(jìn)行持久化操作。優(yōu)選的是,所述工作流數(shù)據(jù)持久化服務(wù)信息包括:服務(wù)接口的實(shí)現(xiàn)類,服務(wù)接口實(shí)現(xiàn)類的地址,服務(wù)接口實(shí)現(xiàn)類中的方法以及方法中聲明的參數(shù)類型;所述的裝置還包括:服務(wù)容器注冊(cè)模塊,與所述服務(wù)端配置模塊相連,用于將所述服務(wù)信息按照預(yù)置的第一數(shù)據(jù)格式注冊(cè)到服務(wù)端容器中。優(yōu)選的是,所述預(yù)置的第一數(shù)據(jù)格式包括:服務(wù)容器及注冊(cè)類ServiceRegistry,其中,成員變量包括:表示包含各種不同名稱的服務(wù)信息集合staticMap<String,ServiceInfo>;服務(wù)接口實(shí)現(xiàn)的信息ServiceInfo,其中,成員變量包括:服務(wù)接口的實(shí)現(xiàn)類,暴露的服務(wù)接口,服務(wù)接口實(shí)現(xiàn)類的地址serviceURI,服務(wù)接口實(shí)現(xiàn)類中的方法信息集合Map<String,OperationInfo>;服務(wù)接口實(shí)現(xiàn)類中方法的信息OperationInfo,其中,成員變量包括:方法名,方法中聲明的參數(shù)信息集合List<ParameterInfo>,方法返回值信息ReturnInforeturnInfo)方法異常信息集合List<ExceptionInfo>,方法對(duì)象(Methodmethod);方法中聲明的參數(shù)信息ParameterInfo,其中,成員變量包括:參數(shù)類型StringtypeName,參數(shù)類型類Classtype;方法返回值信息ReturnInfo,其中,成員變量包括:返回值類型StringtypeName,返回值類型類Classtype;方法異常信息ExceptionInfo,其中,成員變量包括:異常類型StringtypeName,異常類型類Classtype。優(yōu)選的是,所述的裝置,還包括:客戶端容器注冊(cè)模塊,與所述客戶端配置模塊相連,用于將所述動(dòng)態(tài)代理類注冊(cè)到客戶端容器中。優(yōu)選的是,所述工作流數(shù)據(jù)持久化策略的配置信息包括:表示事件發(fā)生時(shí),執(zhí)行的行為動(dòng)作的事件策略eventName;表示存儲(chǔ)信息時(shí),采用某種存儲(chǔ)方式的存儲(chǔ)策略storeRule;表示消息傳遞的路由機(jī)制的路由策略routeRule;表示接口實(shí)現(xiàn)類所在的位置的服務(wù)實(shí)現(xiàn)地址endpointUrl;表示事件信息的調(diào)用方式的調(diào)用策略invokeType;和/或,表示消息被消費(fèi)成功后,自動(dòng)回調(diào)發(fā)起方的地址的回調(diào)地址callbackUri。優(yōu)選的是,所述事件為統(tǒng)一事件;所述代理類調(diào)用模塊包括:服務(wù)接口調(diào)用子模塊,用于從所述客戶端容器中調(diào)用工作流數(shù)據(jù)持久化服務(wù)接口;動(dòng)態(tài)代理類提取子模塊,用于由所述工作流數(shù)據(jù)持久化服務(wù)接口調(diào)用對(duì)應(yīng)的動(dòng)態(tài)代理類;事件組裝子模塊,用于在所述動(dòng)態(tài)代理類中,根據(jù)所述服務(wù)接口實(shí)現(xiàn)類中的方法以及方法中聲明的參數(shù)類型,以及,工作流數(shù)據(jù)持久化的策略配置信息,將所述目標(biāo)工作流數(shù)據(jù)按照預(yù)置的第二數(shù)據(jù)格式組裝成統(tǒng)一事件。優(yōu)選的是,所述預(yù)置的第二數(shù)據(jù)格式包括:統(tǒng)一事件對(duì)象UniformEvent:其中,成員變量包括:事件序列IDeventId,事件名稱eventName,事件回調(diào)地址callbackUri,事件創(chuàng)建時(shí)間createdTime,事件發(fā)送時(shí)間sendedTime,事件上帶的統(tǒng)一消息對(duì)象UniformMessage;統(tǒng)一消息對(duì)象UniformMessage:其中,成員變量包括:消息IDmessageId,消息頭UniformMessageHeader,消息體UniformMessagePlayload,消息處理結(jié)果返回值Objectresponse;統(tǒng)一消息體對(duì)象UniformMessagePlayload:其中,成員變量包括:參數(shù)列表Object[]params;統(tǒng)一消息頭對(duì)象UniformMessageHeader:其中,成員變量包括:事件的名字eventName,事件回調(diào)地址callbackUri,消息產(chǎn)生的時(shí)間createdTime,消息發(fā)送時(shí)間sendedTime,服務(wù)端實(shí)現(xiàn)地址endpointUrl,方法名methodName,消息計(jì)劃消費(fèi)的時(shí)間planTime,存儲(chǔ)規(guī)則storeRule,路由規(guī)則routeRule,超時(shí)時(shí)間timeout,失敗重試次數(shù)retry,調(diào)用方式:同步/異步invokeType。優(yōu)選的是,所述事件執(zhí)行模塊包括:第一事件觸發(fā)子模塊,用于獲取依據(jù)所述調(diào)用策略配置的事件中消息的調(diào)用方式,若為同步調(diào)用,則觸發(fā)所述事件,所述事件具有事件名稱;事件監(jiān)聽子模塊,用于根據(jù)所述事件名稱獲取相應(yīng)的事件監(jiān)聽實(shí)現(xiàn)類,所述事件監(jiān)聽實(shí)現(xiàn)類依據(jù)所述事件策略配置生成;路由子模塊,用于在所述事件監(jiān)聽實(shí)現(xiàn)類中,根據(jù)所述路由策略,查找位于本地或遠(yuǎn)程的服務(wù)接口實(shí)現(xiàn)類的地址;實(shí)現(xiàn)類定位子模塊,用于根據(jù)所述服務(wù)接口實(shí)現(xiàn)類的地址,從服務(wù)端容器中找到相應(yīng)的服務(wù)接口實(shí)現(xiàn)類;持久化操作子模塊,用于調(diào)用所述服務(wù)接口實(shí)現(xiàn)類,將所述目標(biāo)工作流數(shù)據(jù)保存在本地或遠(yuǎn)程的工作流數(shù)據(jù)庫(kù)中。優(yōu)選的是,所述的裝置,還包括:事務(wù)啟動(dòng)模塊,用于在預(yù)設(shè)的事務(wù)管理器中啟動(dòng)事務(wù);所述事件執(zhí)行模塊包括:事務(wù)同步器創(chuàng)建子模塊,用于獲取依據(jù)所述調(diào)用策略配置的事件中消息的調(diào)用方式,若為異步調(diào)用,則創(chuàng)建事務(wù)同步器,并在所述事務(wù)管理器中注冊(cè)事務(wù)同步器;事務(wù)提交處理子模塊,用于提交事務(wù),調(diào)用事務(wù)同步器,根據(jù)所述存儲(chǔ)策略保存事件中的消息,然后將事件加入異步隊(duì)列中;第二事件觸發(fā)子模塊,用于異步隊(duì)列監(jiān)聽器監(jiān)聽到有事件加入時(shí),觸發(fā)所述事件;事件監(jiān)聽子模塊,用于根據(jù)所述事件的名稱獲取相應(yīng)的事件監(jiān)聽實(shí)現(xiàn)類,所述事件監(jiān)聽實(shí)現(xiàn)類依據(jù)所述事件策略配置生成;路由子模塊,用于在所述事件監(jiān)聽實(shí)現(xiàn)類中,根據(jù)所述路由策略,查找位于本地或遠(yuǎn)程的服務(wù)接口實(shí)現(xiàn)類的地址;實(shí)現(xiàn)類定位子模塊,用于根據(jù)所述服務(wù)接口實(shí)現(xiàn)類的地址,從服務(wù)端容器中找到相應(yīng)的服務(wù)接口實(shí)現(xiàn)類;持久化操作子模塊,用于調(diào)用所述服務(wù)接口實(shí)現(xiàn)類,將所述目標(biāo)工作流數(shù)據(jù)保存在本地或遠(yuǎn)程的工作流數(shù)據(jù)庫(kù)中;調(diào)用成功處理子模塊,用于在所述服務(wù)接口實(shí)現(xiàn)類調(diào)用成功時(shí),則根據(jù)所述存儲(chǔ)策略,刪除保存過的事件消息,然后根據(jù)所述回調(diào)地址,回調(diào)發(fā)起方通知操作成功;調(diào)用失敗處理子模塊,用于在所述服務(wù)接口實(shí)現(xiàn)類調(diào)用失敗,則根據(jù)所述回調(diào)地址,回調(diào)發(fā)起方執(zhí)行補(bǔ)償業(yè)務(wù)操作。優(yōu)選的是,所述工作流數(shù)據(jù)獲取模塊包括:數(shù)據(jù)生成子模塊,用于流程實(shí)例開始流轉(zhuǎn),遇到需要保存數(shù)據(jù)的節(jié)點(diǎn),將節(jié)點(diǎn)實(shí)例的數(shù)據(jù)保存到流程上下文中指定的有序隊(duì)列中;數(shù)據(jù)提取子模塊,用于流程實(shí)例流轉(zhuǎn)結(jié)束,獲取所述有序隊(duì)列中的節(jié)點(diǎn)實(shí)例數(shù)據(jù)為需要進(jìn)行持久化的目標(biāo)工作流數(shù)據(jù)。與現(xiàn)有技術(shù)相比,本申請(qǐng)包括以下優(yōu)點(diǎn):本申請(qǐng)?zhí)岢隽艘环N全新的工作流數(shù)據(jù)持久化策略配置框架,根據(jù)工作流業(yè)務(wù)的情況,如增加一種持久化方式時(shí),無需修改代碼,只需要簡(jiǎn)單修改配置文件,即可自由選擇事件策略,消息存儲(chǔ)策略,路由策略,調(diào)用策略等工作流數(shù)據(jù)持久化的策略實(shí)現(xiàn)工作流數(shù)據(jù)的保存,從而可以節(jié)省維護(hù)成本,增強(qiáng)工作流產(chǎn)品的擴(kuò)展性。附圖說明圖1是以出差借款業(yè)務(wù)為例的工作流示意圖;圖2是本申請(qǐng)的一種工作流數(shù)據(jù)持久化的方法實(shí)施例的步驟流程圖;圖3是應(yīng)用本申請(qǐng)實(shí)施例的一種工作流數(shù)據(jù)持久化方法執(zhí)行的具體示例的流程圖;圖4是本申請(qǐng)的一種工作流數(shù)據(jù)持久化的裝置實(shí)施例的結(jié)構(gòu)框圖。具體實(shí)施方式為使本申請(qǐng)的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式對(duì)本申請(qǐng)作進(jìn)一步詳細(xì)的說明。為使本領(lǐng)域技術(shù)人員更好地理解本申請(qǐng),下面以“出差借款”這個(gè)具體的業(yè)務(wù)來說明本申請(qǐng)涉及到的相關(guān)概念術(shù)語。參考圖1所示的出差借款業(yè)務(wù)的流程圖,員工出差時(shí),可以預(yù)先向公司借款用來購(gòu)買車票,食宿等費(fèi)用。公司規(guī)定,員工出差申請(qǐng)借款的金額小于等于5000元人民幣時(shí),需要主管審批,主管審批后,需要財(cái)務(wù)審批,最后將款項(xiàng)通過銀行打款到員工的工資卡中。如果員工借款的金額大于5000元人民幣,則需要主管審批,主管審批后,需要經(jīng)理再次審批,經(jīng)理審批后需要財(cái)務(wù)審批,最后將款項(xiàng)通過銀行打款到員工的工資卡中。如果主管,經(jīng)理或財(cái)務(wù)審批不同意,則需要發(fā)郵件告知員工。術(shù)語解釋如下:節(jié)點(diǎn):是指某一個(gè)業(yè)務(wù)活動(dòng)定義。在本例中,“財(cái)務(wù)審批”就是一個(gè)節(jié)點(diǎn),此節(jié)點(diǎn)需要人參與,稱之為任務(wù)節(jié)點(diǎn)。“銀行打款”也是一個(gè)節(jié)點(diǎn),此節(jié)點(diǎn)無需人參與,稱之為自動(dòng)節(jié)點(diǎn)。節(jié)點(diǎn)在圖1中用長(zhǎng)方形框表示?!芭袛嘟杩罱痤~”這個(gè)活動(dòng),用來判斷流程經(jīng)過此節(jié)點(diǎn)后從哪個(gè)分支繼續(xù),稱之為判斷節(jié)點(diǎn)。有向連接:是指圖1中帶箭頭的線,表示流程從一個(gè)狀態(tài)通過何種方式到另一個(gè)狀態(tài)。如在本例中,經(jīng)理審批節(jié)點(diǎn)到財(cái)務(wù)審批節(jié)點(diǎn)間,存在一個(gè)叫“同意”的有向連接。流程定義:是用來描述某一個(gè)業(yè)務(wù)流程的符號(hào)表示,由節(jié)點(diǎn)和有向連接組成的靜態(tài)定義文件。以上術(shù)語都是流程配置類的概念,下面介紹流程運(yùn)行期間的相關(guān)概念?;顒?dòng)實(shí)例:是指某一次具體的業(yè)務(wù)請(qǐng)求經(jīng)過的節(jié)點(diǎn)實(shí)例。例如:小王計(jì)劃2010年10月15日去北京出差,申請(qǐng)借款7000元。小王于2010年10月14日上午9點(diǎn)整,在工作流系統(tǒng)中提交申請(qǐng)流程。主管于2010年10月14日上午10點(diǎn)整審批,而后流程繼續(xù)往下走。其中,描述“主管審批”這個(gè)活動(dòng)的實(shí)例為活動(dòng)實(shí)例。通?;顒?dòng)實(shí)例包含該活動(dòng)開始時(shí)間,結(jié)束時(shí)間,計(jì)劃處理人,實(shí)際處理人,預(yù)約時(shí)間等等不同維度的信息。流程實(shí)例:是指某一次具體的業(yè)務(wù)請(qǐng)求。例如:小王2010年10月15日去北京出差,申請(qǐng)借款7000元。流程實(shí)例是由一系列活動(dòng)實(shí)例組成。在這個(gè)例子所指的流程實(shí)例中,如果最終審批同意,則包含開始節(jié)點(diǎn)“出差申請(qǐng)”活動(dòng)實(shí)例,“主管審批”活動(dòng)實(shí)例,“判斷借款金額”活動(dòng)實(shí)例,“經(jīng)理審批”活動(dòng)實(shí)例,“財(cái)務(wù)審批”活動(dòng)實(shí)例,“銀行打款”活動(dòng)實(shí)例,“結(jié)束”活動(dòng)實(shí)例。流程上下文變量實(shí)例:是指某一次具體的業(yè)務(wù)請(qǐng)求中,用于在節(jié)點(diǎn)間傳遞信息的數(shù)據(jù)。通常為名值對(duì)(key-value)的形式表現(xiàn)。通用上下文變量實(shí)例指的是每個(gè)流程實(shí)例,無論是否屬于同一個(gè)流程定義,都具有的上下文變量實(shí)例。上下文變量實(shí)例通常簡(jiǎn)稱為上下文變量。本申請(qǐng)實(shí)施例的核心構(gòu)思之一在于,創(chuàng)造性的提出一種根據(jù)工作流業(yè)務(wù)的情況,只需要簡(jiǎn)單修改配置文件,即可自由選擇事件策略,消息存儲(chǔ)策略,路由策略,調(diào)用策略等工作流數(shù)據(jù)持久化的策略,以實(shí)現(xiàn)工作流數(shù)據(jù)保存的機(jī)制。參照?qǐng)D2,示出了本申請(qǐng)的一種工作流數(shù)據(jù)持久化的方法實(shí)施例的步驟流程圖,具體可以包括如下步驟:步驟201,提取服務(wù)端配置文件中聲明的服務(wù)信息;其中,所述服務(wù)信息包括工作流數(shù)據(jù)持久化服務(wù)信息。在具體實(shí)現(xiàn)中,所述工作流數(shù)據(jù)持久化服務(wù)信息可以包括:服務(wù)接口的實(shí)現(xiàn)類,服務(wù)接口實(shí)現(xiàn)類的地址,服務(wù)接口實(shí)現(xiàn)類中的方法以及方法中聲明的參數(shù)類型。需要說明的是,所述方法中聲明的參數(shù)類型不是指具體的數(shù)據(jù),而是指服務(wù)接口實(shí)現(xiàn)類中的方法接收什么樣類型的參數(shù),是參數(shù)類型的聲明。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,在所述步驟201之后,可以執(zhí)行如下步驟:步驟202,將所述服務(wù)信息按照預(yù)置的第一數(shù)據(jù)格式注冊(cè)到服務(wù)端容器中。在具體實(shí)現(xiàn)中,當(dāng)系統(tǒng)啟動(dòng)時(shí),可以根據(jù)服務(wù)端配置XML(服務(wù)端配置文件,通常為XML文件),將XML中聲明的服務(wù)注冊(cè)到服務(wù)端容器中。根據(jù)服務(wù)端配置XML,將XML中聲明的服務(wù)注冊(cè)到服務(wù)容器中。作為本申請(qǐng)實(shí)施例具體應(yīng)用的一種示例,所述預(yù)置的第一數(shù)據(jù)格式可以包括如下內(nèi)容:服務(wù)容器及注冊(cè)類ServiceRegistry,其中,成員變量包括:表示包含各種不同名稱的服務(wù)信息集合staticMap<String,ServiceInfo>;服務(wù)接口實(shí)現(xiàn)的信息ServiceInfo,其中,成員變量包括:服務(wù)接口的實(shí)現(xiàn)類,暴露的服務(wù)接口,服務(wù)接口實(shí)現(xiàn)類的地址serviceURI,服務(wù)接口實(shí)現(xiàn)類中的方法信息集合Map<String,OperationInfo>;服務(wù)接口實(shí)現(xiàn)類中方法的信息OperationInfo,其中,成員變量包括:方法名,方法中聲明的參數(shù)信息集合List<ParameterInfo>,方法返回值信息ReturnInforeturnInfo)方法異常信息集合List<ExceptionInfo>,方法對(duì)象(Methodmethod);方法中聲明的參數(shù)信息ParameterInfo,其中,成員變量包括:參數(shù)類型StringtypeName,參數(shù)類型類Classtype;方法返回值信息ReturnInfo,其中,成員變量包括:返回值類型StringtypeName,返回值類型類Classtype;方法異常信息ExceptionInfo,其中,成員變量包括:異常類型StringtypeName,異常類型類Classtype。當(dāng)然,上述服務(wù)端容器的數(shù)據(jù)格式僅僅用作示例,本領(lǐng)域技術(shù)人員根據(jù)實(shí)際需求采用任一種數(shù)據(jù)格式都是可行的,本申請(qǐng)對(duì)此無需加以限制。步驟203,為客戶端配置文件中聲明的服務(wù)接口創(chuàng)建動(dòng)態(tài)代理類,并生成所述服務(wù)接口的策略配置信息;其中,所述服務(wù)接口可以包括工作流數(shù)據(jù)持久化服務(wù)接口,所述策略配置信息可以包括工作流數(shù)據(jù)持久化的策略配置信息。所述服務(wù)信息與服務(wù)接口具有對(duì)應(yīng)關(guān)系,所述工作流數(shù)據(jù)持久化服務(wù)信息與工作流數(shù)據(jù)持久化服務(wù)接口是相對(duì)應(yīng)的。動(dòng)態(tài)代理類是利用java的反射機(jī)制生成。在目前的Java開發(fā)包中包含了對(duì)動(dòng)態(tài)代理的支持.其實(shí)現(xiàn)主要通過是java.lang.reflect.Proxy類和java.lang.reflect.InvocationHandler接口。Proxy類主要用來獲取動(dòng)態(tài)代理對(duì)象,InvocationHandler接口用來約束調(diào)用者實(shí)現(xiàn),如下,HelloWorld接口定義的業(yè)務(wù)方法,HelloWorldImpl是HelloWorld接口的實(shí)現(xiàn),HelloWorldHandler是InvocationHandler接口實(shí)現(xiàn)。代碼如下:業(yè)務(wù)接口:InvocationHandler實(shí)現(xiàn),需要在接口方法調(diào)用前后加入一部份處理工作,這里僅僅在方法調(diào)用前后向后臺(tái)輸出兩句字符串,其代碼如下:測(cè)試代碼:首先獲取一個(gè)業(yè)務(wù)接口的實(shí)現(xiàn)對(duì)象;獲取一個(gè)InvocationHandler實(shí)現(xiàn),此處是HelloWorldHandler對(duì)象;創(chuàng)建動(dòng)態(tài)代理對(duì)象;通過動(dòng)態(tài)代理對(duì)象調(diào)用sayHelloWorld()方法,此時(shí)會(huì)在原始對(duì)象HelloWorldImpl.sayHelloWorld()方法前后輸出兩句字符串。運(yùn)行測(cè)試類輸出如下:beforemethodinvoke!HelloWorld!aftermethodinvoke!此處Test類中的方法調(diào)用代碼比較多,在實(shí)際應(yīng)用中可以通過配置文件來來簡(jiǎn)化客戶端的調(diào)用實(shí)現(xiàn)。在具體實(shí)現(xiàn)中,可以根據(jù)客戶端配置XML(客戶端配置文件,通常為XML文件),為XML中聲明的服務(wù)接口創(chuàng)建動(dòng)態(tài)代理類,并配置事件策略eventName,存儲(chǔ)策略storeRule,路由策略routeRule,服務(wù)實(shí)現(xiàn)地址endpointUrl,調(diào)用策略invokeType,回調(diào)地址callbackUri等工作流數(shù)據(jù)持久化的策略。具體而言,所述工作流數(shù)據(jù)持久化的策略可以包括:表示事件發(fā)生時(shí),執(zhí)行的行為動(dòng)作的事件策略eventName;表示存儲(chǔ)信息時(shí),采用某種存儲(chǔ)方式的存儲(chǔ)策略storeRule;表示消息傳遞的路由機(jī)制的路由策略routeRule;表示接口實(shí)現(xiàn)類所在的位置的服務(wù)實(shí)現(xiàn)地址endpointUrl;表示事件信息的調(diào)用方式的調(diào)用策略invokeType;和/或,表示消息被消費(fèi)成功后,自動(dòng)回調(diào)發(fā)起方的地址的回調(diào)地址callbackUri。當(dāng)然,上述策略配置僅僅用作示例,本領(lǐng)域技術(shù)人員根據(jù)實(shí)際需求采用任一種策略配置都是可行的,本申請(qǐng)對(duì)此無需加以限制。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,在所述步驟103之后,可以執(zhí)行如下步驟:步驟204,將所述動(dòng)態(tài)代理類注冊(cè)到客戶端容器中。在具體實(shí)現(xiàn)中,將動(dòng)態(tài)代理類注冊(cè)到客戶端容器中后,在客戶端后續(xù)使用的時(shí)候,可以直接從容器中獲取。步驟205,獲得需要進(jìn)行持久化的目標(biāo)工作流數(shù)據(jù);作為本申請(qǐng)實(shí)施例具體應(yīng)用的一種示例,所述步驟205可以包括如下子步驟:子步驟S11、流程實(shí)例開始流轉(zhuǎn),遇到需要保存數(shù)據(jù)的節(jié)點(diǎn),將節(jié)點(diǎn)實(shí)例的數(shù)據(jù)保存到流程上下文中指定的有序隊(duì)列中;子步驟S12、流程實(shí)例流轉(zhuǎn)結(jié)束,獲取所述有序隊(duì)列中的節(jié)點(diǎn)實(shí)例數(shù)據(jù)為需要進(jìn)行持久化的目標(biāo)工作流數(shù)據(jù)。步驟206、調(diào)用所述工作流數(shù)據(jù)持久化服務(wù)接口獲得其動(dòng)態(tài)代理類,并在所述動(dòng)態(tài)代理類中將所述目標(biāo)工作流數(shù)據(jù)組裝成事件;在具體實(shí)現(xiàn)中,可以在調(diào)用所述工作流數(shù)據(jù)持久化服務(wù)接口之前,在預(yù)設(shè)的事務(wù)管理器中啟動(dòng)事務(wù),調(diào)用本地業(yè)務(wù)數(shù)據(jù)庫(kù)操作,然后再調(diào)用工作流數(shù)據(jù)持久化服務(wù)接口。其中,所述事務(wù)即指本地業(yè)務(wù)數(shù)據(jù)庫(kù)事務(wù),,以出差借款申請(qǐng)為例,其中,出差的地點(diǎn),時(shí)間,天數(shù),事由組成的出差表單,就是業(yè)務(wù)數(shù)據(jù),調(diào)用本地業(yè)務(wù)數(shù)據(jù)庫(kù)操作即指保存出差表單的業(yè)務(wù)數(shù)據(jù)。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述事件為統(tǒng)一事件;所述步驟206具體可以包括如下子步驟:子步驟S21、從所述客戶端容器中調(diào)用工作流數(shù)據(jù)持久化服務(wù)接口;子步驟S22、由所述工作流數(shù)據(jù)持久化服務(wù)接口調(diào)用對(duì)應(yīng)的動(dòng)態(tài)代理類;子步驟S23、在所述動(dòng)態(tài)代理類中,根據(jù)所述服務(wù)接口實(shí)現(xiàn)類中的方法以及方法中聲明的參數(shù)類型,以及,工作流數(shù)據(jù)持久化的策略配置信息,將所述目標(biāo)工作流數(shù)據(jù)按照預(yù)置的第二數(shù)據(jù)格式組裝成統(tǒng)一事件。以下通過一個(gè)簡(jiǎn)單的示例說明調(diào)用所述工作流數(shù)據(jù)持久化服務(wù)接口獲得其動(dòng)態(tài)代理類的原理:流程引擎A類中調(diào)用com.ali.xbpm.eda.test.EdaWorkflowService接口。A類中的一段代碼如下:EdaWorkflowServiceworkflowClient=(EdaWorkflowService)ContextFactory.get(“workflowClient”);workflowClient.storeProcess(bpmProcInst,contextMap,queue)在上段代碼中可以發(fā)現(xiàn),EdaWorkflowService這個(gè)工作流持久化服務(wù)接口,是通過客戶端容器ContextFactory中獲取的。由于已經(jīng)通過客戶端配置,為這個(gè)服務(wù)接口創(chuàng)建了動(dòng)態(tài)代理類。所以從ContextFactory中獲取的是動(dòng)態(tài)代理類,而非真正的服務(wù)接口實(shí)現(xiàn)類。由于動(dòng)態(tài)代理類是根據(jù)客戶端配置文件,利用java的反射機(jī)制生成的。它實(shí)際上是接口的一個(gè)實(shí)現(xiàn)類。在利用java的反射機(jī)制生成的過程中,就將工作流數(shù)據(jù)持久化的策略配置信息(即各種策略配置)讀取進(jìn)來,保存在動(dòng)態(tài)代理類的成員變量中。也因?yàn)閯?dòng)態(tài)代理類,其實(shí)就是接口的另一個(gè)實(shí)現(xiàn)類,所以能接收到服務(wù)接口實(shí)現(xiàn)類中的方法以及方法中聲明的參數(shù)類型的數(shù)據(jù)。以下通過一段代碼說明java的反射方法:JavaMethod類中的方法:java.lang.reflect.Method.invoke(Objectobj,Object...args)throwsIllegalAccessException,IllegalArgumentException,InvocationTargetException其中,obj就是接口類名,args為實(shí)際的參數(shù)列表。作為本申請(qǐng)實(shí)施例具體應(yīng)用的一種示例,所述預(yù)置的第二數(shù)據(jù)格式可以包括:統(tǒng)一事件對(duì)象UniformEvent:其中,成員變量包括:事件序列IDeventId,事件名稱eventName,事件回調(diào)地址callbackUri,事件創(chuàng)建時(shí)間createdTime,事件發(fā)送時(shí)間sendedTime,事件上帶的統(tǒng)一消息對(duì)象UniformMessage;統(tǒng)一消息對(duì)象UniformMessage:其中,成員變量包括:消息IDmessageId,消息頭UniformMessageHeader,消息體UniformMessagePlayload,消息處理結(jié)果返回值Objectresponse;統(tǒng)一消息體對(duì)象UniformMessagePlayload:其中,成員變量包括:參數(shù)列表Object[]params;統(tǒng)一消息頭對(duì)象UniformMessageHeader:其中,成員變量包括:事件的名字eventName,事件回調(diào)地址callbackUri,消息產(chǎn)生的時(shí)間createdTime,消息發(fā)送時(shí)間sendedTime,服務(wù)端實(shí)現(xiàn)地址endpointUrl,方法名methodName,消息計(jì)劃消費(fèi)的時(shí)間planTime,存儲(chǔ)規(guī)則storeRule,路由規(guī)則routeRule,超時(shí)時(shí)間timeout,失敗重試次數(shù)retry,調(diào)用方式:同步/異步invokeType。當(dāng)然,上述事件的組裝方法僅僅用作示例,本領(lǐng)域技術(shù)人員根據(jù)實(shí)際需求采用任一種組裝方法都是可行的,本申請(qǐng)對(duì)此無需加以限制。步驟207,按照所述工作流數(shù)據(jù)持久化策略的配置信息運(yùn)行所述事件,獲得所述事件對(duì)應(yīng)的工作流數(shù)據(jù)持久化服務(wù)信息,并按照所述工作流數(shù)據(jù)持久化服務(wù)信息對(duì)目標(biāo)工作流數(shù)據(jù)進(jìn)行持久化操作。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述步驟207可以包括如下子步驟:子步驟S31、獲取依據(jù)所述調(diào)用策略配置的事件中消息的調(diào)用方式,若為同步調(diào)用,則觸發(fā)所述事件,所述事件具有事件名稱;子步驟S32、根據(jù)所述事件名稱獲取相應(yīng)的事件監(jiān)聽實(shí)現(xiàn)類,所述事件監(jiān)聽實(shí)現(xiàn)類依據(jù)所述事件策略配置生成;子步驟S33、在所述事件監(jiān)聽實(shí)現(xiàn)類中,根據(jù)所述路由策略,查找位于本地或遠(yuǎn)程的服務(wù)接口實(shí)現(xiàn)類的地址;子步驟S34、根據(jù)所述服務(wù)接口實(shí)現(xiàn)類的地址,從服務(wù)端容器中找到相應(yīng)的服務(wù)接口實(shí)現(xiàn)類;子步驟S35、調(diào)用所述服務(wù)接口實(shí)現(xiàn)類,將所述目標(biāo)工作流數(shù)據(jù)保存在本地或遠(yuǎn)程的工作流數(shù)據(jù)庫(kù)中。在本申請(qǐng)的另一種優(yōu)選實(shí)施例中,所述步驟207可以包括如下子步驟:子步驟S41、獲取依據(jù)所述調(diào)用策略配置的事件中消息的調(diào)用方式,若為異步調(diào)用,則創(chuàng)建事務(wù)同步器,并在所述事務(wù)管理器中注冊(cè)事務(wù)同步器;利用事務(wù)同步器,目的就是為了保證本地業(yè)務(wù)數(shù)據(jù)和(本地或遠(yuǎn)程)的工作流數(shù)據(jù)能夠具有事務(wù)一致性。子步驟S42、提交事務(wù),調(diào)用事務(wù)同步器,根據(jù)所述存儲(chǔ)策略保存事件中的消息,然后將事件加入異步隊(duì)列中;子步驟S43、異步隊(duì)列監(jiān)聽器監(jiān)聽到有事件加入時(shí),觸發(fā)所述事件;子步驟S44、根據(jù)所述事件的名稱獲取相應(yīng)的事件監(jiān)聽實(shí)現(xiàn)類,所述事件監(jiān)聽實(shí)現(xiàn)類依據(jù)所述事件策略配置生成;子步驟S45、在所述事件監(jiān)聽實(shí)現(xiàn)類中,根據(jù)所述路由策略,查找位于本地或遠(yuǎn)程的服務(wù)接口實(shí)現(xiàn)類的地址;子步驟S46、根據(jù)所述服務(wù)接口實(shí)現(xiàn)類的地址,從服務(wù)端容器中找到相應(yīng)的服務(wù)接口實(shí)現(xiàn)類;子步驟S47、調(diào)用所述服務(wù)接口實(shí)現(xiàn)類,將所述目標(biāo)工作流數(shù)據(jù)保存在本地或遠(yuǎn)程的工作流數(shù)據(jù)庫(kù)中;子步驟S48、若所述服務(wù)接口實(shí)現(xiàn)類調(diào)用成功,則根據(jù)所述存儲(chǔ)策略,刪除保存過的事件消息,然后根據(jù)所述回調(diào)地址,回調(diào)發(fā)起方通知操作成功;子步驟S49、若所述服務(wù)接口實(shí)現(xiàn)類調(diào)用失敗,則根據(jù)所述回調(diào)地址,回調(diào)發(fā)起方執(zhí)行補(bǔ)償業(yè)務(wù)操作。為使本領(lǐng)域技術(shù)人員更好地理解本申請(qǐng)實(shí)施例,以下結(jié)合圖3所示的應(yīng)用本申請(qǐng)實(shí)施例進(jìn)行工作流數(shù)據(jù)持久化操作的流程圖,通過一個(gè)具體示例進(jìn)一步說明。步驟一:根據(jù)服務(wù)端配置XML,將XML中聲明的服務(wù)注冊(cè)到服務(wù)容器(即服務(wù)端容器)中(圖3中步驟1(1))。其中,服務(wù)端容器的數(shù)據(jù)格式包括:ServiceRegistry類:服務(wù)端容器及注冊(cè)類成員變量:staticMap<String,ServiceInfo>,表示包含各種不同名稱的服務(wù)信息集合。ServiceInfo服務(wù)信息:描述服務(wù)接口實(shí)現(xiàn)的信息。成員變量:服務(wù)的提供者(即接口的實(shí)現(xiàn)類),暴露的服務(wù)接口(可以是多個(gè)接口),服務(wù)的地址(String類型serviceURI),方法信息集合(Map<String,OperationInfo>)。OperationInfo方法信息:描述方法的信息。成員變量:方法名,方法參數(shù)信息集合(List<ParameterInfo>),方法返回值信息(ReturnInforeturnInfo),方法異常信息集合(List<ExceptionInfo>),方法對(duì)象(Methodmethod)。ParameterInfo方法參數(shù)信息:描述方法參數(shù)的信息。成員變量:參數(shù)類型(StringtypeName),參數(shù)類型類(Classtype)ReturnInfo方法返回值信息:描述方法的返回值信息。成員變量:返回值類型(StringtypeName),返回值類型類(Classtype)ExceptionInfo方法異常信息:描述方法的異常信息。成員變量:異常類型(StringtypeName),異常類型類(Classtype)以下提供一種本申請(qǐng)實(shí)施例在具體實(shí)現(xiàn)中所使用的服務(wù)端配置文件的代碼示例:步驟二:根據(jù)客戶端配置XML,為XML中聲明的接口創(chuàng)建動(dòng)態(tài)代理,配置事件策略eventName,存儲(chǔ)策略storeRule,路由策略routeRule,服務(wù)實(shí)現(xiàn)地址endpointUrl,調(diào)用策略invokeType,回調(diào)地址callbackUri。(圖3中步驟1(2))其中,事件策略:表示事件發(fā)生時(shí),執(zhí)行的行為動(dòng)作。包括本地方法調(diào)用事件,遠(yuǎn)程mina調(diào)用事件等。存儲(chǔ)策略:表示存儲(chǔ)信息時(shí),采用哪種存儲(chǔ)方式。包括berkeleyDb存儲(chǔ),mysql存儲(chǔ)等。路由策略:表示消息傳遞的路由機(jī)制。例如:本地Java虛擬機(jī)內(nèi)流轉(zhuǎn),遠(yuǎn)程流程中心流轉(zhuǎn)。服務(wù)實(shí)現(xiàn)地址:表示接口實(shí)現(xiàn)類所在的位置??梢允潜镜?,也可以是遠(yuǎn)程。調(diào)用策略:表示事件信息的調(diào)用方式。例如:同步調(diào)用(sync),異步調(diào)用(async),異步可靠調(diào)用(asyncrely)等?;卣{(diào)地址:表示消息被消費(fèi)成功后,自動(dòng)回調(diào)發(fā)起方的地址。以下提供一種本申請(qǐng)實(shí)施例在具體實(shí)現(xiàn)中所使用的客戶端配置文件的代碼示例:步驟三:流程實(shí)例開始流轉(zhuǎn),遇到需要保存數(shù)據(jù)的節(jié)點(diǎn),將節(jié)點(diǎn)實(shí)例(即活動(dòng)實(shí)例)數(shù)據(jù)保存到流程上下文中指定的有序隊(duì)列中。(圖3中步驟3、4)步驟四:流程實(shí)例流轉(zhuǎn)結(jié)束。開始啟動(dòng)事務(wù),調(diào)用本地業(yè)務(wù)數(shù)據(jù)庫(kù)操作,然后再調(diào)用工作流數(shù)據(jù)持久化服務(wù)接口。此接口就是步驟二中聲明的接口。實(shí)際調(diào)用的是接口的動(dòng)態(tài)代理類。所述工作流數(shù)據(jù)持久化服務(wù)接口從所述流程上下文的有序隊(duì)列中獲取到相應(yīng)的節(jié)點(diǎn)實(shí)例數(shù)據(jù)。(圖3中步驟5、6、7、8、9)步驟五:動(dòng)態(tài)代理類中根據(jù)接口的方法,參數(shù),組裝成統(tǒng)一事件。(圖3中步驟10)統(tǒng)一事件的數(shù)據(jù)結(jié)構(gòu)如下所示:UniformEvent:統(tǒng)一事件,是支持后續(xù)事件策略,路由策略,消息存儲(chǔ)策略,調(diào)用策略的載體對(duì)象。事件對(duì)象在跨系統(tǒng)調(diào)用時(shí)不傳遞。成員變量有:事件序列ID(eventId),事件的名字(eventName,后續(xù)事件策略根據(jù)此名稱決定),事件回調(diào)URI(callbackUri,即消息成功或失敗后的回調(diào)地址),事件創(chuàng)建時(shí)間(createdTime),事件發(fā)送時(shí)間(sendedTime),事件上帶的消息對(duì)象(UniformMessage)。UniformMessage:統(tǒng)一消息,用來跨系統(tǒng)傳遞數(shù)據(jù)的載體。成員變量有:消息ID(messageId),消息頭(UniformMessageHeader),消息體(UniformMessagePlayload),消息處理結(jié)果返回值(Objectresponse)。UniformMessagePlayload:統(tǒng)一消息體對(duì)象。成員變量有:參數(shù)列表(Object[]params)UniformMessageHeader:統(tǒng)一消息頭對(duì)象。成員變量有:事件的名字[eventName],事件回調(diào)URI[callbackUri],消息產(chǎn)生的時(shí)間[createdTime],消息發(fā)送時(shí)間[sendedTime],服務(wù)端實(shí)現(xiàn)地址[endpointUrl],方法名[methodName],消息計(jì)劃消費(fèi)的時(shí)間[planTime],存儲(chǔ)規(guī)則[storeRule],路由規(guī)則[routeRule],超時(shí)時(shí)間[timeout],失敗重試次數(shù)[retry],調(diào)用方式:同步/異步[invokeType]。以出差借款申請(qǐng)為例子。流程實(shí)例啟動(dòng)后,經(jīng)過開始節(jié)點(diǎn),主管審批節(jié)點(diǎn)后進(jìn)入等待狀態(tài)。此時(shí)調(diào)用了工作流持久化服務(wù)接口來保存工作流數(shù)據(jù),代碼示例如下:EdaWorkflowServiceworkflowClient=(EdaWorkflowService)ContextFactory.get(“workflowClient”);workflowClient.storeProcess(bpmProcInst,contextMap,queue)參數(shù)列表有:流程實(shí)例bpmProcInst,上下文Map數(shù)據(jù)contextMap,queue隊(duì)列里是活動(dòng)實(shí)例數(shù)據(jù)(主管審批節(jié)點(diǎn)的活動(dòng)實(shí)例數(shù)據(jù))組裝的統(tǒng)一事件對(duì)象如下:publicclassUniformEvent{privateStringeventId;//事件序列ID[系統(tǒng)自動(dòng)生成的唯一id]privateStringeventName;//事件的名字[步驟二中讀取的配置]privateStringcallbackUri;//事件回調(diào)URI[步驟二中讀取的配置]privatelongcreatedTime;//事件創(chuàng)建時(shí)間[系統(tǒng)自動(dòng)生成當(dāng)前時(shí)間]privatelongsendedTime;//事件發(fā)送時(shí)間[系統(tǒng)自動(dòng)生成當(dāng)前時(shí)間]privateUniformMessagemessage;//事件上帶的消息對(duì)象[動(dòng)態(tài)代理類里組裝]動(dòng)態(tài)代理類里組裝指的是下面這個(gè)對(duì)象:publicclassUniformMessageimplementsSerializable{privatestaticfinallongserialVersionUID=1L;privateStringmessageId;//消息ID,UUID字符串[系統(tǒng)自動(dòng)生成的唯一id]privateUniformMessageHeaderheader;//消息頭[代理類里組裝]privateUniformMessagePlayloadplayload;//消息體[代理類里組裝]即參數(shù)列表有:流程實(shí)例bpmProcInst,上下文Map數(shù)據(jù)contextMap,queue隊(duì)列里是活動(dòng)實(shí)例數(shù)據(jù)(主管審批節(jié)點(diǎn)的活動(dòng)實(shí)例數(shù)據(jù))步驟六:根據(jù)事件中消息的調(diào)用方式(即調(diào)用策略),調(diào)用事件引擎調(diào)度類。(圖3中步驟11)如果是同步調(diào)用,則觸發(fā)事件,根據(jù)具體的事件名稱,調(diào)用不同的事件監(jiān)聽實(shí)現(xiàn)類(即事件策略)(圖3中步驟12.3、13.1)。然后轉(zhuǎn)步驟九。如果是異步調(diào)用,則創(chuàng)建事務(wù)同步器,并在事務(wù)管理器中注冊(cè)事務(wù)同步器(圖3中步驟12、12.1、12.2)。然后轉(zhuǎn)步驟七。步驟七,提交事務(wù),調(diào)用事務(wù)同步器,保存事件中的消息(根據(jù)存儲(chǔ)消息策略,可選擇mysql和berkeleydb進(jìn)行消息的存儲(chǔ)),然后將事件加入異步隊(duì)列中(圖3中步驟13、14、15、16)。步驟八,異步隊(duì)列監(jiān)聽器,監(jiān)聽到有事件加入,則觸發(fā)事件。根據(jù)具體的事件名稱,調(diào)用不同的事件監(jiān)聽實(shí)現(xiàn)類(即事件策略)(圖3中步驟17)。步驟九,在事件監(jiān)聽實(shí)現(xiàn)類中,根據(jù)路由策略,找到本地或遠(yuǎn)程的服務(wù)實(shí)現(xiàn)類地址(圖3中步驟18)。步驟十,根據(jù)服務(wù)實(shí)現(xiàn)類地址,從服務(wù)端容器中找到注冊(cè)過的接口真正實(shí)現(xiàn)類。然后調(diào)用這個(gè)實(shí)現(xiàn)類持久化工作流數(shù)據(jù),將工作流數(shù)據(jù)保存至本地或遠(yuǎn)程的工作流數(shù)據(jù)庫(kù)中(圖3中步驟19,20)。步驟十一:調(diào)用成功后,如果調(diào)用方式是異步,根據(jù)存儲(chǔ)策略,刪除保存過的事件消息。然后根據(jù)回調(diào)地址,自動(dòng)回調(diào)發(fā)起方通知成功;調(diào)用失敗后,根據(jù)回調(diào)地址,自動(dòng)回調(diào)發(fā)起方做補(bǔ)償業(yè)務(wù)操作(圖3中步驟21、22)。以下提供一段實(shí)現(xiàn)上述步驟六至步驟十一的代碼示例:應(yīng)用本申請(qǐng)實(shí)施例,可以根據(jù)工作流業(yè)務(wù)的情況,只需要簡(jiǎn)單的修改配置文件,即可自由選擇事件策略,消息存儲(chǔ)策略,路由策略,調(diào)用策略等工作流數(shù)據(jù)持久化服務(wù)策略,節(jié)省了維護(hù)成本,大大增強(qiáng)了工作流產(chǎn)品的擴(kuò)展性。需要說明的是,對(duì)于方法實(shí)施例,為了簡(jiǎn)單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本申請(qǐng)并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本申請(qǐng),某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本申請(qǐng)所必須的。參照?qǐng)D4,示出了本申請(qǐng)的一種工作流數(shù)據(jù)持久化的裝置實(shí)施例的結(jié)構(gòu)框圖,具體可以包括如下模塊:服務(wù)端配置模塊401,用于提取服務(wù)端配置文件中聲明的服務(wù)信息;其中,所述服務(wù)信息包括工作流數(shù)據(jù)持久化服務(wù)信息;客戶端配置模塊402,用于為客戶端配置文件中聲明的服務(wù)接口創(chuàng)建動(dòng)態(tài)代理類,并生成所述服務(wù)接口的策略配置信息;其中,所述服務(wù)接口包括工作流數(shù)據(jù)持久化服務(wù)接口,所述策略配置信息包括工作流數(shù)據(jù)持久化的策略配置信息;工作流數(shù)據(jù)獲取模塊403,用于獲得需要進(jìn)行持久化的目標(biāo)工作流數(shù)據(jù);代理類調(diào)用模塊404,用于調(diào)用所述工作流數(shù)據(jù)持久化服務(wù)接口獲得其動(dòng)態(tài)代理類,并在所述動(dòng)態(tài)代理類中將所述目標(biāo)工作流數(shù)據(jù)組裝成事件;事件執(zhí)行模塊405,用于按照所述工作流數(shù)據(jù)持久化策略的配置信息運(yùn)行所述事件,獲得所述事件對(duì)應(yīng)的工作流數(shù)據(jù)持久化服務(wù)信息,并按照所述工作流數(shù)據(jù)持久化服務(wù)信息對(duì)目標(biāo)工作流數(shù)據(jù)進(jìn)行持久化操作。在具體實(shí)現(xiàn)中,所述工作流數(shù)據(jù)持久化服務(wù)信息可以包括:服務(wù)接口的實(shí)現(xiàn)類,服務(wù)接口實(shí)現(xiàn)類的地址,服務(wù)接口實(shí)現(xiàn)類中的方法以及方法中聲明的參數(shù)類型;在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述的裝置還可以包括如下模塊:服務(wù)容器注冊(cè)模塊,與所述服務(wù)端配置模塊401相連,用于將所述服務(wù)信息按照預(yù)置的第一數(shù)據(jù)格式注冊(cè)到服務(wù)端容器中。作為本申請(qǐng)實(shí)施例具體應(yīng)用的一種示例,所述預(yù)置的第一數(shù)據(jù)格式可以包括如下內(nèi)容:服務(wù)容器及注冊(cè)類ServiceRegistry,其中,成員變量包括:表示包含各種不同名稱的服務(wù)信息集合staticMap<String,ServiceInfo>;服務(wù)接口實(shí)現(xiàn)的信息ServiceInfo,其中,成員變量包括:服務(wù)接口的實(shí)現(xiàn)類,暴露的服務(wù)接口,服務(wù)接口實(shí)現(xiàn)類的地址serviceURI,服務(wù)接口實(shí)現(xiàn)類中的方法信息集合Map<String,OperationInfo>;服務(wù)接口實(shí)現(xiàn)類中方法的信息OperationInfo,其中,成員變量包括:方法名,方法中聲明的參數(shù)信息集合List<ParameterInfo>,方法返回值信息ReturnInforeturnInfo)方法異常信息集合List<ExceptionInfo>,方法對(duì)象(Methodmethod);方法中聲明的參數(shù)信息ParameterInfo,其中,成員變量包括:參數(shù)類型StringtypeName,參數(shù)類型類Classtype;方法返回值信息ReturnInfo,其中,成員變量包括:返回值類型StringtypeName,返回值類型類Classtype;方法異常信息ExceptionInfo,其中,成員變量包括:異常類型StringtypeName,異常類型類Classtype。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述的裝置還可以包括如下模塊:客戶端容器注冊(cè)模塊,與所述客戶端配置模塊相連,用于將所述動(dòng)態(tài)代理類注冊(cè)到客戶端容器中。作為本申請(qǐng)實(shí)施例具體應(yīng)用的一種示例,所述工作流數(shù)據(jù)持久化策略的配置信息可以包括:表示事件發(fā)生時(shí),執(zhí)行的行為動(dòng)作的事件策略eventName;表示存儲(chǔ)信息時(shí),采用某種存儲(chǔ)方式的存儲(chǔ)策略storeRule;表示消息傳遞的路由機(jī)制的路由策略routeRule;表示接口實(shí)現(xiàn)類所在的位置的服務(wù)實(shí)現(xiàn)地址endpointUrl;表示事件信息的調(diào)用方式的調(diào)用策略invokeType;和/或,表示消息被消費(fèi)成功后,自動(dòng)回調(diào)發(fā)起方的地址的回調(diào)地址callbackUri。在具體實(shí)現(xiàn)中,所述事件為統(tǒng)一事件;所述代理類調(diào)用模塊404可以包括如下子模塊:服務(wù)接口調(diào)用子模塊,用于從所述客戶端容器中調(diào)用工作流數(shù)據(jù)持久化服務(wù)接口;動(dòng)態(tài)代理類提取子模塊,用于由所述工作流數(shù)據(jù)持久化服務(wù)接口調(diào)用對(duì)應(yīng)的動(dòng)態(tài)代理類;事件組裝子模塊,用于在所述動(dòng)態(tài)代理類中,根據(jù)所述服務(wù)接口實(shí)現(xiàn)類中的方法以及方法中聲明的參數(shù)類型,以及,工作流數(shù)據(jù)持久化的策略配置信息,將所述目標(biāo)工作流數(shù)據(jù)按照預(yù)置的第二數(shù)據(jù)格式組裝成統(tǒng)一事件。作為本申請(qǐng)實(shí)施例具體應(yīng)用的一種示例,所述預(yù)置的第二數(shù)據(jù)格式可以包括如下內(nèi)容:統(tǒng)一事件對(duì)象UniformEvent:其中,成員變量包括:事件序列IDeventId,事件名稱eventName,事件回調(diào)地址callbackUri,事件創(chuàng)建時(shí)間createdTime,事件發(fā)送時(shí)間sendedTime,事件上帶的統(tǒng)一消息對(duì)象UniformMessage;統(tǒng)一消息對(duì)象UniformMessage:其中,成員變量包括:消息IDmessageId,消息頭UniformMessageHeader,消息體UniformMessagePlayload,消息處理結(jié)果返回值Objectresponse;統(tǒng)一消息體對(duì)象UniformMessagePlayload:其中,成員變量包括:參數(shù)列表Object[]params;統(tǒng)一消息頭對(duì)象UniformMessageHeader:其中,成員變量包括:事件的名字eventName,事件回調(diào)地址callbackUri,消息產(chǎn)生的時(shí)間createdTime,消息發(fā)送時(shí)間sendedTime,服務(wù)端實(shí)現(xiàn)地址endpointUrl,方法名methodName,消息計(jì)劃消費(fèi)的時(shí)間planTime,存儲(chǔ)規(guī)則storeRule,路由規(guī)則routeRule,超時(shí)時(shí)間timeout,失敗重試次數(shù)retry,調(diào)用方式:同步/異步invokeType。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述事件執(zhí)行模塊405可以包括如下子模塊:第一事件觸發(fā)子模塊,用于獲取依據(jù)所述調(diào)用策略配置的事件中消息的調(diào)用方式,若為同步調(diào)用,則觸發(fā)所述事件,所述事件具有事件名稱;事件監(jiān)聽子模塊,用于根據(jù)所述事件名稱獲取相應(yīng)的事件監(jiān)聽實(shí)現(xiàn)類,所述事件監(jiān)聽實(shí)現(xiàn)類依據(jù)所述事件策略配置生成;路由子模塊,用于在所述事件監(jiān)聽實(shí)現(xiàn)類中,根據(jù)所述路由策略,查找位于本地或遠(yuǎn)程的服務(wù)接口實(shí)現(xiàn)類的地址;實(shí)現(xiàn)類定位子模塊,用于根據(jù)所述服務(wù)接口實(shí)現(xiàn)類的地址,從服務(wù)端容器中找到相應(yīng)的服務(wù)接口實(shí)現(xiàn)類;持久化操作子模塊,用于調(diào)用所述服務(wù)接口實(shí)現(xiàn)類,將所述目標(biāo)工作流數(shù)據(jù)保存在本地或遠(yuǎn)程的工作流數(shù)據(jù)庫(kù)中。作為本申請(qǐng)的另一種優(yōu)選實(shí)施例,所述的裝置還可以包括事務(wù)啟動(dòng)模塊,用于在預(yù)設(shè)的事務(wù)管理器中啟動(dòng)事務(wù);在這種情況下,所述事件執(zhí)行模塊405可以包括如下子模塊:事務(wù)同步器創(chuàng)建子模塊,用于獲取依據(jù)所述調(diào)用策略配置的事件中消息的調(diào)用方式,若為異步調(diào)用,則創(chuàng)建事務(wù)同步器,并在所述事務(wù)管理器中注冊(cè)事務(wù)同步器;事務(wù)提交處理子模塊,用于提交事務(wù),調(diào)用事務(wù)同步器,根據(jù)所述存儲(chǔ)策略保存事件中的消息,然后將事件加入異步隊(duì)列中;第二事件觸發(fā)子模塊,用于異步隊(duì)列監(jiān)聽器監(jiān)聽到有事件加入時(shí),觸發(fā)所述事件;事件監(jiān)聽子模塊,用于根據(jù)所述事件的名稱獲取相應(yīng)的事件監(jiān)聽實(shí)現(xiàn)類,所述事件監(jiān)聽實(shí)現(xiàn)類依據(jù)所述事件策略配置生成;路由子模塊,用于在所述事件監(jiān)聽實(shí)現(xiàn)類中,根據(jù)所述路由策略,查找位于本地或遠(yuǎn)程的服務(wù)接口實(shí)現(xiàn)類的地址;實(shí)現(xiàn)類定位子模塊,用于根據(jù)所述服務(wù)接口實(shí)現(xiàn)類的地址,從服務(wù)端容器中找到相應(yīng)的服務(wù)接口實(shí)現(xiàn)類;持久化操作子模塊,用于調(diào)用所述服務(wù)接口實(shí)現(xiàn)類,將所述目標(biāo)工作流數(shù)據(jù)保存在本地或遠(yuǎn)程的工作流數(shù)據(jù)庫(kù)中;調(diào)用成功處理子模塊,用于在所述服務(wù)接口實(shí)現(xiàn)類調(diào)用成功時(shí),則根據(jù)所述存儲(chǔ)策略,刪除保存過的事件消息,然后根據(jù)所述回調(diào)地址,回調(diào)發(fā)起方通知操作成功;調(diào)用失敗處理子模塊,用于在所述服務(wù)接口實(shí)現(xiàn)類調(diào)用失敗,則根據(jù)所述回調(diào)地址,回調(diào)發(fā)起方執(zhí)行補(bǔ)償業(yè)務(wù)操作。在具體實(shí)現(xiàn)中,所述工作流數(shù)據(jù)獲取模塊403包括:數(shù)據(jù)生成子模塊,用于流程實(shí)例開始流轉(zhuǎn),遇到需要保存數(shù)據(jù)的節(jié)點(diǎn),將節(jié)點(diǎn)實(shí)例的數(shù)據(jù)保存到流程上下文中指定的有序隊(duì)列中;數(shù)據(jù)提取子模塊,用于流程實(shí)例流轉(zhuǎn)結(jié)束,獲取所述有序隊(duì)列中的節(jié)點(diǎn)實(shí)例數(shù)據(jù)為需要進(jìn)行持久化的目標(biāo)工作流數(shù)據(jù)。對(duì)于裝置實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見方法實(shí)施例的部分說明即可。本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請(qǐng)的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本申請(qǐng)可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請(qǐng)可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。本申請(qǐng)是參照根據(jù)本申請(qǐng)實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。盡管已描述了本申請(qǐng)的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例做出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本申請(qǐng)范圍的所有變更和修改。最后,還需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。以上對(duì)本申請(qǐng)所提供的一種工作流數(shù)據(jù)持久化的方法和一種工作流數(shù)據(jù)持久化的裝置進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本申請(qǐng)的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本申請(qǐng)的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請(qǐng)的思想,在具體實(shí)施方式及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對(duì)本申請(qǐng)的限制。