Connection Pool nedir?
Yazdığınız programlar ile veritabanına yaptığınız her bağlantı aç / kapa işlemi veritabanı kısmında yoğun kontrollerden geçer, bir çok görevin başlamasına neden olur.
Bu işlemler aynızamanda veritabanı tarafında Garbage (çöp) birikmesine de yol açar. Bu işlemler veritabanınızın verimini düşürebilir. Çok fazla sayıda istek sonucunda response sürelerini artırabilir. Connection Pool (Bağlantı Havuzu) kullanarak belirttiğimiz sayıda bağlantıyı uygulama sunucumuzda hazır bekletebilir. Böylece gelen isteğin işlem süresi veritabanına hazır bağlantı olduğu için kısalır. Ayrıca Connection Pool'lar gelen istekleri kuyruğa sokabilirler.
Makalenin devamında Tomcat üzerinde MySQL veritabanımıza Connection Pool oluşturacağız.
Gerekli Malzemeler
commons-dbcp-1.2.1 (http://jakarta.apache.org/commons/dbcp/downloads.html)
MySQL veritabanı (www.mysql.com)
MySQL jdbc driver (http://www.mysql.com/products/connector/j/)
Tomcat (http://jakarta.apache.org)
TOMCAT i kurduğumuz dizin T_HOME olsun
Önce T_HOME/common/lib klasörüne indirdiğimiz commons-dpcp ve MySQLjdbc
driver jar dosyalarını kopayalıyoruz. Sonra T_HOME/conf/server.xml dosyasını
açıyoruz. oraya hemen </Host> tagının üstüne şunları yazıyoruz.
<Context path="/contextadimiz" docBase="jsplerin_oldugu_root_yolu"
debug="5" reloadable="true" crossContext="true">
<Resource name="jdbc/db_dbadi" auth="Container" type="javax.sql.DataSource"
maxActive="9" maxIdle="2" maxWait="10000" username="db_kullanici_adim"
password="sifre" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/db_adi?autoReconnect=true"
removeAbandoned="true"
removeAbandonedTimeout="60"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"/>
</Context>
Simdi Tomcat bizim contextimiz için bekeme durumunda 2 bağlantıyı açık tutacak idle bağlantılarda değişiklik olursa maximum bağlantı sayısına kadar bağlantı açacak.Buna kod üzerinden erişmek içinse şunu yazıyoruz.
<HTML>
<HEAD>
<TITLE>DB Test</TITLE>
</HEAD>
<BODY>
<%@ page language="java" import="java.sql.*,javax.naming.*,javax.sql.*" %>
<%
try{
Context initCtx = new InitialContext();
DataSource ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/db_dbadi");
Connection c = ds.getConnection();
Statement Stmt = c.createStatement();
ResultSet RS = Stmt.executeQuery("SHOW tables");
while (RS.next()) {
out.println(RS.getString(1)+"<br>");
}
RS.close();
Stmt.close();
c.close();
}
catch(Exception e){
out.println("ERROR! "+e.getMessage());
}
%>
</BODY>
</HTML>