GraphDB Free не отвечает - PullRequest
       10

GraphDB Free не отвечает

0 голосов
/ 24 августа 2018

Я использую GraphDB Free 8.4.1 в исследовательском проекте, и иногда он не отвечает на запрос. Нет ошибок, нет исключений в журналах GraphDB, GraphDB работает как сервер + верстак с конфигурацией по умолчанию.

Однако у меня есть исключение в компоненте, который запрашивает сервер GraphDB.

Исключение составляет:

org.eclipse.rdf4j.repository.RepositoryException: org.apache.http.NoHttpResponseException: The target server failed to respond
at org.eclipse.rdf4j.repository.http.HTTPRepositoryConnection.exportStatements(HTTPRepositoryConnection.java:287)
at org.eclipse.rdf4j.repository.http.HTTPRepositoryConnection.getStatements(HTTPRepositoryConnection.java:269)
at x.y.semantic.Repository.loadGraph(Repository.java:90)

Часть кода, где возникает исключение:

ValueFactory factory = SimpleValueFactory.getInstance();
RepositoryConnection connection = repository.getConnection();

// exception happens in getStatements here:
RepositoryResult<Statement> result = connection.getStatements(null, null, null, true, factory.createIRI(contextURI));

Не могли бы вы помочь мне определить, в чем проблема?

Большое спасибо!

1 Ответ

0 голосов
/ 27 августа 2018

GraphDB Free имеет ограничение двух одновременных подключений.Я подозреваю, что проблемы вызваны GDB-1975 "GraphDB Free зависает при выполнении нескольких одновременных запросов".Вы можете легко воспроизвести проблему с помощью:

for (int i = 0; i < 10; i++) {

    RepositoryConnection repCon = repository.getConnection();
    String queryString = "select * where {?s ?p ?o}";

    try {
        TupleQuery tupleQuery = repCon.prepareTupleQuery(QueryLanguage.SPARQL, queryString);

        //stops working after the 5th iteration
        TupleQueryResult queryResult = tupleQuery.evaluate();
    } finally {

        //this does not close the connection because the queryResult was not closed
        repCon.close();
    }
    System.out.println(i);
}

Код не закрывает итератор queryResult, поэтому RDF4J оставляет соединение открытым.Я рекомендую вам использовать самозакрывающуюся конструкцию Java и всегда закрывать все итераторы или обновиться до версии 8.6 или более поздней, где ошибка была исправлена.

...