2015-07-15 2 views
2

Я переношу приложение из Jboss 7as в Weblogic 12c.Ошибка веб-журнала: вызвано: weblogic.transaction.internal.AppSetRollbackOnlyException: setRollbackOnly вызвано транзакцией

До сих пор я мог запускать приложение и создавать новые записи в базе данных.

Однако, я получаю следующую ошибку только при попытке обновить существующие записи;

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 

ошибка происходит, когда я называю javax.persistence.EntityManager.merge(Object) внутри Stateless EJB, чьи транзакции контейнер удалось.

Мои первоначальные мысли состоят в том, что контейнер вызывает javax.transaction.UserTransaction.setRollbackOnly() где-то, поэтому я изменил управление транзакциями EJB на BMT и сам управлял транзакцией. Произошла та же ошибка.

Я подозреваю, что у моего Datasource или persistence.xml есть проблема.

Ниже свойства моего persistence.xml в

<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="myunitname" transaction-type="JTA"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>myDS</jta-data-source> 
<properties> 
<property name="hibernate.hbm2ddl.auto" value="update" /> 
<property name="hibernate.show_sql" value="false" /> 
<property name="hibernate.format_sql" value="false" /> 
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" /> 
<property name="hibernate.max_fetch_depth" value="1"/> 
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.WeblogicJtaPlatform"/> 
</properties> 

Пожалуйста помогите.

+0

здесь же, кажется, известная проблема: https: //hibernate.atlassian. net/browse/HHH-8181 – Kai

+0

Спасибо. Позвольте мне проверить это. – mwangi

ответ

5

Это поведение по умолчанию для реализации JTA Weblogic. Чтобы получить исключение root, вы должны установить системное свойство weblogic.transaction.allowOverrideSetRollbackReason на true.

Одним из раствора добавьте эту строку в <domain_home>/bin/setDomainEnv.cmd:

set JAVA_OPTIONS=%JAVA_OPTIONS% -Dweblogic.transaction.allowOverrideSetRollbackReason=true

или Линукс эквивалент в <domain_home>/bin/setDomainEnv.sh

+0

Отмечено. Я попробую. – mwangi

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