1 21 package com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl; 22 23 import javax.sql.DataSource ; 24 25 import org.apache.commons.dbcp.ConnectionFactory; 26 import org.apache.commons.dbcp.DriverManagerConnectionFactory; 27 import org.apache.commons.dbcp.PoolableConnectionFactory; 28 import org.apache.commons.dbcp.PoolingDataSource; 29 import org.apache.commons.logging.Log; 30 import org.apache.commons.logging.LogFactory; 31 import org.apache.commons.pool.ObjectPool; 32 import org.apache.commons.pool.ObjectPoolFactory; 33 34 import com.jaspersoft.jasperserver.api.JSExceptionWrapper; 35 36 40 public class DbcpDataSource implements PooledDataSource { 41 42 private final static Log log = LogFactory.getLog(DbcpDataSource.class); 43 44 private final ObjectPool connectionPool; 45 private final PoolingDataSource dataSource; 46 47 public DbcpDataSource(ObjectPoolFactory objectPoolFactory, 48 String url, String username, String password) { 49 connectionPool = createPool(objectPoolFactory); 50 createPoolableConnectionFactory(url, username, password); 51 52 dataSource = new PoolingDataSource(connectionPool); 53 } 54 55 protected ObjectPool createPool(ObjectPoolFactory objectPoolFactory) { 56 ObjectPool objectPool = objectPoolFactory.createPool(); 57 return objectPool; 58 } 59 60 protected void createPoolableConnectionFactory(String url, String username, String password) { 61 ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(url, username, password); 62 new PoolableConnectionFactory(connectionFactory, connectionPool, null, null, true, false); 63 } 64 65 public DataSource getDataSource() { 66 return dataSource; 67 } 68 69 public void release() { 70 try { 71 connectionPool.close(); 72 } catch (Exception e) { 73 log.error("Error while closing DBCP connection pool", e); 74 throw new JSExceptionWrapper(e); 75 } 76 } 77 78 } 79 | Popular Tags |