Я читал о JPA и EJB3 и хотел бы подтвердить, что мое понимание их отношений корректно. Вот то, что я думаю, что знаю...
JPA является спецификацией, которая была реализована многими поставщиками включая:
EJB3 является спецификацией, которая реализована в Серверах приложений включая:
Это корректно?
API сохранения состояния Java, представленный в Java EE 5, является подмножеством EJB 3 и заменяет решение сохранения состояния EJB 2.0 CMP. JPA 1.0 был определен как часть спецификации EJB 3.0 ( JSR 220 ), но может использоваться без и вне контейнера EJB. В Java EE 6 JPA 2.0 имеет отдельную спецификацию ( JSR 317 ), выходящую за рамки спецификации EJB 3.1 ( JSR 318 ). Итак, подведем итог:
JPA - это подмножество EJB 3, и реализации предоставляются поставщиками персистентности , такими как Toplink Essentials / EclipseLink, Hibernate, Kodo / OpenJPA (Kodo - это проект, из которого был взят исходный код OpenJPA. производный, а Kodo теперь, в свою очередь, основан на OpenJPA) и т. д.
EJB 3 представляет собой более широкую спецификацию, и реализации предоставляются контейнером EJB серверов приложений, которые полагаются на поставщиков сохраняемости:
Да , а JPA1 и JPA2 также реализованы в DataNucleus , который также реализует JDO1, JDO2, JDO3, а также спецификацию OGC Simple Feature; а также является единственной действительно независимой реализацией (не привязанной к крупному поставщику программного обеспечения). Очевидно, что пользователи могут свободно вставлять любую реализацию JPA в свою среду EJB3
.