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

David Schwingenschlögl commented on JENA-1601:
----------------------------------------------

After consulting my collegue, the issues we had were in fact related to using 
RDB (and later, SDB) with leaking database cursors. It's from this time that I 
distinctly remember to always close all iterators, or very bad things would 
happen.

Since we too do not plan on supporting SDB in the future, this issue is not so 
important to me anymore. However, I think for SDB this constellation is 
problematic; if Jena does not consistently close its iterators (which I read 
between the lines), and the users of the APIs are not forced to, database 
connections are bound to leak.

How should I proceed? From my perspective, this issue can be 
invalidated/closed, but I think it's still present for all users of SDB.

> Make ClosableIterator<T> extend AutoCloseable
> ---------------------------------------------
>
>                 Key: JENA-1601
>                 URL: https://issues.apache.org/jira/browse/JENA-1601
>             Project: Apache Jena
>          Issue Type: Improvement
>          Components: Jena
>    Affects Versions: Jena 3.8.0
>            Reporter: David Schwingenschlögl
>            Priority: Minor
>
> The interface org.apache.jena.util.iterator.ClosableIterator<T> defines a 
> method public void close(), so the concept of closing is already baked into 
> it. The only barrier to using a ClosableIterator (and thus, ExtendedIterator) 
> in a try-with-resource block is the missing extension of 
> java.lang.AutoCloseable.
> According to API documentation of ClosableIterator, an iterator should be 
> closed when not completely exhausted, which may be the case when the block 
> consuming the iterator throws an exception, effectively making constructs 
> such as this necessary:
> {code:java}
> final ExtendedIterator<Triple> iterator = someGraph.find();
> try {
>   while (iterator.hasNext()) {
>     // consume iterator, might throw in here
>   }
> } finally {
>   // Prevent resource leaks
>   iterator.close();
> }
> {code}
> This would be better expressed in a try-with-resource-construct:
> {code:java}
> try (final ExtendedIterator<Triple> itrator = someGraph.find()) {
>   // consume iterator, might throw in here
> }
> {code}
> From what I can tell, making a ClosableIterator also extend AutoCloseable 
> only adds to the usability of Jena's API while keeping source backwards 
> compatibility intact.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to