Uploaded image for project: 'JBoss Transaction Manager'
  1. JBoss Transaction Manager
  2. JBTM-3495

Partial Rollback of Entity Persist Operations when any exception is raised

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Critical
    • None
    • 5.10.5.Final
    • None
    • None

    Description

      I tried simulating a simple use case scenario of Transaction Rollback, the details of which can be found below.

      I have an entity named 'Owner', and other entity Named 'Vets'. I consecutively try to save them in a single transaction, using JPA based Entity Manager. Firstly, I save 'Vets' Object which has no Constraint Violation Issue, and post that I save an 'Owner' Object, which I deliberately have made to violate a SQL Constraint.

      When I see the Database post the method invoke, the Owners object does not gets saved obviously, but the entry of Vets is also not rolled back,. Couldn't find any pre-existing issue for the same. Thus logging for it.

      Logs :- 

      DEBUG JtaTransactionManager - Initiating transaction commitDEBUG JtaTransactionManager - Initiating transaction commitDEBUG AbstractFlushingEventListener - Processing flush-time cascadesDEBUG AbstractFlushingEventListener - Dirty checking collectionsDEBUG AbstractFlushingEventListener - Flushed: 2 insertions, 0 updates, 0 deletions to 2 objectsDEBUG AbstractFlushingEventListener - Flushed: 0 (re)creations, 0 updates, 0 removals to 0 collectionsDEBUG EntityPrinter - Listing entities:DEBUG EntityPrinter - org.springframework.samples.petclinic.model.Owner{pets=null, firstName=ThumsDown1, lastName=jcbj1, address=ncbwj1, city=cbw1, telephone=98867857678981, id=5000047}DEBUG EntityPrinter - org.springframework.samples.petclinic.model.Vet{firstName=ThumsDown1, lastName=jcbj1, specialties=null, id=5000046}DEBUG SQL - insert into vets (first_name, last_name, id) values (?, ?, ?)Hibernate: insert into vets (first_name, last_name, id) values (?, ?, ?)DEBUG JdbcCoordinatorImpl - Skipping aggressive release due to manual disablingDEBUG PlatformResourceBundleLocator - ValidationMessages not found.DEBUG PlatformResourceBundleLocator - ContributorValidationMessages not found.DEBUG PlatformResourceBundleLocator - org.hibernate.validator.ValidationMessages found.DEBUG LogicalConnectionManagedImpl - Initiating JDBC connection release from afterStatementDEBUG TransactionImpl - TransactionImpl created on closed Session/EntityManagerDEBUG TransactionImpl - On TransactionImpl creation, JpaCompliance#isJpaTransactionComplianceEnabled == falseWARN  arjuna - ARJUNA012125: TwoPhaseCoordinator.beforeCompletion - failed for SynchronizationImple< 0:ffffc0a86e01:e5b3:60c05e5d:3, org.hibernate.resource.transaction.backend.jta.internal.synchronization.RegisteredSynchronization@64639fee >javax.validation.ConstraintViolationException: Validation failed for classes [org.springframework.samples.petclinic.model.Owner] during persist time for groups [javax.validation.groups.Default, ]List of constraint violations:[ ConstraintViolationImpl{interpolatedMessage='numeric value out of bounds (<10 digits>.<0 digits> expected)', propertyPath=telephone, rootBeanClass=class org.springframework.samples.petclinic.model.Owner, messageTemplate='

      {javax.validation.constraints.Digits.message}

      '}] at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:140) at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:80) at org.hibernate.action.internal.EntityInsertAction.preInsert(EntityInsertAction.java:227) at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:100) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:604) at org.hibernate.engine.spi.ActionQueue.lambda$executeActions$1(ActionQueue.java:478) at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:684) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:475) at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:348) at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:40) at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:102) at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1356) at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:447) at org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:3233) at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2401) at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:447) at org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorImpl.beforeCompletion(JtaTransactionCoordinatorImpl.java:355) at org.hibernate.resource.transaction.backend.jta.internal.synchronization.SynchronizationCallbackCoordinatorNonTrackingImpl.beforeCompletion(SynchronizationCallbackCoordinatorNonTrackingImpl.java:47) at org.hibernate.resource.transaction.backend.jta.internal.synchronization.RegisteredSynchronization.beforeCompletion(RegisteredSynchronization.java:37) at com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.beforeCompletion(SynchronizationImple.java:76) at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.beforeCompletion(TwoPhaseCoordinator.java:360) at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:91) at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:162) at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1295) at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:128) at org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1035) at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:744) at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:712) at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:619) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:372) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:99) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) at com.sun.proxy.$Proxy71.testTransaction(Unknown Source) at org.springframework.samples.petclinic.web.OwnerController.processCreationForm(OwnerController.java:76) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:564) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:879) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:165) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1201) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:654) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2532) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2521) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:844)DEBUG LogicalConnectionManagedImpl - Initiating JDBC connection release from afterTransactionDEBUG SimpleMappingExceptionResolver - Resolving to default view 'exception'WARN  warn - Resolved [org.springframework.transaction.UnexpectedRollbackException: JTA transaction unexpectedly rolled back (maybe due to a timeout); nested exception is javax.transaction.RollbackException: ARJUNA016053: Could not commit transaction.]DEBUG DispatcherServlet - Using resolved error view: ModelAndView [view="exception"; model=\{exception=org.springframework.transaction.UnexpectedRollbackException: JTA transaction unexpectedly rolled back (maybe due to a timeout); nested exception is javax.transaction.RollbackException: ARJUNA016053: Could not commit transaction.}]

      Attachments

        Activity

          People

            Unassigned Unassigned
            deepred218 Deepesh Sharma (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: