Должны ли вы по умолчанию использовать JPA-сервер сервера приложений? - PullRequest
4 голосов
/ 08 июня 2010

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

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

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

Ответы [ 2 ]

4 голосов
/ 08 июня 2010

У меня есть приложение, полностью совместимое с 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 может быть не мудрым выбором (или слишком оптимистичным, если вы предпочитаете).

2 голосов
/ 08 июня 2010

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

...