2013-02-28 4 views
1

У меня есть некоторые веб-приложения, разработанные с использованием Seam Framework 2.3 + jBoss AS 7 + Hybernate.Переместить приложение шва в OSGI

Поскольку я некоторое время изучал OSGI, мне было интересно, можно ли перенести мои приложения в мир osgi для модуляции всего; Я прочитал много блогов и этих интересных обсуждений (how-to-modularize-an-enterprise-application-with-osgi-and-ee6 и how-to-modularize-a-jsf-facelets-spring-application-with-osgi), но, честно говоря, я до сих пор не знаю, с чего начать, поскольку я никогда раньше не использовал OSGI.

Согласно вам

  1. Можно ли (и полезно) делать такие вещи?
  2. Согласно вашему опыту, что было бы хорошей отправной точкой?

Спасибо за помощь

+0

ОК, давайте попробуем again..my вопрос либо слишком глуп или слишком расплывчато, может быть как :) .. я дона 'т хотят иметь руководство шаг за шагом, я хотел бы знать, если некоторые из вас когда-либо пытались сделать то, что я пытаюсь сделать, или, к сожалению, я первый сумасшедший ... я нашел некоторую документацию о равноденствии Eclipse, но я до сих пор не знаю, как я должен начаться ... теоретически я должен просто отделить каждую функциональность, предоставляемую моим приложением, в службе OSGI, сохраняя реализацию и интерфейс, разделенные (?) .. и относящиеся к моим страницам xhtml, возможно, я должен рассматривать их с помощью сервлета-моста или что-то в этом роде (?) – Danilo

+0

Но как насчет объединения и развертывания с использованием AS JBoss 7? Любой намек? Я пытаюсь сделать что-то невозможное или просто бесполезное? спасибо, ребята – Danilo

ответ

2

Approach

Возможно, начать с применением игрушек как шип, WAB (OSGi WAR) и единого пакета услуг.

Определенно используйте итеративный подход. Насколько я знаю, JBoss поддерживает смешение OSGi-сервисов и Java EE, через JBoss modules/msc, это позволит вам попробовать OSGi и постепенно мигрировать.

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

Сложение

Что ваш инструмент для сборки? В основном, как Maven или Ant, и в этом случае посмотрите на maven-bundle-plugin или bnd соответственно. Вам необходимо убедиться, что метаданные OSGi присутствуют в каждом из ваших пакетов (Bundle-SymbolicName, Import-Package, Export-Package и т. Д.). Если вы используете Maven, см. this answer.

Может оказаться сложным делить монолитное приложение на модули, но, как правило, при переносе модуля с разумным размером у вас должны быть отдельные пакеты для API и реализации (что является хорошим дизайном в любом случае, но также имеет последствия для среды выполнения).

Interop

Вы можете приобрести OSGi услуги, пакеты доступа и т.д., используя рамочный уровень API, низкий из нагнетаемого BundleContext, который даст вам программный крючок низкого уровня в OSGi. Это должно быть так же просто, как:

@Resource 
BundleContext context; 

Если ваш код Java EE не упакована в виде модулей JBoss я не думаю, что это будет легко для вас, чтобы позвонить в другую сторону (например, OSGi сервис отрываясь сервис Java EE) не прибегая к чему-то вроде JNDI.

Вы должны иметь возможность установить веб-консоль и посмотреть, какие биты Java EE зарегистрированы в OSGi, и аналогично проверить JNDI, чтобы узнать, что доступно OSGi для Java EE.

Перенастройка Услуга

В то время как OSGi много удовольствия, используя исходные результаты рамки API в совсем немного шаблонном коде, и это маловероятно, что вы будете нуждаться в силе или хотите муфту. Вы можете использовать ряд инфраструктур инъекций зависимостей поверх OSGi; (Spring-like), Peaberry (Guice) и декларативные услуги, например.

Я предвзятый, но декларативные услуги имеют сильное сходство с моделью OSGi μservice, а реализации - легкие.

CDI

Я много о пластах/CDI не знаю, но Pax CDI может помочь (хотя JBoss, возможно, уже покрыли это).

Web

Планируете ли вы иметь модульный интерфейс с горячим развертыванием различных компонентов? Если нет, то, вероятно, лучше всего упаковать UI как WAB. WAB - это тощая ВОЙНА (т. Е. Она импортирует, а не внедряет большинство зависимостей). Даже если вы после очень модульного динамического интерфейса, я определенно сделаю это для первого прохода.

JPA

Слово предупреждения - JPA реализации, как правило, не играют хорошо в OSGi среде, вы можете захотеть взглянуть на Apache Aries или Eclipse, Близнецов. Другим вариантом может быть оставить материал JPA в пространстве Java EE и получить доступ к Java EE DAOs/Repositories в качестве служб OSGi. Опять же, если вы можете столкнуться с некоторыми проблемами с загрузкой.

Возможно полезные примеры https://docs.jboss.org/author/display/JBOSGI/Provided+Examples

+0

Если вы используете или переживаете Spring, тогда Blueprint будет более знакомым, чем Declarative Services. – earcam

+0

Прежде всего, спасибо за ваш ответ, но, к сожалению, я все еще немного смущен. Исчерпывающее то, что вы предлагаете сделать: WAB для моего зрения, Близнецы/Овны для JPA и PojoSR для всего остального? да, возможно, гибридный подход может быть лучшим способом для продолжения (по крайней мере на данный момент). Я попробую это, спасибо – Danilo

+0

@ Данило, извините, что это было ужасно ответило - оно должно было быть опущено из-за отсутствия ясности/coherence/релевантность =) Немного улучшенная версия выше. – earcam

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