Christian Schneider created DBCP-423:
----------------------------------------
Summary: PoolingDataSource should implement Closeable
Key: DBCP-423
URL: https://issues.apache.org/jira/browse/DBCP-423
Project: Commons Dbcp
Issue Type: New Feature
Affects Versions: 2.0
Reporter: Christian Schneider
Fix For: 2.0.1
Currently PoolingDataSource only implements DataSource.
I have the following case in ops4j pax-jdbc. I offer a DataSourceFactory in one
bundle that can create a pooling DataSource.
Then in another bundle I create DataSources based on config in
ConfigurationAdmin. So when the config appears I create the DataSource, when
the config goes away I have to destroy it.
It is important to correctly dispose the DataSource as the pool has to be
closed. As I can not depend on dbcp in the bundle that destroys the DataSource
I currently have no simple way to destroy the DataSource.
This is where I create the DataSource:
https://github.com/ops4j/org.ops4j.pax.jdbc/blob/master/pax-jdbc-pool/src/main/java/org/ops4j/pax/jdbc/pool/impl/PooledDataSourceFactory.java
I was able to solve it by a kind of hack. I extended the PoolingDataSource with
a class that supports Closeable. So from the other bundle I could check if the
object implements Closeable and call close.
It would be a lot easier if PoolingDataSource would implement Closeable like I
did. The same is true for GenericObjectPool and the other pools. If they would
implement Closeable then handling them would be a lot easier.
They already support a close method so it would be a small change.
----
public class CloseablePoolingDataSource<C extends Connection> extends
PoolingDataSource<C> implements Closeable {
public CloseablePoolingDataSource(ObjectPool<C> pool) {
super(pool);
}
@Override
public void close() throws IOException {
getPool().close();
}
}
--
This message was sent by Atlassian JIRA
(v6.2#6252)