2014-01-21 5 views
1

У меня есть несколько контроллеров компонентов CDI, которые я бы хотел повторно использовать в своих настольных веб-приложениях и мобильных веб-приложениях (здесь и далее называемые веб-компонентами).Определение многоразовых CDI-компонентов в одном контейнере

Сценарий:

Я одно приложение Java EE (EAR)

  • У меня есть компонент web.war (сослаться на рабочий стол веб-приложения)
  • У меня есть mobile.war компонент (для ссылки на мобильную веб-заявку)

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

m.mydomain.com 

Мое намерение состоит в том, чтобы создать многоразовый-component.jar содержать все контроллеры CDI, а затем включить этот файл JAR в веб-компонентах.

Однако это не удается Jboss weld обнаруживает такое же имя компонента, weld error 00414

Однако, я определил некоторый общий жизненный цикл обработки запроса на этом CDI бобов, например

@OnRequest() 
@Named 
@RequestScope 
public class MyBeanController{ 
} 

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

О чем я думал.

Извлеките @Named и аннотации области в reusable-component.jar, а затем разложите их отдельно на разных веб-компонентах.

Проблема: у меня есть несколько cdi beans, довольно много, потому что это огромные приложения, и расширение каждого из них в веб-компоненте будет много рефакторинга.

Мой вопрос:

Как мне удается повторно использовать этот КДИ бобы, в этом веб-компонентов?

FYI: Я посмотрел на альтернативном/стереотипе, сценарии специализации, это будет по-прежнему требует, чтобы я простирается все бобы в любом случае, и моя @OnRequest аннотации обработка жизненного цикла делает поиск боба, используя имя @Named или боба (как указано в cdi), поэтому, если бы я использовал специализацию или альтернативы, как повлияет этот поиск?

+0

Совместная библиотека на основе CDI в EAR с несколькими WARs = ужас. Связанный блог: http://balusc.blogspot.nl/2013/10/cdi-behaved-unexpectedly-in-ear-so.html – BalusC

+0

@BalusC Итак, в этом случае, какой вариант вы бы предложили? Будут ли реализованы различные альтернативы в различных веб-компонентах? – maress

ответ

-1

То, что я рекомендую большинству людей в этом сценарии, состоит в том, чтобы определить две отдельные ВОЙНЫ и общий JAR. Включите этот общий JAR в обеих WAR (как запись WEB-INF/lib). Пока JAR дублируется, код не дублируется.

+0

Э-э, это уже делает. Или вы имеете в виду две независимые войны без EAR? – BalusC

+0

Похоже, что OP использует EAR. –

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