本文介紹WebSphere下Oracle、SQL Server、Sybase、MySQL數(shù)據(jù)庫(kù)連接池的配置方法,并給出相應(yīng)調(diào)用連接池的示例。相對(duì)于Weblogic,WebSphere連接池的配置要稍微復(fù)雜一些,因?yàn)槿鄙傧嚓P(guān)的文檔,需要一定的技巧和經(jīng)驗(yàn)。特別是對(duì)于初學(xué)者,完整的配置好Websphere連接池還是有一定難度的。

一、系統(tǒng)準(zhǔn)備
1.在相應(yīng)的數(shù)據(jù)庫(kù)中建立本文用到的表

create table TEST(C1 CHAR(10) )
insert into TEST values('FromTest')


2.準(zhǔn)備環(huán)境變量,此部分往往會(huì)被初學(xué)者忽略。

image

點(diǎn)擊“管理WebSphere變量”,ORACLE_JDBC_DRIVER_PATH的值輸入操作系統(tǒng)中jar文件(classes12.jar)的位置。
“確認(rèn)”后,界面最上方,點(diǎn)擊“保存”,會(huì)再提示“保存”還是“放棄”,再選“保存”。

為方便起見(jiàn),本文中,SQL Server的jar文件(msbase.jar、mssqlserver.jar、msutil.jar )、Sybase的jar文件(jconn2.jar)、mySQL的jar文件(mysql-connector-java-3.1.10-bin.jar)都放在同一目錄(如:C:\oracle\ora92\jdbc\lib)。

3.本文中的所有例子測(cè)試均通過(guò),環(huán)境:Windows2003、WebShpere5.1、ORACLE9I、SQL Server 2000、SYBASE12.5、MySQL5.0。

二、Oracle、SQL Server、Sybase、MySQL數(shù)據(jù)庫(kù)連接池在WebSphere中的詳細(xì)配置步驟

(一)、Oracle連接池的配置

1.進(jìn)入管理控制臺(tái)(http://localhost:9090/admin/)

2.選擇:資源->JDBC提供程序,點(diǎn)擊“新建”,建立JDBC提供程序。

image
點(diǎn)擊“應(yīng)用”后,類(lèi)路徑中,輸入“${ORACLE_JDBC_DRIVER_PATH}/classes12.jar”,再點(diǎn)擊“應(yīng)用”。

3.定義數(shù)據(jù)源
點(diǎn)擊界面中“數(shù)據(jù)源后”再點(diǎn)擊“新建”,建立數(shù)據(jù)源。

image
JNDI取名ORACLE_JNDI,點(diǎn)擊“應(yīng)用”。

4.界面上點(diǎn)擊“定制屬性”,定義連接池的JDBC Driver、URL、用戶(hù)名和口令等信息。
點(diǎn)擊“URL”,URL的值輸入:jdbc:oracle:thin:@localhost:1521:MYHORA,其中,localhost可以為ORACLE的IP地址,MYHORA是ORACLE的服務(wù)名稱(chēng)。
點(diǎn)擊“確定”保存配置。
同樣的方法輸入:
driverType的值oracle.jdbc.driver.OracleDriver
databasename的值MYHORA
servername的值localhost
preTestSQLString的值為SELECT COUNT(1) FROM TEST
其余的取默認(rèn)值。

5.本部分比較關(guān)鍵,是初學(xué)著比較困惑的地方。
我們看到,界面上并沒(méi)有輸入用戶(hù)名、口令的地方,而沒(méi)有用戶(hù)名稱(chēng)、口令是無(wú)法連接數(shù)據(jù)庫(kù)的。

image
在“定制屬性”中點(diǎn)擊“新建”,“名稱(chēng)”中輸入user,“值”中輸入數(shù)據(jù)庫(kù)的用戶(hù)名稱(chēng),如:study,點(diǎn)擊“確定”;
在“定制屬性”中點(diǎn)擊“新建”,“名稱(chēng)”中輸入password,“值”中輸入數(shù)據(jù)庫(kù)的口令,如:study,點(diǎn)擊“確定”;
我們看到,“定制屬性”中多了兩個(gè)我們自定義的屬性u(píng)ser、password

image

6.保存配置,在“定制屬性”界面的最上方點(diǎn)擊“保存”。

7.測(cè)試連接

image

系統(tǒng)提示:成功信息,表明,連接池配置成功。
連接池配置成功后,WebSphere需要重新啟動(dòng)。

(二)、SQL server連接池的配置

SQL Server連接池的配置步驟同Oracle,具體的參數(shù)值:
JDBC 提供程序:下拉選擇Microsoft JDBC driver for MSSQLServer 2000
Sybase連接池的配置步驟也同Oracle,具體的參數(shù)值:
常規(guī)屬性中的名稱(chēng):Microsoft JDBC driver for MSSQLServer 2000
常規(guī)屬性中的描述:Microsoft JDBC driver for MSSQLServer 2000
常規(guī)屬性中的類(lèi)路徑:
${ORACLE_JDBC_DRIVER_PATH}/msbase.jar
${ORACLE_JDBC_DRIVER_PATH}/mssqlserver.jar
${ORACLE_JDBC_DRIVER_PATH}/msutil.jar

常規(guī)屬性中的實(shí)現(xiàn)類(lèi)名:默認(rèn)
數(shù)據(jù)源中的名稱(chēng):SQLSERVER_JNDI
數(shù)據(jù)源中的JNDI:SQLSERVER_JNDI
定制屬性中的databaseName:數(shù)據(jù)庫(kù)名稱(chēng)
定制屬性中的serverName:Sybase數(shù)據(jù)庫(kù)服務(wù)器的名稱(chēng)或IP
定制屬性中的portNumber:端口號(hào)
定制屬性中的preTestSQLString:SELECT COUNT(1) FROM TEST
同Oracle,手工“新建”user和password屬性,值為數(shù)據(jù)庫(kù)的用戶(hù)名和口令,該用戶(hù)的缺省數(shù)據(jù)庫(kù)必須為databaseName的值。
其他默認(rèn)。

(三)、Sybase連接池的配置

JDBC 提供程序:下拉選擇Sybase JDBC Driver
Sybase連接池的配置步驟也同Oracle,具體的參數(shù)值:
常規(guī)屬性中的名稱(chēng):SYBASE JDBC Driver
常規(guī)屬性中的描述:SYBASE JDBC Driver
常規(guī)屬性中的類(lèi)路徑:${ORACLE_JDBC_DRIVER_PATH}/jconn2.jar
常規(guī)屬性中的實(shí)現(xiàn)類(lèi)名:默認(rèn)
數(shù)據(jù)源中的名稱(chēng):SYBASE_JNDI
數(shù)據(jù)源中的JNDI:SYBASE_JNDI
定制屬性中的databaseName:數(shù)據(jù)庫(kù)名稱(chēng)
定制屬性中的serverName:Sybase數(shù)據(jù)庫(kù)服務(wù)器的名稱(chēng)或IP
定制屬性中的portNumber:端口號(hào)
定制屬性中的preTestSQLString:SELECT COUNT(1) FROM TEST
同Oracle,手工“新建”user和password屬性,值為數(shù)據(jù)庫(kù)的用戶(hù)名和口令,該用戶(hù)的缺省數(shù)據(jù)庫(kù)必須為databaseName的值。
其他默認(rèn)。

(四)、MySQL連接池的配置

MySQL連接池的配置步驟同Oracle稍有不同,JDBC 提供程序中并沒(méi)有MySQL中的選項(xiàng),選Oracle JDBC Driver就可以,實(shí)際運(yùn)行中,WebSphere是以設(shè)置的參數(shù)為準(zhǔn)的。

具體的參數(shù)值:
常規(guī)屬性中的名稱(chēng):MySQL JDBC Driver
常規(guī)屬性中的描述:MySQL JDBC Driver
常規(guī)屬性中的類(lèi)路徑:${ORACLE_JDBC_DRIVER_PATH}/mysql-connector-java-3.1.10-bin.jar
常規(guī)屬性中的實(shí)現(xiàn)類(lèi)名:com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource
數(shù)據(jù)源中的名稱(chēng):MYSQL_JNDI
數(shù)據(jù)源中的JNDI:MYSQL_JNDI

image

由于WebSphere沒(méi)有缺省的MySQL選項(xiàng),“定制屬性”全部需要手工新建。具體的值要根據(jù)MySQL的實(shí)際環(huán)境要做相應(yīng)修改(petshop是我機(jī)器上的數(shù)據(jù)庫(kù)名稱(chēng))。

三、應(yīng)用程序中測(cè)試連接池。

1. jsp程序中測(cè)試連接池

附件中的TestConnPoolWeb.ear文件直接發(fā)布后,
運(yùn)行:http://localhost:9080/TestConnPoolWeb/oracle_pool.jsp,結(jié)果:ORACLE_JNDI:FromTest
運(yùn)行:http://localhost:9080/TestConnPoolWeb/sqlserver_pool.jsp,結(jié)果:SQLSERVER_JNDI:FromTest
運(yùn)行:http://localhost:9080/TestConnPoolWeb/sybase_pool.jsp,結(jié)果:SYBASE_JNDI:FromTest
運(yùn)行:http://localhost:9080/TestConnPoolWeb/mysql_pool.jsp,結(jié)果:MYSQL_JNDI:FromTest

2. 程序說(shuō)明

得到連接的方法:

private static Connection getConnection(String strConnPoolJndi) throws NamingException, SQLException {
Context ctx = null;
ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup(strConnPoolJndi);
Connection conn = ds.getConnection();

return conn;

}

參數(shù)strConnPoolJndi分別為:ORACLE_JNDI、SQLSERVER_JNDI、SYBASE_JNDI、MYSQL_JNDI,對(duì)于相應(yīng)的數(shù)據(jù)庫(kù)。
從表中查詢(xún)一條數(shù)據(jù):

public static String getDBData(String strConnPoolJndi) {
String strReturn="";
Connection conn = null;
Statement st = null;
ResultSet rs = null;

try {
conn = getConnection(strConnPoolJndi);
st = conn.createStatement();
rs = st.executeQuery( "select C1 from TEST" );

if (rs.next()) {
strReturn = rs.getString(1);
}

}
...

jsp中打印出表中的一條記錄:

<%
out.println("ORACLE_JNDI:" + test.pool.TestPool.getDBData("ORACLE_JNDI"));
%>


附件TestConnPoolWeb.ear(包括源程序)