You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2012/05/23 22:01:39 UTC
svn commit: r1342006 - in
/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine:
http/Service.java iterator/QueryIter.java main/iterator/QueryIterService.java
Author: andy
Date: Wed May 23 20:01:38 2012
New Revision: 1342006
URL: http://svn.apache.org/viewvc?rev=1342006&view=rev
Log:
JENA-248 Read all bytes after SERVICE request and close the connection.
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/http/Service.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIter.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/main/iterator/QueryIterService.java
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/http/Service.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/http/Service.java?rev=1342006&r1=1342005&r2=1342006&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/http/Service.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/http/Service.java Wed May 23 20:01:38 2012
@@ -19,7 +19,9 @@
package com.hp.hpl.jena.sparql.engine.http;
import java.io.InputStream ;
-import java.util.Map;
+import java.util.Map ;
+
+import org.openjena.atlas.io.IO ;
import com.hp.hpl.jena.query.Query ;
import com.hp.hpl.jena.query.QueryExecException ;
@@ -31,6 +33,7 @@ import com.hp.hpl.jena.sparql.algebra.Op
import com.hp.hpl.jena.sparql.algebra.op.OpService ;
import com.hp.hpl.jena.sparql.engine.QueryIterator ;
import com.hp.hpl.jena.sparql.engine.Rename ;
+import com.hp.hpl.jena.sparql.engine.iterator.QueryIter ;
import com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorResultSet ;
import com.hp.hpl.jena.sparql.mgt.Explain ;
import com.hp.hpl.jena.sparql.util.Context ;
@@ -92,7 +95,6 @@ public class Service
if ( ! op.getService().isURI() )
throw new QueryExecException("Service URI not bound: "+op.getService()) ;
-
// This relies on the observation that the query was originally correct,
// so reversing the scope renaming is safe (it merely restores the algebra expression).
// Any variables that reappear should be internal ones that were hidden by renaming
@@ -108,8 +110,16 @@ public class Service
String uri = op.getService().getURI() ;
HttpQuery httpQuery = configureQuery(uri, context, query);
InputStream in = httpQuery.exec() ;
+
+ // Read the whole of the results now.
+ // Avoids the problems with calling back into the same system e.g. Fuseki+SERVICE <http://localhost:3030/...>
+
ResultSet rs = ResultSetFactory.fromXML(in) ;
- return new QueryIteratorResultSet(rs) ;
+ QueryIterator qIter = new QueryIteratorResultSet(rs) ;
+ qIter = QueryIter.materialize(qIter) ;
+ // And close connection now, not when qIter is closed.
+ IO.close(in) ;
+ return qIter ;
}
/**
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIter.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIter.java?rev=1342006&r1=1342005&r2=1342006&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIter.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIter.java Wed May 23 20:01:38 2012
@@ -50,9 +50,13 @@ public abstract class QueryIter extends
public static QueryIter materialize(QueryIterator qIter, ExecutionContext execCxt)
{
- return makeTracked(new QueryIteratorCopy(qIter), execCxt) ;
+ return makeTracked(materialize(qIter), execCxt) ;
}
+ public static QueryIterator materialize(QueryIterator qIter)
+ {
+ return new QueryIteratorCopy(qIter) ;
+ }
@Override
public final void close()
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/main/iterator/QueryIterService.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/main/iterator/QueryIterService.java?rev=1342006&r1=1342005&r2=1342006&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/main/iterator/QueryIterService.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/main/iterator/QueryIterService.java Wed May 23 20:01:38 2012
@@ -49,10 +49,11 @@ public class QueryIterService extends Qu
QueryIterator qIter ;
try {
qIter = Service.exec((OpService)op, getExecContext().getContext()) ;
- // Materialise, otherwise we may have outstanding incoming data.
- // Allows the server to fulfil the request as soon as possible.
+ // This iterator is materialized already otherwise we may end up
+ // not servicing the HTTP connection as needed.
// In extremis, can cause a deadlock when SERVICE loops back to this server.
- qIter = QueryIter.materialize(qIter, getExecContext()) ;
+ // Add tracking.
+ qIter = QueryIter.makeTracked(qIter, getExecContext()) ;
} catch (RuntimeException ex)
{
if ( silent )