RDF4J только планирует 5 запросов к тройному хранилищу

У меня есть еще несколько проблем с обработкой технологий семантических данных: у меня есть GraphDB Triplestor, работающий локально на моем компьютере, и я пытаюсь запланировать некоторые запросы SPARQL к нему с помощью RDF4J и Java. Как видно из приведенного ниже кода, должно быть запущено 10 запросов подряд. Однако запускаются только 5 (я вижу в консоли цифры 0–4). Проблема, похоже, в том, что я по какой-то причине ограничен 5 открытыми HTTP-соединениями. Любой вызов repConn.close (), похоже, ничего не меняет. Любые идеи?

import org.eclipse.rdf4j.query.QueryLanguage;
import org.eclipse.rdf4j.query.TupleQuery;
import org.eclipse.rdf4j.query.TupleQueryResult;
import org.eclipse.rdf4j.repository.RepositoryConnection;
import org.eclipse.rdf4j.repository.http.HTTPRepository;

public class testmain {

public HTTPRepository rep;
public RepositoryConnection repConn;

public static void main(String[] args) {

    testmain test = new testmain();

    test.rep = new HTTPRepository("http://localhost:7200/repositories/test01");

    //test.repConn = test.rep.getConnection();

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

        test.repConn = test.rep.getConnection();
        String queryString = "select ?archiveID where { ?video <http://www.some.ns/ontology##hasArchiveID> ?archiveID .}";

        try {
            TupleQuery tupleQuery = test.repConn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
            TupleQueryResult queryResult = tupleQuery.evaluate();
        } finally {
            test.repConn.close();
        }

        System.out.println(i);

    }
}

}


person Patrick Daßler    schedule 01.05.2017    source источник
comment
Вы получаете исключение, которое прерывает цикл? Если да, добавьте исключение (сообщение, трассировку стека) в свой вопрос.   -  person Jeen Broekstra    schedule 02.05.2017
comment
Без исключений. ChristophE постет правильное решение. В любом случае спасибо за ваши усилия.   -  person Patrick Daßler    schedule 02.05.2017


Ответы (1)


вам также необходимо закрыть результат запроса, иначе repCon.close ничего не сделает.

try {
        TupleQuery tupleQuery = test.repConn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
        TupleQueryResult queryResult = tupleQuery.evaluate();
        queryResult.close(); // this should solve your issue

    }

Или еще лучше использовать новый API потоков rdf4j (QueryResults.stream (gqr)). Это закрывает для вас все. http://docs.rdf4j.org/migration/ (пункт 2.6.5)

person ChristophE    schedule 02.05.2017
comment
Большое спасибо, это решение. - person Patrick Daßler; 02.05.2017