Çok katmanlı mimaride kod geliştirirken, veri tabanına erişmek için veri tabanı katmanında Connection almak gerekir. Uygulamada kullanılan veri tabanı hangisiyse driver’ı register edilmeli, Connection alınmalı, kullanıldıktan sonra da kapatılmalıdır.
Veri tabanı tarafında Connection açmak kapatmak maliyetli bir iştir. Bu yüzden kod yazarken Connection’ın hangi katmanda açılacağı, aynı bağlantı ile kaç sorgu çalıştırılacağı ve bağlantının nerede kapatılacağı iyi hesaplanmalıdır.
Connection Pool adı verilen yapılar sayesinde veri tabanı tarafında kullanılacak bağlantılar sürekli açık tutulur. Bu sayede her sorgu için tek tek bağlantı açıp kapatma maliyetinden kurtuluruz.
Connection Pool uygulamadan bağımsız bir kavramdır. Dolayısıyla birden fazla uygulama aynı bağlantı havuzunu kullanarak aynı veri tabanına erişebilir. Çok büyük performans kazancı sağlanmış olur.
Connection Pool sunucu üzerinde tanımlanır. Her sunucuda da pool tanımı farklı şekilde yapılır. Çoğu gelişmiş uygulama sunucusunun web arayüzü sayesinde pool tanımları kolay bir şekilde yapılır.
Tomcat Server’da ise bir arayüz olmadığı için pool tanımı XML dosyasına manuel olarak yazdığımız kod ile gerçekleşir.
Ben örnek olarak Oracle XE veri tabanına bağlanmamızı sağlayan DataSource tanımının Tomcat Server üzerinde nasıl yapılacağını göstereceğim.
Öncelikle Tomcat Server’ın kurulu olduğu dizin içerisindeki context.xml dosyası içerisine aşağıdaki gibi bir kod eklenmelidir.
[codesyntax lang=”xml” lines=”no”]
<Resource name="jdbc/xe" auth="Container" type="javax.sql.DataSource"
removeAbandoned="true" removeAbandonedTimeout="30" maxActive="100"
maxIdle="30" maxWait="10000" username="hr" password="hr"
driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@localhost:1521:xe" />
[/codesyntax]
Bu kod ile DataSource ismini belirlemiş olduk.
Ayrıca aynı anda kaç bağlantı sürekli açık tutulacak, fazladan açılan bağlantılar ne kadar süre ile saklanacak gibi parametreleri de ayarlamış olduk.
Pool tanımı yapılırken hangi veri tabanına hangi URL ile bağlanacağımızı, driver ismini, veri tabanı kullanıcı adı ve parolasını da belirttik.
context.xml dosyasının yerini bulamadıysanız Eclipse IDE’sinden ulaşabilirsiniz.
Bundan sonra yapmanız gereken web.xml dosyasında pool kullandığımızı belirtmek ve Datasource üzerinden Connection almak.
Uygulamanın kalbi olan konfigurasyon dosyasına (web.xml) aşağıdaki kodu yazıyoruz.
[codesyntax lang=”xml” lines=”no”]
<resource-ref>
<description>DB Connection Pooling</description>
<res-ref-name>jdbc/xe</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
[/codesyntax]
Java kodu ile bağlantıyı da aşağıdaki gibi alıyoruz.
[codesyntax lang=”java” lines=”no”]
Context envContext = (Context) new InitialContext().lookup("java:comp/env");
DataSource dataSource = (DataSource) envContext.lookup("jdbc/xe");
Connection connection = dataSource.getConnection();
[/codesyntax]