【问题标题】:GraphDB Free fails to respondGraphDB Free 无法响应
【发布时间】:2018-08-24 11:56:48
【问题描述】:

我在研究项目中使用 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));

请您帮我确定问题出在哪里?

非常感谢!

【问题讨论】:

  • 我假设resposity.getConnection 是第 90 行?
  • 第 90 行是 connection.getStatements

标签: graphdb


【解决方案1】:

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 使连接保持打开状态。我建议您使用 autocloseable Java 构造并始终关闭所有迭代器或升级到已修复错误的 8.6 或更高版本。

【讨论】:

    猜你喜欢
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多