Tomohisa Igarashi created CAMEL-9608:
----------------------------------------

             Summary: camel-jpa consumer fails to poll after transaction timeout
                 Key: CAMEL-9608
                 URL: https://issues.apache.org/jira/browse/CAMEL-9608
             Project: Camel
          Issue Type: Bug
          Components: camel-jpa
    Affects Versions: 2.17.0
            Reporter: Tomohisa Igarashi


On JBoss EAP environment, camel-jpa consumer receives following right after 
transaction timeout
{noformat}
15:08:36,356 WARN  [org.apache.camel.component.jpa.JpaConsumer] (Camel 
({urnswitchyard-quickstartcamel-jpa-binding0.1.0}camel-jpa-retrieve-binding) 
thread #0 - jpa://org.switchyard.quickstarts.camel.jpa.binding.domain.Greet) 
Consumer 
Consumer[jpa://org.switchyard.quickstarts.camel.jpa.binding.domain.Greet?consumeDelete=true&consumeLockEntity=false&consumer.transacted=true&delay=500&initialDelay=1000&persistenceUnit=JpaEvents&transactionManager=%23jtaTransactionManager]
 failed polling endpoint: 
Endpoint[jpa://org.switchyard.quickstarts.camel.jpa.binding.domain.Greet?consumeDelete=true&consumeLockEntity=false&consumer.transacted=true&delay=500&initialDelay=1000&persistenceUnit=JpaEvents&transactionManager=%23jtaTransactionManager].
 Will try again at next poll. Caused by: 
[javax.persistence.PersistenceException - org.hibernate.HibernateException: 
Transaction was rolled back in a different thread!]: 
javax.persistence.PersistenceException: org.hibernate.HibernateException: 
Transaction was rolled back in a different thread!
        at 
org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1387)
 [hibernate-entitymanager-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at 
org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1310)
 [hibernate-entitymanager-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at 
org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1316)
 [hibernate-entitymanager-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at 
org.hibernate.ejb.AbstractEntityManagerImpl.remove(AbstractEntityManagerImpl.java:911)
 [hibernate-entitymanager-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[rt.jar:1.8.0_65]
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
[rt.jar:1.8.0_65]
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 [rt.jar:1.8.0_65]
        at java.lang.reflect.Method.invoke(Method.java:497) [rt.jar:1.8.0_65]
        at 
org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:366)
 [spring-orm-3.2.12.RELEASE.jar:3.2.12.RELEASE]
        at com.sun.proxy.$Proxy45.remove(Unknown Source)
        at 
org.apache.camel.component.jpa.JpaConsumer$5.deleteObject(JpaConsumer.java:456) 
[camel-jpa-2.15.2.jar:2.15.2]
..... (snip) .....
Caused by: org.hibernate.HibernateException: Transaction was rolled back in a 
different thread!
        at 
org.hibernate.engine.transaction.synchronization.internal.SynchronizationCallbackCoordinatorTrackingImpl.processAnyDelayedAfterCompletion(SynchronizationCallbackCoordinatorTrackingImpl.java:105)
 [hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at 
org.hibernate.internal.SessionImpl.delayedAfterCompletion(SessionImpl.java:636) 
[hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at 
org.hibernate.internal.SessionImpl.checkTransactionSynchStatus(SessionImpl.java:2070)
 [hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at org.hibernate.internal.SessionImpl.fireDelete(SessionImpl.java:916) 
[hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at org.hibernate.internal.SessionImpl.delete(SessionImpl.java:855) 
[hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at 
org.hibernate.ejb.AbstractEntityManagerImpl.remove(AbstractEntityManagerImpl.java:905)
 [hibernate-entitymanager-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        ... 20 more
{noformat}

After this, camel-jpa is no longer able to handle its polling due to staled 
connection
{noformat}
15:08:36,860 WARN  [org.apache.camel.component.jpa.JpaConsumer] (Camel 
({urnswitchyard-quickstartcamel-jpa-binding0.1.0}camel-jpa-retrieve-binding) 
thread #0 - jpa://org.switchyard.quickstarts.camel.jpa.binding.domain.Greet) 
Consumer 
Consumer[jpa://org.switchyard.quickstarts.camel.jpa.binding.domain.Greet?consumeDelete=true&consumeLockEntity=false&consumer.transacted=true&delay=500&initialDelay=1000&persistenceUnit=JpaEvents&transactionManager=%23jtaTransactionManager]
 failed polling endpoint: 
Endpoint[jpa://org.switchyard.quickstarts.camel.jpa.binding.domain.Greet?consumeDelete=true&consumeLockEntity=false&consumer.transacted=true&delay=500&initialDelay=1000&persistenceUnit=JpaEvents&transactionManager=%23jtaTransactionManager].
 Will try again at next poll. Caused by: 
[javax.persistence.PersistenceException - org.hibernate.HibernateException: 
Logical connection is closed]: javax.persistence.PersistenceException: 
org.hibernate.HibernateException: Logical connection is closed
        at 
org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1387)
 [hibernate-entitymanager-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at 
org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1310)
 [hibernate-entitymanager-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:277) 
[hibernate-entitymanager-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at 
org.apache.camel.component.jpa.JpaConsumer$1.doInTransaction(JpaConsumer.java:104)
 [camel-jpa-2.15.2.jar:2.15.2]
        at 
org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:131)
 [spring-tx-3.2.12.RELEASE.jar:3.2.12.RELEASE]
        at org.apache.camel.component.jpa.JpaConsumer.poll(JpaConsumer.java:92) 
[camel-jpa-2.15.2.jar:2.15.2]
..... (snip) .....
Caused by: org.hibernate.HibernateException: Logical connection is closed
        at 
org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:150)
 [hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at 
org.hibernate.engine.jdbc.internal.StatementPreparerImpl.connection(StatementPreparerImpl.java:56)
 [hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at 
org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:159)
 [hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at 
org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:183)
 [hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at 
org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:157)
 [hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1881) 
[hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1858) 
[hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1838) 
[hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at org.hibernate.loader.Loader.doQuery(Loader.java:906) 
[hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at 
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:348)
 [hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at org.hibernate.loader.Loader.doList(Loader.java:2550) 
[hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at org.hibernate.loader.Loader.doList(Loader.java:2536) 
[hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2366) 
[hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at org.hibernate.loader.Loader.list(Loader.java:2361) 
[hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:495) 
[hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at 
org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:357)
 [hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at 
org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:198) 
[hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1230) 
[hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101) 
[hibernate-core-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:268) 
[hibernate-entitymanager-4.2.21.Final-redhat-1.jar:4.2.21.Final-redhat-1]
        ... 12 more
{noformat}

According to the Java Persistence API 3.3.2 Transaction Rollback, the 
persistence context could be in inconsistent state after transaction rollback, 
which is suggesting to renew the EntityManager instance after transaction 
rollback. Actually I verified that if I renewed the EntityManager instance 
after rollback then camel-jpa could continue to work after that. I'll submit a 
pull request in a minute.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to