[
https://issues.apache.org/jira/browse/CAMEL-11223?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15994928#comment-15994928
]
TEIKITEETINI-VAYSSE Loic commented on CAMEL-11223:
--------------------------------------------------
After further analysis, I figured out that the consumeDelete parameter when set
to true :
* By default consumes the entity by deleting it
* If an @Consumed or @PreConsumed method is defined, applies it (Besides this
point is not very clear in the documentation :(
http://camel.apache.org/jpa.html)
In a external POC I managed to use multiple concurrent pollers using
consumeDelete=true and @Consumed or @PreConsumed.
Reality is, sometimes you want to externalize your model from your app and and
just use it as a dependency. In that case, it is currently impossible to scan
the @Consumed method.
As a workaround it is possible to manually consume the entity setting
consumeDelete to false and using a bean to update the entity. In that
particular case, the exclusive lock fails.
See attached a reproduction of the issue.
> camel-jpa doesn't handle exclusive locks for concurrent consumers when
> setting consumeDelete to false
> -----------------------------------------------------------------------------------------------------
>
> Key: CAMEL-11223
> URL: https://issues.apache.org/jira/browse/CAMEL-11223
> Project: Camel
> Issue Type: Improvement
> Components: camel-jpa
> Affects Versions: 2.18.3
> Environment: Java JDK 1.8.0_121
> Spring 4 (reproduced with Spring Boot 1.5.3)
> RedHat RHEL 7.1 x86_64
> Oracle 11G
> Reporter: TEIKITEETINI-VAYSSE Loic
> Attachments: jira-camel-11223.zip
>
>
> Deploying 4 instances of the same app containing a camel-jpa consumer polling
> on the same database, I noticed that several servers can consume the same
> entities.
> The polling is currently done as follow :
> # Poll without lock on the `maxResult` first rows
> # On each row :
> ## Apply a lock _select ... for update (NOWAIT)_
> ## Consume entity
> ## Release the lock (commit)
> ## New Transaction
> ## Process exchange
> ## End Transaction
> What can happen with several instances of the consuming on the same database
> is :
> # {color:green}Server 1 polls the 10 first rows{color}
> # {color:red}Server 2 polls the same 10 first rows{color}
> # {color:green}Server 1 locks row 1 for update and consume it{color}
> # {color:red}Server 2 locks row 1 for update as the previous lock is already
> released and consumes it{color}
> This demand is related to my previous post on the user forum :
> http://camel.465427.n5.nabble.com/JPA-consumer-component-is-not-handling-multiple-server-concurrent-polling-td5797937.html
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)