專利名稱:一種實現基于連接池的數據訪問的設備和方法
技術領域:
本發明涉及連接池技術,特別是涉及一種實現基于連接池的數據訪問的 設備和方法。
背景技術:
目前,實現某業務的應用系統常常會進行數據訪問。比如在實現企業 信息管理的應用系統通過Java消息服務(JMS, Java Message Servers)消 息或Java連4妄架構(JCA, Java Connect Architecture )消息訪問另夕卜一個系 統,計費系統通過數據庫操作指令訪問數據庫等等。這里所述實現企業信息 管理的應用系統和計費系統等等都可以統稱為應用系統,應用系統對數據庫 等另 一 個系統實現的訪問則稱為數據訪問。
在進行數據訪問時,應用系統先與被訪問的系統建立連接,再通過建立 的連接實現數據訪問,等到數據訪問結束之后才關閉連接。由于建立和關閉 連接的開銷比較大,如果頻繁地建立和關閉連接,則會極大地影響系統的性 能。所以,為了減少建立和關閉連接所耗費的開銷,現有技術一般采用連接 池的方式進行數據訪問,其基本思想是先建立一個靜態的連接池,并將已 經建立好的若干連接對象保存在連接池中。當應用系統需要進行數據訪問 時,可以向連接池請求連接,連接池將空閑連接對象分配給應用系統,應用 系統再通過獲得的連接對象實現數據訪問。之后,當應用系統結束數據訪問, 就可以將使用過的連接對象重新釋放到連接池中。這樣,由于連接池事先建 立了若干連接對象,同一個連接對象通過分配和釋放的方式可以被應用系統 重復使用,從而大大減少建立和關閉的開銷。
這里所述的連接對象是已經與被訪問系統建立了物理連接的。比如數
據庫連接對象是與某個特定數據庫之間建立了的物理連接,并可以維護與該
數據庫的通信,在連接上下文中執行SQL語句并返回結果。所以,從應用 系統一方來看,連接對象并不是一種簡單的數據,可以通過對象中的方法來 實現某種功能。
在上述這種基于連接池的數據訪問方法中, 一個連接對象的使用周期是 從分配給應用系統到重新釋放到連接池為止。但實際應用中,當應用系統獲 得一個連接對象后,可能還需要進行其他方面的處理而不立即利用該連接對 象進行數據訪問。在這種情況下,該連接對象在其使用周期內并沒有被充分 地利用,造成了資源的浪費。
發明內容
本發明實施例提供了 一種實現基于連接池的數據訪問的設備,可以使連 接對象在其使用周期內被充分利用,從而節約連接資源。 為了達到上述目的,本發明實施例提出的技術方案為
一種實現基于連接池的數據訪問的設備,該設備包括
應用系統模塊,用于向連接池模塊發送連接請求,利用獲得的不包括物理 連接的連接代理發起數據訪問,所述連接代理在發起數據訪問時向連接池才莫塊 發送連接請求,獲取具有物理連接的連接對象,由具有物理連接的連接對象實 現數據訪問;
連接池模塊,用于在接收到應用系統模塊的連接請求時,向連接代理創建 模塊發送連接請求,并將連接代理創建模塊返回的連接代理轉發給應用系統模 塊;在接收到連接代理的連接請求時,將自身已經建立的具有物理連接的連接 對象提供給連接代理;
連接代理創建模塊,用于接收連接池模塊的連接請求,創建不包括物理 連接的連接代理,并將創建的連接代理返回給連接池模塊。
本發明實施例還提供一種實現基于連接池的數據訪問的方法,可以使連 接對象在其使用周期內被充分利用,從而節約連接資源。
為了達到上述目的,本發明實施例提出的技術方案為
一種實現基于連接池的數據訪問的方法,該方法包括
應用系統模塊向連接池模塊發送連接請求,連接池模塊根據連接請求從連 接代理創建模塊中獲取創建的不包括物理連接的連接代理,并將連接代理返回 給應用系統模塊;應用系統模塊利用獲得的連接代理發起數據訪問,所述連接 代理在發起數據訪問時從連接池模塊獲取具有物理連接的連接對象,并通過具 有物理連接的連接對象實現數據訪問。
綜上所述,本發明實施例提供 一 種實現基于連接池的數據訪問的設備和 方法,由于在發起數據訪問時才將具有物理連接的連接對象分配給應用系統 模塊,可以提高連接對象的利用率,從而節約連接資源。
圖1是實現基于連接池數據訪問的設備實施例一的基本結構圖; 圖2是設備中連接管理模塊的內部結構示意圖; 圖3是實現基于連接池的數據訪問的方法實施例 一 的流程圖; 圖4實現基于連接池的數據訪問的方法實施例二的流程圖。
具體實施例方式
為使本發明實施例的目的、技術方案和優點更加清楚,下面將結合附圖 對本發明實施例作進一步地詳細描述。
圖1是實現基于連接池數據訪問的設備實施例一的基本結構圖。如圖1 所示,該設備可以包括
應用系統模塊IOI,用于向連接池模塊102發送連接請求,利用獲得的 不包括物理連接的連接代理發起數據訪問,所述連接代理在發起數據訪問時 向連接池模塊102發送連接請求,獲取具有物理連接的連接對象,并通過獲 得的具有物理連接的連接對象實現數據訪問。
連接池模塊102,用于在接收到應用系統模塊101的連接請求時,向連
接代理創建模塊103發送連接請求,并將連接代理創建模塊103返回的連接 代理轉發給應用系統模塊101;在接收到連接代理的連接請求時,將自身已 經建立的具有物理連接的連接對象提供給連接代理。
連接代理創建模塊103,用于接收連接池模塊102的連接請求,創建不 包括物理連接的連接代理,并將創建的連接代理返回給連接池模塊102。
本實施例中,連接代理創建模塊103是專門用于創建連接代理的,創建 的連接代理與連接池模塊102中連接對象的接口完全相同,可以被應用系統 模塊101識別并使用。但與連接池模塊102中連接對象不同的是,連接代理 并沒有與被訪問的系統建立真正的物理連接。也就是說,應用系統模塊IOI 可以利用連接代理發起數據訪問,但并不能真正實現數據訪問。
為此,創建的連接代理中還需要從連接池模塊102中獲取具有物理連接 的連接對象,并根據獲得的連接對象實現數據訪問的功能。需要注意的是, 創建的連接代理不是一種簡單的數據,像連接池模塊102中具有物理連接的 連接對象一樣,連接代理可以向應用系統模塊101提供方法來實現某種功 能。因此,連接代理除了包括與連接對象相同的接口以外,可以包括從連接 池模塊102獲取具有物理連接的連接對象的功能,從而利用獲取的連接對象 實現數據訪問。至于如何創建連接代理的方法很多,本領域技術人員可以采 用不同的方法來創建連接代理。
比如需要實現的數據訪問為數據庫訪問,連接對象為數據庫連接,就
可以利用Java數據庫連接規范(JDBC)來創建連接代理,其格式則可以為 public class ProxyConnection implements Connection
{ 、 、
private Connection realConnection = null; 〃S尋realConnection初始葉匕為S private ConnectionPool connPool = null;〃卄夸connPool初始4匕為空 public ProxyCo皿ection(Co皿ectionPool connectionPool)
connPool = connectionPool; 〃^l尋連4l"池引用給connPool
public Statement createStatement() throws SQLException
if (null == realConnection)
realConnection = getRealConnection(); 〃如果realConnection為空,貝'J利用
〃才示準的getRealConnection()方法乂人 〃連接池中獲得具有物理連接的連 〃接對象給realConnection
return realConnection.createStatement();
〃realConnection利用標準的 〃createStatement()方法實現數據庫 〃訪問
private Connection getRealConnection()
〃利用標準的checkOut()獲耳又連接
其中,"realConnection,,表示真實的連接,并初始化為空;"connPool"表 示連接池,也初始化為空;"connPool = connectionPool"表示將連接池引用給 了 "connPool",凡是與真正的連接池的交互都可以通過"connPool"來實現; "createStatement()"表示創建會話,實現數據庫訪問;"getRealConnection()" 表示從真正的連接池中獲取物理連接的方法。
這里,假設連接池中具有物理連接的連接對象的接口為Connection,連 接代理對應的接口也是Connection。如果連接對象可以利用createStatement() 方法實現數據庫的訪問,那么,連接代理也可以利用createStatement()方法 實現數據庫的訪問。但與連接對象不同的是,連接代理并沒有物理連接,其 createStatement()方法與連接對象中的createStatement()方法的功能是不 一樣 的。連接代理的createStatement()方法中,還需要利用getRealConnection() 方法從連接池中獲得具有物理連接的連接對象給realConnection,再調用 realConnection.createStatement()方法實現凄t據庫的訪問。這里, getRealConnection()以及連接對象中的createStatement()方法都是JDBC規范 中標準方法,具體實現屬于現有技術,此處不再贅述。
上述針對數據庫訪問的創建連接代理的例子僅僅是以JDBC規范為例 來說明的,而實際應用中,也可以不利用JDBC規范來創建連接代理,而利 用其它規范,比如開放數據庫互連規范(ODBC)。只要創建出的連接代理 與連接池中連接對象的接口相同,不包括物理連接并可以從連接池中獲取連 接對象即可。
應用本實施例方案,當需要進行數據訪問時,應用系統模塊101向連接
池模塊102發送連接請求;連接池模塊102向連接代理創建模塊103發送連 接請求;連接代理創建模塊103創建不包括物理連接的連接代理,并將創建 的連接代理返回給連接池模塊102;連接池模塊102將連接代理轉發給應用 系統模塊101;應用系統模塊101利用獲得的不包括物理連接的連接代理發 起數據訪問,所述連接代理在發起數據訪問時向連接池模塊102發送連接請 求,獲取具有物理連接的連接對象,并由具有物理連接的連接對象實現數據 訪問。
實際應用中,本實施例中的連接池模塊102可以包括
連接管理模塊1021,用于接收來自應用系統模塊101的連接請求,向 連接代理創建模塊103發送連接請求,并將連接代理創建模塊103返回的連 接代理轉發給應用系統模塊101。
連接對象池模塊1022,用于在接收到連接請求時提供已經建立的具有 物理連接的連接對象。
實際應用中,連接管理模塊1021還可以事先設置連接策略,根據連接 策略的不同向應用系統模塊101返回不同的連接。這里所述的連接策略就是 用于表示連接類型的信息,該連接類型可以為不包括物理連接的連接代理, 也可以為具有物理連接的連接對象。在這種情況下,圖2顯示了連接管理模 塊1021的內部結構示意圖。如圖2所示,連接管理模塊1021可以包括
判別子模塊1021a,用于接收來自應用系統模塊101的連接請求,根據 存儲模塊1021d中保存的連接策略判斷是否向應用系統模塊101提供連接代 理,如果是,則將應用系統模塊101的連接請求發送給連接代理控制子模塊 1021b;否則,將連接請求發送給連接對象控制子模塊1021c。
連接代理控制子模塊1021b,用于接收由判別子模塊1021a轉發的應用 系統模塊101的連接請求,向連接代理創建模塊103發送連接請求,并將連
接代理創建模塊103返回的連接代理轉發給應用系統模塊101。
連接對象控制子模塊1021c,用于接收由判別子模塊1021a轉發的應用 系統模塊101的連接請求,向連接對象池模塊102發送連接請求,并將連接 對象池模塊102返回的具有物理連接的連接對象返回給應用系統模塊101。
存儲模塊1021d,用于保存表示連接類型的連接策略,所述連接類型為 不包括物理連接的連接代理或具有物理連接的連接對象。
也就是說,當連接管理模塊1021接收到來自應用系統模塊101的連接 請求時,可以先由判別子模塊1021a根據存儲模塊1021d中保存的連接策略 判斷返回的連接類型,如果連接策略是不包括物理連接的連接代理這種類 型,則將從應用系統模塊101發來的連接請求發送給連接代理控制子模塊 1021b,由連接代理控制子模塊1021b從連接代理創建模塊103中獲取連接 代理,并轉發給應用系統模塊101。此后,應用系統模塊101采用連接代理 的方式實現數據訪問,即應用系統模塊101利用連接代理發起數據訪問, 并由連接代理在數據訪問過程中從連接池模塊102中獲取連接對象,再利用 連接對象實現數據訪問。
相應地,如果連接策略是具有物理連接的連接對象這種類型,則將從應 用系統模塊101發來的連接請求發送給連接對象控制子模塊1021c,由連接 對象控制子模塊1021c從連接對象池模塊1022中獲取具有物理連接的連接 對象,并轉發給應用系統模塊101。此后,應用系統模塊101采用連接對象 的方式實現數據訪問,即應用系統模塊101利用獲得的連接對象直接實現 凄t據訪問。
也就是說,通過連接策略的設置,應用系統既可以采用連接代理的方式 來實現數據訪問,也可以直接采用現有的連接對象來實現數據訪問,增加連 接方式的靈活性。
針對上述實現基于連接池的數據訪問的設備,本發明還提出實現基于連
接池的數據訪問的方法實施例。
本實施例對應的設備內部結構圖可以如圖1所示,此處不再贅述。圖3
是實現基于連接池的數據訪問的方法實施例一的流程圖。如圖3所示,該方
法可以包括
步驟301:應用系統模塊101向連接池:模塊102發送連接請求。
步驟302:連接池模塊102根據連接請求從連接代理創建模塊103中獲
取創建的不包括物理連接的連接代理,并將獲得的連接代理返回給應用系統
模塊101。
步驟303:應用系統模塊101利用獲得的連接代理發起數據訪問,所述 連接代理在發起數據訪問時從連接池模塊102獲取具有物理連接的連接對 象,并通過具有物理連接的連接對象實現數據訪問。
本實施例中,連接池模塊102在接收到應用系統模塊101的連接請求時, 并不立即將具有物理連接的連接對象分配給應用系統模塊101,而僅僅分配 連接代理。這樣,從應用系統模塊101—方來說,由于接收到的連接代理所 有對外的接口與連接對象完全相同,可以像接收到具有物理連接的連接對象 一樣來識別和使用連接代理;從連接池模塊102—方來說,由于并沒有將具 有物理連接的連接對象分配給應用系統模塊101,具有物理連接的連接對象 還沒有被應用系統模塊101所占有,其使用周期也就還沒有開始。
此后,當步驟303中應用系統模塊101發起數據訪問時,才由連接代理 從連接池模塊102中獲取具有物理連接的連接對象,并由具有物理連接的連 接對象實現數據訪問。也就是說,當連接池模塊102將具有物理連接的連接 對象分配給連接代理時,該連接對象才被占用,其使用周期才真正開始。這 樣,由于推遲了連接對象被占用的時間起點,從而可以有效地提高連接對象 的利用率,節約連接資源。
另外,本實施例所述的連接對象可以為數據庫連接對象、JMS連接對象 或JCA連接對象等等。也就是說,如果為數據庫連接對象,那么,應用系 統模塊101實現的數據訪問應該是一個與數據庫操作相關的數據庫訪問。如 果為JMS連接對象或JCA連接對象等,應用系統模塊101則應該是通過JMS 消息或JCA消息等對另 一個系統進行訪問。至于如何利用實現數據庫訪問,
如何利用JMS消息或JCA消息等對另一個系統進行訪問則屬于現有技術, 與實際的業務相關,此處不再贅述。
實際應用中,還可以在連接池模塊102中事先設置連接策略,根據連接 策略來確定應該向應用系統^t塊101分配不包括物理連接的連接代理,還是 分配具有物理連接的連接對象。為了更好地說明該方案,下面用方法實施例 二進行詳細描述。
圖4是方法實施例二的流程圖。如圖4所示,方法實施例二可以包括
步驟401:應用系統才莫塊101向連接池模塊102發送連接請求。
步驟402:連接池模塊102根據事先保存的連接策略判斷是否向應用系
統模塊101提供連接代理,如果是,則執行步驟403;否則,執行步驟410。 步驟403:連接池模塊102向連接代理創建模塊103發送連接請求。 步驟404:連接代理創建模塊103創建不包括物理連接的連接代理,并
將創建的連接代理返回給連接池模塊102。
步驟405:連接池模塊102將獲得的連接代理轉發給應用系統模塊101。 步驟406:應用系統模塊101利用獲得的連接代理發起數據訪問。 步驟407:在數據訪問過程中,連接代理向連接池模塊102發送連接請
求,連接池模塊102向連接代理返回具有物理連接的連接對象。
步驟408:連接代理利用返回的具有物理連接的連接對象實現數據訪問。 步驟409:應用系統模塊101關閉連接代理,連接代理將具有物理連接
的連接對象釋放到連接池模塊102中,再退出本流程。
步驟410:連接池模塊102將自身已經建立的具有物理連接的連接對象
返回給應用系統才莫塊101。
步驟411:應用系統模塊101通過具有物理連接的連接對象直接實現數
據訪問。
本步驟中,應用系統模塊101可以實現數據訪問。此后,當應用系統模 塊101完成數據訪問,還可以進一步利用步驟412來關閉連接代理,并釋放 連接對象。
步驟412:應用系統模塊101關閉連接代理,連接代理將具有物理連接 的連接對象釋放到連接池模塊102中。
本步驟中,當連接代理將連接對象釋放后,該連接對象不再被應用系統 模塊101所占用,至于釋放連接對象的方法則屬于現有技術,此處不再贅述。
應用本實施例方案,可以在連接池模塊102中設置連接策略,既可以采 用采用連接代理的方式,也可以采用現有技術的方式來分配連接,從而可以 增加分配連接的靈活性。
綜上所述,以上僅為本發明的較佳實施例而已,并非用于限定本發明的 保護范圍。凡在本發明的精神和原則之內,所作的任何修改、等同替換、改 進等,均應包含在本發明的保護范圍之內。
權利要求
1、一種實現基于連接池的數據訪問的設備,其特征在于,該設備包括:應用系統模塊,用于向連接池模塊發送連接請求,利用獲得的不包括物理連接的連接代理發起數據訪問,所述連接代理在發起數據訪問時向連接池模塊發送連接請求,獲取具有物理連接的連接對象,由具有物理連接的連接對象實現數據訪問;連接池模塊,用于接收所述應用系統模塊的連接請求,向連接代理創建模塊發送連接請求,并將所述連接代理創建模塊返回的連接代理轉發給應用系統模塊;還用于接收連接代理的連接請求,并將自身已經建立的具有物理連接的連接對象提供給連接代理;連接代理創建模塊,用于接收連接池模塊的連接請求,創建不包括物理連接的連接代理,并將創建的連接代理返回給連接池模塊。
2、 根據權利要求1所述的設備,其特征在于,所述連接池模塊包括 連接管理模塊,用于接收來自應用系統模塊的連接請求,向連接代理創建模塊發送連接請求,并將連接代理創建模塊返回的連接代理轉發給應用系統模 塊;連接對象池模塊,用于在接收到連接請求時提供已經建立的具有物理連接 的連接對象。
3、 根據權利要求2所述的設備,其特征在于,所述連接管理模塊包括 連接代理控制子模塊,用于接收應用系統模塊的連接請求,向連接代理創建模塊發送連接請求,并將連接代理創建模塊返回的連接代理轉發給應用系統 模塊;所述連接管理模塊進一步包括判別子模塊,用于接收來自應用系統模塊的連接請求,根據存儲模塊中保 存的連接策略判斷是否向應用系統模塊提供連接代理,如果是,則將應用系統 模塊的連接請求發送給連接代理控制子模塊;否則,直接將連接請求發送給連 接對象控制子模塊;連接對象控制子模塊,用于接收應用系統模塊的連接請求,向連接對象池 模塊發送連接請求,并將連接對象池模塊返回的具有物理連接的連接對象返回給應用系統模塊;存儲模塊,用于保存表示連接類型的連接策略,所述連接類型為不包括物 理連接的連接代理或具有物理連接的連接對象;所述應用系統進一步用于根據由連接管理模塊返回的具有物理連接的連 接對象,并通過具有物理連接的連接對象直接實現數據訪問。
4、 一種實現基于連接池的數據訪問的方法,其特征在于,該方法包括應用系統模塊向連接池模塊發送連接請求,連接池模塊根據連接請求從連 接代理創建模塊中獲取創建的不包括物理連接的連接代理,并將連接代理返回 給應用系統模塊;應用系統模塊利用獲得的連接代理發起數據訪問,所述連接代理在發起數 據訪問時從連接池模塊獲取具有物理連接的連接對象,并通過具有物理連接的 連接對象實現數據訪問。
5、 根據權利要求4所述的方法,其特征在于,當連接池模塊接收來自應用 系統模塊的連接請求時,該方法進一步包括所述連接池模塊根據事先保存的連接策略判斷是否向應用系統模塊提供連 接代理,如果是,則繼續執行從連接代理創建模塊中獲取不包括物理連接的連 接代理的步驟。
6、 根據權利要求5所述的方法,其特征在于,當連接池模塊根據事先保存 的連接策略判斷出不需要向應用系統模塊提供連接代理時,該方法進一步包括連接池模塊將自身已經建立的具有物理連接的連接對象返回給應用系統模 塊,應用系統模塊通過所述具有物理連接的連接對象直接實現數據訪問,再退 出本流程。
7、 根據權利要求4至6任一項所述的方法,其特征在于,所述通過具有物 理連接的連接對象實現數據訪問之后,該方法進一步包括 應用系統模塊關閉所述具有物理連接的連接對象,并將具有物理連接的連 接對象釋放到連接池模塊中。
8、根據權利要求7所述的方法,其特征在于,所述連接對象為數據庫連接對象、Java消息服務JMS連接對象,或Java連接架構JCA連接對象。
全文摘要
本發明實施例提供一種實現基于連接池的數據訪問的設備和方法,應用系統模塊向連接池模塊發送連接請求,連接池模塊根據連接請求從連接代理創建模塊中獲取不包括物理連接的連接代理,并將連接代理返回給應用系統模塊;應用系統模塊利用獲得的連接代理發起數據訪問,所述連接代理在發起數據訪問時從連接池模塊獲取具有物理連接的連接對象,并通過具有物理連接的連接對象實現數據訪問。應用本發明實施例方案,由于在發起數據訪問時才將具有物理連接的連接對象分配給應用系統模塊,可以縮短連接對象的使用周期,提高連接對象的利用率,節約了連接資源。
文檔編號G06F13/14GK101383814SQ20071014532
公開日2009年3月11日 申請日期2007年9月7日 優先權日2007年9月7日
發明者沈青春 申請人:華為技術有限公司