#java #spring #exception #transactions #rollback
#java #весна #исключение #транзакции #Откат
Вопрос:
Я получаю UnexpectedRollbackException
. Вот полная трассировка стека:
org.springframework.transaction.UnexpectedRollbackException: JTA transaction unexpectedly rolled back (maybe due to a timeout); nested exception is javax.transaction.RollbackException
at org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1031)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:732)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:701)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:635)
at com.cmates.userIcon.service.IconUpdaterServiceImpl$$EnhancerByCGLIB$$78838aa7.persist(<generated>)
at com.cmates.userIcon.service.ScheduledIconUpdaterServiceImpl.doScheduledTask(ScheduledIconUpdaterServiceImpl.java:125)
at com.cmates.profile.services.IconSyncSingletonImpl.process(IconSyncSingletonImpl.java:121)
at com.cmates.profile.services.IconSyncJob.executeInternal(IconSyncJob.java:25)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525)
Caused by: javax.transaction.RollbackException
at org.objectweb.jotm.TransactionImpl.commit(TransactionImpl.java:245)
at org.objectweb.jotm.Current.commit(Current.java:488)
at org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1028)
... 13 more
[18 Apr 2011 00:54:00,590] ERROR ErrorLogger - Job (DEFAULT.iconSyncJob threw an exception.
Это исключение внезапно начало отображаться в моих журналах. Я не вносил никаких изменений в свой код.
Я предполагаю, что это может быть связано с таймаутом?
Комментарии:
1. может ли быть так, что со временем эта транзакция просматривает все больше и больше данных, а запросы и т.д. Занимают больше времени, чем раньше. Тем более, что в коде нет изменений. Это может быть правдоподобно
Ответ №1:
Я вижу упоминание о задании quartz в stacktrace. Похоже, что что-то настроило периодическое задание, и управление транзакциями AOP отреагировало на это.
Ответ №2:
Похоже, что ваша транзакция длится дольше, чем ограничение по времени ожидания транзакции. Вам следует увеличить лимит времени ожидания транзакции..
Но я не уверен в этом, вам следует опубликовать больше трассировки стека, чтобы понять причину отката.