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



resized image

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"));
%>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章