Добавление пакетов фрагментов OSGi в войну Felix servletbridge

Я пытаюсь создать пакеты OSGi для военного хостинга. Полная конфигурация должна поддерживать пакеты WAB, и теперь я пытаюсь интегрировать pax-web-extender-war для этого. Для этого требуются некоторые зависимости, такие как slf4j-api и slf4j-log4j12, и вот проблема: я всегда получаю это исключение:

org.osgi.framework.BundleException: Fragment bundles can not be started.
    at org.apache.felix.framework.Felix.startBundle(Felix.java:1782)

потому что slf4j-log4j12 на самом деле является набором фрагментов. Я предполагал, что Феликс должен справиться с этим, но это не так. Итак, я попытался переместить эту банку в WEB-INF/lib, но затем проводка не удалась, поскольку osgi не может разрешить ее как пакет.

So,

  • Где размещать пакеты фрагментов?
  • Это должно быть как-то настроено в framework.properties?
  • способен ли Apache Felix работать с пакетами фрагментов?

Ниже приведена текущая структура войны (обратите внимание, что она основана на образце http-моста Felix):

.
└── WEB-INF
    ├── bundles
    │   ├── commons-fileupload-1.2.2.jar
    │   ├── commons-io-2.4.jar
    │   ├── hello-wab-1-SNAPSHOT.war
    │   ├── org.apache.felix.http.bridge-2.2.0.jar
    │   ├── org.apache.felix.http.samples.filter-2.2.0.jar
    │   ├── org.apache.felix.webconsole-4.0.0.jar
    │   ├── pax-web-api-2.1.0.jar
    │   ├── pax-web-extender-war-2.1.0.jar
    │   ├── pax-web-spi-2.1.0.jar
    │   ├── slf4j-api-1.6.6.jar
    │   ├── slf4j-log4j12-1.6.6.jar
    │   └── wrapper-json-1-SNAPSHOT.jar
    ├── classes
    │   └── org
    │       └── apache
    │           └── felix
    │               └── http
    │                   └── samples
    │                       └── bridge
    │                           ├── FrameworkService.class
    │                           ├── ProvisionActivator.class
    │                           └── StartupListener.class
    ├── framework.properties
    ├── lib
    │   ├── org.apache.felix.framework-4.0.3.jar
    │   ├── org.apache.felix.http.proxy-2.2.0.jar
    │   ├── org.apache.felix.webconsole-4.0.0.jar
    │   ├── org.osgi.compendium-4.3.0.jar
    │   └── wrapper-json-1-SNAPSHOT.jar
    └── web.xml

person Petr Kozelka    schedule 09.11.2012    source источник


Ответы (1)


Я предлагаю добавить pax-loging в ваши пакеты, это избавит вас от необходимости ведения журнала в мире OSGi. Pax-Logging

Для пакетов-фрагментов вам просто нужно добавить их к обычным пакетам. Я бы сказал, что в вашей настройке, вероятно, в папке пакетов. Поскольку это пакет фрагментов, исключение, которое вы получаете, верно, это не «запускаемый» пакет. Это будет только разрешено и, надеюсь, прикреплено к пакету хостинга.

Кстати, Felix умеет работать с пакетами фрагментов :)

person Achim Nierbeck    schedule 10.11.2012
comment
как это связано с моим вопросом? - person Petr Kozelka; 11.11.2012
comment
Что ж, добавление pax-loging в ваш стек, безусловно, улучшит вашу проблему, вместо того, чтобы пытаться использовать фрагмент для настройки, используйте pax-logging в сочетании с конфигурацией-admin-service для настройки вашего ведения журнала. И это даст возможность также использовать другие различные фреймворки ведения журналов, и все они будут регистрироваться в одном и том же файле журнала. - person Achim Nierbeck; 12.11.2012
comment
Я вижу, это, кажется, решает проблему логирования, но вопрос касается работы с пакетами фрагментов в целом. Во всяком случае, я попытался добавить pax-loging, но безуспешно - упомянутые документы не очень информативны. Не могли бы вы уточнить, как его добавить? Плюс, желательно, я хотел бы знать, как использовать пакеты фрагментов с felix... - person Petr Kozelka; 12.11.2012
comment
Надеюсь, добавлено больше информации о фрагментах, один вопрос, хотя вам действительно нужно развернуть среду выполнения OSGi в веб-контейнере только для серверного веб-контента? Почему бы не использовать OSGi-контейнер, способный обслуживать веб-контент, как, например, Apache Karaf, и, кстати, ваша проблема с логированием тоже исчезнет :) - person Achim Nierbeck; 13.11.2012
comment
спасибо за добавленную информацию, возможно, Феликс просто печатает исключение, но на самом деле обрабатывает его, надо будет проверить... Что касается вашего вопроса, этот проект скорее синтетический, просто чтобы изолировать и продемонстрировать проблему. Место, где я на самом деле сталкиваюсь с этим, является гораздо более сложным проектом, где я очень ограничен в технологическом выборе. - person Petr Kozelka; 13.11.2012
comment
да, felix должен только выводить предупреждение, но все же разрешать пакет фрагментов. Про ограниченный выбор технологий, да, я слышал это довольно часто сейчас, очень жаль, так как это не очень нужно. Меня интересует одна вещь: насколько хорошо pax-web-extender работает с https-сервером felix, почему бы не придерживаться полного стека pax-web? - person Achim Nierbeck; 13.11.2012