Отношение JPA/EJB3

Я читал о JPA и EJB3 и хотел бы подтвердить, что мое понимание их отношений правильное. Вот что я думаю, что знаю...

JPA - это спецификация, которая была реализована рядом поставщиков, включая:

  • JBoss/Hibernate
  • Oracle/TopLink Essentials (теперь EclipseLink)
  • Apache/OpenJPA

EJB3 - это спецификация, которая реализована на серверах приложений, включая:

  • Glassfish
  • JBoss

Это верно?

Ответ 1

API Java Persistence, внедренный в 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 серверов приложений, которые полагаются на поставщиков непрерывности:

    • Поставщик стабильности по умолчанию GlassFish v3 - EclipseLink
    • Поставщик JSOS по умолчанию сохраняет Hibernate
    • Поставщиком постоянства по умолчанию для WebLogic 10.3.1+ является OpenJPA/Kodo или EclipseLink
    • Поставщик постоянной сохранности WebSphere 6.1+ основан (на основе) OpenJPA

Ответ 2

Да, а JPA1 и JPA2 также реализованы DataNucleus, который также реализует JDO1, JDO2, JDO3, а также OGC Простая функциональность; и также является единственной действительно независимой реализацией (не привязанной к крупному поставщику программного обеспечения). Очевидно, что пользователи могут свободно встраивать любую реализацию JPA, которую они хотят в среду EJB3.

Ответ 3

Да, у меня тоже был Google OpenJPA, но это правильно.