28 Ocak 2012 Cumartesi

SmartGWT ve JNDI

Konuya başlamadan önce isterseniz bazı terimleri basitçe hatırlayalım.

GWT: Google Web Toolkit (GWT) adından da anlaşılacağı gibi Google bünyesinde geliştirilen, ajax temelli bir web framework. Google bu kütüphaneyi birçok servisinde kullanmakta. Oldukça geniş bir kütüphane ve çok güçlü bir yapıya sahip. GWT ile ilgili daha fazla bilgi için burya bakabilirsiniz.

SmartGWT: SmartGWT Isomorphic Software bünyesinde geliştirilen GWT tabanlı bir framework. Isomorphic, kütüphaneyi 4 farklı pakette dağıtıyor.

  • LGPL
  • Pro
  • Power
  • Enterprise
LGPL paketi ücretsiz ve adı üzerinde LGPL lisanslı. Diğer paketler ise ücretli. Paketler arasındaki farkları görmek isterseniz tabloyu buradan inceleyebilirsiniz. LGPL dağıtımına buradan, ve diğer paketlere de buradan ulaşabilirsiniz.

JNDI: Java Naming and Directory Interface, Sun Microsystems  tarafından geliştirilen isimlendirme ve dizinleme API'si. Java uygulamaları bu API'yi kullanarak, mesela bir Connection'ı havuza atabilir ve havuzdan çağırabilir. JNDI konusunda daha fazla bilgi için bkz: google


SmartGWT ve JNDI
Gelelim konumuza. GWT geliştirme aşamasında uygulama sunucu olarak Jetty kullanıyor.Bu nedenle biz de ayarları jetty için yapacağız fakat diğer uygulama sunucular için de gerekli connection pooling ayarlarını kendi sitelerinden bulabilirsiniz.

  1. Jetty için JNDI ayarları: Uygulamanızın WEB-INF kalsörü altında jetty-web.xml adında bir dosya oluşturun ve içeriğini aşağıdaki gibi düzenleyin;

<?xml version="1.0" encoding="UTF-8"?>
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
    <New id="myds" class="org.mortbay.jetty.plus.naming.Resource">
        <Arg>java:comp/env/jdbc/database</Arg>
        <Arg>
            <New class="org.postgresql.ds.PGSimpleDataSource">
                <Set name="User">your_user_name</Set>
                <Set name="Password">your_password</Set>
                <Set name="DatabaseName">your_database</Set>
                <Set name="ServerName">localhost</Set>
                <Set name="PortNumber">5432</Set>
            </New>
        </Arg>
    </New>
</Configure>

  1. Server Properties: Uygulamanızın kaynak kodlarının bulunduğu dizinde ($projectName/src) server.properties dosyasını açın (yoksa oluşturun) ve aşağıdaki satırları ekleyin;

webRoot: __AUTODETECT__

gwtModuleName: <module_name>

isomorphicPathRootRelative: $gwtModuleName/sc

sql.defaultDatabase: PostgreSQL

sql.PostgreSQL.autoJoinTransactions: true
sql.PostgreSQL.interface.credentialsInURL: true
sql.PostgreSQL.pool.enabled: false
sql.PostgreSQL.driver.context: _container_
sql.PostgreSQL.driver: org.postgresql.Driver
sql.PostgreSQL.driver.driverName: PostgreSQL
sql.PostgreSQL.driver.networkProtocol: tcp
sql.PostgreSQL.driver.url: 
sql.PostgreSQL.interface.type: jndi
sql.PostgreSQL.database.type: postgresql
sql.PostgreSQL.driver.name: jdbc/database
sql.PostgreSQL.driver.driverType: thin

"server.properties" dosyasındaki ayarlar PostgreSQL içindir. Siz kendi kullandığınız veritabanına göre değiştirmelisiniz.

Bunun en kolay yolu SmartGWT Enterprise Showcase içerisinden DataSource Admin Console uygulamasını kullanmanız olacaktır.

Buraya kadar yaptıklarımızla SamrtGWT uygulamanız veritabanına erişecektir. Peki ya servlet'lar içerisinden erişmek istersek ne yapmalıyız?



package com.blogspot.karslioglu;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class MyClass {
    public Connection retrieveConnection() throws Exception {
        Connection connection = null;
        Context context = new InitialContext();
        DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/database");
        connection = dataSource.getConnection();

        return connection;
    }
}

Hiç yorum yok:

Yorum Gönder