2013-11-19 7 views
1

Я использую пакет Apache Felix HTTP Jetty. Я могу начать контейнер сервлетов/HTTPService и назначить его к порту, используя свойствоOSGi HTTP Bundle - привязка к двум портам

org.osgi.service.http.port=8080 

системы Но я хотел бы иметь два таких услуг, связанный с двумя различными портами, например, мое приложение API должно быть подано на 8080 , но некоторые статические веб-страницы должны обслуживаться на порту 80.

  • Как запустить службу HTTP второй раз на другом порту?
  • При регистрации сервлетов, как я могу узнать, какая служба связана с каким портом?

Edit: за последний вопрос, служба идет со значением порта, установленного в собственность org.osgi.service.http.port: 8080

ответ

0

Насколько я знаю, что это не возможно, с Http-серверы в OSGi, с которыми я работал. Создание небольшого пересылки между портами, конечно, довольно легко сделать на Java.

+0

Плохие новости. Я думал, что это была утилита для ManagedServiceFactory - можно было запустить множество сервисов с различными конфигурациями. – Philipp

+0

@PeterKriens, к сожалению, вы никогда не пробовали Pax Web тогда;) –

0

Я считаю, что вы можете, если пакет Apache Felix HTTP Jetty предоставляет ManagedServiceFactory. (EDIT: Это не)

How to support virtual hosts with OSGI HttpService

http://www.codeaffine.com/2011/10/05/raprwt-osgi-integration-ii/

Если я понимаю, магия здесь:

http://www.osgi.org/javadoc/r2/org/osgi/service/cm/ConfigurationAdmin.html#createFactoryConfiguration(java.lang.String)

Если создать и зарегистрировать конфигурацию с помощью ПИД-регулятора фабрики управляемых сервисов, она создаст новый экземпляр HttpService с использованием нового Pid.

+0

Хотя если бы службы Managed Service Factory были бы полезны, если вы поддерживали несколько Http-сервисов, я не могу найти какой-либо документ, который говорит, что сервер Apache Felix Http Jetty поддерживает это. И в моей настройке метатип указывает, что конфигурация является одиночной, а не фабричной. –

+0

Проект на eclipselabs (http://code.google.com/a/eclipselabs.org/p/osgi-http-service-utils/) выглядит многообещающим ... Попробует. – Philipp

+0

@PeterKriens. Вы правы. Пакет HTTP Jetty от Apache Felix не выставляет заводской pid. –

2

Если вы перейдете на Pax-Web, вы сможете сделать что-то вроде этого. Pax-Web поддерживает виртуальные хосты и позволяет привязать определенное приложение к одному соединению. Некоторые подробности о том, как использовать его вы найдете в моих двух постов в блоге:
Bind web applications to specific http connectors - part 1
Bind web applications to specific http connectors - part 2

+0

В Pax-Web, если использовать соединители причала (для получения нескольких портов), требуется наличие полного веб-приложения или я могу просто использовать простую регистрацию сервлета в HttpService? – Philipp

+0

Вам понадобится расширенный сервис http, служба webcontainer, так что, скорее всего, лучше всего иметь хотя бы расширенный расширитель доски, упростит вашу жизнь при регистрации. См. Второй пример и особенно пример кода: https: // github.ком/ops4j/org.ops4j.pax.web/блоб/ведущий/образцы/доски-расширенный/SRC/Основной/Java/орг/ops4j/чел/веб/расширитель/образцы/доски/внутренний/Activator.java –

0

Felix http.jetty 3.2.6 обеспечивает ManagedServiceFactory, что делает его легко создать несколько экземпляров HTTP с различными конфигурации.