Uploaded image for project: 'Apache Jena'
  1. Apache Jena
  2. JENA-1601

Make ClosableIterator<T> extend AutoCloseable

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Minor
    • Resolution: Won't Fix
    • Affects Version/s: Jena 3.8.0
    • Fix Version/s: None
    • Component/s: Jena
    • Labels:
      None

      Description

      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:

      final ExtendedIterator<Triple> iterator = someGraph.find();
      try {
        while (iterator.hasNext()) {
          // consume iterator, might throw in here
        }
      } finally {
        // Prevent resource leaks
        iterator.close();
      }
      

      This would be better expressed in a try-with-resource-construct:

      try (final ExtendedIterator<Triple> itrator = someGraph.find()) {
        // consume iterator, might throw in here
      }
      

      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.

        Attachments

          Activity

            People

            • Assignee:
              andy Andy Seaborne
              Reporter:
              indeterminatus David Schwingenschlögl
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: