view geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/connectionpool/ArcSDEPoolableObjectFactory.java @ 551:1f6e2b256247

Improved the Objectvalidation of the ArcSDE-Databaseconnections geo-backend/trunk@544 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Tim Englich <tim.englich@intevation.de>
date Fri, 15 Jan 2010 10:09:41 +0000
parents ff1b7967e6b9
children 5b536542ef56
line wrap: on
line source
/**
 * 
 */
package de.intevation.gnv.geobackend.sde.connectionpool;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import org.apache.commons.pool.PoolableObjectFactory;
import org.apache.log4j.Logger;

import de.intevation.gnv.geobackend.base.connectionpool.exception.ConnectionException;
import de.intevation.gnv.geobackend.sde.datasources.ArcSDEConnection;

/**
 * @author Tim Englich <tim.englich@intevation.de>
 *
 */
public class ArcSDEPoolableObjectFactory implements PoolableObjectFactory {

    /**
     * the logger, used to log exceptions and additonaly information
     */
    private static Logger log = Logger.getLogger(ArcSDEPoolableObjectFactory.class);
    
    private int serverRoundtripInterval = 1000 * 30;// 30 Sekunden
    /**
     * The URL to the ArcSDE Server
     */
    private String server = null;
    /**
     * The Port the ArcSDE Server is connected to.
     */
    private String port = null;
    /**
     * The Name of the Database
     */
    private String database = null;
    /**
     * The Username for the Authentication
     */
    private String username = null;
    /**
     * The Credentials which belongs to the User
     */
    private String credentials = null;
      
    /**
     * Constructor of this Class
     * @param properties the Properties which includes the ConnectionParams to the Database
     */
    public ArcSDEPoolableObjectFactory(Properties properties) {
        log.debug("ArcSDEPoolableObjectFactory.Constructor");
        this.server = properties.getProperty("server");
        this.port = properties.getProperty("port");
        this.database = properties.getProperty("database");
        this.username = properties.getProperty("username");
        this.credentials = properties.getProperty("credentials");
        
        try {
            String serverRoundtripIntervalValue = properties.getProperty("serverRoundtripInterval");
            if (serverRoundtripIntervalValue != null){
                this.serverRoundtripInterval = Integer.parseInt(serverRoundtripIntervalValue);
            }
        } catch (NumberFormatException e) {
            log.error(e,e);
        }
        
        log.info("ArcSDEPoolableObjectFactory initialized");
        log.info("Server: "+this.server);
        log.info("Port: "+this.port);
        log.info("Database: "+this.database);
        log.info("User: "+this.username);
        log.info("Testtimeout: "+this.serverRoundtripInterval);
        
        }

    /**
     * @see org.apache.commons.pool.PoolableObjectFactory#activateObject(java.lang.Object)
     */
    public void activateObject(Object arg0) throws Exception {
        log.debug("ArcSDEPoolableObjectFactory.activateObject");
    }

    /**
     * @see org.apache.commons.pool.PoolableObjectFactory#destroyObject(java.lang.Object)
     */
    public void destroyObject(Object arg0) throws Exception {
        log.debug("ArcSDEPoolableObjectFactory.destroyObjectb");
        if (arg0 instanceof ArcSDEConnection) {
            ((ArcSDEConnection)arg0).close();
        }else{
            log.warn("Object cannot be handled");
        }
    }

    /**
     * @see org.apache.commons.pool.PoolableObjectFactory#makeObject()
     */
    public Object makeObject() throws Exception {
        log.debug("ArcSDEPoolableObjectFactory.makeObject");
        Connection con;
        try {
            con = new ArcSDEConnection(this.server, this.port, this.database, this.username, this.credentials, this.serverRoundtripInterval);
        }
        catch (ConnectionException e) {
            throw new ConnectionException("Establishing a connection to database failed: " + e.toString(), e);
        }
        return con;
    }

    /**
     * @see org.apache.commons.pool.PoolableObjectFactory#passivateObject(java.lang.Object)
     */
    public void passivateObject(Object arg0) throws Exception {
        log.debug("ArcSDEPoolableObjectFactory.passivateObject");
    }

    /**
     * @see org.apache.commons.pool.PoolableObjectFactory#validateObject(java.lang.Object)
     */
    public boolean validateObject(Object arg0) {
        log.debug("ArcSDEPoolableObjectFactory.validateObject");
        
        boolean returnValue = false;
        try {
            returnValue = arg0 instanceof ArcSDEConnection
                ? ((ArcSDEConnection)arg0).isValid(this.serverRoundtripInterval)
                : false;
        }
        catch (SQLException sqle) {}
        return returnValue;
    }
}

http://dive4elements.wald.intevation.org