Mercurial > dive4elements > gnv-client
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; } }