package com.meidusa.amoeba.jdbc; import java.sql.Connection; import java.sql.Driver; import java.sql.SQLException; import java.util.Properties; import org.apache.commons.pool.PoolableObjectFactory; import com.meidusa.amoeba.util.Initialisable; import com.meidusa.amoeba.util.InitialisationException; /** * jdbc driver connection factory * @author struct * */ public class JdbcConnectionFactory implements PoolableObjectFactory,Initialisable { private String url; private Driver driver; private Properties properties; private ResultSetHandler resultSetHandler; public void setResultSetHandler(ResultSetHandler ioHandler) { this.resultSetHandler = ioHandler; } public void setDriver(Driver driver) { this.driver = driver; } public Properties getProperties() { return properties; } public void setProperties(Properties properties) { this.properties = properties; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public void activateObject(Object obj) throws Exception { } public void destroyObject(Object obj) throws Exception { if(obj instanceof Connection){ Connection conn = (Connection)obj; try { if(!conn.isClosed()){ conn.close(); } } catch (SQLException e) { } } } public Object makeObject() throws Exception { PoolableJdbcConnection conn = new PoolableJdbcConnection(driver.connect(url, properties)); conn.setResultSetHandler(resultSetHandler); return conn; } public void passivateObject(Object obj) throws Exception { } public boolean validateObject(Object obj) { if(obj instanceof Connection){ Connection conn = (Connection)obj; try { return !conn.isClosed(); } catch (SQLException e) { return false; } } return false; } public void init() throws InitialisationException { } }