You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2016/02/17 08:51:18 UTC

[jira] [Commented] (CAMEL-9608) camel-jpa consumer fails to poll after transaction timeout

    [ https://issues.apache.org/jira/browse/CAMEL-9608?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15150061#comment-15150061 ] 

ASF GitHub Bot commented on CAMEL-9608:
---------------------------------------

GitHub user igarashitm opened a pull request:

    https://github.com/apache/camel/pull/843

    CAMEL-9608 camel-jpa consumer fails to poll after transaction timeout

    Here is the test application
    https://github.com/igarashitm/issues/tree/master/ENTESB-4941

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/igarashitm/camel CAMEL-9608

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/camel/pull/843.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #843
    
----
commit cd3a6864f2e0aba169fd7fa023f74d56696230e3
Author: Tomohisa Igarashi <tm...@gmail.com>
Date:   2016-02-17T07:11:11Z

    CAMEL-9608 camel-jpa consumer fails to poll after transaction timeout

----


> 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)