2012-04-18 6 views
3

Я новичок в EJB и недавно начал работать над EJB (3.0). Я использую Java в течение 6 лет, но никогда раньше не работал с EJB. Я, по меньшей мере, ошеломлен сложностью всего бизнеса EJB. Я не понимаю, где я могу практически применить некоторые понятия.Безстоящий сеанс Bean vs Stateless Singleton

Один вопрос, который приходит мне на ум после понимания сеанса сеанса без состояния, не всегда ли вы можете заменить сессионный bean-компонент без состояния с общим экземпляром класса без локальных членов (эффективно делая его безстоящим)? Я читал о том, что объединение экземпляров выполняется для сессионных компонентов без состояния. Если нет состояния, не можете ли вы просто использовать один экземпляр?

Я развертываю свои образцы на OpenEJB, и в одном месте, где мне приходилось использовать сессионный компонент без состояния, было взаимодействовать с EntityManager. Я не уверен, могу ли я обработать EntityManager в произвольном классе. Кроме того, все еще озадачен вопрос о том, что пытается решить проблему, поставленная в фазе состояния без состояния.

+0

Я думаю, что это спорно, но я не могу всегда заменить EJB с чем-то вроде Spring, а также уменьшить огромную сложность? Я выясняю, что то, что я пишу, не обязательно так - переносится на какой-то другой сервер приложений. Я столкнулся с различными проблемами, чтобы получить простой компонент Entity bean, работающий с Hibernate как JPA в Geronimo, TomEE, GlassFish и JBoss. Могла только работать с JBoss без особых проблем. Проблема, в первую очередь, заключалась в загрузке Hibernate Jars, которые были упакованы в WEB-INF/lib/ –

ответ

10

Асинхронный сеансовый бит может иметь состояние. Но это может быть не разговорный состояние. Так что это вполне приемлемо, что метод сессионный компонент выполняет следующие действия (хотя плохая практика):

public void foo() { 
    this.someVar = bar(); 
    this.someOtherVar = baz(); 
    zing(); 
} 

Кроме объединения, контейнер EJB предоставляет несколько услуг с лицами без фасоли:

  • инъекции зависимостей
  • декларативной демаркации транзакций
  • декларативная охрана
  • доступ к контексту EJB
  • и т. Д.

Таким образом, сеансовый bean-компонент без состояния более полезен, чем простой синтаксис без гражданства.

+0

+1. Одно общее «временное состояние» - это внедренный EntityManager, который должен использоваться только как «одна единица работы». – Puce

4

Нет, факсимильные сессии без состояния могут иметь состояние, но это состояние не сохраняется и не связано с сеансом. Части этого состояния вводятся EJB или другие POJO, которые могут быть фазами с сохранением состояния и т. Д. Таким образом, для каждого запроса требуется сеанс сеанса без состояния.

В отличие от этого у вас есть сессионный компонент с состоянием для одного сеанса пользователя и, следовательно, это состояние связано с сеансом.

0

Вы можете обрабатывать EntityManager в произвольном классе, но настоящая проблема заключается в том, как вы хотите архитектовать свое решение.

За исключением сложности EJB с использованием EJB, вы получите более масштабируемое решение.

Как указано выше, EJB полезны при разработке приложения на основе транзакций. Сервер приложений предоставляет вам некоторые возможности, которые включают управление транзакциями, объединение EJB, безопасность и т. Д.

Конечно, вы можете реализовать все вещи с помощью «общего класса», но почему вы хотите изобрести колесо, когда у вас уже есть все свободное?

Необслуживаемые сеансовые компоненты используются для реализации бизнес-логики основной части приложения. В иерархической архитектуре Java EE у вас есть 3 уровня: 1. Презентация 2. Businness 3.Данные

EJB играет важную роль в логике Businness. У вас есть два варианта: SLSB и SFSB. Первая из них более масштабируема и объединена сервером приложений, но не может сохранять их состояние. Вторые менее масштабируемы, и для каждого сеанса клиента есть один SFSB. Они используются, когда вам необходимо провести разговор между клиентом бизнес-логикой, например операцию, которая не может быть выполнена только в одном вызове метода для SFSB. SLSB и SFSB могут содержать ссылку на EntityManager для управления сохранением объекта, даже если я предлагаю вам использовать только SLSB для управления сохранением. EJB3 и JPA - отличное решение. Надеюсь, что это поможет вам