Dalam pemrograman Java, salah satu cara untuk melakukan teknik Database Connection Pooling adalah dengan memanfaatkan konfigurasi server yang kita pakai sebagai host dari aplikasi kita, baik itu application server maupun web container. Nah, sbagai lanjutan dari [part 1], kali ini saia akan coba berbagi tentang bagaimana cara kita mengkonfigurasi server kita agar bisa mendukung teknik Database Connection Pooling ini.
Sebelum masuk ke langkah-langkah konfigurasi, ada baiknya kita tau apa-apa saja yang dibutuhkan untuk proses pengkonfigurasian ini antara lain:
- Application Server atau Web Container – saia menggunakan Apache Tomcat 6 sebagai web container
- Database yang sudah support Connection Pooling (MySQL, PostgreSQL, Oracle) – saia menggunakan PostgreSQL 8.2
- Driver JDBC dari database yang kita gunakan (JDBC v2 or higher) – saia menggunakan postgresql-8.2-509.jdbc3.jar
- mm… kira-kira apalagi ya..?? tau ah.. ntar kalo kurang tambahin ndiri yak!!
Saia asumsikan bahwa Tomcat 6 dan PostgreSQL 8.2 sudah terinstall di Ubuntu saia. OK sekarang masuk ke langkah-langkah konfigurasi:
- Kita letakkan driver JDBC kita ke dalam folder lib yang ada di tempat Tomcat 6 saia terinstall. Berikut ini adalah path dimana Tomcat 6 saia terinstall : /home/satria/Application/apache-tomcat-6.0.14. Jadi berikut adalah path lengkap dari driver JDBC saia: /home/satria/Application/apache-tomcat-6.0.14/lib/postgresql-8.2-509.jdbc3.jar
- Setelah itu kita edit file server.xml yang ada diĀ /home/satria/Application/apache-tomcat-6.0.14/conf/server.xml tujuannya adalah supaya environment dari Tomcat Server ini bisa menangani Connection Pool – bahasa gampangnya meregister resource Connection Pool ke Tomcat Server. Caranya adalah dengan menyisipkan tag <resource> diantara tag <context>. Berikut adalah contoh potongan konfigurasinya:
<Context docBase="__DBPooling5" path="/__DBPooling5" reloadable="true" crossContext="true">
<Resource
auth="Container"
driverClassName="org.postgresql.Driver"
maxActive="100"
maxIdle="30"
maxWait="10000"
name="db_xxxxxx"
password="dbapassword"
type="javax.sql.DataSource"
url="jdbc:postgresql://localhost:5432/db_xxxxxx_test"
username="dbauser" />
</Context>
Mungkin beberapa yang perlu diperhatikan antara lain tag-property driverClassName silahkan disesuaikan dengan driver database yang digunakan, url silahkan disesuaikan dengan url database yang dipakai oleh aplikasi, username dan password silahkan disesuaikan dengan username dan password yang terdaftar pada database yang digunakan.
- Setelah itu kita konfigurasi file web.xml yang juga ada di folder yang sama dengan file server.xml . Berikut adalah contoh potongan tag
<resource-ref>
<description>postgreSQL Datasource</description>
<res-ref-name>db_xxxxxx</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
- Jika sudah selesai semua kita restart service Tomcat nya.
- Sekarang Tomcat kita sudah support Database Connection Pool, tinggal kita lakukan pengkodean untuk mengakses resource Connection Pool ini.
Pada contoh kali ini, saya membuat sebuah class yang menangani permintaan koneksi dan pengembalian koneksi ke Pool dengan nama PgPoolTomcat.java
package modules;
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
/**
* @author satria.permana
*
*/
public class PgPoolTomcat {
DataSource ds = null;
public PgPoolTomcat() {
init();
}
private void init() {
try {
Context ctx = new InitialContext();
if (ctx == null) {
throw new Exception("Boom - No Context");
}
ds = (DataSource) ctx.lookup("java:comp/env/db_xxxxxx");
} catch (Exception e) {
e.printStackTrace();
}
}
public Connection getConnection() {
Connection conn = null;
if (ds != null) {
try {
conn = ds.getConnection();
} catch(SQLException sqlE) {
}
}
return conn;
}
}
Silahkan simpan file ini di folder source web-project Anda pada package modules. Selanjutnya kita buat sebuah halaman JSP yang memanfaatkan Class PgPoolTomcat.java ini untuk melakukan request koneksi dari Pool. Berikut adalah contoh file JSP :
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="java.sql.Connection"%>
<%@page import="pool.JDCConnection"%>
<%@page import="modules.PgPoolTomcat"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.ResultSet"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
PgPoolTomcat pg = new PgPoolTomcat();
Connection conn1 = pg.getConnection();
Statement st1 = conn1.createStatement();
// Silahkan sesuaikan query dibawah ini dengan query yang sesuai dengan database Anda
ResultSet rs1 = st1.executeQuery("SELECT * FROM master_ma.item LIMIT 10");
while(rs1.next()) {
out.println("[] "+conn1+" - " + rs1.getString("code") + "<br/>");
Statement st2 = conn1.createStatement();
ResultSet rs2 = st2.executeQuery("SELECT * FROM master_ma.item LIMIT 1");
if (rs2.next()) {
out.println ("|| "+conn1+" - " + rs2.getString("code") + "<br/>");
}
rs2.close();
st2.close();
try {
Thread.sleep(1000);
} catch(InterruptedException iE) {
}
}
conn1.close();
%>
</body>
</html>
OK.. kini semua sudah siap, dan sekarang saatnya kita melakukan test terhadap Connection Pool yang sudah kita konfigurasi. Pertama silahkan periksa Server database PostgreSQL apakah sudah berjalan dengan baik, dan pastikan ada atau tidak koneksi yang terbentuk pada saat ini.

Setelah itu kita periksa apakah servis Tomcat 6 kita sudah berjalan dengan baik pada port 8080.

Jika sudah, kini saatnya kita lakukan testing Connection Pool dengan cara mengakses halaman index_tomcat.jsp yang sudah kita buat tadi melalui web browser. Kalau ingin lebih meyakinkan silahkan buka 2 buah browser dan lakukan pengaksesan halaman yang sama secara hampir bersamaan.

Ketika proses di halaman web masih berlangsung, silahkan periksa resource koneksi yang terjadi pada Server database PostgreSQL melalui perintah ps -ax di console linux. Disana kita akan bisa melihat ada satu resource Connection Pool yang digunakan untuk mengakses database.

Seharusnya koneksi yang dibuat tidak akan muncul sebanyak jumlah client yang melakukan request seperti halnya pada aplikasi biasa yang tidak menerapkan Connection Pooling. Satu resource Connection Pool tersebut akan di-release ketika Server Tomcat atau Server Database kita restart. Jadi dalam hal ini, kita sudah bisa melakukan penghematan resource untuk melakukan buka-tutup koneksi yang “mahal” harganya. Semoga bermafaat..