tim@130: package de.intevation.gnv.geobackend.sde.connectionpool; tim@130: tim@130: import java.sql.Connection; tim@130: import java.util.Properties; tim@130: tim@130: import org.apache.commons.pool.PoolableObjectFactory; tim@130: import org.apache.commons.pool.impl.GenericObjectPool; tim@130: import org.apache.log4j.Logger; tim@130: tim@130: import de.intevation.gnv.geobackend.base.connectionpool.ConnectionPool; tim@130: import de.intevation.gnv.geobackend.base.connectionpool.exception.ConnectionException; tim@130: tim@130: /** tim@130: *This is the ArcSDE specific implementation of the Interface ConnectionPool tim@130: * @author Tim Englich tim@130: */ tim@130: public class ArcSDEConnectionPool implements ConnectionPool { tim@130: tim@130: /** tim@130: * the logger, used to log exceptions and additonaly information tim@130: */ tim@130: private static Logger log = Logger.getLogger(ArcSDEPoolableObjectFactory.class); tim@130: tim@130: /** tim@130: * The Pool which stores the Connections to the ArcSDE Backend tim@130: */ tim@130: private GenericObjectPool pool = null; tim@130: tim@130: /** tim@130: * @see de.intevation.gnv.geobackend.base.connectionpool.ConnectionPool#closeConnection(java.lang.Object) tim@130: */ tim@130: public void closeConnection(Connection connection) throws ConnectionException { tim@130: tim@130: try { tim@130: //TODO: Muss Connection geschlossen werden? tim@130: this.pool.returnObject(connection); tim@130: } catch (Exception e) { tim@130: log.error(e,e); tim@130: throw new ConnectionException(e); tim@130: } tim@130: tim@130: } tim@130: tim@130: /** tim@130: * @see de.intevation.gnv.geobackend.base.connectionpool.ConnectionPool#getConnection(java.lang.String) tim@130: */ tim@130: public synchronized Connection getConnection(String connectionID) throws ConnectionException{ tim@130: try { tim@130: Object object = this.pool.borrowObject(); tim@130: tim@130: if (object instanceof Connection){ tim@130: return (Connection)object; tim@130: }else{ tim@130: throw new ConnectionException("Created Object is not an java.sql.Connection"); tim@130: } tim@130: tim@130: } catch (Exception e) { tim@130: log.error(e,e); tim@130: throw new ConnectionException(e); tim@130: } tim@130: } tim@130: tim@130: /** tim@130: * @see de.intevation.gnv.geobackend.base.connectionpool.ConnectionPool#initialize(java.util.Properties) tim@130: */ tim@130: public void initialize(Properties properties) { tim@130: log.info("ArcSDEConnectionPool.initialize has been called"); tim@130: log.info("ConnectionPool will be initialized"); tim@130: tim@130: PoolableObjectFactory poolableObjectFactory = new ArcSDEPoolableObjectFactory(properties); tim@130: tim@130: int maxActive = Integer.parseInt(properties.getProperty("maxActive", "10")); tim@130: tim@130: log.info("Maximum Number of active Connections: "+maxActive); tim@130: // TODO weitere Werte einparsen und setzen. tim@130: tim@130: this.pool = new GenericObjectPool(poolableObjectFactory,maxActive); tim@130: tim@130: } tim@130: tim@130: }