WebSphere中流行數據庫連接池的配置(Oracle、SQL Server、Sybase、MySQL)
本文介紹WebSphere下Oracle、SQL Server、Sybase、MySQL數據庫連接池的配置方法,并給出相應調用連接池的示例。相對于Weblogic,WebSphere連接池的配置要稍微復雜一些,因為缺少相關的文檔,需要一定的技巧和經驗。特別是對于初學者,完整的配置好Websphere連接池還是有一定難度的。一、系統準備
1.在相應的數據庫中建立本文用到的表
create?table?TEST(C1?CHAR(10)?)
insert?into?TEST?values('FromTest')
2.準備環境變量,此部分往往會被初學者忽略。

點擊“管理WebSphere變量”,ORACLE_JDBC_DRIVER_PATH的值輸入操作系統中jar文件(classes12.jar)的位置。
“確認”后,界面最上方,點擊“保存”,會再提示“保存”還是“放棄”,再選“保存”。
為方便起見,本文中,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.本文中的所有例子測試均通過,環境:Windows2003、WebShpere5.1、ORACLE9I、SQL Server 2000、SYBASE12.5、MySQL5.0。
二、Oracle、SQL Server、Sybase、MySQL數據庫連接池在WebSphere中的詳細配置步驟
(一)、Oracle連接池的配置
1.進入管理控制臺(http://localhost:9090/admin/)
2.選擇:資源->JDBC提供程序,點擊“新建”,建立JDBC提供程序。

點擊“應用”后,類路徑中,輸入“${ORACLE_JDBC_DRIVER_PATH}/classes12.jar”,再點擊“應用”。
3.定義數據源
點擊界面中“數據源后”再點擊“新建”,建立數據源。

JNDI取名ORACLE_JNDI,點擊“應用”。
4.界面上點擊“定制屬性”,定義連接池的JDBC Driver、URL、用戶名和口令等信息。
點擊“URL”,URL的值輸入:jdbc:oracle:thin:@localhost:1521:MYHORA,其中,localhost可以為ORACLE的IP地址,MYHORA是ORACLE的服務名稱。
點擊“確定”保存配置。
同樣的方法輸入:
driverType的值oracle.jdbc.driver.OracleDriver
databasename的值MYHORA
servername的值localhost
preTestSQLString的值為SELECT COUNT(1) FROM TEST
其余的取默認值。
5.本部分比較關鍵,是初學著比較困惑的地方。
我們看到,界面上并沒有輸入用戶名、口令的地方,而沒有用戶名稱、口令是無法連接數據庫的。

在“定制屬性”中點擊“新建”,“名稱”中輸入user,“值”中輸入數據庫的用戶名稱,如:study,點擊“確定”;
在“定制屬性”中點擊“新建”,“名稱”中輸入password,“值”中輸入數據庫的口令,如:study,點擊“確定”;
我們看到,“定制屬性”中多了兩個我們自定義的屬性user、password


6.保存配置,在“定制屬性”界面的最上方點擊“保存”。
7.測試連接

系統提示:成功信息,表明,連接池配置成功。
連接池配置成功后,WebSphere需要重新啟動。
(二)、SQL server連接池的配置
SQL Server連接池的配置步驟同Oracle,具體的參數值:
JDBC 提供程序:下拉選擇Microsoft JDBC driver for MSSQLServer 2000
Sybase連接池的配置步驟也同Oracle,具體的參數值:
常規屬性中的名稱:Microsoft JDBC driver for MSSQLServer 2000
常規屬性中的描述:Microsoft JDBC driver for MSSQLServer 2000
常規屬性中的類路徑:
${ORACLE_JDBC_DRIVER_PATH}/msbase.jar
${ORACLE_JDBC_DRIVER_PATH}/mssqlserver.jar
${ORACLE_JDBC_DRIVER_PATH}/msutil.jar
常規屬性中的實現類名:默認
數據源中的名稱:SQLSERVER_JNDI
數據源中的JNDI:SQLSERVER_JNDI
定制屬性中的databaseName:數據庫名稱
定制屬性中的serverName:Sybase數據庫服務器的名稱或IP
定制屬性中的portNumber:端口號
定制屬性中的preTestSQLString:SELECT COUNT(1) FROM TEST
同Oracle,手工“新建”user和password屬性,值為數據庫的用戶名和口令,該用戶的缺省數據庫必須為databaseName的值。
其他默認。
(三)、Sybase連接池的配置
JDBC 提供程序:下拉選擇Sybase JDBC Driver
Sybase連接池的配置步驟也同Oracle,具體的參數值:
常規屬性中的名稱:SYBASE JDBC Driver
常規屬性中的描述:SYBASE JDBC Driver
常規屬性中的類路徑:${ORACLE_JDBC_DRIVER_PATH}/jconn2.jar
常規屬性中的實現類名:默認
數據源中的名稱:SYBASE_JNDI
數據源中的JNDI:SYBASE_JNDI
定制屬性中的databaseName:數據庫名稱
定制屬性中的serverName:Sybase數據庫服務器的名稱或IP
定制屬性中的portNumber:端口號
定制屬性中的preTestSQLString:SELECT COUNT(1) FROM TEST
同Oracle,手工“新建”user和password屬性,值為數據庫的用戶名和口令,該用戶的缺省數據庫必須為databaseName的值。
其他默認。
(四)、MySQL連接池的配置
MySQL連接池的配置步驟同Oracle稍有不同,JDBC 提供程序中并沒有MySQL中的選項,選Oracle JDBC Driver就可以,實際運行中,WebSphere是以設置的參數為準的。
具體的參數值:
常規屬性中的名稱:MySQL JDBC Driver
常規屬性中的描述:MySQL JDBC Driver
常規屬性中的類路徑:${ORACLE_JDBC_DRIVER_PATH}/mysql-connector-java-3.1.10-bin.jar
常規屬性中的實現類名:com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource
數據源中的名稱:MYSQL_JNDI
數據源中的JNDI:MYSQL_JNDI

由于WebSphere沒有缺省的MySQL選項,“定制屬性”全部需要手工新建。具體的值要根據MySQL的實際環境要做相應修改(petshop是我機器上的數據庫名稱)。
三、應用程序中測試連接池。
1. jsp程序中測試連接池
附件中的TestConnPoolWeb.ear文件直接發布后,
運行:http://localhost:9080/TestConnPoolWeb/oracle_pool.jsp,結果:ORACLE_JNDI:FromTest
運行:http://localhost:9080/TestConnPoolWeb/sqlserver_pool.jsp,結果:SQLSERVER_JNDI:FromTest
運行:http://localhost:9080/TestConnPoolWeb/sybase_pool.jsp,結果:SYBASE_JNDI:FromTest
運行:http://localhost:9080/TestConnPoolWeb/mysql_pool.jsp,結果:MYSQL_JNDI:FromTest
2. 程序說明
得到連接的方法:
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;
}
參數strConnPoolJndi分別為:ORACLE_JNDI、SQLSERVER_JNDI、SYBASE_JNDI、MYSQL_JNDI,對于相應的數據庫。
從表中查詢一條數據:
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(包括源程序)
[Download File]
posted on 2006-07-24 16:15 paulwong 閱讀(3730) 評論(3) 編輯 收藏 所屬分類: Websphere