專利名稱::一種智能客戶端程序調(diào)用webservice實(shí)現(xiàn)數(shù)據(jù)庫事務(wù)持續(xù)化的方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種計(jì)算機(jī)應(yīng)用
技術(shù)領(lǐng)域:
,具體地說是一種智能客戶端程序調(diào)用webservice實(shí)現(xiàn)數(shù)據(jù)庫事務(wù)持續(xù)化的方法。
背景技術(shù):
:在傳統(tǒng)的使用webservice開發(fā)分布式應(yīng)用體系中,數(shù)據(jù)庫的事務(wù)控制一般是通過單事務(wù)控制的,每次客戶端交互都要求數(shù)據(jù)庫提交事務(wù)或者回滾事務(wù),甚至每次交互需要重新連接數(shù)據(jù)庫。在這種背景下,對(duì)開發(fā)人員限制比較多,導(dǎo)致某些情況下對(duì)業(yè)務(wù)邏輯處理和代碼編寫困難。比如,在Webservice中要求每個(gè)客戶端在自己獨(dú)立的事務(wù)之內(nèi)查看內(nèi)容,這在以前開發(fā)體系中較難實(shí)現(xiàn)。其次,一般C/S架構(gòu)應(yīng)用程序的數(shù)據(jù)庫訪問是持續(xù)的,如果需要C\S架構(gòu)應(yīng)用程序轉(zhuǎn)換到支持web模式的智能客戶端應(yīng)用程序,可以通過本專利避免了框架重構(gòu)、代碼重寫繁復(fù)過程。
發(fā)明內(nèi)容本發(fā)明的目的是提供一種智能客戶端程序調(diào)用webservice實(shí)現(xiàn)數(shù)據(jù)庫事務(wù)持續(xù)化的方法。本發(fā)明的目的是按以下方式實(shí)現(xiàn)的,內(nèi)容包括:Cl)智能客戶端應(yīng)用,通過webservice實(shí)現(xiàn)的分布式應(yīng)用中,每個(gè)客戶端注冊(cè)自己的有狀態(tài)數(shù)據(jù)庫連接,每個(gè)應(yīng)用客戶端通過呼叫應(yīng)用程序服務(wù)器,在應(yīng)用程序服務(wù)器上創(chuàng)建能夠?qū)崿F(xiàn)數(shù)據(jù)庫事務(wù)持久化的對(duì)象,每個(gè)客戶端和存在于應(yīng)用程序服務(wù)器上的持久化數(shù)據(jù)庫事務(wù)連接通過唯一標(biāo)識(shí)號(hào)關(guān)聯(lián);(2)通過有狀態(tài)數(shù)據(jù)庫連接搭建的分布式應(yīng)用中,客戶端能控制自己特有的數(shù)據(jù)庫事務(wù)狀態(tài),客戶端通過webservice發(fā)送消息,控制應(yīng)用程序服務(wù)器上面對(duì)應(yīng)的數(shù)據(jù)庫連接狀態(tài);具體步驟如下:(1)將數(shù)據(jù)庫開發(fā)工具PB的事務(wù)對(duì)象封裝;(2)將數(shù)據(jù)庫開發(fā)工具PB的事務(wù)對(duì)象封裝好后的代碼形成庫文件;(3)通過.net發(fā)布webservice方法用以調(diào)用數(shù)據(jù)庫開發(fā)工具PB實(shí)現(xiàn)的庫文件內(nèi)的方法;(4)被封裝的數(shù)據(jù)庫開發(fā)工具PB的事務(wù)對(duì)象保存在session中;(5)客戶端通過調(diào)用.net發(fā)布的webservice方法遠(yuǎn)程間接調(diào)用數(shù)據(jù)庫開發(fā)工具PB開發(fā)的庫文件。數(shù)據(jù)庫開發(fā)工具PB的事務(wù)對(duì)象封裝步驟如下:(I)分析事務(wù)屬性和動(dòng)作進(jìn)行封裝,根據(jù)不同的數(shù)據(jù)庫類型連接方式不同,封裝連接方式和屬性;(2)對(duì)數(shù)據(jù)庫開發(fā)工具PB的數(shù)據(jù)窗口的數(shù)據(jù)庫交互進(jìn)行封裝,包括增刪改查;封裝好后的代碼形成庫文件是把封裝后的代碼通過數(shù)據(jù)庫開發(fā)工具PB的.netAssemby工程,生成.net的庫文件。通過.net發(fā)布webservice方法用以調(diào)用數(shù)據(jù)庫開發(fā)工具PB實(shí)現(xiàn)的庫文件內(nèi)的方法,是在.net環(huán)境下面編寫webservice方法,掛接數(shù)據(jù)庫開發(fā)工具PB生成的庫文件,webservice方法通過庫文件里面的提供的對(duì)象處理事務(wù)和數(shù)據(jù)窗口。被封裝的事務(wù)對(duì)象保存在session中內(nèi)容包括:(1)用戶每成功注冊(cè)一個(gè)事務(wù),在服務(wù)器端創(chuàng)建新的事務(wù)封裝對(duì)象,并保存在session中;(2)此客戶端用戶以后每次事務(wù)處理和數(shù)據(jù)窗口處理,都通過存于session中的對(duì)象處理;(3)事務(wù)的超時(shí)、客戶端網(wǎng)絡(luò)異常、會(huì)話斷開都通過session處理。客戶端通過調(diào)用.net發(fā)布的webservice方法遠(yuǎn)程間接調(diào)用數(shù)據(jù)庫開發(fā)工具PB開發(fā)的庫文件,包括:Cl)數(shù)據(jù)庫開發(fā)工具PB開發(fā)客戶端建立webservice代理對(duì)象;(2)代理對(duì)象通過訪問webservice發(fā)布的方法,即可間接調(diào)用發(fā)布為遠(yuǎn)程應(yīng)用的數(shù)據(jù)庫開發(fā)工具PB邏輯代碼。具有的功能和有益效果`通過一種webservice有狀態(tài)數(shù)據(jù)庫事務(wù)連接的方法,為分布式應(yīng)用使用有狀態(tài)事務(wù)提供了一種解決方案,在傳統(tǒng)的使用PB開發(fā)的CS應(yīng)用模式框架通過此種方法方便的轉(zhuǎn)換為BS模式,從而避免了架構(gòu)重置,代碼重寫等繁復(fù)工作。圖1為系統(tǒng)結(jié)構(gòu)示意圖2為系統(tǒng)流程圖。具體實(shí)施例方式參照說明書附圖對(duì)本發(fā)明的方法作以下詳細(xì)地說明。本發(fā)明的技術(shù)任務(wù)是針對(duì)上述現(xiàn)有技術(shù)的不足,提供一種實(shí)現(xiàn)webservice有狀態(tài)的事務(wù)控制組件及實(shí)現(xiàn)方法。利用該方法開發(fā)人員在客戶端就可以注冊(cè)事務(wù)到服務(wù)器端,成功之后服務(wù)端返回事務(wù)唯一標(biāo)識(shí)號(hào),客戶端通過此唯一標(biāo)識(shí)號(hào)控制遠(yuǎn)程服務(wù)器端的事務(wù)。參照說明書圖2對(duì)本發(fā)明實(shí)現(xiàn)方法作以下詳細(xì)地說明,特點(diǎn)是:1、封裝事務(wù)對(duì)象,提供客戶端注冊(cè)事務(wù)對(duì)象,具有統(tǒng)一的屬性和方法:(1)使用所述事務(wù)對(duì)象連接數(shù)據(jù)庫;(2)事務(wù)對(duì)象負(fù)責(zé)回滾提交客戶端事務(wù);(3)設(shè)置數(shù)據(jù)庫連接信息;2、實(shí)現(xiàn)統(tǒng)一的數(shù)據(jù)庫SQL執(zhí)行對(duì)象,此對(duì)象通過事務(wù)對(duì)象執(zhí)行SQL命令:(I)SQL執(zhí)行對(duì)象通過事務(wù)對(duì)象執(zhí)行SQL;(2)SQL執(zhí)行對(duì)象可獲取數(shù)據(jù)庫信息,執(zhí)行指定的SQL語法;3、實(shí)現(xiàn)統(tǒng)一的數(shù)據(jù)窗口對(duì)象,客戶端用此對(duì)象可以通過TO的數(shù)據(jù)窗口跟數(shù)據(jù)庫交互:(1)數(shù)據(jù)窗口對(duì)象跟數(shù)據(jù)庫交互通過事務(wù)對(duì)象;(2)可根據(jù)SQL語句形成數(shù)據(jù)庫語法;(3)根據(jù)傳入的數(shù)據(jù)窗口語法刷新數(shù)據(jù)并返回?cái)?shù)據(jù)窗口語法;(4)根據(jù)傳入的數(shù)據(jù)窗口語法更新數(shù)據(jù)。實(shí)施例如附圖2所示,實(shí)現(xiàn)過程如下:1.通過數(shù)據(jù)庫開發(fā)工具TO建立類庫文件,客戶端事務(wù)通過此類庫注冊(cè)注銷和操作事務(wù);(I)根據(jù)不同功能模塊創(chuàng)建不同對(duì)象,目前包括執(zhí)行SQL對(duì)象,操作數(shù)據(jù)窗口對(duì)象等;1)操作數(shù)據(jù)窗口函數(shù)如下:publicfunctionblobof—oprtdw—getdatablob_argstring(stringtransid,blobfullstate,stringargs口,refstringerrmsg)publicfunctionblobof_oprtdw_getdatabystate(stringtransid,blobfullstate,refstringerrmsg)publicfunctionstringof_oprtdw_getdatatext_argstring(stringtransid,blobfullstate,stringargs口,refstringerrmsg)publicfunctionblobof—oprtdw—retrieveds(stringtransid,blobfullstate,refstringerrmsg)publicfunctionblobof_oprtdw_selecttodsblob(stringtransid,stringsqlsyn,refstringerrmsg)publicfunctionstringof_oprtdw_syntaxfromsql(stringtransid,stringsqlsyn,stringdwstyle,refstringerrmsg)publicfunctionblobof—optrdw—retrievedsarg—string(stringtransid,blobfullstate,stringargs口,refstringerrmsg)publicfunctionstringof—oprtdw—getdwdata(stringtransid,blobfullstate,refstringerrmsg)publicfunctionstringof—oprtdw—selecttodsdata(stringtransid,stringsqlsyn,refstringerrmsg)publicfunctionstringof_oprtdw_savebystate(stringtransid,bytefullstate口,booleanifcommit,booleanfailedrollback)2)執(zhí)行SQL的函數(shù)如下publicfunctionlongof_exec_createtab(stringtransid,stringtabname,stringtabsql,booleanifcommit,refstringerrmsg)publicfunctionlongof—exec—createtab—withindex(stringtransid,stringtabname,stringtabsql,stringtabindex口,refstringerrmsg)publicfunctionlongof_exec_sql(stringtransid,stringsqlsyn,booleanifcommit,reflongsqlnrows,refstringerrmsg)publicfunctionblobof_exec_getglobalvariables(stringtransid,refstringerrmsg)publicfunctionblobof_exec_getselectblob(stringtransid,stringsqlselect,refstringerrmsg)publicfunctionstringof_exec_getselectvalues(stringtransid,stringsqlselect,refstringsqlresults[],refstringsqlcoltypes[],refstringstrsplite)publicfunctionstringof_exec_getselectvalues(stringtransid,stringsqlsyn,refstringsqlresults[])publicfunctionstringof_exec_getselectvalues(stringtransid,stringsqlsyn,refstringsqlresults口,refstringstrsplite)publicfunctionstringof_exec_getselectvalues_array(stringtransid,stringsqlselect,refstringsqlresults口,refstringsqlcoltype口,refstringstrsplite)publicfunctionstringof_exec_getselectvalues_cursor(stringtransid,stringsqlselect,refstringsqlresults口,refstringcoltypes口,refstringstrsplite)publicfunctionstringof_exec_getselectvalues_cursor(stringtransid,stringsqlsyn,refstringsqlresults口,refstringstrsplite)publicfunctionlongof_exec_procdure(stringtransid,stringstrproc,stringstrparms[],stringstrparmtypes[],booleanifusecurtrans,refstringerrmsg)privatefunctiontransactionof—p_trans_clone()publicfunctionlongof—exec_sql—array(stringtransid,stringsqlarrays[],booleanifcommit,reflongsqlnrows口,refstringerrmsg)publicfunctionlongof—exec—updateblob(stringtransid,stringtablename,stringcolname,stringupdatewhere,blobcolvalue,refstringerrmsg)3)事務(wù)控制函數(shù)如下publicfunctionstringof_trans_closetrans(stringtransid)publicfunctionlongof_trans_commitetrans(stringtransid,refstringerrmsg)publicfunctionstringof_trans_getconnstring_net(stringtransid,stringpsdbtype,refstringerrmsg)privatefunctionstringof_p_trans_getconnstring_net_syb()privatefunctionstringof_p_trans_getconnstring_net_ora()privatefunctionstringof—p_trans_getconnstring—net—mss()權(quán)利要求1.一種智能客戶端程序調(diào)用webservice實(shí)現(xiàn)數(shù)據(jù)庫事務(wù)持續(xù)化的方法,其特征在于內(nèi)容包括:Cl)智能客戶端應(yīng)用,通過webservice實(shí)現(xiàn)的分布式應(yīng)用中,每個(gè)客戶端注冊(cè)自己的有狀態(tài)數(shù)據(jù)庫連接,每個(gè)應(yīng)用客戶端通過呼叫應(yīng)用程序服務(wù)器,在應(yīng)用程序服務(wù)器上創(chuàng)建能夠?qū)崿F(xiàn)數(shù)據(jù)庫事務(wù)持久化的對(duì)象,每個(gè)客戶端和存在于應(yīng)用程序服務(wù)器上的持久化數(shù)據(jù)庫事務(wù)連接通過唯一標(biāo)識(shí)號(hào)關(guān)聯(lián);(2)通過有狀態(tài)數(shù)據(jù)庫連接搭建的分布式應(yīng)用中,客戶端能控制自己特有的數(shù)據(jù)庫事務(wù)狀態(tài),客戶端通過webservice發(fā)送消息,控制應(yīng)用程序服務(wù)器上面對(duì)應(yīng)的數(shù)據(jù)庫連接狀態(tài);具體步驟如下:(1)將數(shù)據(jù)庫開發(fā)工具PB的事務(wù)對(duì)象封裝;(2)將數(shù)據(jù)庫開發(fā)工具PB的事務(wù)對(duì)象封裝好后的代碼形成庫文件;(3)通過.net發(fā)布webservice方法用以調(diào)用數(shù)據(jù)庫開發(fā)工具PB實(shí)現(xiàn)的庫文件內(nèi)的方法;(4)被封裝的數(shù)據(jù)庫開發(fā)工具PB的事務(wù)對(duì)象保存在session中;(5)客戶端通過調(diào)用.net發(fā)布的webservice方法遠(yuǎn)程間接調(diào)用數(shù)據(jù)庫開發(fā)工具PB開發(fā)的庫文件。2.根據(jù)權(quán)利要求1所述的方法,其特征在于數(shù)據(jù)庫開發(fā)工具PB的事務(wù)對(duì)象封裝步驟如下:(1)分析事務(wù)屬性和動(dòng)作進(jìn)行封裝,根據(jù)不同的數(shù)據(jù)庫類型連接方式不同,封裝連接方式和屬性;(2)對(duì)數(shù)據(jù)庫開發(fā)工具PB的數(shù)據(jù)窗口的數(shù)據(jù)庫交互進(jìn)行封裝,包括增刪改查。3.根據(jù)權(quán)利要求1所述的方法,其特征在于,封裝好后的代碼形成庫文件是把封裝后的代碼通過數(shù)據(jù)庫開發(fā)工具PB的.netAssemby工程,生成.net的庫文件。4.根據(jù)權(quán)利要求1所述的方法,其特征在于,通過.net發(fā)布webservice方法用以調(diào)用數(shù)據(jù)庫開發(fā)工具PB實(shí)現(xiàn)的庫文件內(nèi)的方法,是在.net環(huán)境下面編寫webservice方法,掛接數(shù)據(jù)庫開發(fā)工具PB生成的庫文件,webservice方法通過庫文件里面的提供的對(duì)象處理事務(wù)和數(shù)據(jù)窗口。5.根據(jù)權(quán)利要求1所述的方法,其特征在于,被封裝的事務(wù)對(duì)象保存在session中內(nèi)容包括:(1)用戶每成功注冊(cè)一個(gè)事務(wù),在服務(wù)器端創(chuàng)建新的事務(wù)封裝對(duì)象,并保存在session中;(2)此客戶端用戶以后每次事務(wù)處理和數(shù)據(jù)窗口處理,都通過存于session中的對(duì)象處理;(3)事務(wù)的超時(shí)、客戶端網(wǎng)絡(luò)異常、會(huì)話斷開都通過session處理。6.根據(jù)權(quán)利要求1所述的方法,其特征在于,客戶端通過調(diào)用.net發(fā)布的webservice方法遠(yuǎn)程間接調(diào)用數(shù)據(jù)庫開發(fā)工具PB開發(fā)的庫文件,包括:Cl)數(shù)據(jù)庫開發(fā)工具PB開發(fā)客戶端建立webservice代理對(duì)象;(2)代理對(duì)象通過訪問webservice發(fā)布的方法,即可間接調(diào)用發(fā)布為遠(yuǎn)程應(yīng)用的數(shù)據(jù)庫開發(fā)工具PB邏輯代碼。全文摘要本發(fā)明提供一種智能客戶端程序調(diào)用webservice實(shí)現(xiàn)數(shù)據(jù)庫事務(wù)持續(xù)化的方法,內(nèi)容包括(1)智能客戶端應(yīng)用,通過webservice實(shí)現(xiàn)的分布式應(yīng)用中,每個(gè)客戶端注冊(cè)自己的有狀態(tài)數(shù)據(jù)庫連接,每個(gè)應(yīng)用客戶端通過呼叫應(yīng)用程序服務(wù)器,在應(yīng)用程序服務(wù)器上創(chuàng)建能夠?qū)崿F(xiàn)數(shù)據(jù)庫事務(wù)持久化的對(duì)象,每個(gè)客戶端和存在于應(yīng)用程序服務(wù)器上的持久化數(shù)據(jù)庫事務(wù)連接通過唯一標(biāo)識(shí)號(hào)關(guān)聯(lián);(2)通過有狀態(tài)數(shù)據(jù)庫連接搭建的分布式應(yīng)用中,客戶端能控制自己特有的數(shù)據(jù)庫事務(wù)狀態(tài),客戶端通過webservice發(fā)送消息,控制應(yīng)用程序服務(wù)器上面對(duì)應(yīng)的數(shù)據(jù)庫連接狀態(tài)。文檔編號(hào)G06F9/44GK103246517SQ201310189050公開日2013年8月14日申請(qǐng)日期2013年5月21日優(yōu)先權(quán)日2013年5月21日發(fā)明者王常林,任艷青,趙旭東申請(qǐng)人:浪潮集團(tuán)山東通用軟件有限公司