專利名稱:調(diào)用存儲(chǔ)過程和訪問存儲(chǔ)的過程數(shù)據(jù)的方法、系統(tǒng)以及程序的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及用于調(diào)用存儲(chǔ)過程和訪問存儲(chǔ)的過程數(shù)據(jù)的方法、系統(tǒng)以及程序。
背景技術(shù):
許多分布式應(yīng)用程序是利用Java程序結(jié)構(gòu)(Java是SunMiscrosystem,Inc的商標(biāo))編寫的,其中一個(gè)系統(tǒng)上的客戶機(jī)根據(jù)服務(wù)器應(yīng)用程序通過諸如因特網(wǎng)的網(wǎng)絡(luò)、局域網(wǎng)(LAN)等請求數(shù)據(jù)或操作。例如,國際商用機(jī)器公司(IBM)的WebSphere應(yīng)用服務(wù)器(IBM和WebSphere是國際商用機(jī)器公司的商標(biāo))實(shí)現(xiàn)開放型分布式環(huán)境,其中諸如不同操作系統(tǒng)或不同程序語言等的不同平臺(tái)上的各客戶機(jī)應(yīng)用程序可以與該服務(wù)器交互,或者互相交互(例如諸如企業(yè)JavaBeans的部件可以通過同一個(gè)服務(wù)器互相對(duì)話,或者在各服務(wù)器之間互相對(duì)話)。
分布式應(yīng)用程序的通用設(shè)計(jì)采用3個(gè)計(jì)算等級(jí)客戶機(jī),與用戶交互;應(yīng)用服務(wù)器,例如WebSphere應(yīng)用服務(wù)器,含有應(yīng)用的商用邏輯;以及資源管理器,用于存儲(chǔ)數(shù)據(jù)。在此模型中,客戶機(jī)不必知道關(guān)于實(shí)際資源管理器的任何信息,例如正被訪問的或?qū)ζ溥M(jìn)行修改的基礎(chǔ)數(shù)據(jù)庫。此外,該方法提高了安全性。只有服務(wù)器需要直接存取資源管理器控制的數(shù)據(jù),而客戶機(jī)不需要??蛻魴C(jī)可以包括Java小應(yīng)用程序、Visual Basic、C++以及在現(xiàn)有技術(shù)分布式應(yīng)用程序結(jié)構(gòu)中通常采用的其它客戶機(jī)程序?qū)崿F(xiàn)技術(shù)。
例如,客戶機(jī)可以提供用戶通過其可以輸入產(chǎn)品的訂單的表格??蛻魴C(jī)將此訂單信息發(fā)送到服務(wù)器,服務(wù)器檢驗(yàn)產(chǎn)品數(shù)據(jù)庫并執(zhí)行進(jìn)行記帳和發(fā)運(yùn)需要完成的任務(wù)。一個(gè)服務(wù)器通常被多個(gè)客戶機(jī)使用。例如,幾十個(gè)或幾百個(gè)客戶機(jī)可以與控制數(shù)據(jù)庫訪問的少量服務(wù)器交互。服務(wù)器管理對(duì)數(shù)據(jù)庫資源的訪問,并同步對(duì)數(shù)據(jù)庫資源的訪問,而且利用數(shù)據(jù)或者利用狀態(tài)信息響應(yīng)客戶機(jī)的請求。
電子商務(wù)應(yīng)用程序開發(fā)者遇到的一個(gè)問題是,諸如遺留數(shù)據(jù)庫存儲(chǔ)過程的許多健壯數(shù)據(jù)庫應(yīng)用程序是利用編程語言編寫的,并采用與通常使用的客戶機(jī)結(jié)構(gòu),例如Java客戶機(jī)、小應(yīng)用程序等不兼容的數(shù)據(jù)輸入和輸出參數(shù)格式。
因?yàn)榇嗽?,所以在本技術(shù)領(lǐng)域內(nèi)需要提供一種使利用通用編程語言,例如Java、C++、Visual Basic等編寫的客戶機(jī)應(yīng)用程序能夠存取數(shù)據(jù)庫存儲(chǔ)過程所采集的數(shù)據(jù)的接口。
發(fā)明內(nèi)容
因此,提供了一種使數(shù)據(jù)能夠被存取的方法、系統(tǒng)和程序。從客戶機(jī)接收調(diào)用以調(diào)用遠(yuǎn)程接口方法。響應(yīng)調(diào)用的遠(yuǎn)程接口方法,利用遠(yuǎn)程接口實(shí)現(xiàn)存取所接收的調(diào)用的參數(shù)。利用存取的參數(shù)作為存儲(chǔ)過程的輸入?yún)?shù),產(chǎn)生存儲(chǔ)過程調(diào)用。將存儲(chǔ)過程調(diào)用傳送到由要執(zhí)行的調(diào)用命名的存儲(chǔ)過程。接收存儲(chǔ)過程的輸出,并將該輸出插入返回客戶機(jī)的數(shù)據(jù)對(duì)象。
通過對(duì)數(shù)據(jù)庫內(nèi)的數(shù)據(jù)進(jìn)行操作,存儲(chǔ)過程最好對(duì)數(shù)據(jù)庫進(jìn)行處理并產(chǎn)生輸出。該輸出可以包括為一組輸出中的一個(gè)成員的輸出,該組輸出包括數(shù)據(jù)庫表內(nèi)的一個(gè)或多個(gè)結(jié)果數(shù)據(jù)集和通過對(duì)數(shù)據(jù)庫表內(nèi)的數(shù)據(jù)進(jìn)行存儲(chǔ)過程操作獲得的一個(gè)或多個(gè)輸出參數(shù)。
更進(jìn)一步產(chǎn)生用于描述包括在數(shù)據(jù)對(duì)象內(nèi)的存儲(chǔ)過程輸出的元數(shù)據(jù)。將該元數(shù)據(jù)附加到數(shù)據(jù)對(duì)象??蛻魴C(jī)可以對(duì)接收的數(shù)據(jù)對(duì)象內(nèi)的元數(shù)據(jù)進(jìn)行處理以確定如何存取數(shù)據(jù)對(duì)象的存儲(chǔ)過程輸出。
本發(fā)明還提供了一種使應(yīng)用程序可以利用存儲(chǔ)過程程序的方法。確定一個(gè)存儲(chǔ)過程程序,所述存儲(chǔ)過程程序產(chǎn)生一個(gè)應(yīng)用程序所需的輸出。產(chǎn)生遠(yuǎn)程接口實(shí)現(xiàn)以響應(yīng)遠(yuǎn)程接口方法,所述遠(yuǎn)程接口實(shí)現(xiàn)可以從包括數(shù)據(jù)的應(yīng)用程序接收調(diào)用,并利用應(yīng)用程序內(nèi)的數(shù)據(jù)用作輸入、調(diào)用數(shù)據(jù)庫服務(wù)器內(nèi)的存儲(chǔ)過程。以及對(duì)遠(yuǎn)程接口實(shí)現(xiàn)產(chǎn)生輸出映射,用以確定如何將存儲(chǔ)過程輸出插入可以被應(yīng)用程序使用的數(shù)據(jù)對(duì)象內(nèi)。
所說明的實(shí)現(xiàn)提供了一種使客戶機(jī)應(yīng)用程序能夠存取和調(diào)用存儲(chǔ)過程程序并以與客戶機(jī)應(yīng)用程序兼容的格式使數(shù)據(jù)返回客戶機(jī)應(yīng)用程序。
現(xiàn)在,將參考附圖所示、僅作為例子的本發(fā)明的優(yōu)選實(shí)施例說明本發(fā)明,附圖包括圖1示出實(shí)現(xiàn)本發(fā)明各方面的計(jì)算環(huán)境;圖2示出根據(jù)本發(fā)明描述的實(shí)現(xiàn)遠(yuǎn)程接口實(shí)現(xiàn)、為了對(duì)訪問存儲(chǔ)過程進(jìn)行管理所采用的數(shù)據(jù)結(jié)構(gòu);圖3示出遠(yuǎn)程接口實(shí)現(xiàn)為了調(diào)用存儲(chǔ)過程所執(zhí)行的邏輯;以及圖4示出根據(jù)本發(fā)明描述的實(shí)現(xiàn)遠(yuǎn)程接口實(shí)現(xiàn)、對(duì)存儲(chǔ)過程輸出進(jìn)行處理所執(zhí)行的邏輯。
發(fā)明詳述在以下的說明中,將參考作為本發(fā)明一部分、示出本發(fā)明的幾個(gè)實(shí)施例的附圖。應(yīng)當(dāng)理解還可以采用其它實(shí)施例,而且在本發(fā)明范圍內(nèi),可以進(jìn)行其結(jié)構(gòu)和運(yùn)行的變化。
圖1示出實(shí)現(xiàn)本發(fā)明各方面的網(wǎng)絡(luò)計(jì)算環(huán)境2。網(wǎng)絡(luò)環(huán)境2包括客戶機(jī)系統(tǒng)4,包括客戶機(jī)應(yīng)用程序6和遠(yuǎn)程接口8;應(yīng)用服務(wù)器10,包括遠(yuǎn)程接口實(shí)現(xiàn)(implementation)12和數(shù)據(jù)庫客戶機(jī)程序14;以及數(shù)據(jù)庫服務(wù)器16,包括諸如數(shù)據(jù)庫管理系統(tǒng)(DBMS)程序的數(shù)據(jù)庫程序18和數(shù)據(jù)庫22??蛻魴C(jī)系統(tǒng)4、應(yīng)用服務(wù)器10以及數(shù)據(jù)庫服務(wù)器16可以包括一個(gè)或多個(gè)服務(wù)器或本技術(shù)領(lǐng)域內(nèi)眾所周知的任何其它計(jì)算機(jī)設(shè)備。作為一種選擇,應(yīng)用服務(wù)器10可以包括在客戶機(jī)系統(tǒng)4或不同系統(tǒng)上執(zhí)行的中間件。
客戶機(jī)系統(tǒng)4、應(yīng)用服務(wù)器10以及數(shù)據(jù)庫服務(wù)器16通過網(wǎng)絡(luò)20進(jìn)行通信,網(wǎng)絡(luò)20可以包括本技術(shù)領(lǐng)域內(nèi)內(nèi)眾所周知的任何網(wǎng)絡(luò),包括傳輸控制協(xié)議/網(wǎng)際協(xié)議(TCP/IP)網(wǎng)絡(luò)(例如內(nèi)部網(wǎng)絡(luò)、因特網(wǎng))、局域網(wǎng)、廣域網(wǎng)、光纖信道、令牌環(huán)等。作為一種選擇,網(wǎng)絡(luò)20可以包括多個(gè)網(wǎng)絡(luò)。作為一種選擇,可以在同一個(gè)機(jī)器上或單獨(dú)機(jī)器的任何組合上實(shí)現(xiàn)數(shù)據(jù)庫程序18、數(shù)據(jù)庫22、遠(yuǎn)程接口實(shí)現(xiàn)12以及客戶機(jī)應(yīng)用程序6,從而避免了在程序6、10以及16的某兩個(gè)之間需要網(wǎng)絡(luò)通信協(xié)議。
數(shù)據(jù)庫客戶機(jī)/服務(wù)器程序14、18可以包括本技術(shù)領(lǐng)域內(nèi)眾所周知的數(shù)據(jù)庫客戶機(jī)/服務(wù)器程序,例如IBM公司的DB2、OracleCorporation的ORACLE、微軟公司的SQL服務(wù)器等。(DB2是國際商用機(jī)器公司的商標(biāo)。)數(shù)據(jù)庫程序14和18用于根據(jù)保持在一個(gè)或多個(gè)數(shù)據(jù)庫22內(nèi)的信息存取和執(zhí)行操作。數(shù)據(jù)庫22可以包括一個(gè)或多個(gè)具有數(shù)據(jù)行和數(shù)據(jù)列的表24。IBM公司的出版物“AdministrationGuide,version 7(Volumes 1,2,and 3)”、第SC09-2946-00號(hào)、第SC09-2944-00號(hào)第SC09-2945-00號(hào)IBM文件(IBM公司2000年版權(quán))以及Don Chamberlin編寫的“A Complete Guide to DB2Universal Database”(Morgan/kaufman,1998)對(duì)數(shù)據(jù)庫程序的結(jié)構(gòu)和運(yùn)行進(jìn)行了詳細(xì)說明,在此引用這些出版物的全部內(nèi)容供參考。
在圖1所示的上述實(shí)現(xiàn)中,數(shù)據(jù)庫程序18包括存儲(chǔ)過程28,存儲(chǔ)過程28是數(shù)據(jù)庫客戶機(jī)14內(nèi)的調(diào)用或調(diào)用機(jī)(mechanism)30調(diào)用的程序。存儲(chǔ)過程調(diào)用30將輸入?yún)?shù)送到存儲(chǔ)過程28。響應(yīng)調(diào)用30,在數(shù)據(jù)庫服務(wù)器16內(nèi)執(zhí)行存儲(chǔ)過程28,而且可以執(zhí)行結(jié)構(gòu)查詢語言(SQL)語句以根據(jù)輸入?yún)?shù)處理數(shù)據(jù)庫22的記錄或者執(zhí)行與SQL不相關(guān)的操作。存儲(chǔ)過程28可以包括過程構(gòu)造模塊,而且還可以包括SQL語句,即應(yīng)用程序。此外,存儲(chǔ)過程28可以執(zhí)行程序語句,而無需查詢數(shù)據(jù)庫表22。在這種情況下,存儲(chǔ)過程28可以包括獨(dú)立于數(shù)據(jù)庫22執(zhí)行并產(chǎn)生輸出的程序??梢岳么鎯?chǔ)數(shù)據(jù)庫調(diào)用30內(nèi)的名稱調(diào)用存儲(chǔ)過程28。存儲(chǔ)過程特別用于處理大量數(shù)據(jù)庫記錄,例如幾百萬至幾十億個(gè)記錄,而無需在數(shù)據(jù)庫服務(wù)器16與數(shù)據(jù)庫客戶機(jī)14之間傳送數(shù)據(jù)和提供必要輸入?yún)?shù)。存儲(chǔ)過程被保持在數(shù)據(jù)庫服務(wù)器16內(nèi)供多個(gè)數(shù)據(jù)庫客戶機(jī)14訪問和重新使用。關(guān)于存儲(chǔ)過程的進(jìn)一步詳細(xì)說明請參考出版物“A Complete Guide to DB2Universal Database”,在此引用此出版物供參考。
在某些實(shí)現(xiàn)中,可以利用本技術(shù)領(lǐng)域內(nèi)眾所周知的諸如Java遠(yuǎn)程方法調(diào)用(RMI)、公共對(duì)象請求代理體系結(jié)構(gòu)(CORBA)、遠(yuǎn)程過程調(diào)用(RPC)、簡單對(duì)象訪問協(xié)議(SOAP)等的分布式計(jì)算協(xié)議實(shí)現(xiàn)遠(yuǎn)程接口8和遠(yuǎn)程接口實(shí)現(xiàn)12,從而允許遠(yuǎn)程接口實(shí)現(xiàn)12與遠(yuǎn)程接口8進(jìn)行通信。應(yīng)用服務(wù)器10還運(yùn)行對(duì)客戶機(jī)發(fā)出的請求進(jìn)行處理的程序,例如IBM WebSphere應(yīng)用服務(wù)器或超文本傳輸協(xié)議(HTTP)服務(wù)器。可以作為企業(yè)JavaBean實(shí)現(xiàn)遠(yuǎn)程接口實(shí)現(xiàn)12,企業(yè)JavaBean能夠處理各種客戶機(jī),例如萬維網(wǎng)瀏覽器、Java小應(yīng)用程序等發(fā)出的請求,并且能夠調(diào)用存儲(chǔ)過程28以采集客戶機(jī)應(yīng)用程序6請求的數(shù)據(jù)。因此,遠(yuǎn)程接口8和遠(yuǎn)程接口實(shí)現(xiàn)12包括通過網(wǎng)絡(luò)20進(jìn)行通信的分布式對(duì)象。
在利用企業(yè)JavaBean實(shí)現(xiàn)遠(yuǎn)程接口8和遠(yuǎn)程接口實(shí)現(xiàn)12的實(shí)現(xiàn)中,應(yīng)用服務(wù)器10提供安全性、并發(fā)控制、交易支持以及其它通用商務(wù)要求。利用RMI/IIOP協(xié)議,客戶機(jī)端Java應(yīng)用程序可以直接訪問企業(yè)JavaBean遠(yuǎn)程接口實(shí)現(xiàn)12,或者與在應(yīng)用服務(wù)器10上實(shí)現(xiàn)的HTTP服務(wù)器通信的萬維網(wǎng)客戶機(jī)可以間接訪問企業(yè)JavaBean遠(yuǎn)程接口實(shí)現(xiàn)12。此外,客戶機(jī)調(diào)用32可以進(jìn)一步調(diào)用Java小服務(wù)程序或Java服務(wù)器頁面(JSP),Java小服務(wù)程序或Java服務(wù)器頁面(JSP)反過來調(diào)用遠(yuǎn)程接口實(shí)現(xiàn)12。
遠(yuǎn)程接口實(shí)現(xiàn)12可以從客戶機(jī)應(yīng)用程序6接收請求或調(diào)用32,客戶機(jī)應(yīng)用程序6可以提供與請求有關(guān)的數(shù)據(jù)。然后,遠(yuǎn)程接口實(shí)現(xiàn)12將客戶機(jī)調(diào)用32內(nèi)的數(shù)據(jù)映射到存儲(chǔ)過程調(diào)用30的任意輸入?yún)?shù)。然后,遠(yuǎn)程接口實(shí)現(xiàn)12調(diào)用用于指定服務(wù)器存儲(chǔ)過程28的名稱的存儲(chǔ)過程調(diào)用30和包括在客戶機(jī)應(yīng)用程序6內(nèi)的任意輸入?yún)?shù)。為了產(chǎn)生存儲(chǔ)過程調(diào)用30,遠(yuǎn)程接口實(shí)現(xiàn)12必須包括任何要求的輸入,從而將客戶機(jī)調(diào)用32的任意內(nèi)容映射到存儲(chǔ)過程調(diào)用30的輸入?yún)?shù)。存儲(chǔ)過程28可以返回表24內(nèi)、滿足查詢的0個(gè)或多個(gè)結(jié)果數(shù)據(jù)集。查詢項(xiàng)目可以基于從客戶機(jī)調(diào)用32映射的輸入?yún)?shù)。此外,存儲(chǔ)過程28可以對(duì)數(shù)據(jù)庫表24內(nèi)的數(shù)據(jù)進(jìn)行計(jì)算和操作,或者執(zhí)行不訪問數(shù)據(jù)庫表24的其它操作,以產(chǎn)生一個(gè)或多個(gè)輸出參數(shù),例如滿足查詢條件的所有行的各數(shù)值的平均值。存儲(chǔ)過程28可以更進(jìn)一步對(duì)數(shù)據(jù)庫服務(wù)器14執(zhí)行各種操作,而無需將任何數(shù)據(jù)返回節(jié)點(diǎn),例如發(fā)送消息。遠(yuǎn)程接口實(shí)現(xiàn)12必須輸入代碼以將從存儲(chǔ)過程28返回的一個(gè)或多個(gè)結(jié)果數(shù)據(jù)集和/或輸出參數(shù)映射到通過遠(yuǎn)程接口8可以返回客戶機(jī)應(yīng)用程序6的數(shù)據(jù)結(jié)構(gòu)。
當(dāng)前軟件體系結(jié)構(gòu)面對(duì)的一個(gè)挑戰(zhàn)是,客戶機(jī)應(yīng)用程序6希望一個(gè)數(shù)據(jù)對(duì)象根據(jù)調(diào)用32返回。然而,存儲(chǔ)過程輸出可能包括一個(gè)或多個(gè)具有不同列格式的多行數(shù)據(jù)的結(jié)果數(shù)據(jù)集以及一個(gè)或多個(gè)輸出參數(shù)。為了適應(yīng)客戶機(jī)僅響應(yīng)調(diào)用32接收一個(gè)數(shù)據(jù)對(duì)象的限制,上述實(shí)現(xiàn)提供了一種將存儲(chǔ)過程輸出映射到與客戶機(jī)應(yīng)用程序兼容的格式的技術(shù)。
圖2示出保持在遠(yuǎn)程接口實(shí)現(xiàn)12內(nèi)的數(shù)據(jù)結(jié)構(gòu),在將調(diào)用30調(diào)用到存儲(chǔ)過程28時(shí),并且在將任何返回結(jié)果數(shù)據(jù)集和/或參數(shù)插入Java串行化對(duì)象34以返回客戶機(jī)遠(yuǎn)程接口8時(shí),使用該遠(yuǎn)程接口實(shí)現(xiàn)12。Java串行化過程是標(biāo)準(zhǔn)Java機(jī)制,為了使該對(duì)象寫入文件或通過網(wǎng)絡(luò)發(fā)送該對(duì)象,該Java機(jī)制創(chuàng)建獨(dú)立于Java對(duì)象狀態(tài)字節(jié)流的平臺(tái)。對(duì)于可串行化的分類,用戶必須實(shí)現(xiàn)iava.io.Serializable接口,而且分類字段必須或者是基元型(primitive type)的或者是可串行化的。作為一種選擇,如果該分類實(shí)現(xiàn)將非基元或非可串行化字段寫入字節(jié)流的方法,則對(duì)象是可串行化的。圖2進(jìn)一步示出從遠(yuǎn)程接口實(shí)現(xiàn)12接收的、包括參數(shù)以及對(duì)數(shù)據(jù)或其它信息的請求的客戶機(jī)遠(yuǎn)程接口調(diào)用32。遠(yuǎn)程接口實(shí)現(xiàn)12包括一個(gè)或多個(gè)輸入映射52,輸入映射52確定調(diào)用32的一個(gè)或多個(gè)數(shù)據(jù)參數(shù)54a、b...、n如何映射到被提供給存儲(chǔ)過程28的存儲(chǔ)過程調(diào)用32的輸入?yún)?shù)56a、b...、m。
遠(yuǎn)程接口實(shí)現(xiàn)12進(jìn)一步包括一個(gè)或多個(gè)輸出映射60,輸出映射60確定從存儲(chǔ)過程28返回的結(jié)果數(shù)據(jù)集62a...k和輸出參數(shù)64如何映射到Java可串行化對(duì)象34內(nèi)的元素66a...k和68。Java可串行化對(duì)象34包括元數(shù)據(jù)72,它提供關(guān)于附加在對(duì)象34內(nèi)的每個(gè)元素的信息。例如,元數(shù)據(jù)72可以指出哪個(gè)元素包括輸出參數(shù)以及對(duì)可串行化對(duì)象34內(nèi)的元素附加的每個(gè)輸出參數(shù)的數(shù)據(jù)類型和數(shù)據(jù)長度。元數(shù)據(jù)72可以進(jìn)一步提供關(guān)于返回結(jié)果數(shù)據(jù)集的信息,包括不同返回結(jié)果數(shù)據(jù)集的數(shù)量、各列的結(jié)構(gòu)和每個(gè)結(jié)果數(shù)據(jù)集內(nèi)的數(shù)據(jù)類型,以及行數(shù)量和這種結(jié)果數(shù)據(jù)集數(shù)據(jù)如何映射到Java可串行化對(duì)象34內(nèi)的元素66a...k。這樣,從存儲(chǔ)過程28返回的結(jié)果數(shù)據(jù)集和/或輸出參數(shù)可以映射到可以響應(yīng)調(diào)用32作為一個(gè)數(shù)據(jù)對(duì)象返回客戶機(jī)應(yīng)用程序6的Java可串行化對(duì)象34內(nèi)的各元素。本技術(shù)領(lǐng)域內(nèi)的技術(shù)人員明白可以利用各種類型的可串行化數(shù)據(jù)對(duì)象存儲(chǔ)存儲(chǔ)過程輸出,例如IBMData Access Beans(IBM Data Access Beans)可調(diào)用語句對(duì)象(com.ibm.db.CallableStatement)。
輸入映射52和輸出映射60可以包括確定客戶機(jī)調(diào)用32的內(nèi)容如何映射到存儲(chǔ)過程調(diào)用的輸入?yún)?shù)56a、b...、m以及從存儲(chǔ)過程28返回的返回結(jié)果數(shù)據(jù)集62a...k和輸出參數(shù)64如何映射到Java可串行化對(duì)象34內(nèi)的各元素的索引。
在某個(gè)實(shí)現(xiàn)中,存儲(chǔ)過程28不能將輸出返回遠(yuǎn)程接口實(shí)現(xiàn)12,但是可以執(zhí)行其它動(dòng)作,例如更新數(shù)據(jù)庫22、發(fā)送消息、調(diào)用其它應(yīng)用程序等。在這種情況下,調(diào)用存儲(chǔ)過程28的遠(yuǎn)程接口實(shí)現(xiàn)12將不包括輸出映射60。
應(yīng)用服務(wù)器10可以保持多個(gè)根據(jù)各不同客戶機(jī)調(diào)用調(diào)用的、包括不同輸入映射52和輸出映射60的遠(yuǎn)程接口實(shí)現(xiàn)12。
此外,遠(yuǎn)程接口實(shí)現(xiàn)12還可以保持如圖2所示的錯(cuò)誤映射80,用于將從存儲(chǔ)過程28返回的、通常屬于SQL錯(cuò)誤的存儲(chǔ)過程錯(cuò)誤82a...n映射到Java遠(yuǎn)程異常(exception)84a...n,例如利用Java.rmi.RemoteExceptions分類定義的異常。與存儲(chǔ)過程產(chǎn)生的SQL錯(cuò)誤碼相比,客戶機(jī)應(yīng)用程序6更可能理解和采用Java異常。此外,還要求此錯(cuò)誤映射支持行業(yè)標(biāo)準(zhǔn),例如企業(yè)JavaBean規(guī)范。
圖3示出為了根據(jù)客戶機(jī)調(diào)用32內(nèi)的參數(shù)產(chǎn)生存儲(chǔ)過程調(diào)用30,在遠(yuǎn)程接口實(shí)現(xiàn)12內(nèi)所執(zhí)行的邏輯。在方框100,控制過程以遠(yuǎn)程接口實(shí)現(xiàn)12從遠(yuǎn)程接口8接收調(diào)用32以調(diào)用遠(yuǎn)程接口實(shí)現(xiàn)1 2來存取存儲(chǔ)過程28開始。在方框102,調(diào)用遠(yuǎn)程接口實(shí)現(xiàn)12,并確定(在方框104)遠(yuǎn)程接口實(shí)現(xiàn)12的輸入映射52。根據(jù)輸入映射52,遠(yuǎn)程接口實(shí)現(xiàn)12存取(在方框106)客戶機(jī)調(diào)用32的參數(shù)或數(shù)據(jù)54a、b...n,這些參數(shù)或數(shù)據(jù)將映射到存儲(chǔ)過程調(diào)用30的一個(gè)或多個(gè)輸入?yún)?shù)56a、b...m。然后,根據(jù)存取的輸入映射52,將存取參數(shù)54a、b...n插入(在方框108)每個(gè)輸入?yún)?shù)56a、b...m內(nèi)。之后,遠(yuǎn)程接口實(shí)現(xiàn)1 2調(diào)用(在方框110)具有客戶機(jī)調(diào)用32的輸入?yún)?shù)的存儲(chǔ)過程調(diào)用30。
圖4示出為了根據(jù)調(diào)用30對(duì)存儲(chǔ)過程28產(chǎn)生的輸出進(jìn)行處理,在遠(yuǎn)程接口實(shí)現(xiàn)12內(nèi)所執(zhí)行的邏輯。收到(在方框200)存儲(chǔ)過程28產(chǎn)生的0個(gè)或多個(gè)行結(jié)果數(shù)據(jù)集和/或輸出參數(shù)后,遠(yuǎn)程接口實(shí)現(xiàn)12訪問(在方框202)遠(yuǎn)程接口實(shí)現(xiàn)12的輸出映射60,輸出映射60確定將結(jié)果數(shù)據(jù)集數(shù)據(jù)和/輸出參數(shù)映射到Java可串行化對(duì)象34以返回客戶機(jī)遠(yuǎn)程接口8,客戶機(jī)遠(yuǎn)程接口8反過來將該對(duì)象返回客戶機(jī)應(yīng)用程序6??梢怨潭A(yù)定輸出參數(shù)的數(shù)量和字段,例如計(jì)算值,因此可以改變返回的結(jié)果數(shù)據(jù)集的數(shù)量。在方框204至218,遠(yuǎn)程接口實(shí)現(xiàn)12對(duì)每個(gè)接收結(jié)果數(shù)據(jù)集i執(zhí)行步驟206至218。對(duì)于每個(gè)接收結(jié)果數(shù)據(jù)集i,遠(yuǎn)程接口實(shí)現(xiàn)12產(chǎn)生(在方框206)元數(shù)據(jù)72,元數(shù)據(jù)72定義結(jié)果數(shù)據(jù)集i的每個(gè)列(包括每列的數(shù)據(jù)類型和長度)以及結(jié)果數(shù)據(jù)集i內(nèi)的行數(shù)。對(duì)于結(jié)果數(shù)據(jù)集i內(nèi)的每行j(在方框208至216)以及對(duì)于行i上的每列k(在方框210至214),遠(yuǎn)程接口實(shí)現(xiàn)12將數(shù)據(jù)元素66a...k附加到Java可串行化對(duì)象34,并將結(jié)果數(shù)據(jù)集i內(nèi)k列、j行上的數(shù)據(jù)插入此附加元素內(nèi)。對(duì)結(jié)果數(shù)據(jù)集i內(nèi)的所有行上的所有列執(zhí)行此過程,直到將整個(gè)結(jié)果數(shù)據(jù)集i的數(shù)據(jù)總裝到Java可串行化對(duì)象34。然后,對(duì)從存儲(chǔ)過程28接收的輸出中的任何其它結(jié)果數(shù)據(jù)集i執(zhí)行(在方框218)此過程。
在方框220至226,對(duì)于每個(gè)返回輸出參數(shù)m,產(chǎn)生元數(shù)據(jù)并將該元數(shù)據(jù)附加到定義輸出參數(shù)m的類型和長度的元數(shù)據(jù)72(在方框222)。然后,將數(shù)據(jù)元素68附加到將輸出參數(shù)m的數(shù)據(jù)插入其內(nèi)的Java可串行化對(duì)象34。在產(chǎn)生Java可串行化對(duì)象34以包括描述存儲(chǔ)過程28輸出的結(jié)果數(shù)據(jù)集和/或輸出參數(shù)數(shù)據(jù)后,Java可串行化對(duì)象34作為單個(gè)數(shù)據(jù)對(duì)象通過遠(yuǎn)程接口8返回(在方框228)客戶機(jī)應(yīng)用程序6。
可以將客戶機(jī)應(yīng)用程序6編碼為通用客戶機(jī)用于處理Java可串行化對(duì)象,CallableStatement等,而無需假定知道關(guān)于CallableStatement的內(nèi)部結(jié)構(gòu)的任何先前知識(shí)。相反,客戶機(jī)應(yīng)用程序6可以根據(jù)包含在返回對(duì)象34內(nèi)的元數(shù)據(jù)72剖析該對(duì)象并利用諸如由過程返回的輸出參數(shù)和結(jié)果數(shù)據(jù)集的相關(guān)分量工作。
根據(jù)圖3和圖4所示的邏輯,遠(yuǎn)程接口實(shí)現(xiàn)12可以代表客戶機(jī)應(yīng)用程序6使用存儲(chǔ)過程28程序并將可以包括存儲(chǔ)過程28的所有輸出以及自描述元數(shù)據(jù)72的單個(gè)數(shù)據(jù)對(duì)象返回客戶機(jī)應(yīng)用程序6,存儲(chǔ)過程28的所有輸出可以包括多個(gè)數(shù)據(jù)點(diǎn)??梢詫?duì)客戶機(jī)應(yīng)用程序4進(jìn)行編碼以處理元數(shù)據(jù)72,從而確定Java可串行化對(duì)象34內(nèi)的輸出結(jié)果的結(jié)構(gòu)和格式進(jìn)而存取、使用其內(nèi)的數(shù)據(jù)。根據(jù)上述描述的實(shí)現(xiàn),即使存儲(chǔ)過程程序28產(chǎn)生其格式對(duì)于該應(yīng)用程序不可存取的輸出,遠(yuǎn)程接口實(shí)現(xiàn)12仍可以使客戶機(jī)應(yīng)用程序存取存儲(chǔ)過程程序28采集的數(shù)據(jù),該存儲(chǔ)過程程序28可以是遺留程序。例如,利用諸如企業(yè)JavaBean體系結(jié)構(gòu)的標(biāo)準(zhǔn)分布式計(jì)算體系結(jié)構(gòu),可以使企業(yè)JavaBean客戶機(jī)部件使用存儲(chǔ)過程的功能和輸出,而無需重寫存儲(chǔ)過程代碼。
以下是上述實(shí)現(xiàn)的一個(gè)應(yīng)用實(shí)例。在此例中,客戶機(jī)應(yīng)用程序6與面向金融的萬維網(wǎng)網(wǎng)站相連,這樣可以使用戶通過該網(wǎng)站進(jìn)行注冊、跟蹤其投資組合以及將評(píng)論登記到電子公告牌上。支持此萬維網(wǎng)網(wǎng)站的數(shù)據(jù)庫包括具有每個(gè)客戶機(jī)的客戶機(jī)信息、投資組合信息以及對(duì)公告牌登記的登記索引的表。數(shù)據(jù)庫22還含有用于提供注冊網(wǎng)站用戶的綜合概況的存儲(chǔ)過程28客戶機(jī)報(bào)告(CLIENTREPORT),包括其投資和它們在電子公告牌上所做的登記??蛻魴C(jī)報(bào)告包括客戶機(jī)名稱和電子郵件地址從而使銷售人員向用戶提供關(guān)于所提供的其它產(chǎn)品或服務(wù)的建議。
在此示例中相關(guān)的存儲(chǔ)過程28可以分別對(duì)3個(gè)單獨(dú)SQL語句進(jìn)行處理,從將返回客戶機(jī)應(yīng)用程序的輸出參數(shù)和結(jié)果數(shù)據(jù)集內(nèi)采集正確數(shù)據(jù)。在這種情況下,輸出參數(shù)包括萬維網(wǎng)網(wǎng)站客戶機(jī)的名稱和電子郵件地址,而且該結(jié)果數(shù)據(jù)集包括關(guān)于特定用戶的投資資產(chǎn)和公告牌登記內(nèi)容的信息。例如,使用萬維網(wǎng)瀏覽器(未示出)的用戶可以提交HTTP請求,該HTTP請求包括用戶ID和關(guān)于用戶投資組合信息的請求。可以將HTTP請求送到客戶機(jī)應(yīng)用程序6,客戶機(jī)應(yīng)用程序6可以反過來調(diào)用遠(yuǎn)程接口。然后,遠(yuǎn)程接口可以將用戶ID和關(guān)于投資組合信息的請求送到遠(yuǎn)程接口實(shí)現(xiàn)12,遠(yuǎn)程接口實(shí)現(xiàn)12可以產(chǎn)生存儲(chǔ)過程調(diào)用30,輸入存儲(chǔ)過程調(diào)用30以使存儲(chǔ)過程28獲得利用所提供用戶ID識(shí)別的用戶的投資組合信息。然后,將所有這3個(gè)表中的存儲(chǔ)過程28輸出封裝到諸如“com.ibm.db.CallableStatement”的Java可串行化對(duì)象34內(nèi)或其它數(shù)據(jù)對(duì)象內(nèi)以返回到客戶機(jī)應(yīng)用程序6。此后,客戶機(jī)應(yīng)用程序6對(duì)該信息進(jìn)行去封裝和分析,然后,將它插入可以在發(fā)出關(guān)于投資組合信息的HTTP請求的用戶的萬維網(wǎng)瀏覽器中呈現(xiàn)的頁面內(nèi)。
存儲(chǔ)過程可以用于大量其它電子商務(wù)應(yīng)用中,例如查詢數(shù)據(jù)庫并采集根據(jù)其計(jì)算運(yùn)費(fèi)、復(fù)查貨物清單、處理裝載的貨物、返回趨勢分析等的記錄。這樣,將處理負(fù)擔(dān)從客戶機(jī)或應(yīng)用服務(wù)器轉(zhuǎn)移到了數(shù)據(jù)庫服務(wù)器。
利用上述實(shí)現(xiàn),可以降低電子商務(wù)以及其它應(yīng)用程序的開發(fā)成本和維護(hù)成本,因?yàn)檫@些應(yīng)用程序采用先前存在的遺留存儲(chǔ)過程,而無需重寫存儲(chǔ)過程代碼。在開發(fā)利用其實(shí)現(xiàn)遺留存儲(chǔ)過程執(zhí)行的操作的應(yīng)用程序時(shí),不習(xí)慣SQL和數(shù)據(jù)庫環(huán)境的應(yīng)用程序開發(fā)者可能存在困難。利用上述實(shí)現(xiàn),應(yīng)用程序開發(fā)者不需要知道關(guān)于SQL的廣博的知識(shí)以及數(shù)據(jù)庫的結(jié)構(gòu)和排列。相反,應(yīng)用程序開發(fā)者僅需要?jiǎng)?chuàng)建使客戶機(jī)程序可以使用存儲(chǔ)過程輸出的遠(yuǎn)程接口。
所實(shí)現(xiàn)的優(yōu)選實(shí)施例可以是利用標(biāo)準(zhǔn)編程技術(shù)和/或工程技術(shù)產(chǎn)生軟件或代碼的一種方法、設(shè)備或產(chǎn)品。在此,術(shù)語“產(chǎn)品”指在計(jì)算機(jī)可讀介質(zhì)(例如磁性存儲(chǔ)介質(zhì)(例如硬盤驅(qū)動(dòng)器、軟盤、磁帶等)、光存儲(chǔ)器(CD-ROM、光盤等)、易失性存儲(chǔ)裝置和非易失性存儲(chǔ)裝置(例如EEPROM、ROM、PROM、RAM、DRAM、SRAM、固件、可編程邏輯電路等))內(nèi)實(shí)現(xiàn)的代碼或邏輯。處理器可以存取和執(zhí)行計(jì)算機(jī)可讀介質(zhì)內(nèi)的代碼。還可以通過傳輸媒體,或者通過網(wǎng)絡(luò)由文件服務(wù)器存取該優(yōu)選實(shí)施例中實(shí)現(xiàn)的代碼。在這種情況下,實(shí)現(xiàn)該代碼的產(chǎn)品可以包括傳輸媒體,例如網(wǎng)絡(luò)傳輸導(dǎo)線、無線傳輸媒體、在空間傳播的信號(hào)、無線電波、紅外信號(hào)等。當(dāng)然,本技術(shù)領(lǐng)域內(nèi)的技術(shù)人員明白可以對(duì)此配置做許多修改,并且產(chǎn)品可以包括本技術(shù)領(lǐng)域內(nèi)眾所周知的任何信息載體。
在某些實(shí)現(xiàn)中,將存儲(chǔ)過程28輸出置放在Java可串行化對(duì)象內(nèi)。然而,也可以利用另一種數(shù)據(jù)對(duì)象存儲(chǔ)聚合的輸出數(shù)據(jù)。
在上述實(shí)現(xiàn)中,所實(shí)現(xiàn)的遠(yuǎn)程接口是企業(yè)JavaBean。然而本技術(shù)領(lǐng)域內(nèi)的技術(shù)人員應(yīng)當(dāng)明白,可以采用任何部件體系結(jié)構(gòu)實(shí)現(xiàn)遠(yuǎn)程接口8、遠(yuǎn)程接口實(shí)現(xiàn)12、客戶機(jī)應(yīng)用程序6以及遠(yuǎn)程接口調(diào)用32,而且還應(yīng)當(dāng)明白本發(fā)明并不局限于Java實(shí)現(xiàn)。
在一種Java實(shí)現(xiàn)中,可以將遠(yuǎn)程接口編寫為無狀態(tài)對(duì)話(statelesssession)企業(yè)JavaBean,以將必須編碼的強(qiáng)制方法的數(shù)量降低到最小、將資源消耗降低到最少并允許利用多個(gè)客戶機(jī)使用它。
在上述實(shí)現(xiàn)中,客戶機(jī)遠(yuǎn)程接口調(diào)用32調(diào)用的遠(yuǎn)程接口實(shí)現(xiàn)12從客戶機(jī)調(diào)用存取參數(shù)并調(diào)用存儲(chǔ)過程調(diào)用。作為一種選擇,遠(yuǎn)程接口實(shí)現(xiàn)12還可以調(diào)用另一個(gè)程序部件以調(diào)用存儲(chǔ)過程調(diào)用。
在又一種實(shí)現(xiàn)中,應(yīng)用服務(wù)器10可以保持多個(gè)作為多個(gè)企業(yè)JavaBean實(shí)現(xiàn)的遠(yuǎn)程接口實(shí)現(xiàn)12。
在上述實(shí)現(xiàn)中,客戶機(jī)調(diào)用32直接調(diào)用遠(yuǎn)程接口實(shí)現(xiàn)12。此外,客戶機(jī)應(yīng)用程序6可以包括萬維網(wǎng)或超文本標(biāo)記語言(HTML)客戶機(jī),它將調(diào)用32作為間接通過Java小服務(wù)程序調(diào)用遠(yuǎn)程接口實(shí)現(xiàn)12的超文本傳輸協(xié)議(HTTP)請求發(fā)送。
根據(jù)用于產(chǎn)生調(diào)用并將該調(diào)用發(fā)送到存儲(chǔ)過程程序的特定數(shù)據(jù)結(jié)構(gòu),例如輸入映射和輸出映射,對(duì)各優(yōu)選實(shí)施例進(jìn)行了說明。然而,本技術(shù)領(lǐng)域內(nèi)的技術(shù)人員應(yīng)認(rèn)識(shí)到,可以對(duì)客戶機(jī)應(yīng)用程序映射到存儲(chǔ)過程的輸入?yún)?shù)的方式以及存儲(chǔ)過程輸出如何封裝到一個(gè)數(shù)據(jù)對(duì)象內(nèi)的方式進(jìn)行修改。
在上述實(shí)現(xiàn)中,存儲(chǔ)過程產(chǎn)生被發(fā)送到客戶機(jī)應(yīng)用程序的輸出。在其它實(shí)現(xiàn)中,存儲(chǔ)過程不產(chǎn)生返回到客戶機(jī)應(yīng)用程序6的輸出數(shù)據(jù),但是可以將輸出發(fā)送到其它應(yīng)用程序或者執(zhí)行其它操作,例如更新數(shù)據(jù)庫、發(fā)送電子郵件等。
在上述實(shí)現(xiàn)中,遠(yuǎn)程接口實(shí)現(xiàn)12調(diào)用返回返回結(jié)果數(shù)據(jù)集的存儲(chǔ)過程。在其它實(shí)現(xiàn)中,存儲(chǔ)過程可以不產(chǎn)生返回客戶機(jī)應(yīng)用程序6的結(jié)果數(shù)據(jù)集,但是可以將結(jié)果數(shù)據(jù)集或其它輸出發(fā)送到其它應(yīng)用程序,或者執(zhí)行某些其它操作,例如更新數(shù)據(jù)庫、發(fā)送電子郵件等。
在客戶機(jī)系統(tǒng)4或網(wǎng)絡(luò)20內(nèi)的其它計(jì)算設(shè)備內(nèi)可以實(shí)現(xiàn)包括遠(yuǎn)程接口實(shí)現(xiàn)12和客戶機(jī)數(shù)據(jù)庫程序14的應(yīng)用服務(wù)器10或中間件。
為了說明和描述本發(fā)明,以上對(duì)根據(jù)本發(fā)明的優(yōu)選實(shí)施例進(jìn)行了說明。本發(fā)明并不完全局限于所披露的特定形式。根據(jù)上述教導(dǎo)可以對(duì)其進(jìn)行多種修改和變化。對(duì)本發(fā)明范圍不是由此詳細(xì)說明限定的,而是由所附權(quán)利要求限定的。上述說明、例子以及數(shù)據(jù)對(duì)本發(fā)明組成的生產(chǎn)和使用進(jìn)行了全面描述。因?yàn)樵诓幻撾x本發(fā)明范圍內(nèi),可以實(shí)現(xiàn)根據(jù)本發(fā)明的許多實(shí)施例,所以本發(fā)明權(quán)利由所附權(quán)利要求確定。
權(quán)利要求
1.一種使數(shù)據(jù)能夠被存取的方法,該方法包括從客戶機(jī)接收調(diào)用以調(diào)用遠(yuǎn)程接口方法;響應(yīng)調(diào)用的遠(yuǎn)程接口方法,利用遠(yuǎn)程接口實(shí)現(xiàn)存取所接收的調(diào)用的參數(shù);利用存取的參數(shù)作為存儲(chǔ)過程的輸入?yún)?shù),產(chǎn)生存儲(chǔ)過程調(diào)用;將存儲(chǔ)過程調(diào)用傳送到由要執(zhí)行的調(diào)用命名的存儲(chǔ)過程;接收存儲(chǔ)過程的輸出;將接收的存儲(chǔ)過程的輸出插入數(shù)據(jù)對(duì)象;以及將該數(shù)據(jù)對(duì)象返回客戶機(jī)。
2.根據(jù)權(quán)利要求1所述的方法,其中存儲(chǔ)過程在數(shù)據(jù)庫服務(wù)器內(nèi)執(zhí)行并產(chǎn)生輸出,其中該輸出可以包括為一組輸出中的一個(gè)成員的輸出,該組輸出包括數(shù)據(jù)庫表內(nèi)的一個(gè)或多個(gè)結(jié)果數(shù)據(jù)集和通過對(duì)數(shù)據(jù)庫表內(nèi)的數(shù)據(jù)進(jìn)行存儲(chǔ)過程操作獲得的一個(gè)或多個(gè)輸出參數(shù)。
3.根據(jù)權(quán)利要求1所述的方法,該方法進(jìn)一步包括利用遠(yuǎn)程接口實(shí)現(xiàn)對(duì)輸入映像進(jìn)行處理,確定客戶機(jī)調(diào)用內(nèi)的參數(shù)以用作存儲(chǔ)過程調(diào)用的輸入?yún)?shù)。
4.根據(jù)權(quán)利要求1所述的方法,該方法進(jìn)一步包括在存儲(chǔ)過程程序完成執(zhí)行后,接收存儲(chǔ)過程輸出。
5.根據(jù)權(quán)利要求1所述的方法,該方法進(jìn)一步包括對(duì)指出存儲(chǔ)過程輸出如何映射到數(shù)據(jù)對(duì)象的輸出映射進(jìn)行處理。
6.根據(jù)權(quán)利要求5所述的方法,其中該輸出可以包括結(jié)果數(shù)據(jù)集和參數(shù),其中該輸出映射指出將接收的結(jié)果數(shù)據(jù)集和參數(shù)附加到數(shù)據(jù)對(duì)象的順序。
7.根據(jù)權(quán)利要求1所述的方法,該方法進(jìn)一步包括產(chǎn)生用于描述包括在數(shù)據(jù)對(duì)象內(nèi)的存儲(chǔ)過程輸出的元數(shù)據(jù);以及將該元數(shù)據(jù)附加到數(shù)據(jù)對(duì)象。
8.根據(jù)權(quán)利要求7所述的方法,該方法進(jìn)一步包括利用客戶機(jī)對(duì)接收數(shù)據(jù)對(duì)象內(nèi)的元數(shù)據(jù)進(jìn)行處理以確定如何存取該數(shù)據(jù)對(duì)象的存儲(chǔ)過程輸出。
9.根據(jù)權(quán)利要求7所述的方法,其中數(shù)據(jù)對(duì)象包括多個(gè)元素,其中存儲(chǔ)過程輸出包括至少一個(gè)結(jié)果數(shù)據(jù)集內(nèi)的行數(shù)據(jù),其中將存儲(chǔ)過程輸出插入數(shù)據(jù)對(duì)象進(jìn)一步包括將每個(gè)結(jié)果數(shù)據(jù)集的每行中的每個(gè)列的數(shù)據(jù)插入數(shù)據(jù)對(duì)象中的一個(gè)元素,并且其中元數(shù)據(jù)定義每個(gè)元素中的數(shù)據(jù)的結(jié)構(gòu)和數(shù)據(jù)的類型。
10.根據(jù)權(quán)利要求7所述的方法,其中數(shù)據(jù)對(duì)象包括多個(gè)元素,并且其中存儲(chǔ)過程輸出可以包括多個(gè)輸出參數(shù),其中將存儲(chǔ)過程輸出插入數(shù)據(jù)對(duì)象進(jìn)一步包括將每個(gè)輸出參數(shù)插入數(shù)據(jù)對(duì)象內(nèi)的一個(gè)元素,并且其中元數(shù)據(jù)提供關(guān)于每個(gè)元素中的數(shù)據(jù)的結(jié)構(gòu)和數(shù)據(jù)的類型的信息。
11.根據(jù)權(quán)利要求1所述的方法,其中客戶機(jī)僅響應(yīng)調(diào)用接收一個(gè)具有存儲(chǔ)過程輸出的數(shù)據(jù)對(duì)象。
12.根據(jù)權(quán)利要求1所述的方法,其中遠(yuǎn)程接口實(shí)現(xiàn)是以企業(yè)JavaBean的方式實(shí)現(xiàn)的,并且其中數(shù)據(jù)對(duì)象包括Java可串行化對(duì)象。
13.一種使應(yīng)用程序可以利用存儲(chǔ)過程程序的方法,該方法包括確定一個(gè)存儲(chǔ)過程程序,所述存儲(chǔ)過程程序產(chǎn)生一個(gè)應(yīng)用程序所需的輸出;產(chǎn)生遠(yuǎn)程接口實(shí)現(xiàn)以響應(yīng)遠(yuǎn)程接口方法,所述遠(yuǎn)程接口實(shí)現(xiàn)可以從包括數(shù)據(jù)的應(yīng)用程序接收調(diào)用,并利用應(yīng)用程序內(nèi)的數(shù)據(jù)用作輸入、調(diào)用數(shù)據(jù)庫服務(wù)器內(nèi)的存儲(chǔ)過程;以及對(duì)遠(yuǎn)程接口實(shí)現(xiàn)產(chǎn)生輸出映射,用以確定如何將存儲(chǔ)過程輸出插入可以被應(yīng)用程序使用的數(shù)據(jù)對(duì)象內(nèi)。
14.根據(jù)權(quán)利要求13所述的方法,其中產(chǎn)生的遠(yuǎn)程接口實(shí)現(xiàn)將元數(shù)據(jù)插入數(shù)據(jù)對(duì)象內(nèi),用于提供關(guān)于插入該數(shù)據(jù)對(duì)象的存儲(chǔ)過程輸出的信息。
15.一種使數(shù)據(jù)能夠被存取的系統(tǒng),該系統(tǒng)包括用于從客戶機(jī)接收調(diào)用以調(diào)用遠(yuǎn)程接口方法的裝置;響應(yīng)調(diào)用的遠(yuǎn)程接口方法,利用遠(yuǎn)程接口實(shí)現(xiàn)存取所接收的調(diào)用的參數(shù)的裝置;利用存取的參數(shù)作為存儲(chǔ)過程輸入?yún)?shù),產(chǎn)生存儲(chǔ)過程調(diào)用的裝置;用于將存儲(chǔ)過程調(diào)用傳送到由要執(zhí)行的調(diào)用命名的存儲(chǔ)過程的裝置;用于接收存儲(chǔ)過程的輸出的裝置;用于將接收的存儲(chǔ)過程的輸出插入數(shù)據(jù)對(duì)象的裝置;以及用于將數(shù)據(jù)對(duì)象返回客戶機(jī)的裝置。
16.根據(jù)權(quán)利要求15所述的系統(tǒng),其中存儲(chǔ)過程在數(shù)據(jù)庫服務(wù)器內(nèi)執(zhí)行并產(chǎn)生輸出,其中該輸出可以包括為一組輸出中的一個(gè)成員的輸出,該組輸出包括數(shù)據(jù)庫表內(nèi)的一個(gè)或多個(gè)結(jié)果數(shù)據(jù)集和通過對(duì)數(shù)據(jù)庫表內(nèi)的數(shù)據(jù)進(jìn)行存儲(chǔ)過程操作獲得的一個(gè)或多個(gè)輸出參數(shù)。
17.根據(jù)權(quán)利要求15所述的系統(tǒng),該系統(tǒng)進(jìn)一步包括利用遠(yuǎn)程接口實(shí)現(xiàn)對(duì)輸入映像進(jìn)行處理,確定客戶機(jī)調(diào)用內(nèi)的參數(shù)以用作存儲(chǔ)過程調(diào)用的輸入?yún)?shù)的裝置。
18.根據(jù)權(quán)利要求15所述的系統(tǒng),該系統(tǒng)進(jìn)一步包括在存儲(chǔ)過程程序完成執(zhí)行后,用于接收存儲(chǔ)過程輸出的裝置。
19.根據(jù)權(quán)利要求15所述的系統(tǒng),該系統(tǒng)進(jìn)一步包括用于對(duì)指出存儲(chǔ)過程輸出如何映射到數(shù)據(jù)對(duì)象的輸出映射進(jìn)行處理的裝置。
20.根據(jù)權(quán)利要求19所述的系統(tǒng),其中該輸出可以包括結(jié)果數(shù)據(jù)集和參數(shù),其中該輸出映射指出將接收的結(jié)果數(shù)據(jù)集和參數(shù)附加到數(shù)據(jù)對(duì)象的順序。
21.根據(jù)權(quán)利要求15所述的系統(tǒng),該系統(tǒng)進(jìn)一步包括用于產(chǎn)生用于描述包括在數(shù)據(jù)對(duì)象內(nèi)的存儲(chǔ)過程輸出的元數(shù)據(jù)的裝置;以及用于將該元數(shù)據(jù)附加到數(shù)據(jù)對(duì)象的裝置。
22.根據(jù)權(quán)利要求21所述的系統(tǒng),該系統(tǒng)進(jìn)一步包括用于利用客戶機(jī)對(duì)接收數(shù)據(jù)對(duì)象內(nèi)的元數(shù)據(jù)進(jìn)行處理以確定如何存取該數(shù)據(jù)對(duì)象的存儲(chǔ)過程輸出的裝置。
23.根據(jù)權(quán)利要求21所述的系統(tǒng),其中數(shù)據(jù)對(duì)象包括多個(gè)元素,其中存儲(chǔ)過程輸出包括至少一個(gè)結(jié)果數(shù)據(jù)集內(nèi)的行數(shù)據(jù),其中將存儲(chǔ)過程輸出插入數(shù)據(jù)對(duì)象的裝置進(jìn)一步將每個(gè)結(jié)果數(shù)據(jù)集的每行中的每個(gè)列的數(shù)據(jù)插入數(shù)據(jù)對(duì)象中的一個(gè)元素,并且其中元數(shù)據(jù)定義每個(gè)元素中的數(shù)據(jù)的結(jié)構(gòu)和數(shù)據(jù)的類型。
24.根據(jù)權(quán)利要求21所述的系統(tǒng),其中數(shù)據(jù)對(duì)象包括多個(gè)元素,并且其中存儲(chǔ)過程輸出可以包括多個(gè)輸出參數(shù),其中將存儲(chǔ)過程輸出插入數(shù)據(jù)對(duì)象的裝置進(jìn)一步將每個(gè)輸出參數(shù)插入數(shù)據(jù)對(duì)象內(nèi)的一個(gè)元素,并且其中元數(shù)據(jù)提供關(guān)于每個(gè)元素中的數(shù)據(jù)的結(jié)構(gòu)和數(shù)據(jù)的類型的信息。
25.根據(jù)權(quán)利要求15所述的系統(tǒng),其中客戶機(jī)僅響應(yīng)調(diào)用接收一個(gè)具有存儲(chǔ)過程輸出的數(shù)據(jù)對(duì)象。
26.根據(jù)權(quán)利要求15所述的系統(tǒng),其中遠(yuǎn)程接口實(shí)現(xiàn)是以企業(yè)JavaBean的方式實(shí)現(xiàn)的,并且其中數(shù)據(jù)對(duì)象包括Java可串行化對(duì)象。
27.一種使應(yīng)用程序可以利用存儲(chǔ)過程程序的系統(tǒng),該系統(tǒng)包括用于確定一個(gè)存儲(chǔ)過程程序的裝置,所述存儲(chǔ)過程產(chǎn)生一個(gè)應(yīng)用程序所需輸出;用于產(chǎn)生遠(yuǎn)程接口實(shí)現(xiàn)以響應(yīng)遠(yuǎn)程接口方法的裝置,所述遠(yuǎn)程接口實(shí)現(xiàn)可以從包括數(shù)據(jù)的應(yīng)用程序接收調(diào)用,并利用應(yīng)用程序內(nèi)的數(shù)據(jù)用作輸入、調(diào)用數(shù)據(jù)庫服務(wù)器內(nèi)的存儲(chǔ)過程;以及用于對(duì)遠(yuǎn)程接口實(shí)現(xiàn)產(chǎn)生輸出映射、用以確定如何將存儲(chǔ)過程輸出插入可以被應(yīng)用程序使用的數(shù)據(jù)對(duì)象內(nèi)的裝置。
28.根據(jù)權(quán)利要求27所述的系統(tǒng),其中產(chǎn)生的遠(yuǎn)程接口實(shí)現(xiàn)將元數(shù)據(jù)插入數(shù)據(jù)對(duì)象內(nèi),用于提供關(guān)于插入該數(shù)據(jù)對(duì)象的存儲(chǔ)過程輸出的信息。
29.一種利用如下過程使數(shù)據(jù)能夠被存取的產(chǎn)品從客戶機(jī)接收調(diào)用以調(diào)用遠(yuǎn)程接口方法;響應(yīng)調(diào)用的遠(yuǎn)程接口方法,利用遠(yuǎn)程接口實(shí)現(xiàn)存取所接收的調(diào)用的參數(shù);利用存取的參數(shù)作為存儲(chǔ)過程的輸入?yún)?shù),產(chǎn)生存儲(chǔ)過程調(diào)用;將存儲(chǔ)過程調(diào)用傳送到由要執(zhí)行的調(diào)用命名的存儲(chǔ)過程;接收存儲(chǔ)過程的輸出;將接收的存儲(chǔ)過程的輸出插入數(shù)據(jù)對(duì)象;以及將該數(shù)據(jù)對(duì)象返回客戶機(jī)。
30.根據(jù)權(quán)利要求29所述的產(chǎn)品,其中存儲(chǔ)過程在數(shù)據(jù)庫服務(wù)器內(nèi)執(zhí)行并產(chǎn)生輸出,其中該輸出可以包括為一組輸出中的一個(gè)成員的輸出,該組輸出包括數(shù)據(jù)庫表內(nèi)的一個(gè)或多個(gè)結(jié)果數(shù)據(jù)集和通過對(duì)數(shù)據(jù)庫表內(nèi)的數(shù)據(jù)進(jìn)行存儲(chǔ)過程操作獲得的一個(gè)或多個(gè)輸出參數(shù)。
31.根據(jù)權(quán)利要求29所述的產(chǎn)品,該方法進(jìn)一步包括利用遠(yuǎn)程接口實(shí)現(xiàn)對(duì)輸入映像進(jìn)行處理,確定客戶機(jī)調(diào)用內(nèi)的參數(shù)以用作存儲(chǔ)過程調(diào)用的輸入?yún)?shù)。
32.根據(jù)權(quán)利要求29所述的產(chǎn)品,該產(chǎn)品進(jìn)一步包括在存儲(chǔ)過程程序完成執(zhí)行后,接收存儲(chǔ)過程輸出。
33.根據(jù)權(quán)利要求29所述的產(chǎn)品,該產(chǎn)品進(jìn)一步包括對(duì)指出存儲(chǔ)過程輸出如何映射到數(shù)據(jù)對(duì)象的輸出映射進(jìn)行處理。
34.根據(jù)權(quán)利要求33所述的產(chǎn)品,其中該輸出可以包括結(jié)果數(shù)據(jù)集和參數(shù),其中該輸出映射指出將接收的結(jié)果數(shù)據(jù)集和參數(shù)附加到數(shù)據(jù)對(duì)象的順序。
35.根據(jù)權(quán)利要求29所述的產(chǎn)品,該產(chǎn)品進(jìn)一步包括產(chǎn)生用于描述包括在數(shù)據(jù)對(duì)象內(nèi)的存儲(chǔ)過程輸出的元數(shù)據(jù);以及將該元數(shù)據(jù)附加到數(shù)據(jù)對(duì)象。
36.根據(jù)權(quán)利要求29所述的產(chǎn)品,該產(chǎn)品進(jìn)一步包括利用客戶機(jī)對(duì)接收數(shù)據(jù)對(duì)象內(nèi)的元數(shù)據(jù)進(jìn)行處理以確定如何存取該數(shù)據(jù)對(duì)象的存儲(chǔ)過程輸出。
37.根據(jù)權(quán)利要求35所述的產(chǎn)品,其中數(shù)據(jù)對(duì)象包括多個(gè)元素,其中存儲(chǔ)過程輸出包括至少一個(gè)結(jié)果數(shù)據(jù)集內(nèi)的行數(shù)據(jù),其中將存儲(chǔ)過程輸出插入數(shù)據(jù)對(duì)象進(jìn)一步包括將每個(gè)結(jié)果數(shù)據(jù)集的每行中的每個(gè)列的數(shù)據(jù)插入數(shù)據(jù)對(duì)象中的一個(gè)元素,并且其中元數(shù)據(jù)定義每個(gè)元素中的數(shù)據(jù)的結(jié)構(gòu)和數(shù)據(jù)的類型。
38.根據(jù)權(quán)利要求35所述的產(chǎn)品,其中數(shù)據(jù)對(duì)象包括多個(gè)元素,并且其中存儲(chǔ)過程輸出可以包括多個(gè)輸出參數(shù),其中將存儲(chǔ)過程輸出插入數(shù)據(jù)對(duì)象進(jìn)一步包括將每個(gè)輸出參數(shù)插入數(shù)據(jù)對(duì)象內(nèi)的一個(gè)元素,并且其中元數(shù)據(jù)提供關(guān)于每個(gè)元素中的數(shù)據(jù)的結(jié)構(gòu)和數(shù)據(jù)的類型的信息。
39.根據(jù)權(quán)利要求29所述的產(chǎn)品,其中客戶機(jī)僅響應(yīng)調(diào)用接收一個(gè)具有存儲(chǔ)過程輸出的數(shù)據(jù)對(duì)象。
40.根據(jù)權(quán)利要求29所述的產(chǎn)品,其中遠(yuǎn)程接口實(shí)現(xiàn)是以企業(yè)JavaBean的方式實(shí)現(xiàn)的,并且其中數(shù)據(jù)對(duì)象包括Java可串行化對(duì)象。
41.一種利用如下過程使應(yīng)用程序可以利用存儲(chǔ)過程程序的產(chǎn)品確定一個(gè)存儲(chǔ)過程程序,所述存儲(chǔ)過程程序產(chǎn)生一個(gè)應(yīng)用程序所需的輸出;產(chǎn)生遠(yuǎn)程接口實(shí)現(xiàn)以響應(yīng)遠(yuǎn)程接口方法,所述遠(yuǎn)程接口實(shí)現(xiàn)可以從包括數(shù)據(jù)的應(yīng)用程序接收調(diào)用,并利用應(yīng)用程序內(nèi)的數(shù)據(jù)用作輸入、調(diào)用數(shù)據(jù)庫服務(wù)器內(nèi)的存儲(chǔ)過程;以及對(duì)遠(yuǎn)程接口實(shí)現(xiàn)產(chǎn)生輸出映射,用以確定如何將存儲(chǔ)過程輸出插入可以被應(yīng)用程序使用的數(shù)據(jù)對(duì)象內(nèi)。
42.根據(jù)權(quán)利要求41所述的產(chǎn)品,其中產(chǎn)生的遠(yuǎn)程接口實(shí)現(xiàn)將元數(shù)據(jù)插入數(shù)據(jù)對(duì)象內(nèi),用于提供關(guān)于插入該數(shù)據(jù)對(duì)象的存儲(chǔ)過程輸出的信息。
全文摘要
本發(fā)明提供了一種使數(shù)據(jù)能夠被存取的方法、系統(tǒng)和程序。從客戶機(jī)接收調(diào)用以調(diào)用遠(yuǎn)程接口方法。響應(yīng)調(diào)用的遠(yuǎn)程接口方法,利用遠(yuǎn)程接口實(shí)現(xiàn)存取所接收的調(diào)用的參數(shù)。利用存取的參數(shù)作為存儲(chǔ)過程的輸入?yún)?shù),產(chǎn)生存儲(chǔ)過程調(diào)用。將存儲(chǔ)過程調(diào)用傳送到由要執(zhí)行的調(diào)用命名的存儲(chǔ)過程。接收存儲(chǔ)過程的輸出,并將該輸出插入返回客戶機(jī)的數(shù)據(jù)對(duì)象。
文檔編號(hào)G06F9/46GK1509434SQ01813299
公開日2004年6月30日 申請日期2001年8月1日 優(yōu)先權(quán)日2000年8月7日
發(fā)明者波恩哈德·康文特, 斯特番·德斯羅奇, 辛西婭·M·撒拉克, 查爾斯·D·沃爾夫森, 德克·沃爾施德, D 沃爾夫森, M 撒拉克, 德斯羅奇, 沃爾施德, 波恩哈德 康文特 申請人:國際商業(yè)機(jī)器公司