2015-09-08 2 views
0

Когда я запускаю следующий код, я получаю UnexpectedRollbackException вместо ArrayIndexOutOfBoundsExceptionUnexpectedRollbackException - JTA сделка неожиданно откат

Окружающая среда: Weblogic, Spring, Hibernate, JTA и EJB

Код:

public class ServiceImpl  
{   
    @Transactional 
    public void test() 
    {     
     throw new ArrayIndexOutOfBoundsException();     
    } 
} 



public class WebLayerClass 
{   
    service.test(); 
} 

log:

Caused by: org.springframework.transaction.UnexpectedRollbackException: JTA transaction unexpectedly rolled back (maybe due to a timeout); nested exception is weblogic.transaction.RollbackException: setRollbackOnly called on transaction 
    at org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1024) ~[spring-tx-4.0.3.RELEASE.jar:4.0.3.RELEASE] 
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:757) ~[spring-tx-4.0.3.RELEASE.jar:4.0.3.RELEASE] 
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:726) ~[spring-tx-4.0.3.RELEASE.jar:4.0.3.RELEASE] 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:478) ~[spring-tx-4.0.3.RELEASE.jar:4.0.3.RELEASE] 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:272) ~[spring-tx-4.0.3.RELEASE.jar:4.0.3.RELEASE] 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95) ~[spring-tx-4.0.3.RELEASE.jar:4.0.3.RELEASE] 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.0.3.RELEASE.jar:4.0.3.RELEASE] 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) ~[spring-aop-4.0.3.RELEASE.jar:4.0.3.RELEASE] 
    at com.sun.proxy.$Proxy261.update(Unknown Source) ~[na:na] 
    at de.unicreditgroup.esa.service.webtool.sql.WebToolSqlServiceImpl.updateSqlQuery(WebToolSqlServiceImpl.java:234) ~[de-unicreditgroup-esa-services-2.1.0-SNAPSHOT.jar:na] 

ответ

0

Я думаю, это из-за Hibernate добавила оболочку в ваше исключение. Поскольку вы пытаетесь выбросить RunTimeException внутри транзакции, спящий режим преобразует это в свое собственное исключение UnexpectedRollbackException.

См.: - Exception doc

+0

спасибо большое за ответ. У меня есть разные бизнес-кейсы, которые должны выполняться в веб-слое на основе исключения из службы. Таким образом, в этом случае catch block с «ArrayIndexOutOfBoundsException» не поймает «UnexpectedRollbackException». Как выполнить разворачивание исключения? Развертывает фреймворк? –

+0

Для jta, похоже, ее проблема открыта весной https://jira.spring.io/browse/SPR-9053 –

+0

Можете ли вы поддержать меня, чтобы добавить работу для разворота и получить исключение. –

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