Бобы, бобы и другие бобы ... что делает что? - PullRequest
0 голосов
/ 22 сентября 2011

Мне недавно дали проект для работы, который включает в себя написание веб-приложения.Я никогда не делал Java EE раньше.Многие ресурсы в Интернете устарели, и у меня возникают проблемы с выяснением различий между текущими стандартами и технологиями Java . .

Изначально я думал, что мне действительно нужен EJB 3.1из-за внедрения зависимостей, JPA, управления сеансами и веб-сервисов.Я начал экспериментировать со Glassfish, но мне сказали, что мы должны написать это в Tomcat.Поэтому я пытался выяснить, что мне нужно, а также что и как поместить в Tomcat, чтобы туда попасть.Я начал сомневаться, нужен ли мне вообще EJB.

Я хочу использовать JFS, я думаю, для архитектуры MVC.Узнав об этом, я столкнулся как с ManagedBeans, так и с CDI, который, по мнению некоторых, делает прежнее устаревшее, а также, кажется, обеспечивает все компоненты внедрения зависимостей, которые я хочу включить модульное тестирование.Я также понял, что могу получить JPA за пределами EJB в форме Hibernate и, возможно, нескольких других.Кроме того, кажется, что веб-сервисы, которые я не знаю, в чем я нуждаюсь, в любом случае, имеют форму другого стандарта, который я сейчас не могу назвать названием, и его также можно установить независимо.

МойОсновной проблемой здесь является управление сессиями и состояние.Мне кажется, что EJB остается только предоставить @ Stateless / @ Stateful и @ Local / @ Remote.Тем не менее, насколько я понимаю, часть этого уже существует в форме управления сеансами в контейнере сервлета ... но я не знаю, сколько или какие основные различия мне необходимо учитывать, чтобы принять решениеесли я вообще нуждаюсь в этих вещах.

Итак, мой вопрос: каковы основные, существенные различия, которые мне нужно знать, чтобы решить, стоит ли рассматривать EJB или мне достаточно в формедругие библиотеки и технологии?Я был в Google и Usenet и не смог найти эту информацию нигде.


Просто подумал о другом.Насколько я понимаю, аннотация bean-компонента @Stateful обеспечивает сохранение потокового состояния.Я, вероятно, не собираюсь напрямую использовать потоки, но я знаю, что Java часто делает это за кулисами, и подозреваю, что EE особенно так.Когда мне нужно сохранить состояние, я не хочу иметь дело с потоками, если это уже есть.

Ответы [ 3 ]

3 голосов
/ 24 сентября 2011

ManagedBean

Java EE 6 имеет три различных способа определения beans, которые так или иначе равны managed:

@javax.faces.bean.ManagedBean

JSF 2.0 представила эту аннотацию, объявляющую управляемые bean-компоненты в face-config.xml.Эта аннотация используется для доступа к бину из языка выражений.

@javax.inject.Named

В CDI контейнера EE 6 эта аннотация представляет собой встроенные квалификаторы типов дляпредоставить имя бину, сделав его доступным через EL.

@javax.annotation.ManagedBean

Эта аннотация пытается обобщить управляемые компоненты JSF для использования в других местах в Java EE.

При развертывании в контейнере EE 6(Если вы используете Tomcat или другой контейнер сервлетов, вы также можете получить CDI, добавив банку Weld в свое веб-приложение), тогда нет смысла использовать @javax.faces.bean.ManagedBean.Просто используйте @javax.inject.Named и начните использовать преимущества CDI-сервисов.

CDI

Одной из целей спецификации CDI является объединение веб-уровня и транзакционных сервисов.облегчая разработчикам использование EJB вместе с JSF в веб-приложениях на платформе Java EE.С CDI у вас есть следующие услуги среди прочих: четко определенный жизненный цикл contexts (зависит от шва 2 и объема разговора), Dependency injection, средства слабой связи, такие как перехватчики , , декораторы и , события и переносимые расширения, что позволяет интегрировать сторонние платформы в среду Java EE 6, например расширения SEAM 3

Управляемые компоненты и службы EJB

Прежде всего, CDI применяется к любому управляемому компоненту.Некоторые управляемые bean-компоненты являются EJB-компонентами.Когда нам нужно использовать службы EJB в управляемом компоненте, мы просто добавляем аннотацию @Stateless, @Stateful или @Singleton.ИМО, они действуют как взаимодополняющие технологии, позволяющие вам гибко и постепенно развивать, просто добавляя некоторые аннотации.

Итак, когда нам следует использовать сессионный компонент вместо простого управляемого компонента?

Когда вам нужны некоторые функции EJB, которые отсутствуют в CDI: декларативные транзакции, управление параллельным доступом, пул, удаленный вызов или вызов веб-службы, таймеры и асинхронный вызов метода.

Конечно, вы также можете получить все аспектыиспользование сторонних библиотек - но это внесет дополнительную сложность в ваш проект.С точки зрения функциональности, IMHO EJB - это место для реализации:

  • Бизнес-логика, позволяющая иметь четкое разделение логики работы и логики веб-уровня (реализовано с помощью "JSF backing beans", которые управляются CDIbean-компоненты, но не EJB)
  • Функциональность, которая наиболее целесообразна для компонентов, которые являются точками входа в приложение (конечные точки для удаленных вызовов, доставляемых через RMI или HTTP)

Наконец, если вам нужны службы EJBтогда вам нужен сервер Aplication Server (например, GlassFish или Jboss AS), если вам нужны только службы CDI, вам нужен контейнер сервлетов (например, Tomcat) плюс библиотеки CDI.

1 голос
/ 08 октября 2011

Я бы посоветовал вам начать с CDI и перейти к EJB (который действительно добавляет одну аннотацию поверх вашего POJO), если они нужны (как было сказано) - транзакционность, веб-службы, JMX, таймеры , EJB асинхронные вызовы).

Вполне разумно разработать приложение, в котором вашей точкой входа является EJB, который включает в себя ваш вызов в транзакции и позволяет вам определить несколько точек входа. Затем EJB вызывает компоненты CDI с бизнес-логикой в ​​них.

Стоит также отметить, что TomEE является сертифицированным веб-профилем Java EE 6, разработанным поверх Apache Tomcat.

1 голос
/ 23 сентября 2011

Вам нужны функции, предоставляемые EJB, например, безопасность и управление транзакциями?Если ответ «да», EJB могут быть хорошим вариантом.Если ответ отрицательный и вам нужно только внедрение зависимостей, тогда CDI может быть хорошим вариантом.Вы также можете получить аналогичные возможности с другими продуктами сторонних производителей, такими как Spring (внедрение зависимостей, безопасность Spring и т. Д.), Но решение о том, используете ли вы один (EJB) или другой (например, Spring), во многих случаях остается вопросом предыдущегонабор навыков.

По моему мнению, если ранее не было никаких ограничений, совместимость со спецификацией Java - это хорошая инвестиция.

...