Сделайте jena и fuseki proxy осведомленными о федеративных запросах

Наше приложение построено на Йене и Фусеки. Приложение использует объединенные запросы SPARQL для доступа к конечным точкам SPARQL в общедоступном домене.

Некоторые сети, для которых предназначено приложение, разрешают HTTP-запросы только через HTTP-прокси в рамках своей сетевой политики.

Как можно настроить fuseki, чтобы при выполнении HTTP-запросов как части блока SERVICE в подзапросе SPARQL использовался правильный http_proxy?

В Linux я пробовал использовать локальную переменную среды

export http_proxy=http://myproxy.notadomain

в оболочке, которая запускает процесс fuseki-server, но Fuseki, похоже, не соблюдает эту переменную среды.

Я не могу найти информацию о том, как с этим справиться, в документации Fuseki.

Я хотел бы иметь возможность запускать fuseki-server напрямую как процесс Linux с настроенным прокси либо в файле конфигурации, либо в качестве параметра времени выполнения.

Все советы получены с благодарностью.


person marqh    schedule 05.09.2014    source источник


Ответы (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"
person enridaga    schedule 05.09.2014

Конфигурация прокси

Для доступ / изменение HttpClient, который используется Jena, а затем настройка, затем назначение клиента, который был Настроено для прокси. В качестве примечания, версия HttpClient, используемая Jena, не является самой последней, поэтому, если вы следуете руководствам (например, тем, которые я связал), вам нужно немного отрегулировать, чтобы создать клиента.

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" .
person Rob Hall    schedule 05.09.2014