Конфликт JPA с Hibernate и Weblogic

Я пытаюсь развернуть свое приложение и веб-службу в weblogic, используя следующие версии:

  • Веблогик 10.3.5
  • Спящий режим 4.1.1
  • Hibernate JPA API 2.0
  • EJB 2.0
  • Ява 6

Когда я вызываю свой веб-сервис, я получаю сообщение об ошибке

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:Fault xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns3="http://www.w3.org/2003/05/soap-envelope">
         <faultcode>ns2:Server</faultcode>
         <faultstring>javax/persistence/OneToMany.orphanRemoval()Z</faultstring>
        <detail>
           <ns2:exception class="java.lang.NoSuchMethodError" note="To disable this feature, set com.sun.xml.ws.fault.SOAPFaultBuilder.disableCaptureStackTrace system property to false" xmlns:ns2="http://jax-ws.dev.java.net/">
               <message>javax/persistence/OneToMany.orphanRemoval()Z</message>
               <ns2:stackTrace>
                  <ns2:frame class="org.hibernate.cfg.AnnotationBinder" file="AnnotationBinder.java" line="1868" method="processElementAnnotations"/>
                  <ns2:frame class="org.hibernate.cfg.AnnotationBinder" file="AnnotationBinder.java" line="768" method="processIdPropertiesIfNotAlready"/>
...

Я проверил, и в нем нет других файлов с постоянным API.

Мой внешний список банок:

  • ант-джакарта-оро-1.6.jar
  • antlr-2.7.2.jar
  • аспектjrt-1.5.3.jar
  • cactus.core.framework.uberjar.javaEE.14-1.8.1.jar
  • кактус.интеграция.maven2-1.8.1.jar
  • Commons-beanutils-1.8.0.jar
  • Commons-chain-1.2.jar
  • общий кодек-1.3.jar
  • Commons-коллекции-3.2.1.jar
  • Commons-дайджестер-1.8.jar
  • Commons-fileupload-1.1.1.jar
  • Commons-httpclient-2.0-rc2.jar
  • Commons-lang3-3.0.1.jar
  • Commons-регистрация-1.1.1.jar
  • Commons-валидатор-1.3.1.jar
  • dom4j-1.6.1.jar
  • общий-веб-сервис-схема-4.0.jar
  • hibernate-commons-аннотации-4.0.1.Final.jar
  • спящий режим-ядро-4.1.1.Final.jar
  • спящий режим-jpa-2.0-api-1.0.1.Final.jar
  • httpunit-1.6.jar
  • javassist-3.15.0-GA.jar
  • jboss-log-3.1.0.GA.jar
  • jboss-транзакция-api_1.1_spec-1.0.0.Final.jar
  • js-1.5R4.1.jar
  • jstl-1.0.2.jar
  • jtidy-4aug2000r7-dev.jar
  • Юнит-3.8.2.jar
  • nekohtml-1.9.6.jar
  • oracle.webservices.standalone.client-11.1.1.jar
  • оро-2.0.8.jar
  • стандарт-1.0.6.jar
  • распорки-ядро-1.3.10.jar
  • распорки-эль-1.3.10.jar
  • распорки-taglib-1.3.10.jar
  • стойки-плитки-1.3.10.jar
  • weblogic-webservices-api-1.1.0.0.jar
  • xercesImpl-2.8.1.jar
  • XML-apis-1.3.03.jar
  • xmlParserAPIs-2.2.1.jar

Я проверил их, и Hibernate JPA — единственный с классом OneToMany. Я знаю, что проблема заключается в конфликте между JPA 1.0 и JPA 2.0, поэтому я просто хочу знать, есть ли способ обойти этот конфликт.

Спасибо


person Paul Clark    schedule 26.04.2012    source источник


Ответы (2)


Обязательно ли использовать Hibernate JPA API 2.0?

Как упоминалось в документе WebLogic, WebLogic 10.3. 5 примерно поддерживает только одного провайдера JPA 2.0, который называется TopLink.

Возможно, вы могли бы просто удалить hibernate-jpa-2.0-api-1.0.1.Final.jar из пути к классам и попробовать использовать TopLink, как описано в упомянутой выше документации WebLogic.

Я просто дам небольшую заметку, учитывая документы: по умолчанию WebLogic 10.3.5 использует JPA 1.0 для обеспечения совместимости с Java EE 5. Поскольку JPA 2.0 является частью Java EE 6, вы должны явно включить его.

person yair    schedule 27.04.2012
comment
JAR-файл Hibernate JPA является зависимостью Maven, поэтому его нельзя удалить. Я нашел документ, о котором вы говорили, для JPA 2.0 в Weblogic. В нем говорится, что Weblogic JPA 2.0 должен применяться к Weblogic в целом и выполняться либо как патч, либо вручную. Нужно будет посмотреть, будет ли кто-нибудь еще использовать сервер Weblogic, или я откачу Hibernate до 3.3 (JPA 1.0). Спасибо, Пол. - person Paul Clark; 27.04.2012
comment
Я думаю, что 3.4.0 GA была последней версией Hibernate, которая была JPA 1. - person Steven Benitez; 27.04.2012
comment
WebLogic 10.3.5 поддерживает JPA 2. - person Randy Stegbauer; 27.04.2012
comment
@RandyStegbauer Да, но с серьезными ограничениями, как я указал и появляется в документе, на который я ссылался ... - person yair; 29.04.2012
comment
@yair, прости. Я должен был прочитать более внимательно. Однако добавление двух JAR-файлов в путь к классам я бы тоже не назвал серьезными ограничениями. - person Randy Stegbauer; 30.04.2012
comment
В конце концов мы удалили отношения OneToMany и настроили сохранение, чтобы программно перебирать дочерние элементы для сохранения. Таким образом, нам не нужно было понижать версию Hibernate, и наше развертывание в Weblogic могло совместно использовать Weblogic (в разработке и тестировании) с другим приложением, не нарушая его. - person Paul Clark; 30.04.2012
comment
@RandyStegbauer Хорошо. Однако необходимость использовать поставщика JPA, которого я не хочу, является серьезной ИМХО :). - person yair; 30.04.2012

WebLogic 10.3.5 может поддерживать JPA 2, но только после применения исправления, как описано на этой странице: (По крайней мере, так я заставил его работать у меня. )

Все сводилось к редактированию setDomainEnv.cmd и добавлению javax.persistence_1.0.0.0_2-0-0.jar и com.oracle.jpa2support_1.0.0.0_2-0.jar к переменной окружения PRE_CLASSPATH.

Для моей установки Windows XP WebLogic я добавил следующие строки:

REM Add JARs for JPA 2.0 at the front of the class path.
set WLS_MODULES=%WL_HOME%\..\modules
set PRE_CLASSPATH=%WLS_MODULES%\javax.persistence_1.0.0.0_2-0-0.jar;%WLS_MODULES%\com.oracle.jpa2support_1.0.0.0_2-0.jar

Удачи,
Рэнди

person Randy Stegbauer    schedule 27.04.2012
comment
Спасибо за это. См. выше, что мы в итоге сделали - person Paul Clark; 30.04.2012
comment
Это решение применимо также к WebLogic 10.3.6.0? У меня точно такая же проблема, и это решение не работает. - person Opal; 02.10.2012
comment
Опал, прости. Я не знаю. - person Randy Stegbauer; 02.10.2012
comment
Спасибо. Это работает и для 10.3.6, это была моя ошибка в начале, когда я пытался это исправить. - person Opal; 03.10.2012