Создание коннекторов Jetty в Pax-Web

Есть ли возможность (API) добавлять коннекторы Jetty через Pax-Web программно. Pax-Web внутренне использует хороший интерфейс JettyServer, но, похоже, сервис OSGi недоступен. Порты, которые должны быть доступны, заранее неизвестны, поэтому я не могу использовать jetty.xml для целей настройки.

У кого-нибудь есть идея?


person Herr-Herner    schedule 23.12.2014    source источник


Ответы (2)


Поскольку вы просто хотите изменить порт, вы должны сделать это способом OSGi и просто настроить pax web с соответствующей конфигурацией. См. также здесь: https://ops4j1.jira.com/wiki/display/paxweb/Basic+Configuration

Речь идет о конфигурации org.osgi.service.http.port.

Этот порт можно настроить с помощью службы администрирования конфигурации. В случае изменения конфигурации сервер причала будет перезапущен.

Что касается первоначального вопроса об услуге, то это невозможно прямо сейчас, но для нее доступна задача JIRA, и вклад высоко ценится.

person Achim Nierbeck    schedule 24.12.2014
comment
Проблема в том, что мне требуется несколько портов (более одного) и я хочу привязать каждого из провайдеров к определенному порту. Атрибут org.osgi.service.http.port разрешает только один порт. Этого недостаточно. - person Herr-Herner; 25.12.2014
comment
В таком случае да, это может быть хорошим улучшением. Взносы приветствуются. :-) - person Achim Nierbeck; 25.12.2014
comment
Ок, следующая версия 4.1. будет что-то для этого, см. ops4j1.jira.com/browse/PAXWEB-768 - person Achim Nierbeck; 30.12.2014
comment
Звучит действительно хорошо... Довольно хорошим решением было бы создать решение, также использующее декларативные службы OSGi. Мы можем использовать возможности Configuration Admin и привязать экземпляр коннектора к его конфигурации (ManagedServiceFactory). Я делал это несколько раз, и это дало бы вам очень гибкое решение, позволяющее создавать и (пере)настраивать экземпляры коннекторов извне. - person Herr-Herner; 30.12.2014
comment
Я реализовал самодельное решение на основе HTTP-сервиса Equinox. Это работает, но теперь все должно работать в Apache Karaf, и мое решение не полностью подходит для этой среды. Это работает, но было бы неплохо полагаться на официальную реализацию. Возможно, в будущем через Pax Web 4.1 и Apache Karaf 4.0 ;-) - person Herr-Herner; 30.12.2014
comment
Что ж, поскольку это служба OSGi, не стесняйтесь использовать с ней декларативные службы. Помните, что с каждым новым коннектором или обработчиком сервер будет перезагружаться. - person Achim Nierbeck; 30.12.2014
comment
Кстати. PAXWEB-768 устранен, и выпущена версия 4.1. Таким образом, можно настроить коннекторы/обработчики через сервисы. - person Achim Nierbeck; 11.03.2015

Начиная с PaxWeb 4.1.0, вы можете зарегистрировать нужные вам коннекторы, зарегистрировав их как службу (это позволяет, например, исключить протоколы SSL для защиты от уязвимости Poodle)

    SslContextFactory contextFactory = new SslContextFactory();
    contextFactory.addExcludeProtocols("SSLv2Hello", "SSLv3");
    contextFactory.setKeyStorePath("PATH_TO_KEYSTORE");
    contextFactory.setKeyStorePassword("KEYSTORE_PASSWORD");
    contextFactory.setTrustStore("PATH_TO_TRUSTSTORE");
    contextFactory.setTrustStorePassword("TRUSTSTORE_PASSWORD");
    contextFactory.setNeedClientAuth(true);
    contextFactory.setWantClientAuth(true);

    Connector sc = new SslSelectChannelConnector(contextFactory);
    sc.setPort(8443);
    ServiceRegistration<Connector> registerService = bundleContext.registerService(Connector.class, sc, null);

В основном взято из веб-документации pax http://ops4j.github.io/pax/web/SNAPSHOT/

person Louis S.    schedule 04.08.2015
comment
Я использую Jetty 9.2.x, и классы SelectChannelConnector или SslSelectChannelConnector больше не доступны. Теперь есть класс ServerConnector, для создания экземпляра которого требуется класс Server, который не раскрывается PaxWeb. - person Herr-Herner; 23.08.2015