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);

- это обходной путь, который не раскрывает причину первоначальной проблемы, но тем не менее успешно преодолел ее.

Другие вопросы по тегам