Odd transaction behavior with RestEasy

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Odd transaction behavior with RestEasy

Tony Nelson-3
Below is a stack trace that I'm seeing on a new web service I wrote.  The web service should create a parent object (Trade) and several child objects (CandidateAttachment).  The actual exception I'm seeing is that the parent object id doesn't exist, so the foreign key constraint is stopping the attachments from being saved, which would make sense, except


1)      I just created the parent

2)      After the exception,  the parent still exists (is committed), and of course the child does not

3)      This only happens intermittently

I'm polling a remote system to create these Trade and Candidate attachment objects.  At 10:15, I got this exception that I can't explain, and 10:30 it ran successfully.

In my code, the web service method that RestEasy calls is not marked with @CommitAfter.  The web service function calls a method in WelliHornLogic called createTrade that is annotated with CommitAfter.  A ConstraintVilationException is a runtime exception, so the failure should cause the entire transaction to rollback, but that's not what I'm seeing happening.

I'm at a loss as to what I can check next.  I'd prefer to fix the problem such that the transaction commits correctly the first time.  The actual method that is in TradeLogic that creates these objects is called from the actual web application and works as expected there.  Failing that, I'd really like to understand what is going on with transaction handling that an aborted transaction gets partially committed.

Thanks in advance for any suggestions on what I should look at.

Tony


Here is the actual exception  and it's root cause.

2018-02-06T10:15:14 http-apr-8080-exec-5 ERROR com.starpoint.instihire.web.services.WebServicesModule.WelliHornWebService  Could not execute JDBC batch update
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
                at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96)
                at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
                at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
                at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:268)
                at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184)
                at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
                at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
                at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
                at com.starpoint.instihire.api.dao.hibernate.Dao.store(Dao.java:44)
                at com.starpoint.instihire.api.dao.hibernate.AttachmentDaoImpl.storeAttachment(AttachmentDaoImpl.java:54)
                at $AttachmentDao_e3b6d5997b201.storeAttachment(Unknown Source)
                at com.starpoint.instihire.api.business.AttachmentLogicImpl.storeAttachment(AttachmentLogicImpl.java:809)
                at com.starpoint.instihire.api.business.AttachmentLogicImpl.storeCandidateAttachment(AttachmentLogicImpl.java:387)
                at $AttachmentLogic_e3b6d5997ad05.storeCandidateAttachment(Unknown Source)
                at com.starpoint.instihire.api.business.TradeLogicImpl.createTrade(TradeLogicImpl.java:185)
                at $TradeLogic_e3b6d5997acf1.createTrade(Unknown Source)
                at com.starpoint.instihire.api.business.WelliHornLogicImpl.createTrade(WelliHornLogicImpl.java:456)
                at $WelliHornLogic_e3b6d5997b372.createTrade(Unknown Source)
                at com.starpoint.instihire.web.ws.WelliHornWebServiceImpl.createTrade(WelliHornWebServiceImpl.java:162)
                at $WelliHornWebService_e3b6d5997c491.createTrade(Unknown Source)
                at $WelliHornWebService_e3b6d5997c492.advised$createTrade_e3b6d5997c496(Unknown Source)
                at $WelliHornWebService_e3b6d5997c492$Invocation_createTrade_e3b6d5997c495.proceedToAdvisedMethod(Unknown Source)
                at org.apache.tapestry5.internal.plastic.AbstractMethodInvocation.proceed(AbstractMethodInvocation.java:84)
                at com.starpoint.instihire.web.services.WebServicesModule$1.advise(WebServicesModule.java:64)
                at org.apache.tapestry5.internal.plastic.AbstractMethodInvocation.proceed(AbstractMethodInvocation.java:86)
                at $WelliHornWebService_e3b6d5997c492.createTrade(Unknown Source)
                at $WelliHornWebService_e3b6d5997ace4.createTrade(Unknown Source)
                at sun.reflect.GeneratedMethodAccessor2536.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:498)
                at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:137)
                at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:272)
                at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:229)
                at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:216)
                at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:356)
                at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:179)
                at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:220)
                at org.tynamo.resteasy.ResteasyRequestFilter.service(ResteasyRequestFilter.java:97)
Caused by: java.sql.BatchUpdateException: Batch entry 0 insert into CandidateAttachment (attachmentName, createDate, CreateUserId, updateDate, UpdateUserId, AgencyId, attachmentType, isDeleted, TradeId, attachmentId) values ('redacted.doc', '2018-02-06 10:15:14.805000 -05:00:00', 1088, '2018-02-06 10:15:14.805000 -05:00:00', 1088, 230, 'application/msword', 'N', 401734, 420468) was aborted.  Call getNextException to see the cause.
                at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2762)
                at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1999)
                at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:421)
                at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2929)
                at sun.reflect.GeneratedMethodAccessor329.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:498)
                at net.bull.javamelody.JdbcWrapper.doExecute(JdbcWrapper.java:412)
                at net.bull.javamelody.JdbcWrapper$StatementInvocationHandler.invoke(JdbcWrapper.java:137)
                at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:294)
                at com.sun.proxy.$Proxy90.executeBatch(Unknown Source)
                at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
                at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
                ... 71 more




This exception was in turn caused by:



ERROR org.hibernate.util.JDBCExceptionReporter  ERROR: insert or update on table "candidateattachment" violates foreign key constraint "fk_candidateattachment_trade"  Detail: Key (tradeid)=(401734) is not present in table "trade".