[
https://issues.apache.org/jira/browse/DBCP-423?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14262695#comment-14262695
]
Phil Steitz edited comment on DBCP-423 at 1/2/15 12:28 AM:
-----------------------------------------------------------
Sorry to nuke my previous favorable comment, but even though DBCP2 requires
Java 7, implementing Autocloseable in PDS/BDS could create problems for people
who open datasources in try-with-resources blocks along with connections and
expect only the connections to be autoclosed on exception paths. Could be that
is why Datasource itself does not extend this.
was (Author: psteitz):
DBCP 2 requires Java 7+, so this should work. That interface looks like
exactly what we need. Unless I hear objections, or someone beats me to it with
a patch or commit, I will implement close properly in PDS and have both it and
BDS implement Autocloseable.
> PoolingDataSource should implement Closeable
> --------------------------------------------
>
> Key: DBCP-423
> URL: https://issues.apache.org/jira/browse/DBCP-423
> Project: Commons Dbcp
> Issue Type: Improvement
> Affects Versions: 2.0
> Reporter: Christian Schneider
> Fix For: 2.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.3.4#6332)