From f0b1a73cff0a7bcf5ffb090b8d2cae71d20f6633 Mon Sep 17 00:00:00 2001 From: bjl23 Date: Wed, 9 Feb 2011 14:36:38 +0000 Subject: [PATCH] NIHVIVO-2079 consuming ResultSet iterators before dataset wrappers are closed --- .../webapp/dao/jena/DataPropertyDaoJena.java | 2 +- .../webapp/dao/jena/ObjectPropertyDaoJena.java | 2 +- .../vitro/webapp/dao/jena/PropertyDaoJena.java | 16 ++++++++++++++-- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/DataPropertyDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/DataPropertyDaoJena.java index 73b29b53c..acbe3634d 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/DataPropertyDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/DataPropertyDaoJena.java @@ -755,7 +755,7 @@ public class DataPropertyDaoJena extends PropertyDaoJena implements public List getDataPropertyList(String subjectUri) { log.debug("Data property query string:\n" + DATA_PROPERTY_QUERY_STRING); log.debug("Data property query:\n" + dataPropertyQuery); - ResultSet results = getPropertyQueryResults(subjectUri, dataPropertyQuery); + Iterator results = getPropertyQueryResults(subjectUri, dataPropertyQuery); List properties = new ArrayList(); while (results.hasNext()) { QuerySolution sol = results.next(); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyDaoJena.java index 8cbe34995..d52ac5cf7 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyDaoJena.java @@ -886,7 +886,7 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp public List getObjectPropertyList(String subjectUri) { log.debug("Object property query string:\n" + OBJECT_PROPERTY_QUERY_STRING); log.debug("Object property query:\n" + objectPropertyQuery); - ResultSet results = getPropertyQueryResults(subjectUri, objectPropertyQuery); + Iterator results = getPropertyQueryResults(subjectUri, objectPropertyQuery); List properties = new ArrayList(); while (results.hasNext()) { QuerySolution soln = results.next(); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/PropertyDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/PropertyDaoJena.java index 13a435d46..7726659fe 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/PropertyDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/PropertyDaoJena.java @@ -20,6 +20,7 @@ import com.hp.hpl.jena.query.Dataset; import com.hp.hpl.jena.query.Query; import com.hp.hpl.jena.query.QueryExecution; import com.hp.hpl.jena.query.QueryExecutionFactory; +import com.hp.hpl.jena.query.QuerySolution; import com.hp.hpl.jena.query.QuerySolutionMap; import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.rdf.model.RDFNode; @@ -401,7 +402,7 @@ public class PropertyDaoJena extends JenaBaseDao implements PropertyDao { return classSet; } - protected ResultSet getPropertyQueryResults(String subjectUri, Query query) { + protected Iterator getPropertyQueryResults(String subjectUri, Query query) { log.debug("SPARQL query:\n" + query.toString()); // Bind the subject's uri to the ?subject query term QuerySolutionMap subjectBinding = new QuerySolutionMap(); @@ -409,13 +410,24 @@ public class PropertyDaoJena extends JenaBaseDao implements PropertyDao { ResourceFactory.createResource(subjectUri)); // Run the SPARQL query to get the properties + System.out.println(dwf.getClass().getName()); DatasetWrapper w = dwf.getDatasetWrapper(); Dataset dataset = w.getDataset(); dataset.getLock().enterCriticalSection(Lock.READ); try { QueryExecution qexec = QueryExecutionFactory.create( query, dataset, subjectBinding); - return qexec.execSelect(); + try { + ResultSet rs = qexec.execSelect(); + // consume iterator before wrapper w is closed in finally block + List results = new ArrayList(); + while (rs.hasNext()) { + results.add(rs.next()); + } + return results.iterator(); + } finally { + qexec.close(); + } } finally { dataset.getLock().leaveCriticalSection(); w.close();