利用weblogic的POOL(連線池)連線資料庫 (轉)

gugu99發表於2008-01-28
利用weblogic的POOL(連線池)連線資料庫 (轉)[@more@]

利用LOGIC的POOL(連線池)連線

作者:XYZ

簡單介紹


以往用存取資料庫都是直接用JC連線資料庫;
一般的,每個資料庫客戶端應用都要開啟一個或一個以上的資料庫連線,
而在weblogic下我們可以利用weblogic提供的POOL來存取資料庫,
使每個資料庫客戶端共同分享一個或一個以上的資料庫連線,
從而可以提高程式的和減輕資料庫的負擔。
這篇文章主要討論的是伺服器的和程式碼的實現,在這裡在下不想討論太多POOL的概念和特點,

至於POOL的概念及原理,我建議大家看看一篇題為“用連線池提高訪問資料庫的效率”的資料,
作者是好兵。

本文以Weblogic 5.1+my 為例向大家介紹weblogic提供的POOL,
我分別寫了兩個 servlet 作為對照的例子,一個是用 提供的來直接存取MYSQL,
另一個是weblogic提供的POOL來存取資料庫。
首先請看用 mysql 提供的JDBC來直接存取MYSQL的程式碼:

myjdbc.java
-----------------------------------------------------------------------------
import java.io.*;
import java.sql.*;
import weblogic.db.jdbc.*;
import java.util.Properties;
import javax.servlet.*;
import javax.servlet.http.*;


public class myjdbc extends HttpServlet {

public void service(HttpServletRequest req, HttpServletResponse res)
throws IOException
{

res.setContentType("text/html");

PrintWriter out = res.getWriter();
out.println("

Hello World!");
out.println("

TEST JDBC!

");

Connection Conn = null;

try {

//=================================================================================
Class.forName("org.gjt.mm.mysql.").newInstance();
Conn = DriverManager.getConnection("jdbc:mysql://localhost/zjws?user=zjxyz&pass=xyz");
//=================================================================================

Statement Stmt = Conn.createStatement();
ResultSet RS = Stmt.executeQuery(" * from users");


while (RS.next()) {

out.println(RS.getString("userid")+"t"
+RS.getString("passwd")
+"t"+RS.getString("name"));
}

RS.close();
Stmt.close();
Conn.close();

}catch (Exception E) {
System.err.println("Unable to load driver.");
E.printStackTrace();
}

out.println("

");
}

}

上面的程式碼功能是把mysql 的 zjws資料庫裡面 users 表列出來,我把裝入JDBC的語句做了標記
下面是利用POOL讀取資料庫,裝入JDBC驅動的語句我也做了標記,請仔細比較。

首先是要配置好伺服器,在weblogic.properties加入,

#=====================================================

weblogic.jdbc.connectionPool.mysqlPool1=
url=jdbc:mysql://localhost/zjws?user=zjxyz,
driver=org.gjt.mm.mysql.Driver,
loginDelaySecs=1,
initialCapacity=4,
maxCapacity=10,
capacityIncrement=2,
allowShrinking=true,
shrinkPeriodMins=15,
refreshMinutes=10,
allow=guest,
props=user=zjxyz;password=xyz;server=zjxyz


#=====================================================

把mysql 的JDBC驅動放在 /weblogic/myserver/serverclasses/ 目錄下,不知為何,
我把jar包把放在其目錄下,把路徑加入 classpath 中,結果啟動時說找不到class,
所以我只好解開的org目錄及其裡面的放進去,結果可以了。

mysql一定要比weblogic先啟動,因為weblogic在啟動時要建立POOL。


mysqlpool.java
--------------------------------------------------------------------------------------------------
import java.io.*;
import java.sql.*;
import weblogic.db.jdbc.*;
import java.util.Properties;
import javax.servlet.*;
import javax.servlet.http.*;


public class mysqlpool extends HttpServlet {

public void service(HttpServletRequest req, HttpServletResponse res)
throws IOException
{

res.setContentType("text/html");

PrintWriter out = res.getWriter();
out.println("

Hello World!");
out.println("

TEST Weblogic Pool!

");

Connection Conn = null;

try {
//=================================================================================
Properties props =new Properties();

props.setProperty("user", "system");
props.setProperty("password", "zjxyzken");

Driver myDriver =
(Driver) Class.forName("weblogic.jdbc.pool.Driver").newInstance();

Conn = myDriver.connect("jdbc:weblogic:pool:mysqlPool1",props);
//=================================================================================

Statement Stmt = Conn.createStatement();
ResultSet RS = Stmt.executeQuery("SELECT * from users");

while (RS.next()) {

out.println(RS.getString("userid")+"t"
+RS.getString("passwd")
+"t"+RS.getString("name"));
}

RS.close();
Stmt.close();
Conn.close();

}catch (Exception E) {
System.err.println("Unable to load driver.");
E.printStackTrace();
}

out.println("

");
}

}

經過閱讀,我們可以發現,作為程式設計師某定程度上根本不需要理會伺服器裝的是什麼SQL資料庫,
只需連線到weblogic建立提供的POOL就可以了,這樣一來除了可以提高效率外還令到程式碼的可重用性大大提高。



作者:XYZ※版權所有
轉載請註明來源
【CGI設計室】


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-998625/,如需轉載,請註明出處,否則將追究法律責任。

相關文章