Информировать прокси-серверы jena и fuseki для федеративных запросов
Наше приложение построено поверх Jena и Fuseki. Приложение использует федеративные запросы SPARQL для доступа к конечным точкам SPARQL в открытом доступе.
Некоторые сети, для которых предназначено приложение, разрешают HTTP-запросы только через HTTP-прокси как часть своей сетевой политики.
Как можно сконфигурировать fuseki, чтобы при выполнении HTTP-запросов как части блока SERVICE в подзапросе SPARQL он использовал правильный http_proxy?
В Linux я попытался использовать локальную переменную среды
export http_proxy=http://myproxy.notadomain
в оболочке, которая запускает процесс fuseki-server, но Fuseki, похоже, не учитывает эту переменную среды.
Я не могу найти информацию в документации Fuseki о том, как это делается.
Я хотел бы получить способ запуска fuseki-server напрямую как процесс Linux с настроенным прокси-сервером, либо в файле конфигурации, либо в качестве параметра времени выполнения.
Все советы с благодарностью получены.
2 ответа
Fuseki - это Java-приложение. Обычно я экспортирую переменную JAVA_OPTIONS со всеми моими настройками, например:
export JAVA_OPTIONS="-Xmx10g -Dhttp.proxyHost=proxy.example.org -Dhttp.proxyPort=8080 -Dfile.encoding=UTF-8 -Dlog4j.configuration=file:./log4j.properties"
Конфигурация прокси
Ты можешь использовать HttpOp
получить доступ / изменить HttpClient
это используется Jena и затем настраивает, затем назначает клиента, который был Настроен для Прокси. Как примечание, версия HttpClient
используемый Дженой не самый современный, поэтому, если вы следуете учебным пособиям (таким как тот, на который я ссылался), вам нужно будет немного изменить его, чтобы создать клиента.
jena-arq-2.12.0
использован fuseki-1.1.0
зависит от httpclient-4.2.6
, Следующий код настроит ARQ для использования прокси:
final HttpHost proxy = new HttpHost("someproxy",8080);
final DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy);
HttpOp.setDefaultHttpClient(httpclient);
Конфигурация Fuseki
Кажется, я не могу найти документированный метод для настройки этого в fuseki, поэтому мой личный хак был бы:
- создать класс, чей
static
Метод инициализации устанавливает все настройки прокси.
package my.fully.qualified;
public class ConfigurationClass {
static {
// Proxy config code
final HttpHost proxy = new HttpHost("someproxy",8080);
final DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy);
HttpOp.setDefaultHttpClient(httpclient);
}
}
- Поместите банку с этим классом в путь к классам при выполнении fuseki. Для этого потребуется настроить скрипт fuseki, чтобы добавить мою банку в путь к классам.
$ java -classpath '*' org.apache.jena.fuseki.FusekiCmd
- Отредактируйте мою конфигурацию fuseki, чтобы она содержала тройку вида
[] ja:loadClass "my.fully.qualified.ConfigurationClass" .
Это заставит fuseki выполнить метод инициализации для моего специального класса, который затем изменит значение по умолчаниюHttpClient
используется Jena/ARQ для внутреннего использования. Это тот же метод, который использовался Jena для инициализации TDB с помощью[] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .