Простой, но хороший шаблон для EJB - PullRequest
4 голосов
/ 04 июня 2010

Что бы вы предложили в качестве хорошего и практичного, но простого шаблона для решения с:

  • HTML + JSP (как представление / презентация)
  • Сервлеты (контроллер, запрос, обработка сеанса)
  • EJB (настойчивость, businesslogic)
  • MySQL DB

И нужно ли использовать собственный слой DAO для сохранения? Я использую JPA для сохранения объектов в моей БД.

Должен ли я удалить бизнес-логику из моего EJB? Все онлайн-источники говорят мне разные вещи и смущают меня ...

Ответы [ 3 ]

5 голосов
/ 04 июня 2010

Что бы вы предложили в качестве хорошего и практичного, но простого шаблона для решения с JSP / Servlets + EJB + MySQL

Используйте инфраструктуру MVC по вашему выбору, Session Beans без сохранения состояния для бизнес-логики и управления транзакциями (предпочитайте локальные интерфейсы, если вам не нужно удаленное взаимодействие), Entities для сохранения.

Внедрите свои EJB-компоненты везде, где это возможно (если вы используете Java EE 6, это означает где угодно, и вы также можете пропустить интерфейс).

И нужно ли использовать собственный слой DAO для сохранения? Я использую JPA для сохранения объектов в моей БД.

Некоторые могут сказать «да», в большинстве случаев я говорю «нет». EntityManager уже реализует шаблон Domain Store , нет необходимости защищать его за DAO для простых нужд .

Возможно, вы захотите прочитать следующие ресурсы, чтобы узнать больше об этом:

Должен ли я удалить бизнес-логику из моего EJB?

Я бы не стал. Поместите свою бизнес-логику в свои (не имеющие состояния) сессионные компоненты. EJB3 - это POJO, они легко тестируемы, нет необходимости делегировать бизнес-логику другому уровню.

5 голосов
/ 04 июня 2010

Я бы определенно поместил бизнес-логику в сессионные компоненты без сохранения состояния. Сессионные компоненты без сохранения состояния хороши тем, что они хорошо фиксируют границы транзакций. И он отделяет слой View от слоя постоянства.

Позаботьтесь о том, чтобы методы SSB соответствовали целям малого бизнеса, которых хочет достичь пользователь.

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

Держитесь как можно дальше от Stateful Session Beans: это плохие новости и неправильная концепция в контексте веб-приложения.

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

1 голос
/ 26 ноября 2012

Anno 2012 Я бы не рекомендовал использовать сервлеты и JSP в качестве уровня представления. Это было в моде в 2002 году, но это было десять лет назад.

Сегодня Java EE имеет отличную сборку инфраструктуры MVC под названием JSF. Вам гораздо лучше использовать это вместо этого. Скорее всего, вы захотите получить некоторые виджеты из библиотеки компонентов PrimeFaces, поскольку все стандартные являются базовыми. Также полезна библиотека утилит, такая как OmniFaces.

Относительно DAO; не заходите так далеко, как напрямую используя диспетчер сущностей в (JSF) компонентах поддержки, но если вы уже используете классы Service (транзакционные границы) для своей бизнес-логики, использование DAO также может быть излишним.

Есть еще несколько небольших преимуществ DAO, например, dao.findByName (...) выглядит немного яснее, чем загрузка именованного запроса, установка параметра и получение (одиночного) результата, но стоимость такова вы должны поддерживать отдельный DAO для каждого субъекта, возможно, в дополнение к какой-либо услуге.

...