Weblogic错误:由以下原因引起:weblogic.transaction.internal.AppSetRollbackOnlyException:在事务上调用setRollbackOnly
我正在将Jboss 7as的应用程序移植到Weblogic 12c。
到目前为止,我能够运行应用程序并在数据库中创建新记录。
但是,我只在尝试更新现有记录时才会收到以下错误;
Error committing transaction: javax.ejb.TransactionRolledbackLocalException: Error committing transaction: at weblogic.ejb.container.internal.EJBRuntimeUtils.throwTransactionRolledbackLocal(EJBRuntimeUtils.java:231) at weblogic.ejb.container.internal.EJBRuntimeUtils.throwEJBException(EJBRuntimeUtils.java:134) at weblogic.ejb.container.internal.BaseLocalObject.postInvoke1(BaseLocalObject.java:362) at weblogic.ejb.container.internal.BaseLocalObject.__WL_postInvokeTxRetry(BaseLocalObject.java:205) at weblogic.ejb.container.internal.SessionLocalMethodInvoker.invoke(SessionLocalMethodInvoker.java:46) ... Caused by: weblogic.transaction.internal.AppSetRollbackOnlyException: setRollbackOnly called on transaction
当我在事务是容器管理的无状态EJB中调用javax.persistence.EntityManager.merge(Object)
时,会发生错误。
我最初的想法是容器在某处调用javax.transaction.UserTransaction.setRollbackOnly()
,所以我将EJB的事务管理更改为BMT并自己管理事务。 发生了同样的错误。
我怀疑我的Datasource或persistence.xml有问题。
下面是我的persistence.xml的属性
org.hibernate.ejb.HibernatePersistence myDS
请协助。
这是Weblogic JTA实现的默认行为。 要获取根exception,应将系统属性weblogic.transaction.allowOverrideSetRollbackReason
设置为true
。
其中一个解决方案是将此行添加到
:
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dweblogic.transaction.allowOverrideSetRollbackReason=true
或者等价于
linux