Следует ли по умолчанию использовать поставщика JPA для сервера приложений?

У меня есть приложение, на 100% совместимое с JPA2, которое необходимо переносить на многие серверы приложений. Совместимость с JPA (теоретически) означает, что мы можем переключать поставщиков JPA через конфигурацию (например, без изменения исходного кода) - (верно ???).

При работе в контейнере сервлетов (например, Tomcat, Jetty) приложение настраивается для работы с Hibernate. Мы предпочитаем Hibernate TopLink и Eclipselink из-за его зрелости и производительности. Пока это работает.

Однако при работе на сервере приложений Java EE должны ли мы по умолчанию использовать поставщика JPA или придерживаться Hibernate?

Я знаю, что в JBoss поставщиком является Hibernate, поэтому это, вероятно, не имеет значения. Однако я думаю, что поставщиком WebLogic является Eclipselink. Я понятия не имею, что использует поставщик WebSphere или Glassfish, но я видел подробные инструкции о том, как использовать Hibernate в качестве поставщика на этих серверах приложений.

Я предполагаю, что еще один способ задать вопрос: чего бы нам не хватало при использовании Hibernate на этих серверах приложений?


person HDave    schedule 08.06.2010    source источник
comment
Glassfish использует EclipseLink (ранее известный как TopLink). Это также эталонная реализация JPA.   -  person BalusC    schedule 08.06.2010


Ответы (2)


У меня есть приложение, на 100% совместимое с JPA2, которое необходимо переносить на многие серверы приложений. Совместимость с JPA (...) означает, что мы можем переключать поставщиков JPA через конфигурацию (...)

да.

(...) Однако при работе на сервере приложений Java EE должны ли мы по умолчанию использовать поставщика JPA или придерживаться Hibernate?

Что ж, если вы выполняете развертывание на сервере Java EE 6, это не имеет особого значения. Неясно, кто будет запускать приложение, и вы, возможно, можете дать рекомендации, но среда выполнения на самом деле «не ваше дело» :) Также обратите внимание, что вы можете не получить поддержку, если вы не используете поставщика по умолчанию (если это имеет значение ).

Я знаю, что в JBoss поставщиком является Hibernate, поэтому это, вероятно, не имеет значения. Однако я думаю, что поставщиком WebLogic является Eclipselink. Я понятия не имею, что использует поставщик WebSphere или Glassfish, но я видел подробные инструкции о том, как использовать Hibernate в качестве поставщика на этих серверах приложений.

Прежде всего, имейте в виду, что JPA 2.0 является частью Java EE 6 и что GlassFish v3 - единственный контейнер Java EE 6 в настоящее время. WebLogic и WebSphere - это сервер Java EE 5, они могут не поддерживать JPA 2.0.

Теперь о провайдерах по умолчанию:

  • GlassFish v3 использует EclipseLink 2.0 в качестве поставщика по умолчанию, но его можно настроить для использования Hibernate 3.5 (через надстройку).

  • В Weblogic 10.3.2 поставщиком JPA по умолчанию является OpenJPA / Kodo, а EclipseLink 1.2 доступен как модуль WLS. В WLS 10.3.3 (еще не выпущен) EclipseLink 2.0 будет доступен как модуль WLS, по умолчанию по-прежнему OpenJPA / Kodo. Но контейнер JPA API по-прежнему будет JPA 1.0! Кажется возможным упаковать провайдера JPA 2.0 в ваше приложение. См. эту ветку и эта страница. Но это официально не поддерживается, и делать то же самое с Hibernate 3.5 может быть другая история.

  • В WebSphere 6 и 7 поставщиком по умолчанию является OpenJPA. Эта ссылка предоставит вам некоторые подробности о том, как чтобы изменить поставщика по умолчанию (и последствия). Но я не могу вам сказать больше.

Я предполагаю, что еще один способ задать вопрос: чего бы нам не хватало при использовании Hibernate на этих серверах приложений?

Как я уже упоминал, это может не поддерживаться поставщиком. Кроме того, если вы хотите максимизировать переносимость и планируете развернуть свое приложение в ближайшем будущем, переход на JPA 2.0, возможно, не будет разумным выбором (или слишком оптимистичным, если вы предпочитаете).

person Pascal Thivent    schedule 08.06.2010
comment
Спасибо за подробный ответ. Как бы то ни было, теперь доступен JPA2 для Websphere 7: webspherecommunity.blogspot.com/2010/06/ Однако, когда это окажется в руках производственных клиентов - это совсем другое дело. - person HDave; 09.06.2010
comment
WebSphere 8 поддерживает JEE6 и JPA2. - person Archimedes Trajano; 06.09.2011

Я не вижу, что вам будет не хватать, если вы не используете API для конкретной реализации в своем коде JPA. Т.е. не import org.hibernate нигде в коде JPA, а просто пишите его в соответствии с API JPA.

person BalusC    schedule 08.06.2010
comment
Итак, вы говорите, что придерживайтесь Hibernate при работе в Websphere, Glassfish и т. Д.? - person HDave; 08.06.2010
comment
Я бы позволил клиенту / серверадмину предоставить реализацию JPA по своему выбору, а не проталкивать конкретную реализацию через их глотку. - person BalusC; 08.06.2010