Connection Pool (2)
(史帝芬, idealist@gcn.net.tw, 2003/12/19)
第一種建立Connection Pool的作法基本上是由Programmer自己寫,現在要介紹另一種作法,透過JNDI可以更簡單做出來,而且程式的寫法可以完全和使用何種資料庫無關。下面的程式範例將以Tomcat 4.1.27和Oracle 9i為例。- Copy library到Tomcat
將classes12.jar和nls_charset12.jar copy到%Tomcat%/common/lib - 設定server.xml
在%Tomcat%/conf裡找到server.xml,然後在裡面加上下面這段設定。
<DefaultContext crossContext="true" reloadable="true">
<Resource auth="Container" name="jdbc/epmp" scope="Shareable" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/epmp">
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@hostname:1521:SID</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter>
<name>username</name>
<value>user</value>
</parameter>
<parameter>
<name>password</name>
<value>pwd</value>
</parameter>
</ResourceParams>
</DefaultContext> - 設定web.xml
如圖1設定JNDI的參照,設定好之後將可以在web.xml中發現WSAD為我們加入的內容。<resource-ref> <res-ref-name>jdbc/epmp</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>CONTAINER</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref>
圖1
- 範例程式
Context ctx;
Connection conn = null;
ResultSet rs = null;
try {
ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/epmp");
conn = ds.getConnection();
//Do something...
} catch (NamingException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
finally {
try {
conn.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
conn = null;
}
- SQL Server 2000 (2005.04.16 補充)
如果資料庫換成SQL Server 2000,則將server.xml中的設定url和driverClassName換成如下即可…<parameter> <name>driverClassName</name> <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value> </parameter> <parameter> <name>url</name> <value>jdbc:microsoft:sqlserver://hostname:1433;DatabaseName=dbXXX</value> </parameter>