Jena SPARQL Выполнение запроса зависло
Я использую конечную точку Virtuoso SPARQL для выполнения запроса. но пока я выполняю запрос, мое выполнение зависло.
QueryExecution qexec = null;
try {
System.out.println("now inside");
String queryString = "PREFIX ns: <http://example.org/ns#>" +
"PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\r\n" +
"SELECT ?title ?price" +
" {" +
" ?x ns:price ?p ." +
" ?x ns:discount ?discount ." +
" ?x <http://purl.org/dc/elements/1.1/title> ?title . " +
" BIND ('12'^^xsd:integer AS ?price)" +
" FILTER( ?price < 20 )" +
" }";
System.out.println(queryString);
System.out.println("inside the sparql just before call");
qexec = QueryExecutionFactory.sparqlService("http://192.168.99.100:8890/sparql", queryString);
ResultSet results = qexec.execSelect();
System.out.println("inside the sparql just after call");
// write to a ByteArrayOutputStream
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ResultSetFormatter.outputAsJSON(outputStream, results);
String json = outputStream.toString();
System.out.println(json);
return json;
} catch (Exception e) {
e.printStackTrace();
}finally {
qexec.close();
}
return "Error";
Пример данных
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix : <http://example.org/book/> .
@prefix ns: <http://example.org/ns#> .
:book1 dc:title "SPARQL Tutorial" .
:book1 ns:price 42 .
:book1 ns:discount 0.2 .
:book2 dc:title "The Semantic Web" .
:book2 ns:price 23 .
:book2 ns:discount 0.25 .
Во время выполнения qexec.execSelect()
он не должен давать ни ошибки, ни результата на выходе. Но это случится иногда.
Как при трассировке он распечатает все детали вплоть до приведенного ниже утверждения
System.out.println("inside the sparql just before call");
но не после этого.
Как мне это отследить? Как мне выяснить, что вызывает проблему?
Примечание. Мой запрос очень маленький, поэтому времени не возникает.
Также я замечаю, что после обновления новой обновленной версии Jena 3.7.0 я получаю эту проблему
1 ответ
Если я правильно прочитал комментарии, я думаю, что проблема была решена путем изменения -
qexec = QueryExecutionFactory.sparqlService("http://192.168.99.100:8890/sparql", queryString);
- к -
QueryEngineHTTP qexec = new QueryEngineHTTP ("http://192.168.99.100:8890/sparql", queryString);
- это обходной путь, который не раскрывает причину первоначальной проблемы, но тем не менее успешно преодолел ее.