專利名稱:用于向應(yīng)用提供異構(gòu)連接對(duì)象的連接處理器和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種用于向應(yīng)用提供異構(gòu)連接對(duì)象的連接處理器和方法。
背景技術(shù):
現(xiàn)代軟件應(yīng)用通常與各種外部數(shù)據(jù)存儲(chǔ)(例如數(shù)據(jù)庫)通信,以便取回要處理的數(shù)據(jù)并且存儲(chǔ)所處理的數(shù)據(jù)。為此,應(yīng)用必須建立到各個(gè)數(shù)據(jù)存儲(chǔ)的連接,這涉及打開連接、取回和/或存儲(chǔ)數(shù)據(jù)以及最后關(guān)閉連接。然而,每次當(dāng)需要這種連接時(shí)由應(yīng)用本身建立連接是非常耗時(shí)的并且消耗了應(yīng)用和要連接的數(shù)據(jù)存儲(chǔ)兩者的大量處理能力,這導(dǎo)致性能的降低。為此,已知提供包括到特定數(shù)據(jù)存儲(chǔ)的一組預(yù)先配置的單個(gè)連接的連接池。通常, 連接池提供的連接的屬性是在配置連接池期間靜態(tài)地預(yù)先定義的,并且不能在隨后運(yùn)行時(shí)改變配置。應(yīng)用可以從連接池請(qǐng)求連接并且在它完成其處理之后將連接返回到池中。連接池可以保持返回的連接,以便其由另外的應(yīng)用重用。因此,連接池隱藏了在創(chuàng)建和管理連接時(shí)涉及的復(fù)雜性。然而,已知的連接池實(shí)現(xiàn)被設(shè)計(jì)為僅僅維持同構(gòu)連接,即給定連接池內(nèi)的所有連接具有相同配置/屬性,所述配置/屬性在池的配置期間定義。例如,在用于JDBC數(shù)據(jù)庫的連接池中,所有連接將指向相同的數(shù)據(jù)庫服務(wù)器、模式、用戶名和密碼。在該情況下,US 7,222,179B2公開了資源池,其管理資源對(duì)象的創(chuàng)建,以及池收縮,即銷毀不用的資源對(duì)象。然而,所公開的資源池遵照連接池的上述原理,所以資源池僅能夠向客戶提供同構(gòu)資源。此外,US2006/0146877A1、US 2006/0146878A1 和有關(guān)的因特網(wǎng)引用"JDBC MultiPools"(參照 http://download.oracle.com/docs/cd/E13222_01/wls/docs81b/ ConsoleHelp/jdbcmultipools. html)公開了維持多個(gè)連接池的多池管理器,每個(gè)連接池針對(duì)于給定數(shù)據(jù)庫的具體實(shí)例(即克隆)。多池管理器所服務(wù)于的所有連接是同構(gòu)的,即它們僅僅用作連接到相同的物理數(shù)據(jù)庫,盡管多池管理器關(guān)注對(duì)同構(gòu)連接池間請(qǐng)求的負(fù)載均衡。上面的方法在復(fù)雜的應(yīng)用場(chǎng)景中是特別不利的,其中例如基于運(yùn)行時(shí)的值,即基于僅在應(yīng)用運(yùn)行時(shí)期間可確定的值,應(yīng)用需要到不同數(shù)據(jù)存儲(chǔ)的連接,即具有不同配置的連接(異構(gòu)連接)。例如,在消息隊(duì)列連接中,對(duì)具體用戶來說,取回消息的隊(duì)列名稱可能不同,其不能在應(yīng)用實(shí)際運(yùn)行之前被確定。為了克服上面的缺點(diǎn),應(yīng)用通常被編程為必要時(shí)才使用連接池,如果應(yīng)用需要與連接池提供的連接配置不同的連接則自己創(chuàng)建另外的連接,從而實(shí)際上繞開了連接池。然而,該方法除了難于實(shí)現(xiàn)并且易于出錯(cuò)之外,具有另外的缺點(diǎn)手動(dòng)創(chuàng)建的連接不能得益于連接池提供的優(yōu)點(diǎn)。這導(dǎo)致應(yīng)用內(nèi)的資源和處理時(shí)間使用方面的額外開銷。另一個(gè)已知的解決方法是在應(yīng)用中手動(dòng)緩存曾經(jīng)建立的連接,以便在隨后的時(shí)間點(diǎn)由應(yīng)用重用它。然而,該方法是非常無效率和復(fù)雜的,因?yàn)閼?yīng)用基本上必須接管應(yīng)該由連接池執(zhí)行的所有任務(wù),例如創(chuàng)建和銷毀連接、移除無效的連接、處理超時(shí)和期滿、處理異常和清理、以及在例如池更新這樣的情況下通知其它相關(guān)的連接。第三個(gè)已知方法是在預(yù)先知道隨后需要的連接的配置的情況下,配置許多連接池。然而,由應(yīng)用處理一個(gè)以上的不同連接池是非常耗時(shí)和耗費(fèi)資源的,并且因此是不可接受的。最后,應(yīng)用可以使用一個(gè)連接池來取回所有的連接,其中應(yīng)用根據(jù)需要改變所取回同構(gòu)連接的配置,并且在連接返回到池中之前重置配置。明顯地,這僅僅對(duì)于在連接創(chuàng)建之后可以被改變的非常簡單的配置來說是可行的,并且不適用于復(fù)雜的應(yīng)用場(chǎng)景。因此,本發(fā)明潛在的技術(shù)問題是提供了一種向應(yīng)用提供連接的改進(jìn)方法,該方法是更有效并且不容易出錯(cuò)的,由此至少部分地克服了上述的現(xiàn)有技術(shù)的缺點(diǎn)。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的一個(gè)方面,該問題由用于向至少一個(gè)應(yīng)用提供多個(gè)異構(gòu)連接對(duì)象中的至少一個(gè)的連接處理器來解決。在權(quán)利要求1的實(shí)施例中,連接處理器包括a. 一個(gè)或多個(gè)異構(gòu)內(nèi)部連接池,其中每個(gè)內(nèi)部連接池適合于提供除了其它內(nèi)部連接池的配置之外的特定配置的同構(gòu)連接對(duì)象;和b.適合于從至少一個(gè)應(yīng)用接收至少一個(gè)請(qǐng)求的接口,其中至少一個(gè)請(qǐng)求包括特定配置的連接對(duì)象的標(biāo)識(shí),并且其中接口還適合于作為響應(yīng)向至少一個(gè)應(yīng)用提供來自相應(yīng)內(nèi)部連接池的連接對(duì)象。因此,實(shí)施例定義了一種連接處理器,其封裝和內(nèi)部地管理內(nèi)部連接池內(nèi)的特定配置的連接對(duì)象,并且還適合于當(dāng)被請(qǐng)求時(shí)向應(yīng)用提供連接對(duì)象。連接對(duì)象通常涉及數(shù)據(jù)存儲(chǔ),例如數(shù)據(jù)庫或者應(yīng)用期望使用的任何其它組件,并且用作為到該數(shù)據(jù)存儲(chǔ)的句柄。一旦向應(yīng)用提供了連接對(duì)象,應(yīng)用可以經(jīng)由連接對(duì)象訪問相應(yīng)的數(shù)據(jù)存儲(chǔ)。在上面的實(shí)施例中,連接處理器內(nèi)的每個(gè)內(nèi)部連接池可以包括特定配置的任何數(shù)量的連接對(duì)象。一個(gè)特定內(nèi)部連接池內(nèi)的所有連接對(duì)象是同構(gòu)的,即它們都具有相同的配置,因此結(jié)果是,連接處理器內(nèi)的不同內(nèi)部連接池可以將不同配置的同構(gòu)連接對(duì)象的集合分組。一個(gè)或多個(gè)內(nèi)部連接池是異構(gòu)的,即每個(gè)內(nèi)部連接池包括具有不同于其它連接池的配置的配置的的連接對(duì)象,以便向至少一個(gè)應(yīng)用提供適合于不同數(shù)據(jù)存儲(chǔ)(例如,具有不同數(shù)據(jù)庫URL、用戶名、密碼等的不同物理數(shù)據(jù)庫)的連接對(duì)象。連接處理器還包括適合于與應(yīng)用通信的接口。接口適合于從應(yīng)用接收對(duì)于特定配置的連接對(duì)象的請(qǐng)求。為此,在本實(shí)施例中,在接口處接收的請(qǐng)求包括特定配置的連接對(duì)象的標(biāo)識(shí),例如,按照請(qǐng)求中包括的一個(gè)或多個(gè)參數(shù)的形式。因此,應(yīng)用能夠在它的請(qǐng)求中向連接處理器標(biāo)識(shí)期望連接對(duì)象的屬性,即,應(yīng)用能夠指定要從連接處理器獲得的連接對(duì)象的期望特定配置。然后,連接處理器適合于經(jīng)由它的接口向應(yīng)用提供來自各個(gè)內(nèi)部連接池的適當(dāng)?shù)倪B接對(duì)象(即滿足所請(qǐng)求配置,即具有所請(qǐng)求屬性的連接對(duì)象)。因?yàn)檫B接池在連接處理器內(nèi)部,即封裝在其中,并且因?yàn)閼?yīng)用僅僅經(jīng)由連接處理器的接口與其通信,應(yīng)用不必知道連接處理器的各個(gè)內(nèi)部連接池并且優(yōu)選地不能直接對(duì)其訪問。因此,應(yīng)用能夠首次獲得特定配置的連接對(duì)象,而不必關(guān)注一個(gè)或多個(gè)連接池的數(shù)量、結(jié)構(gòu)、配置等。這大大降低了應(yīng)用獲得特定配置的連接對(duì)象所需的努力,這導(dǎo)致效率增加以及應(yīng)用內(nèi)更簡單并且因此更安全的代碼。另一方面,因?yàn)楦鱾€(gè)連接對(duì)象內(nèi)部地包括在連接處理器內(nèi),連接處理器能夠以集中方式管理連接對(duì)象,這改進(jìn)了連接池、其包括的連接對(duì)象以及連接的數(shù)據(jù)存儲(chǔ)的整體資源利用。在另外的方面中,連接處理器可以適合于取決于連接處理器是否已經(jīng)包括相應(yīng)的內(nèi)部連接池的評(píng)估,在運(yùn)行時(shí)期間創(chuàng)建專用于至少一個(gè)請(qǐng)求的新的內(nèi)部連接池,其中連接處理器可以還適合于在處理了至少一個(gè)請(qǐng)求之后保持所創(chuàng)建的內(nèi)部連接池。因此,如果連接處理器還沒有包括具有匹配于請(qǐng)求的連接對(duì)象的內(nèi)部連接池(即,不存在具有其配置匹配于應(yīng)用的請(qǐng)求內(nèi)指定的期望配置的連接對(duì)象的內(nèi)部連接池),連接處理器可以在運(yùn)行時(shí)期間創(chuàng)建新的適當(dāng)?shù)膬?nèi)部連接池。換言之,在連接處理器已被配置時(shí),連接處理器能夠滿足對(duì)于具有先天未知的配置的連接對(duì)象的請(qǐng)求。因此,連接處理器在運(yùn)行時(shí)期間動(dòng)態(tài)地適應(yīng)做出請(qǐng)求的應(yīng)用的需要。另外,一旦創(chuàng)建了新的內(nèi)部連接池并且將相應(yīng)的連接對(duì)象地送到做出請(qǐng)求的應(yīng)用,連接處理器能夠保持內(nèi)部連接池,以使得來自相同或者另一應(yīng)用的對(duì)于對(duì)應(yīng)于新創(chuàng)建的內(nèi)部連接池的連接對(duì)象的未來請(qǐng)求可以被立即處理。新的內(nèi)部連接池的創(chuàng)建可以附加或者替代地依賴于對(duì)所有現(xiàn)有內(nèi)部連接池中當(dāng)前使用的連接對(duì)象的數(shù)量的評(píng)估和/或?qū)υ谒鞋F(xiàn)有內(nèi)部連接池中包括的連接對(duì)象的總數(shù)量的評(píng)估。在本發(fā)明的又另一方面中,連接處理器可以還適合于在運(yùn)行時(shí)期間從一個(gè)或多個(gè)內(nèi)部連接池移除一個(gè)或多個(gè)現(xiàn)有的連接對(duì)象。這進(jìn)一步改進(jìn)了連接處理器的動(dòng)態(tài)性質(zhì)并且減少了資源使用,因?yàn)檫B接處理器可以不僅在運(yùn)行時(shí)期間按需創(chuàng)建新的內(nèi)部連接對(duì)象和池,而且還能夠在運(yùn)行時(shí)期間動(dòng)態(tài)地移除某些連接對(duì)象,例如以便釋放處理和存儲(chǔ)資源。移除一個(gè)或多個(gè)現(xiàn)有連接對(duì)象可以包括移除最近最少使用的、最近使用的、最少使用的、和/ 或最近最不頻繁使用的(the least frequently recently used)連接對(duì)象,將在下面的詳細(xì)描述中進(jìn)一步說明。而且,移除一個(gè)或多個(gè)現(xiàn)有的連接對(duì)象還可以依賴于對(duì)在所有現(xiàn)有內(nèi)部連接池中包括的連接對(duì)象的總數(shù)量的評(píng)估。在另一個(gè)方面中,評(píng)估在所有現(xiàn)有內(nèi)部連接池中包括的連接對(duì)象的總數(shù)量可以包括評(píng)估在所有現(xiàn)有內(nèi)部連接池中包括的連接對(duì)象的總數(shù)量是否超過了在配置連接處理器期間定義的預(yù)定義閾值。作為替代,預(yù)定義閾值可以在連接處理器運(yùn)行時(shí)期間被定義和/ 或改變,以便例如使其適合于應(yīng)用做出的增加數(shù)量的請(qǐng)求。因此,因?yàn)轭A(yù)定義閾值應(yīng)用于所有內(nèi)部連接池,連接處理器能夠根據(jù)全局配置以集中方式管理不同的內(nèi)部連接池。附加或者替代地,連接處理器的接口還可以適合于從至少一個(gè)應(yīng)用接收至少一個(gè)第二請(qǐng)求,其中至少一個(gè)第二請(qǐng)求不包括特定配置的連接對(duì)象的標(biāo)識(shí),并且其中接口還適合于向至少一個(gè)應(yīng)用提供來自預(yù)配置的內(nèi)部連接池的連接對(duì)象。因此,相比于特定地標(biāo)識(shí)具有某種配置的期望連接對(duì)象的至少一個(gè)第一請(qǐng)求,至少一個(gè)第二請(qǐng)求不包括該信息,即它是沒有指定至少一個(gè)應(yīng)用期望連接對(duì)象的哪種配置的對(duì)于連接對(duì)象的請(qǐng)求。這具有如下優(yōu)點(diǎn)被編程用于訪問現(xiàn)有技術(shù)的連接池的現(xiàn)有應(yīng)用也可以使用本發(fā)明的連接處理器,而不必改變它們的代碼。因此,本發(fā)明的連接處理器對(duì)于已知的連接池是向下兼容的。在本發(fā)明的另一個(gè)方面中,可以用一組連接屬性來配置每個(gè)內(nèi)部連接池中的連接對(duì)象,并且其中在接口處接收的至少一個(gè)請(qǐng)求包括所請(qǐng)求的連接屬性組。因此,連接處理器的內(nèi)部連接池中的連接對(duì)象的特定配置可以包括對(duì)于各個(gè)連接對(duì)象連接的各個(gè)數(shù)據(jù)存儲(chǔ)配置各個(gè)連接對(duì)象所需的任何信息。配置屬性例如可以包括諸如數(shù)據(jù)庫名稱、用戶名和/或密碼這樣的信息。在該方面中,來自至少一個(gè)應(yīng)用的至少一個(gè)請(qǐng)求也可以直接指定所請(qǐng)求的連接屬性組,例如請(qǐng)求的數(shù)據(jù)庫名稱、用戶名和/或密碼。因此,連接處理器可以選擇其連接對(duì)象具有匹配于所請(qǐng)求的連接屬性組的配置的相應(yīng)內(nèi)部連接池。替代地,至少一個(gè)請(qǐng)求可以僅包括所請(qǐng)求的連接屬性的子集,例如,僅包括數(shù)據(jù)庫地址和數(shù)據(jù)庫名稱,而沒有用戶名和密碼。在該情況下,連接處理器可以對(duì)于在至少一個(gè)請(qǐng)求中未指定的連接屬性 (該示例中為用戶名和密碼)填充預(yù)定義的默認(rèn)值。連接處理器然后可以從用相應(yīng)屬性配置的任何內(nèi)部連接池選擇連接對(duì)象。此外,每個(gè)內(nèi)部連接池中的連接對(duì)象可以用一組連接屬性來配置,并且連接處理器可以適合于存儲(chǔ)包括預(yù)定義的連接屬性組的一個(gè)或多個(gè)別名,其中在接口處接收的至少一個(gè)請(qǐng)求包括一個(gè)別名。因此,在該方面中,至少一個(gè)請(qǐng)求不包括特定的連接屬性組,而是僅僅包括別名,該別名是到優(yōu)選地在配置連接處理器期間預(yù)定義的預(yù)定義連接屬性組的引用。這具有如下優(yōu)點(diǎn)至少一個(gè)應(yīng)用不必知道準(zhǔn)確的連接屬性,而是僅僅需要知道別名以便獲得適當(dāng)?shù)倪B接對(duì)象。在本發(fā)明的又另一方面中,連接處理器可以適合于存儲(chǔ)涉及有關(guān)內(nèi)部連接池的信息,其中更新一個(gè)內(nèi)部連接池涉及更新所有有關(guān)的內(nèi)部連接池。因此,連接組可以在將有關(guān)連接池分組的連接處理器內(nèi)被定義。在某些場(chǎng)景中,例如,當(dāng)連接的數(shù)據(jù)存儲(chǔ)返回連接錯(cuò)誤時(shí),可能必須更新特定的連接池,即銷毀全部或部分所包括的連接對(duì)象和重新創(chuàng)建連接對(duì)象。在該情況下,如果更新了特定的內(nèi)部連接池,連接處理器能夠基于所定義的連接組來確定有關(guān)的另外的內(nèi)部連接池,并且還能夠更新那些有關(guān)的連接池。可以用包括鍵/值對(duì)的一組連接屬性來配置每個(gè)內(nèi)部連接池,并且其中涉及有關(guān)內(nèi)部連接池的信息包括鍵的子集,將在下面的詳細(xì)描述中進(jìn)一步說明。本發(fā)明還涉及一種方法,該方法使用上述的任何一種連接處理器向至少一個(gè)應(yīng)用提供多個(gè)異構(gòu)連接對(duì)象中的至少一個(gè)。最后,提供了包括用于實(shí)現(xiàn)方法的指令的計(jì)算機(jī)程序。
在隨后的詳細(xì)描述中,參考下面的附圖進(jìn)一步描述本發(fā)明的當(dāng)前優(yōu)選實(shí)施例圖1 根據(jù)本發(fā)明實(shí)施例的連接處理器的示意性框圖;和圖2-4 根據(jù)本發(fā)明實(shí)施例的由連接處理器執(zhí)行的任務(wù)的流程圖。
具體實(shí)施例方式在下面,針對(duì)圖1示意性示出的連接處理器1來描述本發(fā)明的當(dāng)前優(yōu)選實(shí)施例。如可看到的,連接處理器1包括兩個(gè)示例內(nèi)部連接池30和31,其中連接池30包括三個(gè)示例連接對(duì)象300,并且連接池31包括三個(gè)示例連接對(duì)象301。因此,特定連接池內(nèi)的連接對(duì)象是同構(gòu)的,而連接池是異構(gòu)的(即,每個(gè)連接池包括不同于其它連接池的連接對(duì)象)。應(yīng)當(dāng)注意,圖1僅示出了非常簡單的示例,并且連接處理器1可以包括可在運(yùn)行時(shí)期間被動(dòng)態(tài)創(chuàng)建和移除的任意數(shù)量的內(nèi)部連接池30、31和連接對(duì)象300、301。連接處理器1還包括接口 10,用于與示例應(yīng)用2通信,例如Java應(yīng)用。盡管連接處理器1通常能夠經(jīng)由接口 10與任意數(shù)量的應(yīng)用2通信,接口 10優(yōu)選地是一個(gè)或多個(gè)應(yīng)用2和連接處理器1之間的唯一通信點(diǎn)ο在下面,將結(jié)合以下接口定義來描述單個(gè)連接池(例如內(nèi)部連接池30、31中的一個(gè))的接口
public interface ConnectionPool { public Connection getConnection(); public void releaseConnection(Connection conn); int getMaxConnections(); int getMinConnections(); int sizeQ;
}如可看到的,操作getCormectionO適合于從連接池取回連接對(duì)象。如果沒有空閑的連接對(duì)象,即,連接池內(nèi)所有的連接對(duì)象當(dāng)前都被使用,并且如果連接池的當(dāng)前大小小于所允許連接的最大數(shù)目,可以創(chuàng)建新的連接對(duì)象。否則,如果達(dá)到了連接池的最大尺寸, 可以拋出異常,或者可以強(qiáng)迫調(diào)用方等待預(yù)定義的時(shí)間量。應(yīng)當(dāng)注意,單個(gè)連接池的接口的上面的操作getCormection ()不接受任何輸入?yún)?shù),因?yàn)檫B接池僅僅存儲(chǔ)同構(gòu)的連接對(duì)象。因此,getCormection ()操作的調(diào)用方不能請(qǐng)求特定配置的連接對(duì)象,而是必須接受作為調(diào)用的響應(yīng)由連接池提供的連接對(duì)象。因此,單個(gè)連接池適合于僅向調(diào)用方提供預(yù)先配置的連接對(duì)象,其中配置由連接池預(yù)先定義。操作 releaseConnection(Connection conn)可以用于向連接池通知參數(shù)‘conn’所標(biāo)識(shí)的連接對(duì)象被釋放,即,它不再由調(diào)用方使用。然后,所標(biāo)識(shí)的連接對(duì)象可以由連接池釋放并且可以在隨后被重用。操作getMaxCormectionsO適合于返回在任何時(shí)間點(diǎn)連接池內(nèi)被允許存在的連接對(duì)象的最大數(shù)目。該數(shù)目在配置單個(gè)連接池期間被指定并且專用于該連接池。類似地,操作getMinCormectionsO適合于返回連接池中保持的連接對(duì)象的最小數(shù)目。操作 SizeO適合于返回當(dāng)前位于特定連接池內(nèi)的連接對(duì)象的數(shù)目。依賴于具體的實(shí)現(xiàn),連接池還可以包括另外的操作。當(dāng)初始化連接池時(shí),即在接收第一請(qǐng)求之前,它可以立即創(chuàng)建最少數(shù)目的連接對(duì)象,如由getMinCormectionsO操作所指定的。在下面,結(jié)合以下示例接口規(guī)范來說明根據(jù)本發(fā)明實(shí)施例的連接處理器1的接口 10
public interface ConnectionHandler {
public Connection getConnection(Map attributes);
int getMaxConnectionPerGroup();
int getMinConnectionPerGroup();
public void releaseConnection(Connection conn);
8
如可看到的,當(dāng)被請(qǐng)求時(shí),連接處理器1的操作getConnection(Mapattributes) 接受用于標(biāo)識(shí)特定配置的連接對(duì)象300、301的輸入?yún)?shù)‘a(chǎn)ttributes’。然后,操作可以返回匹配于請(qǐng)求的連接對(duì)象300、301,即按調(diào)用方期望所配置的連接對(duì)象300、301。在上面的示例中,輸入?yún)?shù)按照包括鍵/值對(duì)的映射的形式。應(yīng)用2可以在對(duì)連接處理器1的請(qǐng)求中調(diào)用操作getConnection (Map attributes),其中請(qǐng)求可以包括用于屬性鍵的具體屬性值,以便獲得特定配置的連接對(duì)象300、301。在某些實(shí)施例中,至少某些,優(yōu)選地,全部的鍵可以被預(yù)定義并且專用于連接處理器1的實(shí)現(xiàn)。例如,在用于提供JDBC連接對(duì)象300、301 的連接處理器1的示例實(shí)現(xiàn)中,鍵可以被定義為服務(wù)器IP地址、服務(wù)器端口和/或數(shù)據(jù)庫名稱。替代地,連接屬性,即應(yīng)用2在其請(qǐng)求中提供的鍵/值對(duì)可以是任意的并且完全由應(yīng)用2確定。此外,操作getMaxConnectionsPerGroupO可以適合于返回可為組創(chuàng)建的連接對(duì)象300、301(即,具有相同屬性值的連接對(duì)象300、301)的最大數(shù)目。類似地,操作 getMinConnectionsPerGroup (可以適合于返回為組維持的連接對(duì)象300、301 (即具有相同屬性值的連接對(duì)象300、301)的最小數(shù)目。優(yōu)選地,這兩個(gè)操作,即最大和最小數(shù)目閾值在連接處理器1中定義一次并且應(yīng)用于每個(gè)單個(gè)的內(nèi)部連接池30、31,以使得可以根據(jù)全局配置管理所有內(nèi)部連接池30、31。而且,接口 10還可以包括不接受任何輸入?yún)?shù)的操作getConnection ()(未在上面的接口規(guī)范中描繪)。如果該操作在來自應(yīng)用2的請(qǐng)求中被調(diào)用,操作可以根據(jù)默認(rèn)配置,優(yōu)選地從默認(rèn)預(yù)先配置的內(nèi)部連接池30、31返回連接對(duì)象300、301。這也可以適用于如下情況當(dāng)調(diào)用了操作getConnection (Map attributes),但沒有提供屬性和/或?qū)傩灾禐榭諘r(shí)。最后,上面的接口規(guī)范示出了 releaseConnection(Connection conn)操作,其用于從相應(yīng)的連接池30、31移除特定的現(xiàn)有連接對(duì)象300、301 (即輸入?yún)?shù)conn表示的連接對(duì)象)。在下面,更詳細(xì)地描述本發(fā)明的連接處理器1的內(nèi)部功能。已經(jīng)在上面進(jìn)一步說明,連接處理器1包括一個(gè)或多個(gè)內(nèi)部異構(gòu)連接池30、31并且因此可以理解為創(chuàng)建和維持異構(gòu)連接池的池,其中每個(gè)池內(nèi)部的連接對(duì)象是同構(gòu)的。優(yōu)選地,連接池30、31之一包括默認(rèn)配置的連接對(duì)象300、301,其可由應(yīng)用2通過調(diào)用連接處理器1的接口 10的 getConnection()操作(沒有輸入?yún)?shù))來獲得。另一方面,當(dāng)接口接收了對(duì)于特定配置的連接對(duì)象300、301的請(qǐng)求(例如經(jīng)由操作getConnection (Map attributes)時(shí),連接處理器1將會(huì)從另外的內(nèi)部連接池30、31之一服務(wù)該請(qǐng)求。如果沒有包括適當(dāng)連接對(duì)象300、 301的內(nèi)部連接池30、31,連接處理器1可以創(chuàng)建適合于提供所請(qǐng)求的配置的連接對(duì)象300、 301的新的內(nèi)部連接池30、31。然而,附加的內(nèi)部連接池30、31的內(nèi)部創(chuàng)建對(duì)于做出調(diào)用的一個(gè)或多個(gè)應(yīng)用2來說是隱藏的。內(nèi)部連接池30、31中的每一個(gè)可以根據(jù)配置參數(shù)在運(yùn)行時(shí)期間被動(dòng)態(tài)地配置。在一個(gè)實(shí)施例中,連接池配置參數(shù)可以在連接處理器1中被被定義一次并且應(yīng)用于所有的內(nèi)部連接池30、31,以便實(shí)現(xiàn)所有內(nèi)部池的全局配置。以下列出了示例的連接池配置參數(shù)-每組的最大連接該參數(shù)指定了可為組創(chuàng)建的連接對(duì)象300、301(即具有相同配置的連接對(duì)象300、301)的最大數(shù)目,并且確定了可在一個(gè)內(nèi)部連接池30、31內(nèi)被創(chuàng)建的連接對(duì)象300、301的最大數(shù)目。該參數(shù)在圖4的流程圖中被示例性地稱作為MAX_SIZE_PER_ GRP。-每組的最小連接該參數(shù)指定了在每個(gè)內(nèi)部連接池30、31中維持的連接對(duì)象 300,301的最小數(shù)目。該參數(shù)在下面被示例性地稱作為MIN_SIZE_PER_GRP。在優(yōu)選實(shí)施例中,最初在連接處理器1初始化時(shí)不創(chuàng)建最小數(shù)目的連接對(duì)象300、301,因?yàn)樵谠摃r(shí)間點(diǎn), 連接對(duì)象300、301的配置通常是未知的。相反,由應(yīng)用2經(jīng)由它們的請(qǐng)求確定由連接處理器1在運(yùn)行時(shí)期間創(chuàng)建哪些特定配置的連接對(duì)象300、301和相應(yīng)的內(nèi)部連接池30、31。此外,連接處理器1可以包括另外的全局配置參數(shù)-最大池尺寸該參數(shù)指定了可以在整個(gè)連接處理器1中,即在所有的內(nèi)部連接池 30,31中創(chuàng)建的連接對(duì)象300、301的最大數(shù)目。該參數(shù)在圖3和4的流程圖中示例性地稱作為MAX_P00L_SUE。一旦超過該閾值,連接處理器1可以移除一個(gè)或多個(gè)現(xiàn)有的內(nèi)部連接池30、31和/或連接對(duì)象300、301,將在下面進(jìn)一步詳細(xì)說明。在下面,將參考圖2到4的流程圖更詳細(xì)地描述連接處理器1的各種有利特征。將會(huì)理解,可以提供僅僅支持某些下面給出的特征的連接處理器1的各個(gè)實(shí)施例,而仍然實(shí)現(xiàn)它們各自的優(yōu)點(diǎn)。圖2示出了當(dāng)從應(yīng)用2接收請(qǐng)求時(shí)由連接處理器1執(zhí)行的處理。處理在步驟100 開始,并且進(jìn)行到判定步驟101。在步驟101,判定請(qǐng)求是否針對(duì)于特定配置的連接對(duì)象300、301,即判定連接對(duì)象 300、301是要從默認(rèn)的內(nèi)部連接池30、31提供還是要從特定配置的內(nèi)部連接池30、31提供。 在一個(gè)實(shí)施例中,當(dāng)調(diào)用沒有輸入?yún)?shù)的操作getCormectionO時(shí),使用默認(rèn)的內(nèi)部連接池30、31。這也適用于如下情況當(dāng)調(diào)用操作getConnection(Map attributes),但沒有提供屬性的值時(shí),和/或當(dāng)所提供的屬性等同于默認(rèn)內(nèi)部連接池30、31的屬性時(shí)。如果是這種情況,在步驟103中,從默認(rèn)內(nèi)部連接池30、31取回連接對(duì)象300、301 并且將其返回給做出調(diào)用的應(yīng)用2。如果在默認(rèn)內(nèi)部連接池30、31中不存在連接對(duì)象300、 301,在將連接對(duì)象300、301地送到做出請(qǐng)求的應(yīng)用2之前在步驟103中創(chuàng)建它。如果在步驟101中判定請(qǐng)求是對(duì)于特定配置的連接對(duì)象300、301的請(qǐng)求,連接處理器1進(jìn)行到判定步驟102并且判定是否已經(jīng)存在適合于滿足請(qǐng)求的內(nèi)部連接池30、 31 (例如,通過比較所請(qǐng)求的連接屬性組和現(xiàn)有內(nèi)部連接池30、31的連接屬性組)。如果在步驟102中標(biāo)識(shí)了適當(dāng)?shù)膬?nèi)部連接池30、31,連接處理器1進(jìn)行到步驟105 并且判定相應(yīng)的所標(biāo)識(shí)內(nèi)部連接池30、31是否具有任何空閑的連接對(duì)象300、301 (即,是否已經(jīng)存在當(dāng)前未被使用的連接對(duì)象300、301)。如果是,在步驟106中取回相應(yīng)的連接對(duì)象 300,301并且將其提供給做出調(diào)用的應(yīng)用2。如果在步驟105中沒有標(biāo)識(shí)出空閑的連接對(duì)象300、301,連接處理器1進(jìn)行到步驟108(參照?qǐng)D4)并且判定所標(biāo)識(shí)內(nèi)部連接池30、31內(nèi)當(dāng)前存在的使用中的連接對(duì)象300、 301的數(shù)目是否小于每組可允許的連接對(duì)象300、301的最大數(shù)目(參照上面說明的參數(shù) MAX_SIZE_PER_GRP)。如果不是,不能創(chuàng)建連接對(duì)象300、301 (步驟11 并且處理在步驟 113結(jié)束。通常,連接處理器1可以為此在當(dāng)前使用的(即,由應(yīng)用2用于連接到某個(gè)數(shù)據(jù)存儲(chǔ))或當(dāng)前未使用的(即,應(yīng)用2已完成對(duì)連接對(duì)象的使用并且將它返回到連接處理器 1)已經(jīng)創(chuàng)建的連接對(duì)象300、301之間進(jìn)行區(qū)分。
10
否則,判定步驟210判定整個(gè)連接處理器1中當(dāng)前存在的使用中的連接對(duì)象300、 301的總數(shù)目是否小于整個(gè)連接處理器1中,即其所有的內(nèi)部連接池30、31中可允許的連接對(duì)象300、301的最大數(shù)目(參照上述的參數(shù)MAX_P00L_SUE)。如果不是,不能創(chuàng)建連接對(duì)象300、301 (步驟112)并且處理在步驟113中結(jié)束。否則,判定步驟109確定整個(gè)連接處理器1中當(dāng)前存在的連接對(duì)象300、301的總數(shù)目(即空閑或是在使用的連接對(duì)象的數(shù)目)是否小于整個(gè)連接處理器1中,即其所有內(nèi)部連接池30、31中的可允許連接對(duì)象300、301的最大數(shù)目(參照上面說明的參數(shù)MAX_ P00L_SIZE)。如果是,在步驟110中連接管理器1在所標(biāo)識(shí)的內(nèi)部連接池30、31中創(chuàng)建新的連接對(duì)象300、301并且將新創(chuàng)建的連接對(duì)象300、301提供給做出調(diào)用的應(yīng)用2。如果不是,連接管理器1可以在步驟114中從內(nèi)部池30、31移除現(xiàn)有的連接對(duì)象 300,301之一(進(jìn)一步參見下面)并且隨后進(jìn)行到步驟110。如果步驟102中的評(píng)估(參照?qǐng)D2)判定不存在任何適合于處理請(qǐng)求的內(nèi)部連接池30、31,連接處理器進(jìn)行到步驟201(參照?qǐng)D3)并且判定使用中的連接對(duì)象300、301的總數(shù)目是否小于允許的最大值(參照上面說明的參數(shù)MAX_P00L_SUE)。如果不是,不能創(chuàng)建連接對(duì)象300、301 (步驟204)并且處理在步驟205結(jié)束。否則,連接處理器進(jìn)行到步驟115(參照?qǐng)D3)并且判定連接對(duì)象(使用中和空閑的)300、301的總數(shù)目是否小于允許的最大值(參照上面說明的參數(shù)MAX_P00L_SUE)。如果是,連接處理器1在步驟116中創(chuàng)建專用于請(qǐng)求的新的內(nèi)部連接池30、31,即適合于提供滿足請(qǐng)求的連接對(duì)象300、301的新的內(nèi)部連接池30、31。然后,在步驟202中連接處理器 1在所標(biāo)識(shí)的內(nèi)部連接池30、31中創(chuàng)建新的連接對(duì)象300、301,并且將新創(chuàng)建的連接對(duì)象 300,301提供給做出調(diào)用的應(yīng)用2。如果步驟115中的評(píng)估判定整個(gè)連接處理器1中已存在的連接對(duì)象300、301的總數(shù)量等于允許的閾值(參照上面說明的參數(shù)MAX_P00L_SUE),連接處理器1可以在步驟 117中從內(nèi)部連接池30、31移除現(xiàn)有的連接對(duì)象300、301中的一個(gè),并且隨后進(jìn)行到步驟 116。在下面,將描述用于從內(nèi)部連接池30、31移除114、117連接對(duì)象300、301的策略的有利變化。將會(huì)理解,依賴于應(yīng)用的使用情況,可以利用另外的策略。此外,如果影響連接對(duì)象300、301重用的條件是預(yù)先知道的,連接處理器1可以用適當(dāng)?shù)念A(yù)定義移除策略來實(shí)現(xiàn)。另外,例如如果要在適合于連接到各種不同的數(shù)據(jù)存儲(chǔ)的應(yīng)用服務(wù)器上使用連接處理器1,可以由管理員在運(yùn)行時(shí)和/或連接處理器配置時(shí)期間選擇適當(dāng)?shù)囊瞥呗?。下面是移除策略的示?最近最少使用(LRU)根據(jù)該策略,移除在某時(shí)間周期內(nèi)未被處理的連接對(duì)象 300、301。時(shí)間周期可以由連接處理器1的適當(dāng)配置參數(shù)來確定。當(dāng)應(yīng)用2常常重用它們最近使用過的連接對(duì)象300、301時(shí),該策略尤其有利。-最近使用(MRU)根據(jù)該策略,首先移除最近使用的連接對(duì)象300、301。在大部分近來被訪問的連接對(duì)象300、301在近期不會(huì)被頻繁重用,但是連接越早,它越可能要被訪問的情況下,該策略是尤其有利的。-最少使用(LFU)根據(jù)該策略,被使用的時(shí)間量最少的連接對(duì)象300、301被移除。 在該策略中,連接處理器1可以維持一個(gè)或多個(gè)計(jì)數(shù)器,以判定單個(gè)連接對(duì)象300、301被請(qǐng)求得多頻繁。當(dāng)某些連接對(duì)象300、301相比于其它的被更頻繁地使用,以使得計(jì)數(shù)器可以用作為連接對(duì)象300、301在將來被重用的可能性的指示時(shí),該策略是特別有利的。該策略的另外的變化時(shí)“老化LFU”,其相比于較早的使用更多地考慮近來的使用。-最近最不頻繁使用(LFRU)該策略移除最少使用和近來未使用的連接對(duì)象300、 301,由此組合了 LRU和LFU策略,這可導(dǎo)致改進(jìn)的性能。在下面,將描述示例應(yīng)用場(chǎng)景,其中本發(fā)明的連接處理器1是特別有利的。例如, 應(yīng)用2可以設(shè)計(jì)為使用消息機(jī)制,例如MQ消息,用于處理來自應(yīng)用2的多個(gè)不同用戶的請(qǐng)求消息。在處理消息之后,應(yīng)用2會(huì)將相應(yīng)的響應(yīng)消息發(fā)送到做出請(qǐng)求的用戶。在該示例中,所有用戶將他們的請(qǐng)求消息插入到在配置時(shí)間期間對(duì)應(yīng)用2來說已知的預(yù)定義請(qǐng)求隊(duì)列。然而,用于響應(yīng)消息的對(duì)應(yīng)響應(yīng)隊(duì)列將是專用于應(yīng)用2的每個(gè)用戶的并且優(yōu)選地在用戶環(huán)境中運(yùn)行。因此,在配置時(shí)響應(yīng)隊(duì)列對(duì)于應(yīng)用2來說是未知的,并且因此對(duì)于應(yīng)用2期望使用的連接處理器1來說也是未知的。響應(yīng)隊(duì)列屬性,例如隊(duì)列服務(wù)器地址、端口、隊(duì)列管理器名稱、隊(duì)列名稱和/或通道名稱,將是未知的,直到做出調(diào)用的用戶在他們的請(qǐng)求消息中,即在運(yùn)行時(shí),指定這些屬性為止。因此,應(yīng)用2需要對(duì)于不同的用戶請(qǐng)求使用不同的連接對(duì)象,這通過上述的連接處理器1的有利特征來實(shí)現(xiàn)。在另一個(gè)有關(guān)的應(yīng)用場(chǎng)景中,應(yīng)用2期望將用于用戶的數(shù)據(jù)通知到用戶數(shù)據(jù)庫的相應(yīng)表格。然而,數(shù)據(jù)庫連接屬性,例如服務(wù)器地址、端口、模式名稱、用戶和/或密碼,對(duì)于每個(gè)用戶來說將是不同的,并且因此應(yīng)用2需要對(duì)于每個(gè)用戶使用具有不同配置,即連接屬性的不同連接對(duì)象。而且在這里,應(yīng)用2可以通過使用本發(fā)明的連接處理器1來有利地完成該任務(wù)。在某些實(shí)施例中,連接處理器1可以附加或者替代地具有將內(nèi)部連接池30、31的配置,例如有關(guān)的連接屬性與組關(guān)聯(lián)的能力。因此,在連接處理器1的配置期間,可以指定哪些連接參數(shù)作為所謂的連接組的一部分。在下面,使用為JDBC連接對(duì)象配置的連接處理器1的池更新特征來給出示例。通常,如果當(dāng)創(chuàng)建連接時(shí)或者當(dāng)執(zhí)行事務(wù)時(shí)出現(xiàn)任何連接失敗,更新連接池(即,池內(nèi)的所有連接對(duì)象被銷毀和重新創(chuàng)建)。連接失敗的示例原因可以是網(wǎng)絡(luò)故障或數(shù)據(jù)庫無效。在示例中,連接屬性,即連接處理器1的內(nèi)部連接池30、31的具體配置包括屬性數(shù)據(jù)庫服務(wù)器地址(SERVER_IP)、數(shù)據(jù)庫服務(wù)器端口(PORT)、數(shù)據(jù)庫名稱(DATABASE_NAME)、 用戶名(USER)和密碼(PASSWORD)。在該示例中,連接組可以定義為僅包括屬性SERVER_IP、 PORT和DATABASE_NAME,即上面的連接屬性的子集。如果連接處理器1需要更新它的內(nèi)部連接池30、31,僅僅需要更新這樣的內(nèi)部連接池30、31 該內(nèi)部連接池30、31具有的連接對(duì)象300、301有相同的SERVER_IP、P0RT和DATABASE_NAME的值,因?yàn)樗鼈冞B接到相同的物理數(shù)據(jù)庫服務(wù)器。注意,USER和PASSWORD不包括在示例連接組中,因?yàn)榧词?位于不同的內(nèi)部連接池30、31內(nèi)的)兩個(gè)連接對(duì)象300、301的USER屬性不同,但是如果它們都連接到相同的數(shù)據(jù)庫服務(wù)器,在連接失敗的情況下需要更新這兩個(gè)連接對(duì)象300、301。類似地,在另一個(gè)示例中,適合于為MQ消息(參見上面)維持內(nèi)部連接池30、31 的連接處理器1可以包括具有屬性MQ服務(wù)器地址、端口、隊(duì)列管理器名稱和連接通道的連接組。因此,池更新將影響具有上面屬性的相同值的所有連接對(duì)象300、301,即使例如隊(duì)列名稱或其它另外的連接屬性不同。
總的來說,連接組的特征具有這樣的優(yōu)點(diǎn)基于連接屬性值有效地控制連接處理器1的生命周期管理活動(dòng),例如池更新、連接期滿、控制連接對(duì)象的最小和最大數(shù)目、等等。本發(fā)明的連接處理器1還可以具有使用別名預(yù)定義連接參數(shù)的子集的能力。當(dāng)在配置連接處理器1時(shí)已經(jīng)知道連接屬性的一部分的情況下,這尤其有利。然后,在運(yùn)行時(shí)期間,應(yīng)用2可以基于某些動(dòng)態(tài)屬性的值來請(qǐng)求連接對(duì)象300、301,將在下面更詳細(xì)地說明。在下面的示例中(也參見上面另外的示例應(yīng)用場(chǎng)景),應(yīng)用2期望將用于用戶的數(shù)據(jù)通知到用戶數(shù)據(jù)庫的相應(yīng)表格。應(yīng)用2可能需要到每個(gè)用戶數(shù)據(jù)庫的連接。在該示例中,存在都使用不同數(shù)據(jù)庫的固定的預(yù)定義數(shù)目的用戶?,F(xiàn)有技術(shù)中已知的方法是在應(yīng)用2中對(duì)于每個(gè)用戶配置不同的連接池。那么應(yīng)用2將必須在運(yùn)行時(shí)期間標(biāo)識(shí)要使用哪個(gè)連接池,例如基于用戶和連接池之間的映射。然而,這顯然是耗費(fèi)勞動(dòng)并且易于出錯(cuò)的,并且大大增加了需要由應(yīng)用2執(zhí)行的管理任務(wù)的開銷。相反,如果應(yīng)用2使用本發(fā)明的連接處理器1的一個(gè)實(shí)施例,優(yōu)選地在配置時(shí)間期間,可以在連接處理器1中定義一個(gè)或多個(gè)別名,其中每個(gè)別名是一組連接屬性和/或?qū)?yīng)值的定義。在上面給出的示例場(chǎng)景中,別名中的連接屬性之一可以是相應(yīng)用戶的ID、數(shù)據(jù)庫服務(wù)器地址、數(shù)據(jù)庫名稱、用戶名和/或密碼,優(yōu)選地專用于每個(gè)單個(gè)用戶。要注意,上面已經(jīng)另外描述的另外連接處理器的配置屬性(例如允許的連接的最大/最小數(shù)目、期滿時(shí)間、 等等)對(duì)于所有別名來說可以是相同的,并且因此在連接處理器1中被全局地定義。在運(yùn)行時(shí)期間,當(dāng)應(yīng)用2從用戶接收請(qǐng)求時(shí),應(yīng)用2通過發(fā)送包括特定配置的連接對(duì)象的標(biāo)識(shí)的請(qǐng)求,例如通過調(diào)用連接處理器1的接口 10提供的操作 getConnection (String aliasname),僅僅使用單個(gè)連接處理器1。當(dāng)這么做時(shí),應(yīng)用2將對(duì)應(yīng)于做出請(qǐng)求的用戶的別名插入到getConnection操作的輸入?yún)?shù)中并且連接處理器1 可以根據(jù)別名定義判定相應(yīng)的連接屬性。在一個(gè)實(shí)施例中,當(dāng)定義別名時(shí),別名可以是用戶 ID。然后,在運(yùn)行時(shí)期間,應(yīng)用2可以調(diào)用操作getConnection (String aliasname),相應(yīng)的 userid作為別名。另一種方式是在設(shè)計(jì)時(shí)間期間,當(dāng)配置別名時(shí)將userid作為屬性并且為其指定值。然后,應(yīng)用2可以使用操作getConnection(Mapattributes)來通過將userid 傳遞到屬性中而獲得連接對(duì)象300、301。總的來說,上述的本發(fā)明的連接處理器1的各種特征提供了這樣的優(yōu)點(diǎn)做出調(diào)用的應(yīng)用2僅僅需要知道一個(gè)單個(gè)連接處理器1,而不是如現(xiàn)有技術(shù)中那樣要知道多個(gè)不同連接池,這導(dǎo)致了應(yīng)用2中的開銷大大減少,并且由此增加了它們的性能。而且,另外的優(yōu)點(diǎn)在于,可以顯著優(yōu)化整體資源使用,因?yàn)檫B接處理器1的配置屬性(例如允許的連接的最大/最小數(shù)目)優(yōu)選地應(yīng)用于整個(gè)連接處理器1所維持的所有內(nèi)部連接池和連接對(duì)象, 使得連接處理器1能夠以集中方式管理內(nèi)部連接池30、31。
權(quán)利要求
1.一種連接處理器(1),用于向至少一個(gè)應(yīng)用(2)提供多個(gè)異構(gòu)連接對(duì)象(300、301) 中的至少一個(gè),其中所述連接處理器(1)包括a.一個(gè)或多個(gè)異構(gòu)內(nèi)部連接池(30、31),其中每個(gè)內(nèi)部連接池(30、31)適合于提供除了其它內(nèi)部連接池(30、31)的配置之外的特定配置的同構(gòu)連接對(duì)象(300、301);和b.接口(10),適合于從所述至少一個(gè)應(yīng)用(2)接收至少一個(gè)請(qǐng)求,其中所述至少一個(gè)請(qǐng)求包括特定配置的連接對(duì)象(300、301)的標(biāo)識(shí),并且其中所述接口(10)還適合于作為響應(yīng)向所述至少一個(gè)應(yīng)用( 提供來自相應(yīng)內(nèi)部連接池(30、31)的連接對(duì)象(300、301)。
2.根據(jù)權(quán)利要求1所述的連接處理器(1),適合于取決于所述連接處理器(1)是否已經(jīng)包括相應(yīng)的內(nèi)部連接池(30、31)的評(píng)估(102),在運(yùn)行時(shí)期間創(chuàng)建(106)專用于所述至少一個(gè)請(qǐng)求的新的內(nèi)部連接池(30、31),其中所述連接處理器(1)還適合于在處理了所述至少一個(gè)請(qǐng)求之后保持所創(chuàng)建的內(nèi)部連接池(30、31)。
3.根據(jù)前一權(quán)利要求所述的連接處理器(1),其中所述新的內(nèi)部連接池(30、31)的創(chuàng)建(116)還依賴于對(duì)所有現(xiàn)有內(nèi)部連接池(30、31)中當(dāng)前使用的連接對(duì)象(300、301)的數(shù)量的評(píng)估(201)和/或?qū)υ谒鞋F(xiàn)有內(nèi)部連接池(30、31)中包括的連接對(duì)象(300、301)的總數(shù)量的評(píng)估(115)。
4.根據(jù)前述權(quán)利要求中任一項(xiàng)所述的連接處理器(1),還適合于在運(yùn)行時(shí)期間從所述一個(gè)或多個(gè)內(nèi)部連接池(30、31)移除(114、117)現(xiàn)有的連接對(duì)象(300、301)中的一個(gè)或多個(gè)。
5.根據(jù)前一權(quán)利要求所述的連接處理器(1),其中移除(114、117)現(xiàn)有連接對(duì)象(300、 301)中的一個(gè)或多個(gè)包括移除最近最少使用的、最近使用的、最少使用的、和/或最近最不頻繁使用的一個(gè)或多個(gè)連接對(duì)象(300、301)。
6.根據(jù)權(quán)利要求4或5所述的連接處理器(1),其中移除(114、117)現(xiàn)有的連接對(duì)象 (300,301)中的一個(gè)或多個(gè)依賴于對(duì)在所有現(xiàn)有內(nèi)部連接池(30、31)中包括的連接對(duì)象 (300,301)的總數(shù)量的評(píng)估(109,115) ο
7.根據(jù)權(quán)利要求3或6所述的連接處理器(1),其中所述評(píng)估(109、1巧)包括評(píng)估在所有現(xiàn)有內(nèi)部連接池(30、31)中包括的連接對(duì)象(300、301)的總數(shù)量是否超過了在配置所述連接處理器(1)期間定義的預(yù)定義閾值。
8.根據(jù)前述權(quán)利要求中任一項(xiàng)所述的連接處理器(1),其中所述接口(10)還適合于從所述至少一個(gè)應(yīng)用( 接收至少一個(gè)第二請(qǐng)求,其中所述至少一個(gè)第二請(qǐng)求不包括特定配置的連接對(duì)象(300、301)的標(biāo)識(shí),并且其中所述接口(10)還適合于向所述至少一個(gè)應(yīng)用 (2)提供來自預(yù)配置的內(nèi)部連接池(30、31)的連接對(duì)象(300、301)。
9.根據(jù)前述權(quán)利要求中任一項(xiàng)所述的連接處理器(1),其中用一組連接屬性來配置每個(gè)內(nèi)部連接池(30、31)中的所述連接對(duì)象(300、301),并且其中在所述接口(10)處接收的所述至少一個(gè)請(qǐng)求包括所請(qǐng)求的一組連接屬性。
10.根據(jù)前述權(quán)利要求中任一項(xiàng)所述的連接處理器(1),其中用一組連接屬性來配置每個(gè)內(nèi)部連接池(30、31)中的所述連接對(duì)象(300、301),其中所述連接處理器(1)適合于存儲(chǔ)包括預(yù)定義的一組連接屬性的一個(gè)或多個(gè)別名并且其中在所述接口(10)處接收的所述至少一個(gè)請(qǐng)求包括所述別名之一。
11.根據(jù)前述權(quán)利要求中任一項(xiàng)所述的連接處理器(1),適合于存儲(chǔ)標(biāo)識(shí)一個(gè)或多個(gè)有關(guān)內(nèi)部連接池(30、31)的信息,其中更新所述內(nèi)部連接池(30、31)之一涉及更新所有有關(guān)的內(nèi)部連接池(30、31)。
12.根據(jù)前一權(quán)利要求所述的連接處理器(1),其中用包括鍵/值對(duì)的一組連接屬性來配置每個(gè)內(nèi)部連接池(30、31),并且其中標(biāo)識(shí)一個(gè)或多個(gè)有關(guān)內(nèi)部連接池(30、31)的所述信息包括所述鍵的子集。
13.一種方法,用于使用根據(jù)前述權(quán)利要求中任一項(xiàng)所述的連接處理器(1)向至少一個(gè)應(yīng)用(2)提供多個(gè)異構(gòu)連接對(duì)象(300、301)中的至少一個(gè)。
14.一種計(jì)算機(jī)程序,其包括用于實(shí)現(xiàn)根據(jù)前一權(quán)利要求所述的方法的指令。
全文摘要
公開了用于向應(yīng)用提供異構(gòu)連接對(duì)象的連接處理器和方法。本發(fā)明涉及一種連接處理器(1),用于向至少一個(gè)應(yīng)用(2)提供多個(gè)異構(gòu)連接對(duì)象(300、301)中的至少一個(gè),其中所述連接處理器(1)包括a.一個(gè)或多個(gè)異構(gòu)內(nèi)部連接池(30、31),其中每個(gè)內(nèi)部連接池(30、31)適合于提供除了其它內(nèi)部連接池(30、31)的配置之外的特定配置的同構(gòu)連接對(duì)象(300、301);和b.接口(10),適合于從所述至少一個(gè)應(yīng)用(2)接收至少一個(gè)請(qǐng)求,其中所述至少一個(gè)請(qǐng)求包括特定配置的連接對(duì)象(300、301)的標(biāo)識(shí),并且其中所述接口(10)還適合于作為響應(yīng)向所述至少一個(gè)應(yīng)用(2)提供來自相應(yīng)內(nèi)部連接池(30、31)的連接對(duì)象(300、301)。
文檔編號(hào)G06F17/30GK102193820SQ20111005324
公開日2011年9月21日 申請(qǐng)日期2011年3月3日 優(yōu)先權(quán)日2010年3月3日
發(fā)明者桑杰·克里沙南, 莎什瓦斯·班格爾 申請(qǐng)人:軟件股份公司