- สามารถกำหนดจำนวนการติดต่อได้
- สามารถสร้าง connection pool ทำให้ใช้งานระบบได้อย่างมีประสิทธิภาพ
- สามารถกำหนดกลุ่มผู้ใช้งานฐานข้อมูลได
ในบทความนี้จะกล่าวถึงการ setup data source และกำหนด connection pool บน Tomcat version 5.5.x พร้องทั้งแสดงตัวอย่าง web application ที่เรียกใช้ฐานข้อมูลผ่านทาง data source ในที่นี้ผู้เขียนสมมติว่าผู้อ่านได้ติดตั้ง Tomcat แล้ว โดยติดตั้งที่ใดก็แล้วแต่ ซึ่งผู้เขียนขอเรียกว่า TomcatHome ดังนั้นถ้าผู้เขียนกล่าวถึง TomcatHome ขอให้ผู้อ่านรู้ว่ากำลังกล่าวถึงตำแหน่งที่ผู้อ่านได้ติดตั้ง Tomcat นั่นเอง
เริ่มแรกขอให้ไปที่ TomcatHome/conf ให้ทำการสำเนาไฟล์ server.xml เป็นชื่อ serverold.xml จากนั้นเปิดไฟล์ server.xml ขึ้นมา แล้วทำการแก้ไขข้อความภายในโดยเพิ่มข้อความระหว่าง tag <Host> และ </Host> ให้เป็นดังนี้
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="/test" docBase="test"
debug="5" reloadable="true" crossContext="true">
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
removeAbandoned="true" removeAbandonedTimeout="60"
username="root" password="" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/your_database?autoReconnect=true"/>
</Context>
</Host>
ข้อความที่เพิ่มเข้ามาเป็นการสร้าง data source ที่ชื่อ jdbc/TestDB สำหรับ Application ที่อยู่ภายใน directory ชื่อ test ภายใต้ webapps ของ Tomcat ส่วนต่างๆมีความหมายดังนี้
maxActive เป็นการกำหนดจำนวนการติดต่อสูงสุดที่อนุญาตให้ใช้งานพร้อมกัน จากตัวอย่าง ถ้ามีการ idle เป็นจำนวนเวลา 60 วินาที ก็จะถูกยกเลิกการติดต่อ
เนื่องจากผู้เขียนใช้ฐานข้อมูลเป็น MySQL ดังนั้นจึงใช้ JDBC Driver และ URL ดังกล่าว
จากนั้นขอให้ผู้อ่านสร้าง directory ชื่อ test ภายใต้ webapps ของ TomcatHome โดยมีโครงสร้างดังนี้
webapps |-----> test |------> test.jsp |------> WEB-INF |-----> web.xml |------> lib |-----> jstl.jar |-----> standard.jar
จากนั้นขอให้ผู้อ่านสำเนาไฟล์ ต่อไปนี้ไปไว้ใน TomcatHome/common/lib
- Jakarta-Commons DBCP
- Jakarta-Commons Collections
- Jakarta-Commons Pool
- JDBC Driver
ถ้าท่านใดไม่มีไฟล์ดังกล่าวข้างต้น สามารถดาวโหลดได้ ที่นี่ (ไม่รวม JDBC Driver)
ซึ่งผู้พัฒนาแนะนำว่าให้ติดตั้งไฟล์ดังกล่าวในที่นี้เท่านั้น โดยไม่แนะนำให้ติดตั้งใน WEB-INF/lib ซึ่งอาจเกิดปัญหาได้ จากนั้นให้แก้ไขไฟล์ web.xml ให้เป็นดังนี้
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <description>MySQL Test App</description> <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> </web-app>
ซึ่งเป็นการประกาศการนำ data source ที่เราได้สร้างแล้ว มาใช้ภายใน directory นี้นั่นเอง หลังจากนั้น เราสามารถสร้างโปรแกรมเพื่อทดสอบ data source ได้แล้ว โดยสร้างไฟล์ชื่อ test.jsp แล้วเพิ่มข้อความเข้าไปดังนี้ โดยขอให้แก้ไข sql query และชื่อ field ให้เหมาะสมกับตนเอง
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<sql:query var="rs" dataSource="jdbc/TestDB">
select * from report
</sql:query>
<html>
<head>
<title>DB Test</title>
</head>
<body>
<h2>Results</h2>
<c:forEach var="row" items="${rs.rows}">
${row.product} ${row.sell_amount}<br/>
</c:forEach>
</body>
</html>
ซึ่งตัวอย่างนี้เป็นการเขียนโดยใช้ JSTL จากนั้นให้เรา start Tomcat แล้วเรียกโปรแกรมนี้ผ่าน Browser เช่น
http://localhost:8080/test/test.jsp
ก็จะได้ผลลัพธ์ตามต้องการ
สุดท้ายนี้หวังว่าบทความนี้คงเกิดประโยชน์แก่ท่านไม่มากก็น้อย หากมีข้อสงสัยใดสามารถสอบถามได้ที่เว็บบอร์ด