JDBC Pool กับ Tomcat

1. เพิ่มการตั้งค่าใน web.xml (WebContent/WEB-INF)
ระบุชื่อ datasource ด้วย <res-ref-name> เช่น สร้าง datasource ชื่อ jdbc/TestDB

<resource-ref>
     <description>DB Connection</description>
     <res-ref-name>jdbc/TestDB</res-ref-name>
     <res-type>javax.sql.DataSource</res-type>
     <res-auth>Container</res-auth>
</resource-ref>


2. สร้าง context.xml ไว้ที่ META-INF ไม่ใช่ WEB-INF นะ เคยใส่ผิดมาแล้ว หาตั้งนานว่าทำไมใช้งานไม่ได้
ระบุ name เป็นแบบเดียวกันกับ web.xml แล้วตั้งค่า url, username, password ให้เรียบร้อย ค่าอื่น ๆ ตามเหมาะสม

<Context>
     <Resource
          type="javax.sql.DataSource"
          name="jdbc/TestDB"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
          driverClassName="oracle.jdbc.driver.OracleDriver"
          url="jdbc:oracle:thin:@oraservername:1521:osid"
          username="orausername"
          password="0rapassword123"
          initialSize="0"
          maxActive="80"
          maxIdle = "30"
          minIdle="20"
          timeBetweenEvictionRunsMillis="30000"
          minEvictableIdleTimeMillis="60000"
          testOnBorrow="true"
          validationQuery="SELECT 1 FROM DUAL"
          validationInterval="30000"
          removeAbandoned="true"
          removeAbandonedTimeout="60"
          logAbandoned="true"
          abandonWhenPercentageFull="60"
          jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"/>
</Context>

*หมายเหตุ ตัวอย่างนี้ใช้ database oracle หากท่านใช้ database ตัวอื่น ๆ ที่ไม่ใช่ oracle สามารถดูเพิ่มเติมได้ ที่นี่

อัพเดต: สำหรับ MySQL ตัวอย่างตามด้านล่างนี้

<Context>
     <Resource
          type="javax.sql.DataSource"
          name="jdbc/TestDB"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
          driverClassName="com.mysql.jdbc.Driver"
          url="jdbc:mysql://mysqlservername:1521:osid"
          username="mysqlusername"
          password="mysqlpassword"
          auth="Container"
          maxActive="80"
          maxIdle = "30" />
</Context>

3. หา library driver database มาใส่ไว้ที่ folder lib ของ tomcat ที่ลงไว้
ตัวอย่างเช่น C:\Program Files\Apache Software Foundation\apache-tomcat-6.0.35\lib
ในที่นี้ใช้ ojdbc6_11.0.1.7.0.jar

4. ในกรณีที่ใช้ tomcat 6 (tomcat 7 รองรับ pool แล้ว) ให้เพิ่ม library tomcat-jdbc.jar ไว้ที่เดียวกันกับข้อก่อนหน้า โหลดตัวล่าสุดได้ ที่นี่

5. เขียนโค้ด เช่น

Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:/comp/env/jdbc/TestDB");
Connection conn = ds.getConnection();
PreparedStatement statement = null;
ResultSet resultSet = null;

StringBuilder sqlStmt = new StringBuilder("SELECT * FROM USER");
statement = conn.prepareStatement(sqlStmt.toString());
resultSet = statement.executeQuery();
while(resultSet.next()){
	System.out.println(resultSet.getString("NAME"));
}

resultSet.close();
statement.close();
conn.close();

อ้างอิง:
Configure JDBC Data Source for use with JNDI and Tomcat 6 in JSF 2 project
Data source configuration for Java when using an Apache Tomcat web server
java.lang.ClassNotFoundException: org.apache.tomcat.jdbc.pool DataSourceFactory
How To: Set Up a Data Source within Tomcat 6.0 using Oracle Universal Connection Pool
Tomcat and JDBC connection pooling

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s