2014-01-17 37 views
1

的問題UnsupportedOperationException異常使用JPA當/休眠在WebSphere

試圖在我的數據庫中更新記錄時,我收到以下異常:

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

此異常僅在更新時發生。創建,閱讀和刪除工作正常。

這段代碼被拋出的典型原因是什麼?

怪異扭曲

我們需要使用MyEclipseBlue和Maven的螞蟻或不用於建設項目;只有MyEclipseBlue的構建過程可以使用。測試MyEclipseBlue生成的EAR時,上述錯誤是拋出的。當我將代碼作爲Maven在命令行上生成的EAR部署時,上述例外不會被拋出

我已經採取了巨大的痛苦來驗證生成的戰爭是相同的,但很明顯,我錯過了一些東西。

環境

  • 的Websphere 8.5.5
  • MyEclipse的藍v10.x
  • Windows 7的64位

思考

我不相信這是一個問題因爲拋出異常的代碼是在hibernate-core.jar中。我還在Websphere的管理控制檯中查看了類路徑報告。

這不是JDBC查找問題 - 兩個版本都使用相同的方式連接到jndi資源。我現在已經同時部署了它們(之前我只有一個或另一個)。

源文件

的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

在Hibernate 4.3的嘗試:

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

似乎工作

注意,這裏使用WebSphereJtaPlatform,而不是WebSphereExtendedJtaPlatform