Hi,

I use Karaf 4.0.9 with JPA/Hibernate 4.3.6 and Camel 2.18.5.
I have a Service class doing something like

@Transactional
public MyEntity update(MyEntity aentity) {
        MyEntity entity = this.entityManager.merge(aentity);
        return entity;
 }

The datasource in the persistence.xml is JTA enabled
<jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
=mydb)</jta-data-source>

MyEntity uses JPA @Version to force OptimisticLocking.
@Version
@Column(name = "VERSION")
private Long version;

Everything works fine, for example we have a REST Endpoint which injects
the service class and the entity get's updated.

We also have a Camel route in a blueprint which uses the service:

<camelContext id="managerCtx" xmlns="
http://camel.apache.org/schema/blueprint";>
        <route id="purge">
            <from
uri="timer://purgeMaterial?fixedRate=true&amp;period=2h&amp;delay=5000" />
            <transacted />
            <bean ref="myBean" method="purge" />
        </route>
    </camelContext>

myBean injects the service class and calls the update method.
When the camel timer starts, I get following execption:

2018-02-21 15:38:09,807 | WARN  | ://purgeMaterial |
Transaction                      | 131 -
org.apache.aries.transaction.manager - 1.3.1 | Unexpected exception from
beforeCompletion; transaction will roll back
javax.persistence.OptimisticLockException: Row was updated or deleted by
another transaction (or unsaved-value mapping was incorrect) :
[MyEntity#11093]
    at
org.hibernate.jpa.spi.AbstractEntityManagerImpl.wrapStaleStateException(AbstractEntityManagerImpl.java:1785)[238:org.hibernate.entitymanager:4.3.6.Final]
    at
org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1705)[238:org.hibernate.entitymanager:4.3.6.Final]
    at
org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)[238:org.hibernate.entitymanager:4.3.6.Final]
    at
org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1683)[238:org.hibernate.entitymanager:4.3.6.Final]
    at
org.hibernate.jpa.spi.AbstractEntityManagerImpl$CallbackExceptionMapperImpl.mapManagedFlushFailure(AbstractEntityManagerImpl.java:1882)[238:org.hibernate.entitymanager:4.3.6.Final]
    at
org.hibernate.engine.transaction.synchronization.internal.SynchronizationCallbackCoordinatorNonTrackingImpl.beforeCompletion(SynchronizationCallbackCoordinatorNonTrackingImpl.java:115)[237:org.hibernate.core:4.3.6.Final]
    at
org.hibernate.engine.transaction.synchronization.internal.RegisteredSynchronization.beforeCompletion(RegisteredSynchronization.java:50)[237:org.hibernate.core:4.3.6.Final]
    at
org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:527)[131:org.apache.aries.transaction.manager:1.3.1]
    at
org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:511)[131:org.apache.aries.transaction.manager:1.3.1]
    at
org.apache.geronimo.transaction.manager.TransactionImpl.beforePrepare(TransactionImpl.java:413)[131:org.apache.aries.transaction.manager:1.3.1]
    at
org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:262)[131:org.apache.aries.transaction.manager:1.3.1]
    at
org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:252)[131:org.apache.aries.transaction.manager:1.3.1]
    at
org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1023)[217:org.apache.servicemix.bundles.spring-tx:4.3.5.RELEASE_1]
    at
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:761)[217:org.apache.servicemix.bundles.spring-tx:4.3.5.RELEASE_1]
    at
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:730)[217:org.apache.servicemix.bundles.spring-tx:4.3.5.RELEASE_1]
    at
org.apache.aries.transaction.internal.AriesPlatformTransactionManager.commit(AriesPlatformTransactionManager.java:75)[131:org.apache.aries.transaction.manager:1.3.1]
    at
org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:150)[217:org.apache.servicemix.bundles.spring-tx:4.3.5.RELEASE_1]
    at
org.apache.camel.spring.spi.TransactionErrorHandler.doInTransactionTemplate(TransactionErrorHandler.java:176)[137:org.apache.camel.camel-spring:2.18.5]
    at
org.apache.camel.spring.spi.TransactionErrorHandler.processInTransaction(TransactionErrorHandler.java:136)[137:org.apache.camel.camel-spring:2.18.5]
    at
org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:105)[137:org.apache.camel.camel-spring:2.18.5]
    at
org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:114)[137:org.apache.camel.camel-spring:2.18.5]
    at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)[135:org.apache.camel.camel-core:2.18.5]
    at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)[135:org.apache.camel.camel-core:2.18.5]
    at
org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:197)[135:org.apache.camel.camel-core:2.18.5]
    at
org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:79)[135:org.apache.camel.camel-core:2.18.5]
    at java.util.TimerThread.mainLoop(Timer.java:555)[:1.8.0_141]
    at java.util.TimerThread.run(Timer.java:505)[:1.8.0_141]
Caused by: org.hibernate.StaleObjectStateException: Row was updated or
deleted by another transaction (or unsaved-value mapping was incorrect) :
[MyEntity#11093]
    at
org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:2541)[237:org.hibernate.core:4.3.6.Final]
    at
org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3285)[237:org.hibernate.core:4.3.6.Final]
    at
org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:3183)[237:org.hibernate.core:4.3.6.Final]
    at
org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3525)[237:org.hibernate.core:4.3.6.Final]
    at
org.hibernate.action.internal.EntityUpdateAction.execute(EntityUpdateAction.java:159)[237:org.hibernate.core:4.3.6.Final]
    at
org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:463)[237:org.hibernate.core:4.3.6.Final]
    at
org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:349)[237:org.hibernate.core:4.3.6.Final]
    at
org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:350)[237:org.hibernate.core:4.3.6.Final]
    at
org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56)[237:org.hibernate.core:4.3.6.Final]
    at
org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1222)[237:org.hibernate.core:4.3.6.Final]
    at
org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:425)[237:org.hibernate.core:4.3.6.Final]
    at
org.hibernate.engine.transaction.synchronization.internal.SynchronizationCallbackCoordinatorNonTrackingImpl.beforeCompletion(SynchronizationCallbackCoordinatorNonTrackingImpl.java:110)[237:org.hibernate.core:4.3.6.Final]
    ... 21 more

If I remove the @Version annotation of the entity, everything works.
Any ideas ????

Reply via email to