Как установить 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.