Как установить Sesame 2.8.0 RepositoryConnection timeout

Я пытаюсь реализовать что-то вроде автоматического выключателя для моих соединений Sesame с внутренней базой данных. Когда база данных отсутствует, я хочу знать это через 2 секунды, чтобы не полагаться на значения по умолчанию клиента для тайм-аутов. Возможно, я смогу преодолеть это с помощью своих собственных заданий FutureTasks, где я буду выполнять инициализацию репозитория и получение соединения. Однако в журналах я вижу, что кунжутный клиент использует oahicPoolingClientConnectionManager - который передается, я ставлю на ExecutorService и некоторые тайм-ауты по умолчанию. Это сделает мое решение FutureTask довольно грязным. Есть ли более простой способ установить тайм-ауты для клиента кунжута.

1 ответ

Вы можете установить запрос и время ожидания обновления, в частности, для самого объекта запроса / обновления:

 RepositoryConnection conn = ....;

 ... 
 TupleQuery query = conn.prepareTupleQuery(QueyLangage.SPARQL, "SELECT ...");
 query.setMaxExecutionTime(2);

Однако, если вы хотите установить общее время ожидания для всех вызовов API по HTTP, в настоящее время единственный способ сделать это - получить ссылку на объект HttpClient и перенастроить его:

  HTTPRepository repo = ....;
  AbstractHttpClient httpClient = (AbstractHttpClient)((SesameClientImpl)repo.getSesameClient()).getHtttpClient();
  HttpParams params = httpClient.getParams();
  params.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 2000);
  httpClient.setParams(params);

Как видите, это довольно хрупко (много явных приведений) и использует подход, который устарел в Apache HttpClient 4.4. Поэтому я не рекомендую это как стабильное решение, но оно должно обеспечить обходной путь в краткосрочной перспективе.

В долгосрочной перспективе команда разработчиков Sesame работает над более удобным доступом к конфигурации httpclient.

Другие вопросы по тегам