commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Phil Steitz (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DBCP-423) PoolingDataSource should implement Closeable
Date Fri, 16 Jan 2015 15:39:35 GMT

    [ https://issues.apache.org/jira/browse/DBCP-423?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14280404#comment-14280404
] 

Phil Steitz commented on DBCP-423:
----------------------------------

I get your point, Thomas, but I still like the BDS approach better.  I think it makes sense
to wrap and rethrow because the wrapping is appropriate to the context.  The exception happened
while closing the datasource, so at this API boundary it makes sense for it to be an SQLException,
regardless of root cause.  Sure, what is wrapped will almost certainly be an SQLException
already, but the wrapping ensures this and adds the message that it happened while closing
the datasource.  I might actually have done the same thing on the unchecked path for the same
reason.

Are you OK if I change the patch to do what the BDS close does?

Any other opinions on this?

> 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
>
>         Attachments: DBCP-423.patch
>
>
> 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)

Mime
View raw message