#jena #fuseki
#jena #fuseki
Вопрос:
Я использую Jena (версия 3.10.0) с Fuseki (версия 3.10.0) для тестирования некоторых запросов на построение, но он зависает после выполнения 6 запросов. Ниже приведен мой код. Я не уверен, ошибка ли это в Jena или я делаю что-то не так. Запросы Select работают нормально. Буду очень признателен, если кто-нибудь сможет помочь.
@Test
public void testRun() {
for(int i =0 ; i < 10;i ) {
System.out.println(" ..... " i);
String query = "CONSTRUCT {?S ?P ?O} WHERE {?S ?P ?O}";
try(RDFConnectionFuseki connectFuseki = RDFConnectionFactory.connectFuseki("http://localhost:3030/test")) {
System.out.println("Got connection!");
org.apache.jena.rdf.model.Model model = connectFuseki.queryConstruct(query);
System.out.println("Executed query!");
model.write(System.out, "TURTLE");
}
}
}
Вывод на консоль
..... 0
Got connection!
Executed query!
..... 1
Got connection!
Executed query!
..... 2
Got connection!
Executed query!
..... 3
Got connection!
Executed query!
..... 4
Got connection!
Executed query!
..... 5
Got connection!
Комментарии:
1. Являются ли данные большими (возможно, у Fuseki или вашего собственного кода заканчивается память)? Можете ли вы добавить System.out.println между строками connectFuseki, queryConstruct и model.write, чтобы увидеть, на какой из трех он зависает? Если вы отмените зависшую программу и перезапустите ее, будет ли она выполняться шесть раз снова? Или Fuseki тоже нужно перезапустить? И обновите свой вопрос своими выводами?
2. Jena использует HTTP-клиент Apache, который по умолчанию имеет ограничение в 5 открытых подключений к одному хосту. Обычно такого рода зависания происходят из-за того, что пользователи неправильно закрывают соединения. Вы используете API, с которым я не особенно знаком, поэтому, возможно, это не закрытие соединений за кулисами, что было бы ошибкой в Jena
3. @RobV Да, это похоже на ошибку, поскольку я создаю соединение в try, которое должно его закрыть. Я использую
3.10.0
как для Jena, так и для Fuseki. @cygri Я попробовал ваше предложениеSystem.setProperty("http.maxConnections", 10)
и теперь оно зависает при выполнении 10-го запроса.4. Просто клонировал master из репозитория Jena, и это работает. @RobV забыл упомянуть, что у
QueryExecution
также есть такая же проблема. Спасибо обоим. Будет хорошо, если вы, ребята, также сможете добавить основной ответ.5. Это похоже на JENA-1657 (исправлено в кодовой базе).
Ответ №1:
На всякий случай, если кто-то еще столкнется с этой проблемой, я добавляю ответ. Как объяснено в комментариях, это связано с ошибкой и исправлено с помощью commit, поэтому в следующем выпуске эта проблема должна быть устранена. В случае, если вы застряли, вы можете использовать репозиторий snapshot в ожидании релиза.