這兩個連接池都是Hibernate建議使用的連接池
DBCP是一個依賴Jakarta commons-pool對象池機制的數據庫連接池,Tomcat的數據源使用的就是DBCP。
C3P0是一個開放源代碼的JDBC連接池,它在lib目錄中與Hibernate一起發佈,包括了實現jdbc3和jdbc2擴展規範說明的Connection 和Statement 池的DataSources 對象。
JNDI(Java Naming and Directory Interface)是SUN公司提供的一種標準的Java命名系統接口,JNDI提供統一的客戶端API,通過不同的訪問提供者接口JNDI SPI的實現,由管理者將JNDI API映射爲特定的命名服務和目錄系統,使得Java應用程序可以和這些命名服務和目錄服務之間進行交互。
JNDI與JDBC:
JNDI提供了一種統一的方式,可以用在網絡上查找和訪問服務。通過指定一個資源名稱,該名稱對應於數據庫或命名服務中的一個紀錄,同時返回數據庫連接建立所必須的信息。
參考資料:
http://java.sun.com/products/jndi/examples.html
http://java.sun.com/products/jndi/serviceproviders.html
常用的JNDI操作:
void bind(String sName,Object object);――綁定:把名稱同對象關聯的過程
void rebind(String sName,Object object);――重新綁定:用來把對象同一個已經存在的名稱重新綁定
void unbind(String sName);――釋放:用來把對象從目錄中釋放出來
void lookup(String sName,Object object);――查找:返回目錄總的一個對象
void rename(String sOldName,String sNewName);――重命名:用來修改對象名稱綁定的名稱
NamingEnumeration listBinding(String sName);――清單:返回綁定在特定上下文中對象的清單列表
NamingEnumeration list(String sName);
代碼示例:重新得到了名稱、類名和綁定對象。
NamingEnumeration namEnumList = ctxt.listBinding("cntxtName");
...
while ( namEnumList.hasMore() ) {
Binding bnd = (Binding) namEnumList.next();
String sObjName = bnd.getName();
String sClassName = bnd.getClassName();
SomeObject objLocal = (SomeObject) bnd.getObject();
}