package javacodebook.jdbc.pooling;

import java.sql.Connection;
import java.sql.DatabaseMetaData;

import javax.sql.DataSource;

import org.postgresql.jdbc2.optional.PoolingDataSource;

public class ConnectionPoolingExample {

    public static void main(String[] args) {

        try {
            // Zuerst initialisieren wir die herstellerspezifische
            // Klasse
            PoolingDataSource source = new PoolingDataSource();

            // Die Datenbankverbindung wird hier über die  
            // folgenden Getter- und Settermethoden definiert
            source.setDatabaseName("test");
            source.setServerName("localhost");
            source.setUser("postgres");
            source.setPassword("postgres");
            System.out.println("Using ConnectionPooling...");

            // Da der PoolingDataSource das Interface  
            // javax.sql.DataSource implementiert, kann diese 
            // entsprechend verwendet werden.
            DataSource pool = source;

            // Ab hier ist alles wie gehabt - das
            // Connection-Pooling wird für den Programmierer
            // vollkommen transparent angewendet.
            Connection con = source.getConnection();
            DatabaseMetaData data = con.getMetaData();

            System.out.println(
                "Connected to "
                    + data.getDatabaseProductName()
                    + " via "
                    + pool.getClass());

            con.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
