2014-01-17 4 views
1

ПроблемаUnsupportedOperationException При использовании JPA/Hibernate На Websphere

Я получаю следующее исключение при попытке обновления записей в моей базе данных:

java.lang.UnsupportedOperationException 
at org.hibernate.service.jta.platform.internal.WebSphereExtendedJtaPlatform$TransactionManagerAdapter.setRollbackOnly(WebSphereExtendedJtaPlatform.java:139).... 

Это исключение происходит только при обновлении. Создание, чтение и удаление работают нормально.

Каковы типичные причины для этого кода?

Weird Twist

Мы обязаны использовать MyEclipseBlue и что Maven или муравей не используется для создания проекта; можно использовать только процесс сборки MyEclipseBlue. Вышеприведенная ошибка бросается при тестировании EAR, который был сгенерирован MyEclipseBlue. Вышеописанное исключение не выбрасывается, когда я развертываю код как EAR, сгенерированный Maven в командной строке.

Я приложил огромные усилия, чтобы проверить, что сгенерированные войны одинаковы, но ясно, что я чего-то не хватает.

Environment

  • Websphere 8.5.5
  • MyEclipse Синий v10.x
  • Windows 7 x64

Мысли

Я не верю в это это вопрос потому что код, который генерирует исключение, находится в hibernate-core.jar. Я также рассмотрел отчет classpaths в консоли администратора Websphere.

Это не проблема поиска JDBC. Обе версии используют тот же путь для подключения к ресурсу jndi. Я их обоих развернул в то же время в настоящее время (раньше у меня был один или другой).

Source Files

beans.xml (для CDI) и persistence.xml файлы точно то же самое в каждой войне:

WEB-INF/класс/META-INF/persistenc.xml

<?xml version="1.0" encoding="UTF-8"?> 
    <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
     <persistence-unit name="boss-persistence" transaction-type="JTA"> 
      <provider>org.hibernate.ejb.HibernatePersistence</provider> 
      <jta-data-source>jdbc/boss</jta-data-source> 
      <properties> 
       <!--<property name="hibernate.hbm2ddl.auto" value="update"/>--> 
       <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.WebSphereExtendedJtaPlatform"/> 
            <property name="hibernate.format_sql" value="true"/> 
            <property name="hibernate.show_sql" value="true"/> 
      </properties> 
     </persistence-unit> 
    </persistence> 

Трассировка стека

Caused by: java.lang.UnsupportedOperationException 
    at org.hibernate.service.jta.platform.internal.WebSphereExtendedJtaPlatform$TransactionManagerAdapter.setRollbackOnly(WebSphereExtendedJtaPlatform.java:139) 
    at org.hibernate.engine.transaction.internal.jta.CMTTransaction.markRollbackOnly(CMTTransaction.java:131) 
    at org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl.setRollbackOnly(TransactionCoordinatorImpl.java:306) 
    at org.hibernate.engine.transaction.synchronization.internal.SynchronizationCallbackCoordinatorImpl.setRollbackOnly(SynchronizationCallbackCoordinatorImpl.java:127) 
    at org.hibernate.engine.transaction.synchronization.internal.SynchronizationCallbackCoordinatorImpl.beforeCompletion(SynchronizationCallbackCoordinatorImpl.java:117) 
    at org.hibernate.engine.transaction.synchronization.internal.RegisteredSynchronization.beforeCompletion(RegisteredSynchronization.java:53) 
    at org.hibernate.service.jta.platform.internal.WebSphereExtendedJtaPlatform$TransactionManagerAdapter$TransactionAdapter$1.invoke(WebSphereExtendedJtaPlatform.java:176) 
    at com.sun.proxy.$Proxy127.beforeCompletion(Unknown Source) 
    at com.ibm.ws.jtaextensions.SynchronizationCallbackWrapper.beforeCompletion(SynchronizationCallbackWrapper.java:66) 
    at com.ibm.tx.jta.impl.RegisteredSyncs.coreDistributeBefore(RegisteredSyncs.java:291) 
    at com.ibm.ws.tx.jta.RegisteredSyncs.distributeBefore(RegisteredSyncs.java:153) 
    at com.ibm.ws.tx.jta.TransactionImpl.prePrepare(TransactionImpl.java:2369) 
    at com.ibm.ws.tx.jta.TransactionImpl.stage1CommitProcessing(TransactionImpl.java:577) 
    at com.ibm.tx.jta.impl.TransactionImpl.processCommit(TransactionImpl.java:1015) 
    ... 77 more 

Заключительные мысли

Что бы отличает эти два уха, которые сделали бы другой код можно назвать?

Благодарим за помощь, которую вы можете предоставить!

+0

Вы пытались разблокировать банки и сравнить содержимое? –

+0

возможно дублируется http://stackoverflow.com/questions/13388069/unexpected-unsupportedoperationexception-on-hibernate-validation-failure – fmodos

ответ

-1

В спящем 4,3 раза:

<property name="hibernate.transaction.jta.platform" 
    value="org.hibernate.service.jta.platform.internal.WebSphereJtaPlatform" /> 

Кажется работать

Обратите внимание, что это использует WebSphereJtaPlatform в отличие от WebSphereExtendedJtaPlatform.

Смежные вопросы