2012-01-21 2 views
16

Я читаю EJB 3 в книге действий, и у меня есть следующий вопрос:
Является ли POJO вы пишите и комментируете с @Entity и т. Д. Также тип сущности EJB?Как связаны EJB и JPA?

Я не понимаю, что JPA имеет отношение к EJB. Разве JPA не является собственной спецификацией сейчас? Объекты также содержатся в собственном контейнере сохранения. Они говорят о EJB 3 Java Persistence API и т. Д., Но я не понимаю, какие объекты имеют отношение к EJB.

+0

Ваш вопрос является удивительным. –

ответ

15

JPA был разработан для замены компонентов EJB2 и был запущен как часть спецификации EJB3.

Поскольку имеет смысл использовать JPA за пределами контейнера EJB, у него теперь есть свои спецификации, но он по-прежнему связан с EJB3, поскольку совместимый контейнер EJB3 должен обеспечить реализацию JPA, которая интегрируется в обработку транзакций контейнера.

+0

Итак, хотя это не так тесно связано, спецификация EJB требует реализации, и поэтому она рассматривается как третий тип компонента в мире EJB? – LuckyLuke

+1

У EJB2 были «сущностные компоненты», которые были компонентом третьего типа. EJB3 имеет JPA, который имеет «сущности». Но я не думаю, что они больше считаются «компонентами EJB». Они просто называются сущностями JPA. –

3

Вы правы. JPA имеет больше общего, чем поддержка EJB. Именно по этой причине JPA стала отдельной JSR или спецификацией. EJB использует или позволяет использовать JPA в своей спецификации, просто потому, что JPA является хорошим стандартом. Теперь вы можете переключаться между поставщиками JPA, не меняя свой код, если он правильно разработан.

Спецификация EJB может использоваться независимо от JPA (хотя JPA была включена как часть спецификации EJB), а также JPA может использоваться для многих других материалов вне спецификации EJB. Тем не менее, спецификация EJB позволяет легко вводить JPA Entitiy Manager (и ее использование) в свои компоненты, что упрощает программирование. Конечно, теперь это можно легко достичь, используя новый JSR на CDI :-).

Все сервер приложений, поддерживающий спецификацию EJB, также должны поддерживать JPA. Вы можете увидеть this thread для получения дополнительной информации.

8

До версии 2.1 спецификаций EJB класс компонента bean должен был реализовать интерфейс javax.ejb.EntityBean и обеспечить реализацию для шаблонных методов, таких как ejbLoad, ejbStore, ejbActivate и ejbPassivate.

EJB 3.0 принял спецификацию JPA. Само понятие entity-компонента было заменено более простым понятием сущности JPA. Чтобы создать такой объект, не требуется реализация интерфейса или методы плиты котла. Объект представляет собой POJO, у которого есть аннотация @Entity.

Таким образом, на практике использование «бина сущности» EJBs в приложениях Java EE умер (похоронен под JPA), как в EJB 3.

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