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 Thu, 01 Jan 2015 17:52:13 GMT

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

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

Sebb - I guess that sort of confirms the smelliness.  I can see how IDEs could meaningfully
/ helpfully point out when io streams are opened but not closed.  A datasource is not a stream
and the thread that opens it may not be the thread the closes it.  What seems funny to me
is to implement the java.io,Closeable interface on a java.sql resource.  Put in another way,
if this is natural, why doesn't java.sql.Connection implement it?  I think this is really
something for the client code to handle.  I am +1 for adding a good close() to PDS though.

> 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)

Mime
View raw message