專利名稱:多池管理器的制作方法
技術(shù)領(lǐng)域:
背景技術(shù):
諸如在California的San Jose的BEA系統(tǒng)中可用的WebLogicTM服務(wù)器之類的應(yīng)用服務(wù)器允許用戶進(jìn)行很多功能。所述應(yīng)用服務(wù)器典型支持的功能之一是提供數(shù)據(jù)庫(kù)存取。在一個(gè)實(shí)施例中,由應(yīng)用服務(wù)器提供諸如Java數(shù)據(jù)庫(kù)連通性(JDBC)連接池(connection pool)之類的連接池。該連接池提供許多已設(shè)立的與數(shù)據(jù)庫(kù)的連接。根據(jù)需要,將這些連接提供給應(yīng)用服務(wù)器的應(yīng)用。這樣的連接池允許應(yīng)用服務(wù)器中的相對(duì)多數(shù)量的應(yīng)用來(lái)進(jìn)行數(shù)據(jù)庫(kù)存取,同時(shí)減少了應(yīng)用的數(shù)據(jù)庫(kù)連接時(shí)間。
發(fā)明內(nèi)容
圖1是圖示了一個(gè)實(shí)施例的利用多池(multipool)管理器的多池的使用的圖;圖2A-2B是圖示了使用具有有效連接池列表的多池管理器的圖;圖3A-3B是圖示了一個(gè)實(shí)施例的有效連接池列表的使用的流程圖;圖4是圖示了本發(fā)明一個(gè)實(shí)施例的多池管理器的操作的圖;圖5A-5B是圖示了本發(fā)明一個(gè)實(shí)施例的利用多池管理器的回調(diào)(callback)的使用的流程圖;圖6是圖示了本發(fā)明一個(gè)實(shí)施例的利用多池管理器的回調(diào)的使用的流程圖。
具體實(shí)施例方式
使用自動(dòng)維護(hù)的有效連接池列表的多池圖1是圖示了多池管理器102的操作的圖。在一些系統(tǒng)中,期望具有多個(gè)數(shù)據(jù)庫(kù)實(shí)例,諸如數(shù)據(jù)庫(kù)實(shí)例104和106。例如,該數(shù)據(jù)庫(kù)實(shí)例104和106中的每一個(gè)可包括在獨(dú)立機(jī)器上運(yùn)行的當(dāng)前版本數(shù)據(jù)庫(kù)。當(dāng)存在多個(gè)數(shù)據(jù)庫(kù)實(shí)例時(shí),可期望使用多個(gè)連接池,諸如連接池108和連接池110??梢允褂枚喑叵到y(tǒng),而不是使諸如應(yīng)用112、114、和116的每個(gè)應(yīng)用專用(dedicating)于單個(gè)連接池并從而專用于單個(gè)數(shù)據(jù)庫(kù)實(shí)例。在多池系統(tǒng)中,多池管理器102可確定使用哪一個(gè)連接池來(lái)獲得應(yīng)用到數(shù)據(jù)庫(kù)系統(tǒng)的連接。
可能有不同的方法來(lái)選擇連接池。一個(gè)選擇方法具有主連接池和備份連接池。首先在主連接池上嘗試連接,并然后當(dāng)發(fā)生故障事件時(shí),然后通過(guò)備份連接池發(fā)送所述連接。另一個(gè)方法是負(fù)載平衡方法,其中在多個(gè)連接池之間分配所述連接,以平衡不同連接池上的負(fù)載。循環(huán)復(fù)用(round robin)方法是負(fù)載平衡方法的示例。
本發(fā)明的一個(gè)實(shí)施例包括與數(shù)據(jù)庫(kù)實(shí)例連接的、包括多個(gè)連接池202和204的多池系統(tǒng)。該連接池202和204適于提供到數(shù)據(jù)庫(kù)實(shí)例206和208的連接。多池管理器210適于通過(guò)連接池選擇和設(shè)立到數(shù)據(jù)庫(kù)實(shí)例的連接。多池管理器210適于留意(keep track of)連接請(qǐng)求之間的無(wú)效(dead)連接池。
多池管理器210可以以避免任何無(wú)效連接池的方式來(lái)選擇連接池。以圖2A為例,如果連接池A無(wú)效,則多池管理器可避免選擇該連接池A。在一個(gè)實(shí)施例中,根據(jù)應(yīng)用所批準(zhǔn)的,而僅進(jìn)行未無(wú)效連接池的選擇。在一個(gè)實(shí)施例中,應(yīng)用通過(guò)回調(diào)或通過(guò)配置信息來(lái)指明是否切換連接池。
多池管理器210可適于維護(hù)有效連接池的列表212,并使用列表212來(lái)確定通過(guò)什么連接池來(lái)連接。術(shù)語(yǔ)“列表”不打算意指任何特定的數(shù)據(jù)結(jié)構(gòu)。列表上的有效連接池可包括這樣的連接池,即不是被多池管理器確定為無(wú)效的那些連接池。
可以在后臺(tái)中測(cè)試無(wú)效連接池,以查看它們是否應(yīng)該返回到有效連接池列表。該有效連接池列表可以是應(yīng)用所提供的候選列表的子集。作為選擇,可以維護(hù)分開(kāi)的候選列表和有效列表,并且多池管理器可選擇在該兩種列表上的連接池。多池管理器210可以為與候選列表相關(guān)聯(lián)的每個(gè)連接池存儲(chǔ)指示(indication),以指明連接池是有效還是無(wú)效。
在圖2A的示例中,連接池A無(wú)效,因此沒(méi)有在有效連接池列表212上。諸如應(yīng)用220的應(yīng)用可通過(guò)多池管理器210而請(qǐng)求連接到數(shù)據(jù)庫(kù)實(shí)例206或208之一。在圖2A中,多池管理器210選擇通過(guò)連接池B的連接。
多池管理器210可在后臺(tái)中異步地測(cè)試連接池是否已經(jīng)再生效(revive)。在一個(gè)實(shí)施例中,可以使用異步后臺(tái)測(cè)試模塊214。
圖2B圖示了這個(gè)后臺(tái)測(cè)試的示例。在這個(gè)示例中,SQL測(cè)試查詢(query)被發(fā)送到無(wú)效連接池A。如果從數(shù)據(jù)庫(kù)實(shí)例206獲得正確回答,則多池管理器210可以用連接池A的指示來(lái)更新有效連接池列表212。以這個(gè)方式,當(dāng)下次應(yīng)用請(qǐng)求到數(shù)據(jù)庫(kù)的連接時(shí),通過(guò)連接池A的連接是可能的。
圖3B圖示了用于圖示無(wú)效連接池的異步測(cè)試的流程圖。在一個(gè)實(shí)施例中,在步驟300中,過(guò)去了預(yù)置等候時(shí)間。該等候時(shí)間可以由應(yīng)用設(shè)置,并與多池管理器的配置信息一起存儲(chǔ),或者可以使用默認(rèn)值。在步驟302中,測(cè)試無(wú)效連接池。如果如測(cè)試所指明的、無(wú)效連接池已經(jīng)再生效,則更新有效連接池列表306,否則,所述循環(huán)重復(fù)步驟300中的等候預(yù)置時(shí)間。
圖3A圖示了在一個(gè)實(shí)施例中請(qǐng)求連接到數(shù)據(jù)庫(kù)的操作。在步驟308中,在多池管理器處收到連接到數(shù)據(jù)庫(kù)的請(qǐng)求。在步驟310中,多池管理器可選擇連接池。在一個(gè)實(shí)施例中,多池管理器210選擇有效連接池列表上的連接池。然后,可嘗試所述連接。在步驟312中,檢查連接池是否無(wú)效。如果連接池?zé)o效,則在步驟314中,更新有效連接池列表并從有效池列表中選擇新的連接池。如果連接池沒(méi)有無(wú)效,則在步驟315中進(jìn)行檢查以查看連接池是否充滿(full)。如果沒(méi)有可用的連接,則多池管理器可在步驟310中從有效連接池列表中選擇另一個(gè)連接池。如果任一所選擇的連接池都沒(méi)有無(wú)效或者充滿,則在步驟316中,通過(guò)所選擇的連接池進(jìn)行連接。
圖4是圖示了可以在本發(fā)明一個(gè)實(shí)施例中發(fā)生的不同條件的流程圖。在步驟402中,多池管理器收到連接到數(shù)據(jù)庫(kù)的請(qǐng)求。在步驟404中,多池管理器從有效池列表中選擇連接池。如在步驟408中確定的,所選擇的連接池有可能是重新再生效的連接池。如果是,則如在步驟410中所指明的,這是所謂的故障恢復(fù)(failback)。在步驟412中,檢查連接池是否無(wú)效。如果連接池?zé)o效,則在步驟414中更新有效連接池列表,并在步驟416中從有效連接池列表中選擇另一個(gè)連接池,這是所謂的故障轉(zhuǎn)移(failover)條件。在步驟418中,如果連接池沒(méi)有無(wú)效,則進(jìn)行檢查以查看連接池是否充滿。如果連接池充滿,則在步驟420中,進(jìn)行檢查以查看是否允許溢出(spillover)。如果允許溢出,則在步驟422中從有效連接池列表中選擇另一個(gè)連接池。步驟424示出了進(jìn)行連接。如下面所描述的,應(yīng)用可利用回調(diào)或利用配置信息來(lái)批準(zhǔn)故障恢復(fù)、故障轉(zhuǎn)移、或溢出條件。
本發(fā)明的一個(gè)實(shí)施例是這樣的多池管理器,其適于通過(guò)連接池而選擇和設(shè)立到數(shù)據(jù)庫(kù)實(shí)例的連接。該多池管理器適于留意無(wú)效連接池。該多池管理器實(shí)現(xiàn)了這樣的選擇方法,其中,多池管理器避免選擇無(wú)效連接池,以便為應(yīng)用提供連接。
本發(fā)明的一個(gè)實(shí)施例是包括多個(gè)連接池的、用于與數(shù)據(jù)庫(kù)實(shí)例連接的多池系統(tǒng)。該連接池適于提供到數(shù)據(jù)庫(kù)實(shí)例的連接。多池管理器適于通過(guò)連接池而選擇和設(shè)立到數(shù)據(jù)庫(kù)實(shí)例的連接。該多池管理器適于留意無(wú)效連接池,并異步測(cè)試連接池是否再生效。
多池的回調(diào)接口在一些實(shí)例中,期望在切換連接池之前與應(yīng)用進(jìn)行核對(duì)。切換連接池可以是復(fù)雜的處理。有時(shí),存在優(yōu)選的數(shù)據(jù)庫(kù)實(shí)例,并且不期望用戶切換到另一個(gè)更不可取的數(shù)據(jù)庫(kù)實(shí)例,除非最初的數(shù)據(jù)庫(kù)實(shí)例真的不可用。在本發(fā)明的一個(gè)實(shí)施例中,多池管理器實(shí)現(xiàn)對(duì)應(yīng)用的回調(diào),以便從應(yīng)用得到批準(zhǔn)來(lái)切換連接池。
在本發(fā)明的一個(gè)實(shí)施例中,多池系統(tǒng)用于利用多個(gè)連接池而連接到數(shù)據(jù)庫(kù)實(shí)例。連接池502和504適于提供到數(shù)據(jù)庫(kù)實(shí)例508和510的連接。多池管理器506適于通過(guò)連接池選擇并設(shè)立到數(shù)據(jù)庫(kù)實(shí)例的連接。多池管理器506適于在切換連接池之前與應(yīng)用512進(jìn)行核對(duì)。
在圖5A的示例中,從多池管理器506到應(yīng)用512的回調(diào)可用。如果要切換連接池,則多池管理器506可以進(jìn)行到應(yīng)用512的回調(diào),以確定該應(yīng)用是否將批準(zhǔn)該切換。在圖5A的示例中,有效連接池列表包括連接池B而不包括連接池A。在切換到連接池B之前,多池管理器506可進(jìn)行到應(yīng)用512的回調(diào)。在一個(gè)實(shí)施例中,在步驟1,多池管理器506收到連接請(qǐng)求。在步驟2,在多池管理器確定可能需要連接池切換之后,進(jìn)行到應(yīng)用512的回調(diào)。例如,該回調(diào)可以是對(duì)作為應(yīng)用512的一部分的回調(diào)方法514的調(diào)用。該多池管理器506可存儲(chǔ)配置信息506a,其可包括將在什么條件下發(fā)送回調(diào)的指示和/或回調(diào)方法名稱的指示(在這個(gè)情況下,為回調(diào)方法A)。應(yīng)用代碼可以以任何方式實(shí)現(xiàn)回調(diào)方法514。在一個(gè)實(shí)施例中,多池管理器在步驟3中接收回調(diào)響應(yīng)。該回調(diào)響應(yīng)可以是多池管理器506可用于確定如何進(jìn)行連接的指示。
在一個(gè)實(shí)施例中,回調(diào)響應(yīng)指示包括“確認(rèn)”指示。當(dāng)收到“確認(rèn)”指示時(shí),多池管理器切換到新的連接池。另一個(gè)回調(diào)響應(yīng)指示是“重試”指示。如果收到“重試”指示,則多池管理器506可嘗試?yán)美线B接池得到連接。另一個(gè)可能的回調(diào)響應(yīng)指示是“不重新連接”指示。當(dāng)收到“不重新連接”指示時(shí),多池管理器不嘗試進(jìn)行連接。
圖5B圖示了回調(diào)方法可提供“重試”指示的可能原因。在一個(gè)示例中,可能期望在切換到輔助數(shù)據(jù)庫(kù)實(shí)例之前進(jìn)行一定數(shù)量的到主數(shù)據(jù)庫(kù)實(shí)例的嘗試。圖5B圖示了作為回調(diào)方法的一部分的、進(jìn)行從應(yīng)用512到數(shù)據(jù)庫(kù)實(shí)例508的獨(dú)立試通(ping)的示例。如果該獨(dú)立試通提出數(shù)據(jù)庫(kù)實(shí)例508仍舊在運(yùn)行的指示,則應(yīng)用可發(fā)送“重試”指示。如果應(yīng)用512充分確信數(shù)據(jù)庫(kù)實(shí)例停用,則可以發(fā)送“確認(rèn)”回調(diào)響應(yīng)。
應(yīng)用512可以實(shí)現(xiàn)任何回調(diào)方法。在一個(gè)示例中,多池管理器具有可以用任何應(yīng)用代碼實(shí)現(xiàn)的回調(diào)接口。
圖6是圖示了一個(gè)實(shí)施例的回調(diào)操作的圖。在步驟602中,檢查是否如多池管理器所確定的那樣將切換連接池。如果不切換連接池,則在步驟604中進(jìn)行到連接池的連接。如果要切換連接,則在步驟606中,檢查是否針對(duì)條件指明了回調(diào)。如果指明沒(méi)有回調(diào),則然后在沒(méi)有回調(diào)的情況下通過(guò)新連接池進(jìn)行連接。如果指明了回調(diào),則在步驟610中,進(jìn)行回調(diào)。如果收到“確認(rèn)”指示,則在步驟614中利用新連接池進(jìn)行連接。如果收到重試指示,則在步驟616中使用老連接池嘗試進(jìn)行連接。另外,如果收到“不重新連接”指示,則在步驟618中不通過(guò)連接池進(jìn)行連接。
在一個(gè)實(shí)施例中,多池管理器適于通過(guò)連接池而選擇并設(shè)立到數(shù)據(jù)庫(kù)實(shí)例的連接。該多池管理器適于在切換連接池之前與應(yīng)用進(jìn)行核對(duì)。
一個(gè)非限制性示例的詳細(xì)描述下面的描述將給出多池實(shí)現(xiàn)的一個(gè)非限制性實(shí)現(xiàn)。下面的描述給出一個(gè)實(shí)施例,但是本領(lǐng)域的技術(shù)人員將理解,可以進(jìn)行上面構(gòu)思的其它實(shí)現(xiàn)。下面給出的任何潛在限制語(yǔ)言是用于結(jié)合該特定非限制性實(shí)現(xiàn)的上下文進(jìn)行解釋的,而不是想要限制這些總構(gòu)思。
多池可在故障轉(zhuǎn)移之前與應(yīng)用進(jìn)行核對(duì),以替換池。如果當(dāng)前使用的池的配置測(cè)試遭遇隨機(jī)的或短暫的故障、如果當(dāng)將目前沒(méi)有處理客戶的數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)實(shí)例帶回到服務(wù)中時(shí)應(yīng)用希望進(jìn)行控制、或者如果在得到來(lái)自池的連接時(shí)應(yīng)用可以指定身份、并且應(yīng)該返回來(lái)自匹配池的連接,則這是非常有用的。在DBMS出售者不提供在匿名JDBC連接上設(shè)置客戶身份的固有(native)支持的情況下,這也是非常有用的。
可以對(duì)多池實(shí)現(xiàn)幾處改善。
FAILOVER(故障轉(zhuǎn)移)-現(xiàn)有的多池算法“HIGH AVAILABILITY”將被重新命名為“FAILOVER”。如果當(dāng)前池忙,則將也可選地提供將連接的應(yīng)用請(qǐng)求路由選擇到替換池的能力。
HEALTH(健康度)-將改善現(xiàn)有的功能以標(biāo)記無(wú)效的池,從而不將連接的應(yīng)用請(qǐng)求路由選擇到這些池。
CALLBACK(回調(diào))-將向應(yīng)用提供回調(diào)接口,以便在檢測(cè)到出故障的池時(shí),控制多池判決來(lái)故障轉(zhuǎn)移到替換池,或者故障恢復(fù)到先前標(biāo)記為無(wú)效的池。
應(yīng)用可配置FAILOVER算法。FAILOVER可以通過(guò)主連接池來(lái)發(fā)送連接,并在主連接池發(fā)生故障時(shí),通過(guò)輔助連接池來(lái)路由選擇這些連接。如果當(dāng)前的池繁忙,則FAILOVER還可可選地能夠?qū)⑨槍?duì)連接的應(yīng)用請(qǐng)求路由選擇到替換池。
在一個(gè)實(shí)施例中,應(yīng)用還將能夠配置下面的多池屬性/***如果設(shè)置,則在當(dāng)前池繁忙時(shí),將連接的應(yīng)用請(qǐng)求路由選擇到替換
*池。這僅僅在運(yùn)行HIGH_ALGORITHM算法時(shí)相關(guān)。缺省意味著特*征被禁用。
**@param newVal新的屬性值*@動(dòng)態(tài)(dynamic)*@缺省錯(cuò)誤(default false)*/public boolean isFailoverRequestIfBusy();public void setFailoverRequestIfBusy(boolean failoverRequestIfBusy);應(yīng)用能夠利用系統(tǒng)實(shí)現(xiàn)和注冊(cè)回調(diào)。當(dāng)多池檢測(cè)到無(wú)效或繁忙的池時(shí)可調(diào)用該回調(diào),這給予應(yīng)用控制多池是否故障轉(zhuǎn)移到替換池的能力。
在一個(gè)實(shí)施例中,應(yīng)用將能夠?qū)崿F(xiàn)接下來(lái)的接口/*** 如果應(yīng)用希望控制WebLogic服務(wù)器多池的故障轉(zhuǎn)移行動(dòng),則該應(yīng)用* 可以可選地實(shí)現(xiàn)這個(gè)接口。
** 如果應(yīng)用已經(jīng)注冊(cè)了實(shí)現(xiàn)這個(gè)接口的、WebLogic服務(wù)器的類,* 則WebLogic服務(wù)器將調(diào)用這個(gè)接口的方法“allowPoolFailover()”,* 并取決于來(lái)自該方法的調(diào)用的返回代碼來(lái)采取不同的行動(dòng)。
* @見(jiàn)weblogic.management.configuration.JDBCMultiPoolMBean#setConnectionPoolFailoverCallbackHandler*/public interface ConnectionPoolFailoverCallback{//這個(gè)接口的名稱,static public final String IF_NAME=“weblogic.jdbc.extensions.ConnectionPoolFailoverCallback”;//方法‘a(chǎn)llowPoolFailover()’的操作碼static public final int OPCODE_CURR_POOL_DEAD=0;static public final int OPCODE_CURR_POOL_BUSY=1;static public final int OPCODE_REENABLE_CURR_POOL=2;
// 方法‘a(chǎn)llowPoolFailover()’的返回代碼static public final int OK=0;//對(duì)于即將發(fā)生的動(dòng)作,應(yīng)用為確認(rèn)static public final int RETRY_CURRENT=1;//重試當(dāng)前池static public final int DONOT_FAILOVER=2;//不進(jìn)行故障轉(zhuǎn)移,WLS將扔出weblogic.jdbc.extensions.PoolUnavailableSQLException/**多池將在各種故障轉(zhuǎn)移/故障恢復(fù)條件下調(diào)用這個(gè)方法。應(yīng)用應(yīng)該基于*應(yīng)用指定的語(yǔ)義來(lái)從這個(gè)方法返回上述定義的代碼之一。
** @param currPool(當(dāng)前池)-當(dāng)前使用的連接池的名稱,* 決不能為空** @param nextPool(下一池)-替換連接池的名稱,* 對(duì)于操作碼‘OPCODE_REENABLE_CURR_POOL’,將為空** @param opcode(操作碼)-正執(zhí)行的操作* OPCODE_CURR_POOL_DEAD-‘currPool’無(wú)效,多池需要將連接的* 應(yīng)用請(qǐng)求故障轉(zhuǎn)移到‘nextPool’。
** 應(yīng)用應(yīng)該返回“確認(rèn)”、“RETRY_CURRENT”、或“DONOT_FAILOVER”,*這取決于希望多池做什么。
**OPCODE_CURR_POOL_BUSY-‘currPool’忙,多池需要將連接的應(yīng)用請(qǐng)求重新路由選擇到‘nextPool’**如果可以進(jìn)行這個(gè)動(dòng)作,則應(yīng)用應(yīng)該返回“確認(rèn)”,*否則,應(yīng)該返回其它返回代碼中的任一個(gè)。
**OPCODE_REENABLE_CURR_POOL-‘currPool’先前被發(fā)現(xiàn)無(wú)效并因此被禁用?,F(xiàn)在發(fā)現(xiàn)它已經(jīng)健康,并且多池需要重新啟用它。
**如果可以進(jìn)行這個(gè)動(dòng)作,則應(yīng)用應(yīng)該返回“確認(rèn)”,*否則,應(yīng)該返回其它返回代碼中的任一個(gè)。
*/public int allowPoolFailover(String currPool,String nextPool,int opcode);}應(yīng)用可以將這個(gè)回調(diào)注冊(cè)在JDBCMultiPoolMBean的屬性“ConnectionPoolFailoverCallbackHandler”中。
/***用于設(shè)置實(shí)現(xiàn)接口weblogic.jdbc.extensions.ConnectionPoolFailoverCallback的應(yīng)用類的絕對(duì)名稱**@見(jiàn)weblogic.jdbc.extensions.ConnectionPoolFailoverCallback*@non-dynamic(非動(dòng)態(tài))*/public String getConnectionPoolFailoverCallbackHandler();public void setConnectionPoolFailoverCallbackHandler(String className);可以增強(qiáng)多池,以內(nèi)部監(jiān)視并跟蹤下面的池的健康度。如果確定池?zé)o效,則將作出標(biāo)記,并且不將隨后的連接應(yīng)用請(qǐng)求路由選擇到該池。
在一個(gè)實(shí)施例中,應(yīng)用將能夠配置下面的JDBCMultiPoolMBean屬性/***用于配置多池對(duì)先前被發(fā)現(xiàn)無(wú)效并因此被禁用的連接池的健康度進(jìn)行*檢查的頻率。
**@param newVal新的屬性值*@dynamic*@default 300
*/void setHealthCheckFrequencySeconds(int new Val);int getHealthCheckFrequencySeconds();可使用根據(jù)本公開(kāi)的示教而編程的傳統(tǒng)通用目的或?qū)S脭?shù)字計(jì)算機(jī)或(多個(gè))微處理器來(lái)實(shí)現(xiàn)所述實(shí)施例,這對(duì)于在計(jì)算機(jī)技術(shù)領(lǐng)域的那些技術(shù)人員而言是顯然的。有經(jīng)驗(yàn)的程序員可基于本公開(kāi)的示教容易地準(zhǔn)備合適的軟件代碼,這對(duì)于在軟件技術(shù)領(lǐng)域的那些技術(shù)人員而言是顯然的。本發(fā)明還可通過(guò)準(zhǔn)備集成電路或者通過(guò)互連傳統(tǒng)組成電路的合適網(wǎng)絡(luò)來(lái)實(shí)現(xiàn),這對(duì)于本領(lǐng)域的技術(shù)人員而言是顯然的。
一個(gè)實(shí)施例包括計(jì)算機(jī)程序產(chǎn)品,其是在其上(其中)存儲(chǔ)有指令的(多個(gè))存儲(chǔ)介質(zhì),該指令可用于編程計(jì)算機(jī)以執(zhí)行這里呈現(xiàn)的特征中的任一個(gè)。該存儲(chǔ)介質(zhì)可包括,但不限于任何類型的盤(pán)、ROM、RAM、EPROM、EPROM、DRAM、RAM、閃存裝置、磁卡或光卡、Nan系統(tǒng)(包括分子記憶IC)、或者適合于存儲(chǔ)指令和/或數(shù)據(jù)的任何類型的介質(zhì)或裝置,所述盤(pán)包括軟盤(pán)、光盤(pán)、DVD、CD-ROM、微驅(qū)動(dòng)器、和磁光盤(pán)。
在本發(fā)明中,在(多個(gè))計(jì)算機(jī)可讀介質(zhì)的任一個(gè)上存儲(chǔ)有用于控制通用目的/專用計(jì)算機(jī)或微處理器的硬件的軟件、和用于使計(jì)算機(jī)或微處理器能夠與人類用戶或利用本發(fā)明的本發(fā)明結(jié)果的其它機(jī)械系統(tǒng)進(jìn)行交互的軟件二者。這樣的軟件可包括,但不限于裝置驅(qū)動(dòng)程序、操作系統(tǒng)、運(yùn)行環(huán)境/容器、和用戶應(yīng)用程序。
已經(jīng)為了說(shuō)明和描述的目的而提供了本發(fā)明的優(yōu)選實(shí)施例的前面描述。這不意欲窮舉或?qū)⒈景l(fā)明限制到所公開(kāi)的精確形式。對(duì)于相關(guān)技術(shù)領(lǐng)域的普通技術(shù)人員而言,許多修改和改變都是顯而易見(jiàn)的。例如,可以以替換順序來(lái)執(zhí)行在所公開(kāi)的本發(fā)明的實(shí)施例中執(zhí)行的步驟,可省略某些步驟,并可增加其它步驟。為了最好地解釋本發(fā)明的原理和它的實(shí)踐應(yīng)用,而選擇并描述了所述實(shí)施例,從而使本領(lǐng)域的其它技術(shù)人員能夠理解本發(fā)明具有適合于預(yù)期的特定使用的各種實(shí)施例和各種修改。意欲由權(quán)利要求及其等效來(lái)限定本發(fā)明的范圍。
權(quán)利要求
1.一種用于連接到數(shù)據(jù)庫(kù)實(shí)例的多池系統(tǒng),包括多個(gè)連接池,所述連接池適于提供到數(shù)據(jù)庫(kù)實(shí)例的連接;以及多池管理器,適于通過(guò)連接池而選擇并設(shè)立到數(shù)據(jù)庫(kù)實(shí)例的連接,所述多池管理器適于留意在連接請(qǐng)求之間的無(wú)效連接池。
2.根據(jù)權(quán)利要求1的多池系統(tǒng),其中所述多池管理器測(cè)試連接池是否已經(jīng)再生效。
3.根據(jù)權(quán)利要求2的多池系統(tǒng),其中所示測(cè)試是在后臺(tái)異步進(jìn)行的。
4.根據(jù)權(quán)利要求2的多池系統(tǒng),其中所述測(cè)試是以可以由應(yīng)用設(shè)置的時(shí)間段、來(lái)周期性地進(jìn)行的。
5.根據(jù)權(quán)利要求1的多池系統(tǒng),其中所述多池管理器優(yōu)先通過(guò)主連接池發(fā)送連接。
6.根據(jù)權(quán)利要求5的多池系統(tǒng),其中輔助連接池存在溢出。
7.根據(jù)權(quán)利要求1的多池系統(tǒng),其中所述多池管理器通過(guò)多個(gè)連接池來(lái)使得連接負(fù)載平衡。
8.根據(jù)權(quán)利要求1的多池系統(tǒng),其中所述多池管理器在切換連接池之前與應(yīng)用進(jìn)行核對(duì)。
9.根據(jù)權(quán)利要求8的多池系統(tǒng),其中所述多池管理器使用回調(diào)接口。
10.根據(jù)權(quán)利要求8的多池系統(tǒng),其中所述應(yīng)用利用多池系統(tǒng)注冊(cè)回調(diào)信息。
11.根據(jù)權(quán)利要求1的多池系統(tǒng),其中該多池管理器維護(hù)有效連接池列表,并使用該列表確定通過(guò)哪個(gè)連接池進(jìn)行連接。
12.一種用于連接到數(shù)據(jù)庫(kù)實(shí)例的多池系統(tǒng),包括多個(gè)連接池,所述連接池適于提供到數(shù)據(jù)庫(kù)實(shí)例的連接;以及多池管理器,適于通過(guò)連接池而選擇和設(shè)立到數(shù)據(jù)庫(kù)實(shí)例的連接,所述多池管理器適于留意無(wú)效連接池,并異步地測(cè)試連接池是否再生效。
13.根據(jù)權(quán)利要求12的多池系統(tǒng),其中所述多池管理器優(yōu)先通過(guò)主連接池發(fā)送連接。
14.一種用于連接到數(shù)據(jù)庫(kù)實(shí)例的多池系統(tǒng),包括多個(gè)連接池,所述連接池適于提供到數(shù)據(jù)庫(kù)實(shí)例的連接;以及多池管理器,適于通過(guò)連接池而選擇和設(shè)立到數(shù)據(jù)庫(kù)實(shí)例的連接,所述多池管理器適于在切換連接池之前與應(yīng)用進(jìn)行核對(duì)。
15.根據(jù)權(quán)利要求14的多池系統(tǒng),其中所述多池管理器具有回調(diào)接口。
16.根據(jù)權(quán)利要求14的多池系統(tǒng),其中如果從應(yīng)用收到“確認(rèn)”指示,則所述多池管理器切換連接池。
17.根據(jù)權(quán)利要求14的多池系統(tǒng),其中如果從應(yīng)用收到“重試”指示,則所述多池管理器不切換連接池,并重試原始連接池。
18.根據(jù)權(quán)利要求14的多池系統(tǒng),其中如果從應(yīng)用收到“不重新連接”指示,則所述多池管理器不切換連接池,并且不重試原始連接池。
19.根據(jù)權(quán)利要求14的多池系統(tǒng),其中所述多池管理器在進(jìn)行故障轉(zhuǎn)移之前與應(yīng)用進(jìn)行核對(duì)。
20.根據(jù)權(quán)利要求14的多池系統(tǒng),其中所述多池管理器在進(jìn)行故障恢復(fù)之前與應(yīng)用進(jìn)行核對(duì)。
全文摘要
多池(210)可留意無(wú)效連接池(202A)并可避免選擇無(wú)效連接池(202A)。該多池(210)可在后臺(tái)(214)檢查連接池(202、204、…)是否已經(jīng)再生效。
文檔編號(hào)G06F15/173GK101095109SQ200580045638
公開(kāi)日2007年12月26日 申請(qǐng)日期2005年12月21日 優(yōu)先權(quán)日2004年12月31日
發(fā)明者拉胡爾·斯里瓦斯塔瓦 申請(qǐng)人:Bea系統(tǒng)公司