国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法

      文檔序號(hào):6557285閱讀:269來(lái)源:國(guó)知局
      專利名稱:一種聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及計(jì)算機(jī)系統(tǒng)技術(shù)領(lǐng)域,具體涉及一種聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法。

      背景技術(shù)
      現(xiàn)有的OLTP(On Line Transaction Processing,聯(lián)機(jī)事務(wù)處理)系統(tǒng)一般分為兩層模式和三層模式。在兩層模式OLTP系統(tǒng)中客戶機(jī)直接跟數(shù)據(jù)庫(kù)交互,解決實(shí)際的業(yè)務(wù)問(wèn)題。通常是應(yīng)用程序直接建立到數(shù)據(jù)庫(kù)服務(wù)器的連接,并在此連接上完成業(yè)務(wù)需要的數(shù)據(jù)操作。兩層模式的OLTP系統(tǒng)如圖1所示,兩層模式的OLTP系統(tǒng)能很好的支持并發(fā)度要求小的業(yè)務(wù)處理系統(tǒng),適合規(guī)模不大的OLTP系統(tǒng)。隨著信息系統(tǒng)的普及,大公司、大企業(yè)的業(yè)務(wù)擴(kuò)張使數(shù)據(jù)的并發(fā)訪問(wèn)量越來(lái)越大,需要的數(shù)據(jù)庫(kù)服務(wù)器處理能力越來(lái)越強(qiáng),網(wǎng)絡(luò)上數(shù)據(jù)傳輸量也越來(lái)越大,主機(jī)性能和網(wǎng)絡(luò)帶寬成為業(yè)務(wù)發(fā)展的瓶頸,除了采購(gòu)更好、更多的硬件以外,三層模式的OLTP系統(tǒng)成為一種最佳選擇。三層模式的OLTP系統(tǒng)如圖2所示,三層模式OLTP系統(tǒng)將客戶機(jī)與數(shù)據(jù)隔離,客戶機(jī)不再直接訪問(wèn)數(shù)據(jù),而是通過(guò)應(yīng)用服務(wù)器來(lái)訪問(wèn)數(shù)據(jù),由應(yīng)用服務(wù)器建立數(shù)據(jù)庫(kù)連接,只要建立比客戶機(jī)個(gè)數(shù)小的多的應(yīng)用服務(wù)器到數(shù)據(jù)庫(kù)的連接個(gè)數(shù)就可以完全達(dá)到兩層模式OLTP系統(tǒng)的效果;同時(shí)跟數(shù)據(jù)密切相關(guān)的業(yè)務(wù)邏輯也自然地從客戶機(jī)移到應(yīng)用服務(wù)器,使得業(yè)務(wù)處理過(guò)程和客戶機(jī)完全分離,通過(guò)網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量大大減少,網(wǎng)絡(luò)帶寬的問(wèn)題得到緩解。三層模式使得OLTP系統(tǒng)的開發(fā)效率更高,維護(hù)更方便,擴(kuò)展和應(yīng)用部署更具有彈性,安全性也得到了增強(qiáng)。通常實(shí)現(xiàn)的大業(yè)務(wù)量三層模式OLTP系統(tǒng)都是基于中間件構(gòu)建的,由中間件在客戶機(jī)和數(shù)據(jù)之間架起數(shù)據(jù)存取的橋梁,并提供業(yè)務(wù)邏輯實(shí)現(xiàn)的應(yīng)用框架(通常是應(yīng)用服務(wù)器)??蛻魴C(jī)和應(yīng)用服務(wù)器之間使用的是私有應(yīng)用開發(fā)接口協(xié)議,因此造成不同廠家開發(fā)的中間件并不相同,而且私有應(yīng)用開發(fā)接口協(xié)議提供的客戶機(jī)和應(yīng)用服務(wù)器之間的數(shù)據(jù)交換方式也不相同,這給應(yīng)用開發(fā)帶來(lái)了很大的麻煩。
      現(xiàn)有技術(shù)的OLTP中間件,對(duì)應(yīng)用服務(wù)器長(zhǎng)時(shí)間的事務(wù)處理以及應(yīng)用服務(wù)器跟客戶機(jī)之間的大數(shù)據(jù)量傳遞,都沒有提供好的解決辦法,有的中間件提供一個(gè)原始的應(yīng)用開發(fā)接口,此接口通過(guò)一個(gè)數(shù)據(jù)結(jié)構(gòu)在客戶機(jī)和應(yīng)用服務(wù)器之間進(jìn)行通信,不同的功能采用不同的命令字來(lái)區(qū)分,并且客戶機(jī)和應(yīng)用服務(wù)器之間傳遞的業(yè)務(wù)數(shù)據(jù)一般每次不能超過(guò)32K字節(jié),應(yīng)用開發(fā)極其困難。有的中間件在原始接口之上提供簡(jiǎn)易的封裝,但有很多限制。例如提供一套涵蓋原始開發(fā)接口的C語(yǔ)言API(Application Program Interface,應(yīng)用程序接口)封裝和在此API之上的一個(gè)C++類封裝;采用字符串作為底層數(shù)據(jù)傳遞的基本數(shù)據(jù)類型,對(duì)二進(jìn)制流的傳遞要進(jìn)行轉(zhuǎn)意操作,即要首先將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成字符串,然后才能進(jìn)行傳輸;業(yè)務(wù)數(shù)據(jù)按照“名=值“的方式進(jìn)行打包封裝傳遞;支持超過(guò)32K的業(yè)務(wù)數(shù)據(jù)傳遞,采用的是臨時(shí)存儲(chǔ)隊(duì)列作為底層技術(shù)。前面所說(shuō)的方案本質(zhì)上是中間件原始應(yīng)用開發(fā)接口的一套薄封裝,業(yè)務(wù)開發(fā)人員要懂中間件技術(shù);對(duì)二進(jìn)制數(shù)據(jù)的數(shù)據(jù)支持不夠,因?yàn)橐M(jìn)行轉(zhuǎn)意操作兩次,并且要逐個(gè)檢查,效率低下;對(duì)超過(guò)32K的業(yè)務(wù)數(shù)據(jù)的支持不夠,使用的是基于文件系統(tǒng)的臨時(shí)隊(duì)列,效率低下;對(duì)超過(guò)32K的業(yè)務(wù)數(shù)據(jù)的夸域調(diào)用支持不夠,需要進(jìn)行大量煩瑣的操作和配置;沒有對(duì)開發(fā)人員進(jìn)行中間件技術(shù)的隔離,要求開發(fā)人員必須掌握底層中間件技術(shù),對(duì)業(yè)務(wù)開發(fā)人員要求較高,開發(fā)效率低下。


      發(fā)明內(nèi)容
      本發(fā)明要解決的技術(shù)問(wèn)題是提供一種聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,克服現(xiàn)有技術(shù)要求聯(lián)機(jī)事務(wù)處理系統(tǒng)的開發(fā)人員必須掌握中間件技術(shù)的缺點(diǎn),以及現(xiàn)有技術(shù)的應(yīng)用中間件技術(shù)的聯(lián)機(jī)事務(wù)處理系統(tǒng)數(shù)據(jù)傳遞效率低下和缺乏通用高效的大數(shù)據(jù)量傳遞手段的缺點(diǎn)。
      本發(fā)明采用如下的技術(shù)方案 一種聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,包括步驟建立業(yè)務(wù)處理類基類,用業(yè)務(wù)處理類基類中的數(shù)據(jù)成員和成員函數(shù)的參數(shù)表征中間件處理的數(shù)據(jù)類型,業(yè)務(wù)處理類基類中的成員函數(shù)調(diào)用中間件的應(yīng)用程序接口,實(shí)現(xiàn)聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的數(shù)據(jù)處理功能。
      所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其中建立業(yè)務(wù)實(shí)體類基類,由業(yè)務(wù)實(shí)體類基類中的不同成員函數(shù)對(duì)對(duì)象進(jìn)行序列化和反序列化。
      所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其中建立一個(gè)根基類,由根基類派生業(yè)務(wù)處理類基類和業(yè)務(wù)實(shí)體類基類。
      所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其中業(yè)務(wù)處理類基類派生至少一個(gè)業(yè)務(wù)處理類,由業(yè)務(wù)處理類中的成員函數(shù)對(duì)聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的功能進(jìn)行封裝。
      所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其中業(yè)務(wù)實(shí)體類基類派生至少一個(gè)業(yè)務(wù)實(shí)體類,由業(yè)務(wù)實(shí)體類中的成員函數(shù)對(duì)對(duì)象進(jìn)行序列化和反序列化。
      所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其中在業(yè)務(wù)處理類基類中定義對(duì)聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的功能進(jìn)行封裝的純虛函數(shù),由業(yè)務(wù)處理類中的成員函數(shù)對(duì)聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的功能進(jìn)行封裝。
      所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其中在業(yè)務(wù)實(shí)體類基類中定義對(duì)對(duì)象進(jìn)行序列化和反序列化的純虛函數(shù),由業(yè)務(wù)實(shí)體類中的成員函數(shù)對(duì)對(duì)象進(jìn)行序列化和反序列化。
      所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其中建立一個(gè)對(duì)象序列化類,業(yè)務(wù)實(shí)體類基類或者業(yè)務(wù)實(shí)體類調(diào)用對(duì)象序列化類的成員函數(shù)對(duì)對(duì)象進(jìn)行序列化和反序列化。
      所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其中,構(gòu)造宏來(lái)動(dòng)態(tài)創(chuàng)建類和相應(yīng)的類對(duì)象第一宏將類名和創(chuàng)建類對(duì)象的方法聲明到類中;第二宏實(shí)現(xiàn)類聲明中的方法,并將類名和類對(duì)象的創(chuàng)建方法注冊(cè)到類工廠中;第三宏根據(jù)類名從類工廠中獲得類的對(duì)象創(chuàng)建方法,并返回一個(gè)類對(duì)象。
      所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其中定義和構(gòu)造一對(duì)全局函數(shù),用于數(shù)據(jù)傳輸時(shí)的數(shù)據(jù)壓縮和數(shù)據(jù)解壓縮。
      所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其中定義和構(gòu)造一對(duì)全局函數(shù),用于數(shù)據(jù)傳輸時(shí)的數(shù)據(jù)加密和數(shù)據(jù)解密。
      所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其中定義和構(gòu)造一個(gè)全局函數(shù),用于客戶機(jī)到服務(wù)器的大數(shù)據(jù)量上傳。
      所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其中定義和構(gòu)造一個(gè)全局函數(shù),用于服務(wù)器到客戶機(jī)的大數(shù)據(jù)量下載。
      本發(fā)明的技術(shù)方案通過(guò)提供一套業(yè)務(wù)實(shí)體類和業(yè)務(wù)處理類體系、對(duì)象序列化機(jī)制和動(dòng)態(tài)創(chuàng)建類對(duì)象的方法,使用二進(jìn)制流進(jìn)行數(shù)據(jù)傳遞,提供對(duì)任何類型數(shù)據(jù)的傳遞支持,業(yè)務(wù)開發(fā)人員可以對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行自主的序列化和反序列化操作,克服了中間件不能支持任意數(shù)據(jù)類型的缺點(diǎn),并且業(yè)務(wù)處理可以根據(jù)業(yè)務(wù)類型進(jìn)行靈活定制;通過(guò)提供一套基于中間件底層功能的封裝,克服了了業(yè)務(wù)開發(fā)人員必須了解中間件技術(shù)的缺點(diǎn);通過(guò)將數(shù)據(jù)上傳和下載分離,提供一套高效的、基于共享內(nèi)存的、客戶機(jī)和服務(wù)器間的大數(shù)據(jù)量傳遞方法,有效解決了大數(shù)據(jù)量事務(wù)的超時(shí)問(wèn)題和中間件每次服務(wù)調(diào)用對(duì)數(shù)據(jù)量的大小進(jìn)行限制的缺點(diǎn)。



      本發(fā)明包括如下附圖 圖1是現(xiàn)有技術(shù)兩層模式OLTP系統(tǒng)示意圖; 圖2是現(xiàn)有技術(shù)三層模式OLTP系統(tǒng)示意圖; 圖3是本發(fā)明對(duì)OLTP中間件進(jìn)行封裝的模塊示意圖; 圖4是本發(fā)明的類繼承關(guān)系圖; 圖5是本發(fā)明通過(guò)客戶端封裝和服務(wù)器端封裝進(jìn)行數(shù)據(jù)上傳和下載流程示意圖。

      具體實(shí)施例方式 下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明 本發(fā)明采用面向?qū)ο蠹夹g(shù),利用類的數(shù)據(jù)成員和成員函數(shù)對(duì)中間件的功能進(jìn)行封裝,如圖4所示,所有的類有一個(gè)共同的基類CPObject,此基類派生出業(yè)務(wù)實(shí)體類基類CPEntity和業(yè)務(wù)處理類基類CBusinessProcess,再由業(yè)務(wù)實(shí)體類基類CPEntity派生出業(yè)務(wù)需要的相應(yīng)的業(yè)務(wù)實(shí)體類,業(yè)務(wù)處理類基類CBusinessProcess派生出所有的業(yè)務(wù)處理類;整個(gè)類體系支持按名創(chuàng)建類對(duì)象;業(yè)務(wù)實(shí)體類實(shí)現(xiàn)序列化和反序列化方法;業(yè)務(wù)處理類實(shí)現(xiàn)Execute虛方法;業(yè)務(wù)實(shí)體類用來(lái)在客戶機(jī)和服務(wù)器之間進(jìn)行業(yè)務(wù)數(shù)據(jù)傳遞;業(yè)務(wù)處理類用來(lái)實(shí)現(xiàn)業(yè)務(wù)處理過(guò)程。
      動(dòng)態(tài)創(chuàng)建類機(jī)制由三個(gè)宏來(lái)實(shí)現(xiàn) 1、宏DECLARE_OBJ_DYNCREATE(類名),將類名和創(chuàng)建類對(duì)象的方法聲明到類中; 下面是定義上述宏的實(shí)例 #define DECLARE_OBJ_DYNCREATE(class_name)\ public:\ static CPObject*Create##class_name(); 2、宏IMPLEMENT_OBJ_DYNCREATE(類名),將類聲明中的方法進(jìn)行實(shí)現(xiàn),并將類名和類對(duì)象的創(chuàng)建方法注冊(cè)到類工廠中; 下面是定義上述宏的實(shí)例 #define IMPLEMENT_OBJ_DYNCREATE(class_name)\ CPObject*class_name::Create##class_name()\ {\return(CPObject*)(new class_name());\ }\ staticint volatile gTmp##class_name=\ RegisterCreateMethod(#class_name,class_name::Create##class_name); 3、宏CREATE_OBJECT(類名),根據(jù)類名從類工廠中獲得類的對(duì)象創(chuàng)建方法,并返回一個(gè)類對(duì)象; 下面是定義上述宏的實(shí)例 #define CREATE_OBJECT(class_name)CreateObjectByName(class_name) 在上面的宏定義中使用了兩個(gè)全局的方法RegisterCreateMethod和CreateObjectByName RegisterCreateMethod(#class_name,class_name::Create##class_name) 方法使用C++的機(jī)制將類名(#class_name)和該類對(duì)象的創(chuàng)建方法(class_name::Create##class_name)建立對(duì)應(yīng)關(guān)系,并保存到一個(gè)數(shù)組或者map中; CreateObjectByName(class_name)方法根據(jù)類名(class_name),找到其對(duì)應(yīng)的創(chuàng)建對(duì)象的方法,然后創(chuàng)建一個(gè)該類的對(duì)象并返回該對(duì)象。
      對(duì)象序列化類,完成類對(duì)象的序列化和反序列化??蛻魴C(jī)和服務(wù)器之間進(jìn)行通訊是要交換數(shù)據(jù)的,在網(wǎng)絡(luò)層數(shù)據(jù)都是以二進(jìn)制字節(jié)流的方式傳遞的,但是面向用戶和編程人員的數(shù)據(jù)是通常的數(shù)據(jù)格式,如十進(jìn)制、字符串等。在此提供的對(duì)象序列化類,就是將用戶可讀的對(duì)象級(jí)的數(shù)據(jù)轉(zhuǎn)化成適合網(wǎng)絡(luò)傳輸?shù)亩M(jìn)制字節(jié)流(對(duì)象序列化)并在接收到的二進(jìn)制字節(jié)流轉(zhuǎn)化成用戶可讀的對(duì)象級(jí)數(shù)據(jù)(對(duì)象反序列化)。
      對(duì)象序列化類提供的典型數(shù)據(jù)和方法如下 表1給出了典型數(shù)據(jù)成員及命名 表1 表2給出了基本數(shù)據(jù)類型的處理方法及命名 表2 表3給出了用戶自己定義數(shù)據(jù)類型的序列化和命名 表3 假設(shè)上面的對(duì)象序列化類為CObArchive,自己定義的數(shù)據(jù)類型的基類至少要有如下所示的二個(gè)虛方法 class CPEntity:public CPObject { public: virtual void Save(CObjectArchive&)=0; virtual void Load(CObArchive&)=0; }; 現(xiàn)在可以定義自己的一種數(shù)據(jù)類型,如CUserInfo,定義如下 class CUserInfo:public CPEntity { public: void Save(CObjectArchive&); void Load(CObArchive&); }; 在實(shí)現(xiàn)文件里實(shí)現(xiàn)Save、Load方法,它們分別對(duì)自己類中需要的傳遞的基本數(shù)據(jù)進(jìn)行Save、Load操作。
      客戶機(jī)封裝和服務(wù)器封裝 基于中間件底層技術(shù)(私有的應(yīng)用協(xié)議)提供一套業(yè)務(wù)接口協(xié)議IuniCall。將中間件技術(shù)與業(yè)務(wù)實(shí)現(xiàn)進(jìn)行隔離,其中客戶機(jī)封裝使用原中間件私有協(xié)議的底層API(應(yīng)用程序接口)并對(duì)客戶機(jī)提供一套面向業(yè)務(wù)的接口。該接口對(duì)業(yè)務(wù)的輸入數(shù)據(jù)和輸出數(shù)據(jù)進(jìn)行包裝,數(shù)據(jù)包裝使用CObArchive類進(jìn)行序列化處理,只要準(zhǔn)備好輸入數(shù)據(jù),調(diào)用業(yè)務(wù)處理接口,就會(huì)根據(jù)業(yè)務(wù)處理情況返回相應(yīng)的處理結(jié)果。服務(wù)器封裝也是使用原中間件私有協(xié)議的底層API并對(duì)服務(wù)器提供一套面向業(yè)務(wù)的接口框架??蛻魴C(jī)封裝和服務(wù)器封裝的示意圖如圖3所示。這樣在客戶機(jī)上進(jìn)行業(yè)務(wù)開發(fā)使用的是客戶機(jī)封裝接口,在服務(wù)器上進(jìn)行業(yè)務(wù)開發(fā)使用的是服務(wù)器封裝接口框架。
      客戶機(jī)封裝接口類的主要方法如下 class IUniCall { public: void Invoke(CIntRequest &req,CIntResponse &resp,int timeout=TX_TIMEOUT); virtual bool GetRouteInfo(CIntRequest&req,TX_CALLINFO&info)=0; }; 在該類中定義GetRouteInfo和Invoke方法,下面解析如下 CIntRequest輸入數(shù)據(jù)的封裝,是從CPEntity派生,實(shí)現(xiàn)了Load、Save方法,數(shù)據(jù)成員由標(biāo)準(zhǔn)數(shù)據(jù)成員和輸入?yún)?shù)構(gòu)成。典型的成員如下 子系統(tǒng)類型請(qǐng)求發(fā)起子系統(tǒng)的標(biāo)識(shí), 命令類型要處理的業(yè)務(wù)類型, 命令字業(yè)務(wù)分支, 業(yè)務(wù)對(duì)象標(biāo)識(shí)業(yè)務(wù)相關(guān)的處理對(duì)象標(biāo)識(shí), 事務(wù)標(biāo)識(shí)是否要求事務(wù)處理, 輸入?yún)?shù)對(duì)象數(shù)組所有的輸入業(yè)務(wù)數(shù)據(jù)對(duì)象,都從CPEntity派生。
      CIntResponse返回結(jié)果數(shù)據(jù)的封裝,是從CPEntity派生,實(shí)現(xiàn)了Load、Save方法,數(shù)據(jù)成員由標(biāo)準(zhǔn)數(shù)據(jù)成員和輸出參數(shù)數(shù)組構(gòu)成。典型的成員如下 返回代碼標(biāo)識(shí)請(qǐng)求的處理情況, 返回結(jié)果數(shù)組所有返回的業(yè)務(wù)數(shù)據(jù)對(duì)象,都從CPEntity派生, GetRouteInfo根據(jù)輸入數(shù)據(jù)中的相關(guān)信息,取得相應(yīng)的路由信息,決定請(qǐng)求發(fā)送到那個(gè)服務(wù)器進(jìn)行處理。業(yè)務(wù)人員可以根據(jù)自己的需要確定路由方案。
      Invoke將業(yè)務(wù)請(qǐng)求發(fā)送到相應(yīng)的服務(wù)器,其中CIntRequest含有輸入數(shù)據(jù),返回結(jié)果在CIntResponse中帶回來(lái)。內(nèi)部實(shí)現(xiàn)是將CInRequest對(duì)象調(diào)用CObArchive對(duì)象進(jìn)行序列化,然后調(diào)用中間件底層API將數(shù)據(jù)傳遞到服務(wù)器端,服務(wù)器端處理后將結(jié)果(字節(jié)流)返回來(lái),客戶端再進(jìn)行反序列化生成CIntResponse對(duì)象,其中CIntRequest和CIntResponse是輸入?yún)?shù)和輸出參數(shù)的封裝。
      下面是客戶端代碼實(shí)例 //......略...... CIntRequest req; CIntResponse resp; req.m_inParams.Add(參數(shù)1); req.m_inParams.Add(參數(shù)2); //......略...... req.m_inParams.Add(參數(shù)n); CBkUniCall bk try { bk.Invoke(req,resp); //正確處理 //......略...... }catch(...) {//錯(cuò)誤處理 //......略...... } 其中CbkUniCall是從IuniCall派生出來(lái)的類,實(shí)現(xiàn)了GetRouteInfo方法。
      在服務(wù)器端,針對(duì)不同的中間件給出一個(gè)相同的應(yīng)用框架,并提供一個(gè)業(yè)務(wù)嵌入的接口,斷開業(yè)務(wù)實(shí)現(xiàn)和中間件技術(shù)的聯(lián)系。
      業(yè)務(wù)類體系 class CPObject; //業(yè)務(wù)處理類基類 class CBusinessProcesspublic CPObject { public:virtual void Execute(CIntRequest&req,CIntResponse&resp)=0; }; 可以看出此基類的形參跟客戶機(jī)接口的完全一樣,這種透明性達(dá)到了業(yè)務(wù)與中間件技術(shù)隔離的目的。
      服務(wù)框架 通過(guò)抽象一個(gè)標(biāo)準(zhǔn)的接受請(qǐng)求接口,形式如下 void ProcessRequest(char*data,int datalen);來(lái)達(dá)到統(tǒng)一中間件接受請(qǐng)求的目的。
      通過(guò)抽像一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)返回接口,形式如下 void ReturnResponse(char*data,int datalen);來(lái)達(dá)到統(tǒng)一中間件結(jié)果返回的目的。
      通過(guò)實(shí)現(xiàn)一個(gè)根據(jù)類名稱創(chuàng)建類對(duì)象的機(jī)制,形式如下 IBossProcess*GetProcessObject(CintRequest&req);達(dá)到服務(wù)器框架對(duì)應(yīng)用的透明的目的。
      下面是框架的代碼實(shí)例 服務(wù)入口函數(shù) { //......略...... ProcessRequest(data,datalen); //......略...... } void ProcessRequest(char*rqstdata,int rqstdatalen) { //......略...... CIntRequest req; CIntResponse resp; CBusinessProcess*process=0; char*rspdata=0; int rspdatalen=0; DecodePkg(rqstdata,rqstdatalen,&req); process=GetProcessObject(req); process->Execute(req,resp); //......略...... EncodePkg(rspdata,rspdatalen,resp); ReturnResponse(rspdata,rspdatalen); //......略...... } 客戶機(jī)傳輸機(jī)制和服務(wù)器傳輸機(jī)制 在客戶機(jī)將業(yè)務(wù)請(qǐng)求發(fā)送到服務(wù)器和服務(wù)器將處理結(jié)果返回到客戶機(jī)時(shí),但業(yè)務(wù)數(shù)據(jù)很大時(shí),有些中間件產(chǎn)品對(duì)數(shù)據(jù)大小有限制,如限制每次交互的所有數(shù)據(jù)不能超過(guò)32K。通過(guò)提供統(tǒng)一的數(shù)據(jù)傳遞機(jī)制,實(shí)現(xiàn)大數(shù)據(jù)的傳輸和統(tǒng)一業(yè)務(wù)開發(fā)接口。
      如圖5所示,對(duì)于客戶機(jī)一側(cè),如果業(yè)務(wù)數(shù)據(jù)大小沒有超過(guò)限制,則直接將業(yè)務(wù)數(shù)據(jù)發(fā)送到服務(wù)器端;如果業(yè)務(wù)數(shù)據(jù)超過(guò)限制,則通過(guò)調(diào)用在中間件上發(fā)布的兩個(gè)服務(wù)函數(shù)UpLoadData和DownLoadData來(lái)實(shí)現(xiàn)業(yè)務(wù)數(shù)據(jù)的上傳和下載。UpLoadData服務(wù)函數(shù)將業(yè)務(wù)請(qǐng)求數(shù)據(jù)從客戶機(jī)上載到服務(wù)器一側(cè),DownLoadData服務(wù)函數(shù)將服務(wù)器側(cè)的返回結(jié)果下載到客戶機(jī)。在客戶機(jī)將業(yè)務(wù)數(shù)據(jù)上傳到服務(wù)器時(shí),第一次將生成一個(gè)數(shù)據(jù)上傳會(huì)話標(biāo)識(shí),直到數(shù)據(jù)全部上傳完畢,最后客戶機(jī)使用此數(shù)據(jù)標(biāo)識(shí)調(diào)用業(yè)務(wù)服務(wù)。
      上傳數(shù)據(jù)過(guò)程當(dāng)客戶機(jī)準(zhǔn)備好業(yè)務(wù)數(shù)據(jù)對(duì)象發(fā)起業(yè)務(wù)調(diào)用時(shí),客戶端封裝截獲業(yè)務(wù)請(qǐng)求,將對(duì)數(shù)據(jù)對(duì)象施加序列化機(jī)制,形成一個(gè)二進(jìn)制數(shù)據(jù)流,并給出數(shù)據(jù)長(zhǎng)度,然后開始數(shù)據(jù)上傳過(guò)程,在數(shù)據(jù)上傳以前,可以對(duì)數(shù)據(jù)進(jìn)行壓縮,加密等操作。上傳過(guò)程中,如果數(shù)據(jù)長(zhǎng)度大于規(guī)定的長(zhǎng)度,我們就在立即啟用一個(gè)會(huì)話生成一個(gè)會(huì)話標(biāo)識(shí),在第一次調(diào)用數(shù)據(jù)上載服務(wù)時(shí),將會(huì)話標(biāo)識(shí)和數(shù)據(jù)內(nèi)容和發(fā)送的數(shù)據(jù)長(zhǎng)度,總的數(shù)據(jù)長(zhǎng)度發(fā)送到對(duì)側(cè),服務(wù)端封裝接收到后將數(shù)據(jù)按照會(huì)話標(biāo)識(shí)保持在服務(wù)器端,一直將數(shù)據(jù)發(fā)送完畢。數(shù)據(jù)發(fā)送完成以后,發(fā)起業(yè)務(wù)服務(wù)調(diào)用,此時(shí)將會(huì)話標(biāo)識(shí)傳遞到服務(wù)器側(cè),此標(biāo)識(shí)就是數(shù)據(jù)的標(biāo)識(shí).服務(wù)器側(cè)就可以根據(jù)會(huì)話標(biāo)識(shí)取得剛才上傳的數(shù)據(jù)進(jìn)行業(yè)務(wù)處理.數(shù)據(jù)上傳過(guò)程結(jié)束。
      對(duì)于服務(wù)器一側(cè),如果業(yè)務(wù)數(shù)據(jù)大小沒有超過(guò)限制,則直接將業(yè)務(wù)數(shù)據(jù)返回給客戶端。如果業(yè)務(wù)數(shù)據(jù)超過(guò)限制,則首先將業(yè)務(wù)數(shù)據(jù)存放到本地的共享內(nèi)存中,并且分配一個(gè)唯一的標(biāo)識(shí),服務(wù)器將這個(gè)標(biāo)識(shí)返回給客戶端,客戶端根據(jù)此標(biāo)識(shí)調(diào)用DownLoadData服務(wù)函數(shù)將業(yè)務(wù)數(shù)據(jù)分批下載下來(lái)。
      數(shù)據(jù)下載過(guò)程只是將服務(wù)器變成了數(shù)據(jù)的發(fā)送端,客戶機(jī)變成了數(shù)據(jù)接收端,就是說(shuō)當(dāng)服務(wù)器側(cè)返回的業(yè)務(wù)數(shù)據(jù)大于規(guī)定的量時(shí),服務(wù)端封裝會(huì)在服務(wù)器側(cè)將數(shù)據(jù)先存起來(lái),然后服務(wù)器生成一個(gè)會(huì)話標(biāo)識(shí),返回給客戶機(jī),客戶機(jī)根據(jù)此會(huì)話標(biāo)識(shí),向服務(wù)器側(cè)發(fā)起下載服務(wù)調(diào)用,將數(shù)據(jù)取到客戶機(jī)側(cè),一直數(shù)據(jù)完全取得客戶端為止。
      傳輸過(guò)程的壓縮/解壓縮與加密/解密 現(xiàn)在加密/解密、壓縮/界壓縮的算法多種多樣,在我們的封裝中所有要傳遞的數(shù)據(jù)對(duì)象都是經(jīng)過(guò)CObArchive來(lái)序列化和反序列化的,然后在網(wǎng)絡(luò)上傳送,由于要傳遞的數(shù)據(jù)是個(gè)二進(jìn)制的流,在數(shù)據(jù)通過(guò)網(wǎng)絡(luò)傳送以前可以對(duì)數(shù)據(jù)進(jìn)行加密/壓縮等算法操作,保證數(shù)據(jù)傳遞的安全和高效,在接收到數(shù)據(jù)時(shí)可以對(duì)數(shù)據(jù)進(jìn)行解密/解壓縮,進(jìn)行數(shù)據(jù)還原。
      提供下面四個(gè)全局函數(shù) void Compress(unsigned char*indata,size_t inlen, unsigned char*&outdata,size_t&outlen); 函數(shù)功能將給定的長(zhǎng)度的數(shù)據(jù)進(jìn)行壓縮后返回壓縮后的數(shù)據(jù)和長(zhǎng)度; Indata輸入緩存區(qū),指向要壓縮的數(shù)據(jù)開始地址; inlen需要壓縮的數(shù)據(jù)的長(zhǎng)度(字節(jié)數(shù)); outdata經(jīng)過(guò)壓縮后返回的數(shù)據(jù)的緩沖區(qū)開始地址; outlen壓縮后數(shù)據(jù)的長(zhǎng)度; void Uncompress(unsigned char*indata,size_t inlen,unsigned char*&outdata,size_t&outlen); 函數(shù)功能將給定長(zhǎng)度的壓縮數(shù)據(jù)進(jìn)行解壓縮后返回解壓縮后的數(shù)據(jù)和長(zhǎng)度; indata輸入緩存區(qū),指向要解壓縮的數(shù)據(jù)開始地址; inlen需要解壓縮的數(shù)據(jù)的長(zhǎng)度(字節(jié)數(shù)); outdata經(jīng)過(guò)解壓后返回的數(shù)據(jù)的緩沖區(qū)開始地址; outlen解壓縮后數(shù)據(jù)的長(zhǎng)度; void Encrypt(unsigned char*indata,size_t inlen, unsigned char*&outdata,size_t&outlen); 函數(shù)功能將給定長(zhǎng)度的數(shù)據(jù)進(jìn)行加密返回加密后的數(shù)據(jù)和長(zhǎng)度; indata輸入緩存區(qū),指向要解加密的數(shù)據(jù)開始地址; inlen需要加密的數(shù)據(jù)的長(zhǎng)度(字節(jié)數(shù)); outdata經(jīng)過(guò)加密后返回的數(shù)據(jù)的緩沖區(qū)開始地址; outlen加密后數(shù)據(jù)的長(zhǎng)度; void Unencrypt(unsigned char*indata,size_t inlen,unsigned char*&outdata,size_t&outlen); 函數(shù)功能將給定長(zhǎng)度的加密的數(shù)據(jù)進(jìn)行解密后返回的解密后的數(shù)據(jù)和長(zhǎng)度; indata輸入緩存區(qū),指向要解密的數(shù)據(jù)開始地址; inlen需要解密的數(shù)據(jù)的長(zhǎng)度(字節(jié)數(shù)); outdata經(jīng)過(guò)解密后返回的數(shù)據(jù)的緩沖區(qū)開始地址; outlen解密后數(shù)據(jù)的長(zhǎng)度; 在要傳遞的數(shù)據(jù)對(duì)象經(jīng)過(guò)序列化,要發(fā)送出去的時(shí)候,此時(shí)已經(jīng)有了要發(fā)送的數(shù)據(jù)(indata)和長(zhǎng)度(inlen),我們就可以施加壓縮和加密算法得到數(shù)據(jù)(outdata)和長(zhǎng)度(outlen),然后將outdata和outlen發(fā)送出去,實(shí)施例代碼如下 ... //首先將indata壓縮到outdata1 Compress(indata,inlen,outdata1,outlen1); //再將outdata1加密到outdata Encrypt(outdata1,outlen1,outdata,outlen); //然后將outdata,outlen發(fā)送出去 ... 在接收側(cè)收到數(shù)據(jù)(outdata,outlen)以后,進(jìn)行數(shù)據(jù)還原(這里要求是壓縮和加密的逆過(guò)程),實(shí)施例代碼如下 ... //將接收到的數(shù)據(jù)outdata,長(zhǎng)度outlen,進(jìn)行解密輸出indata1和inlen1 Unencrypt(outdata,outlen,indata1,inlen1); //將解密后的數(shù)據(jù)indata1,長(zhǎng)度inlen1,進(jìn)行解壓縮輸出indata和inlen Uncompress(indata1,inlen1,indata,inlen); //此時(shí)數(shù)據(jù)indata就是數(shù)據(jù)對(duì)象經(jīng)過(guò)序列化后的數(shù)據(jù),inlen就是數(shù)//據(jù)長(zhǎng)度,就可以進(jìn)行反序列化操作了 ... 本發(fā)明技術(shù)方案的有益效果屏蔽了業(yè)務(wù)開發(fā)人員對(duì)中間件技術(shù)的技能要求,使得業(yè)務(wù)開發(fā)人員更專注業(yè)務(wù)的實(shí)現(xiàn);提高了開發(fā)速度降低了開發(fā)難度;統(tǒng)一了不同中間件的接口,使得應(yīng)用可以簡(jiǎn)單地跨中間件平臺(tái),而不需要業(yè)務(wù)代碼的更改,提高了應(yīng)用系統(tǒng)的部署靈活性;提供了統(tǒng)一的數(shù)據(jù)傳遞機(jī)制,為跨中間件平臺(tái)提供了更進(jìn)一步的保障,提高了系統(tǒng)的適應(yīng)性。
      雖然通過(guò)參照本發(fā)明的優(yōu)選實(shí)施例,已經(jīng)對(duì)本發(fā)明進(jìn)行了圖示和描述,但本領(lǐng)域的普通技術(shù)人員應(yīng)該明白,可以在形式上和細(xì)節(jié)上對(duì)其作各種各樣的改變,而不偏離所附權(quán)利要求書所限定的本發(fā)明的精神和范圍。
      權(quán)利要求
      1.一種聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其特征在于,包括步驟建立業(yè)務(wù)處理類基類,用業(yè)務(wù)處理類基類中的數(shù)據(jù)成員和成員函數(shù)的參數(shù)表征中間件處理的數(shù)據(jù)類型,業(yè)務(wù)處理類基類中的成員函數(shù)調(diào)用中間件的應(yīng)用程序接口,實(shí)現(xiàn)聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的數(shù)據(jù)處理功能。
      2.根據(jù)權(quán)利要求1所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其特征在于建立業(yè)務(wù)實(shí)體類基類,由業(yè)務(wù)實(shí)體類基類中的不同成員函數(shù)對(duì)對(duì)象進(jìn)行序列化和反序列化。
      3.根據(jù)權(quán)利要求2所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其特征在于建立一個(gè)根基類,由根基類派生業(yè)務(wù)處理類基類和業(yè)務(wù)實(shí)體類基類。
      4.根據(jù)權(quán)利要求3所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其特征在于業(yè)務(wù)處理類基類派生至少一個(gè)業(yè)務(wù)處理類,由業(yè)務(wù)處理類中的成員函數(shù)對(duì)聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的功能進(jìn)行封裝。
      5.根據(jù)權(quán)利要求4所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其特征在于業(yè)務(wù)實(shí)體類基類派生至少一個(gè)業(yè)務(wù)實(shí)體類,由業(yè)務(wù)實(shí)體類中的成員函數(shù)對(duì)對(duì)象進(jìn)行序列化和反序列化。
      6.根據(jù)權(quán)利要求5所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其特征在于在業(yè)務(wù)處理類基類中定義對(duì)聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的功能進(jìn)行封裝的純虛函數(shù),由業(yè)務(wù)處理類中的成員函數(shù)對(duì)聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的功能進(jìn)行封裝。
      7.根據(jù)權(quán)利要求6所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其特征在于在業(yè)務(wù)實(shí)體類基類中定義對(duì)對(duì)象進(jìn)行序列化和反序列化的純虛函數(shù),由業(yè)務(wù)實(shí)體類中的成員函數(shù)對(duì)對(duì)象進(jìn)行序列化和反序列化。
      8.根據(jù)權(quán)利要求7所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其特征在于建立一個(gè)對(duì)象序列化類,業(yè)務(wù)實(shí)體類基類或者業(yè)務(wù)實(shí)體類調(diào)用對(duì)象序列化類的成員函數(shù)對(duì)對(duì)象進(jìn)行序列化和反序列化。
      9.根據(jù)權(quán)利要求8所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其特征在于,構(gòu)造宏來(lái)動(dòng)態(tài)創(chuàng)建類和相應(yīng)的類對(duì)象第一宏將類名和創(chuàng)建類對(duì)象的方法聲明到類中;第二宏實(shí)現(xiàn)類聲明中的方法,并將類名和類對(duì)象的創(chuàng)建方法注冊(cè)到類工廠中;第三宏根據(jù)類名從類工廠中獲得類的對(duì)象創(chuàng)建方法,并返回一個(gè)類對(duì)象。
      10.根據(jù)權(quán)利要求9所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其特征在于定義和構(gòu)造一對(duì)全局函數(shù),用于數(shù)據(jù)傳輸時(shí)的數(shù)據(jù)壓縮和數(shù)據(jù)解壓縮。
      11.根據(jù)權(quán)利要求1至10任一所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其特征在于定義和構(gòu)造一對(duì)全局函數(shù),用于數(shù)據(jù)傳輸時(shí)的數(shù)據(jù)加密和數(shù)據(jù)解密。
      12.根據(jù)權(quán)利要求11所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其特征在于定義和構(gòu)造一個(gè)全局函數(shù),用于客戶機(jī)到服務(wù)器的大數(shù)據(jù)量上傳。
      13.根據(jù)權(quán)利要求12所述的聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,其特征在于定義和構(gòu)造一個(gè)全局函數(shù),用于服務(wù)器到客戶機(jī)的大數(shù)據(jù)量下載。
      全文摘要
      本發(fā)明公開了一種聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的封裝方法,包括步驟建立業(yè)務(wù)處理類基類,用業(yè)務(wù)處理類基類中的數(shù)據(jù)成員和成員函數(shù)的參數(shù)表征中間件處理的數(shù)據(jù)類型,業(yè)務(wù)處理類基類中的成員函數(shù)調(diào)用中間件的應(yīng)用程序接口,實(shí)現(xiàn)聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的數(shù)據(jù)處理功能;建立業(yè)務(wù)實(shí)體類基類,由業(yè)務(wù)實(shí)體類基類中的不同成員函數(shù)對(duì)對(duì)象進(jìn)行序列化和反序列化;建立一個(gè)根基類,由根基類派生業(yè)務(wù)處理類基類和業(yè)務(wù)實(shí)體類基類;業(yè)務(wù)處理類基類派生至少一個(gè)業(yè)務(wù)處理類,由業(yè)務(wù)處理類中的成員函數(shù)對(duì)聯(lián)機(jī)事務(wù)處理系統(tǒng)中間件的功能進(jìn)行封裝;業(yè)務(wù)實(shí)體類基類派生至少一個(gè)業(yè)務(wù)實(shí)體類,由業(yè)務(wù)實(shí)體類中的成員函數(shù)對(duì)對(duì)象進(jìn)行序列化和反序列化。
      文檔編號(hào)G06F17/30GK101122852SQ20061006204
      公開日2008年2月13日 申請(qǐng)日期2006年8月8日 優(yōu)先權(quán)日2006年8月8日
      發(fā)明者姜琰祥 申請(qǐng)人:華為技術(shù)有限公司
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1