jena-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Schwingenschlögl (JIRA) <>
Subject [jira] [Commented] (JENA-1601) Make ClosableIterator<T> extend AutoCloseable
Date Mon, 17 Sep 2018 13:39:00 GMT


David Schwingenschlögl commented on JENA-1601:

Thanks for your reply. I was not aware of the warnings generated, but this is a good point,
and was already discussed on the user list, e.g. here: []
(my impression is that such change is likely to be rejected by the community without a very
strong argument to back it up).

Regarding your question for a use case: may I come back to you on that in 1-2 weeks? While
I am certain that we had some serious issues back in Jena 2.4 (with all sorts of nasty effects
a leaking DB connection has), I am not so firm with the problems we had when switching to
Jena 3.x. I would like to consult a collegue who may provide such use case (who is currently
on vacation).

This would be also the time that I'd kindle the discussion on the users-list again.

> Make ClosableIterator<T> extend AutoCloseable
> ---------------------------------------------
>                 Key: JENA-1601
>                 URL:
>             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

View raw message