Обращение к базе данных напрямую через сервлет против использования EAO и EJB. - PullRequest
1 голос
/ 08 ноября 2011

Я отображаю текст и XML на веб-странице через сервлет. Сервлет просто загружает HTML / XML на страницу при загрузке через вызовы в методе getPost (). Теперь, когда у меня все работает так, как я хочу, на следующем шаге я заменил статический отображаемый текст вызовами в базу данных, чтобы он мог отображать информацию динамически. Мой вопрос:

Каков наилучший способ сделать это. Я использую JPA и сущности для постоянства, но у меня есть выбор, делать прямые вызовы для постоянных элементов или проходить через Объект доступа к данным / сущностям, который я создал. Я следовал учебному пособию, в котором EAO и организации использовали EJB как способ обучения передовому опыту. Однако пока я не вижу смысла в этом. Кажется, слишком сложно пройти 3 класса, когда я мог просто получить доступ к данным напрямую.

Так это предпочтительный метод? или сервлеты должны обращаться к данным напрямую или через EAO?

Спасибо

Ответы [ 3 ]

4 голосов
/ 08 ноября 2011

Если тебе это не нужно - не делай этого.

Не вводите дополнительный уровень абстракции без причины.Поддерживать его сложнее, и если он вам действительно не нужен - у вас закончится куча мертвых кодов (пустых делегатов).

Итак, первый шаг, который я бы сделал на вашем месте,Я бы использовал JPA как постоянный слой.Это позволит вам избавиться от ваших дополнительных классов DAO.EntityManager (вы можете рассматривать его как точку входа в JPA) - это сам объект доступа к данным.Код вашего сервлета не должен напрямую зависеть от базы данных, поэтому EntityManager - отличное разделение проблем в вашем случае.

Тогда вы можете подумать о том, чтобы отделить код презентации (сервлет) от операций, ориентированных на данные.Вы можете сделать это, используя, например, CDI и реализуя эту логику в простых POJO.Это позволит вам (сервлету) не зависеть от кода, используемого для извлечения или преобразования ваших данных.Ваш сервлет, как правило, просто «получает данные» (ему не нужно знать, откуда они берутся).

Используйте EJB, если вам нужны предоставляемые ими сервисы (транзакционность, безопасность потоков, таймеры, асинхронные вызовы,дополнительные точки входа, такие как веб-службы SOAP или REST, доступ JMX, пул, ...).

HTH.

1 голос
/ 08 ноября 2011

Следует ли использовать DAO в базовом IMO для каждого варианта использования.

Перейдите по ссылке на ответ, который поможет вам разобраться в этом.

Как использовать EntityManager в хорошо отделенном слое обслуживания и уровне доступа к данным?

1 голос
/ 08 ноября 2011

Есть разные факторы, полезно знать оба подхода.

EJB проще и имеют много функций для управления транзакциями.Без EJB код для сохранения был бы более многословным.

Может быть, это поможет лучше понять.

http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html

...