Запрос на построение зависает в Fuseki Jena после выполнения 6 раз

#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 в ожидании релиза.