2014-11-12 2 views
0

У меня есть существующее приложение для ушей, которое не использует OSGi каким-либо образом на сервере jboss, который в настоящее время не настроен для OSGi.OSGi на JBoss EAP 6

Теперь мне нужно подключить несколько внешних библиотек, которые используют OSGi (декларативно!) Для настройки сервиса, поэтому мне нужно включить контейнер OSGi в конфигурации и как-то сделать из них приложение для ушей.

Чтобы включить контейнер OSGi, я скопировал соответствующие (или так надеюсь) части примерного файла конфигурации: standalone-osgi-only.xml (включая регистратор), но в настоящее время я не вижу дополнительного вывода при загрузке сервера (подсистема настроена на ожидание).

Я переместил связки в пользовательскую папку в каталоге «bundles», но не уверен, что это подходящее место для них.

Кроме того, я не уверен, как настроить мой файл уха, чтобы «видеть» пакеты. Нужно ли что-то добавить к jboss-app.xml или jboss-deployment-structure.xml или просто увидеть все пакеты OSGi?

UPDATE

код в файле ухо на самом деле не нуждается в доступе к любому из OSGi услуг, ему нужен доступ к определенному классу, который находится в одной из библиотек, давайте назовем это «MyClass» , Таким образом, код в файле уха делает:

MyClass myClass = new MyClass(); 
myClass.doSomething(); 

Класс MyClass однако использует тонну OSGi-управляемых услуг для выполнения этой задачи в DoSomething().

Я загрузил все библиотеки в тестовую среду OSGi, и тест проходит нормально.

UPDATE 2

Хорошо, я успешно активировали OSGi на сервере JBoss, добавив следующее standalone.xml:

<extensions> 
    <extension module="org.jboss.as.configadmin"/> 
    <extension module="org.jboss.as.osgi"/> 
</extensions> 

И

<subsystem xmlns="urn:jboss:domain:configadmin:1.0"> 
     <configuration pid="org.apache.felix.webconsole.internal.servlet.OsgiManager"> 
      <property name="manager.root" value="jboss-osgi"/> 
     </configuration> 
    </subsystem> 
    <subsystem xmlns="urn:jboss:domain:osgi:1.2" activation="eager"> 
     <properties> 
      <property name="org.jboss.osgi.system.modules.extra"> 
       org.apache.log4j 
      </property> 
      <property name="org.osgi.framework.startlevel.beginning"> 
       1 
      </property> 
      <property name="org.osgi.framework.system.packages.extra"> 
       org.apache.log4j;version=1.2 
      </property> 
     </properties> 
     <capabilities> 
      <capability name="javax.servlet.api:v25"/> 
      <capability name="javax.transaction.api"/> 
      <capability name="javax.xml.bind.api"/> 
      <capability name="javax.validation.api2"/> 
      <capability name="org.apache.felix.log" startlevel="1"/> 
      <capability name="org.jboss.osgi.logging" startlevel="1"/> 
      <capability name="org.apache.felix.configadmin" startlevel="1"/> 
      <capability name="org.jboss.as.osgi.configadmin" startlevel="1"/> 
     </capabilities> 
    </subsystem> 

На первой попробуйте, я получал WARN-журналы следующим образом:

[org.jboss.as.osgi] (MSC service thread 1-6) JBAS011910: Cannot resolve requirements: 
    [XPackageRequirement[atts={osgi.wiring.package=javax.xml.bind.annotation}, 
    [mybundle:1.0.0]]] 

Несмотря на то, что это были предупреждения, они предотвратили бы загрузку приложения, чтобы исправить это, я добавил необходимые «корневые» зависимости (так сказать), отрегулировав бит «возможностей» подсистемы OSGi. Я добавил модуль javax.xml.bind.api, который содержит все материалы JAXB, которые нужны фреймворкам, и я установил новый модуль javax.validation.api2, который в основном содержит версию 1.1 (необходимо для фреймворков) вместо того, по умолчанию - версия 1.0.

В моем файле application.ear я добавил 10 корневых пакетов, содержащих пакеты OSGi, в корневую папку. Я получаю следующий журнал для каждой баночки внутри уха: org.jboss.osgi.framework] (MSC service thread 1-3) JBOSGI011001: Bundle installed: mybundle

Поэтому в основном все выглядит нормально с точки зрения OSGi но моего фактическим приложение по-прежнему не видит библиотеку.Ухо выглядит следующим образом:

  • META-INF
    • application.xml
  • mybundle1.jar
  • mybundle2.jar
  • mybundle3.jar
  • MyEJB.jar

Приложение.xml содержит в себе запись ejb для MyEJB.jar, однако код EJB не может видеть код пакетов, он будет генерировать ClassNotFoundException.

Если я переместил все мои пакеты в папку lib внутри файла уха, мой EJB-код найдет классы, но магия OSGi не произойдет, поэтому банки не найдут друг друга.

Итак, теперь я пытаюсь выяснить, как загружать модули OSGi и, видимые для моего EJB.

UPDATE 3

Я добавил все пакеты в файл META-INF/application.xml как «Java» модулей, однако это делает что-то странное.

MyEJB Пакет имеет прямую зависимость кода сказать bundle1 но не в других пучках. Теперь bundle1 в свою очередь, имеет код зависимость для других пучков и эти пучки пока другие связки и т.д.

С банок в моем application.xml, она больше не бросает исключение, которое не может найти класс в bundle1 (яй !) buuut ... теперь я получаю ClassNotFoundException от bundle2, на который ссылаются bundle1 ...

+0

Здесь есть много вещей. Вы экспортируете сервисы, на которые вы ссылаетесь ?. Вы регистрируете свои услуги? Вы регистрируете их правильно ?. – TheLostMind

+0

Я обновил исходный вопрос. – nablex

+0

«Здесь много вещей» ... вы можете это повторить. Это не столько вопрос SO, сколько консалтинговое взаимодействие. –

ответ

3

JBoss OSGi has currently no maintainer. Он не поддерживается в EAP 6 и больше не является частью WildFly AS. Я предлагаю вам найти другой способ запуска OSGi. Будь то Овен, Близнецы или запустите полный контейнер OSGi в своем EAR.

+0

Хм, это плохо. В настоящее время фреймворки поддерживают OSGi или SPI. OSGi больше не поддерживается, и SPI мертв в модульной системе (afaik), так что же означает, что jboss эквивалентен сервисам? Могу ли я добавить некоторые файлы конфигурации, которые будут работать с OSGi-подобным сервисом? – nablex

+0

Я не знаю, что вы имеете в виду с SPI в этом контексте. Я постараюсь избежать в зависимости от какого-либо JBoss внутреннего APi, поскольку все они не поддерживаются и могут быть изменены. –

+0

SPI как в https://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html. Структуры были разработаны для (в настоящее время) работы тремя различными способами: SPI, OSGi или ручной настройкой.Если у jboss есть настраиваемая система обслуживания, к которой можно добавить файлы конфигурации, я был бы рад добавить их в рамки. – nablex

Смежные вопросы