2017-05-01 16 views
0

의미 론적 데이터 기술을 다루는 데있어 몇 가지 문제가 있습니다. GraphDB Triplestor를 로컬로 실행하여 RDF4J 및 Java를 사용하여 일부 SPARQL 쿼리를 예약하려고합니다. 아래의 코드에서 알 수 있듯이 10 개의 쿼리가 연속으로 실행됩니다. 그러나 단 5 (콘솔에서 숫자 0-4 참조) 시작됩니다. 문제는 내가 어떤 이유로 5 개의 열린 HTTP 연결로 제한된다는 것 같습니다. repConn.close() 호출은 아무 것도 변경하지 않는 것처럼 보입니다. 누구 아이디어?RDF4J 전용 스케줄링 트리플 스토어에 대한 쿼리

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

    } 
} 

}

+0

루프를 방해하는 예외가 발생합니까? 그렇다면 예외 (메시지, 스택 추적)를 질문에 추가하십시오. –

+0

예외 없음. 크리스토프는 올바른 해결책을 제시합니다. 어쨌든 당신의 노력에 감사드립니다. –

답변

1

당신은 또한 그렇지 않으면 repCon.close 아무것도하지 않는 쿼리 결과를 닫아야합니다.

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

    } 

또는 새로운 rdf4j 스트림 API (QueryResults.stream (gqr))를 사용하는 것이 더 좋습니다. 그것은 당신을 위해 모든 것을 닫습니다. http://docs.rdf4j.org/migration/ (포인트 2.6.5)

+0

고마워, 그게 해결책이야. –