Le 2015-04-19 11:24, Mark Struberg a écrit :
Hi Dennis!


Have you *ever* hit this situation?
Yes, under heavy load it happens pretty often actually (I’m talking about 
multi-million request/day public internet apps). It also depends a bit on the 
JPA container you use. From the pure spec it is forbitten to touch the 
EntityManager in parallel threads and also to touch managed (‚attached’) 
entities in parallel threads. What JPA container are you using?
Here we are talking about one ONE EM per ONE CDI Conversation.
So you have applications with multi-million request/day concurrently in one CDI Conversation that may lead *often* to a misuse of the EM ?
Impressive... How do you do that: Ajax requests? Proprietary client javascript 
framework?
Or you are talking about *not closed EM* because the @PreDestroy callback method has not been called in some particulat situation (sendRedirect is called and the new request is processed before the initial request)?
Sorry, Mark but you lost me.....
Denis

Also, who programs a „sendRedirect" in the middle of a method that then 
performs database access ..?
You don’t need to do database access even. It is enough that the entitymanager 
is not closed as per the spec.


Even so, this is pure theory, the chance are so tiny this happens…
Then I had bad luck - quite often ;)


And If you think this *may* happen within one conversation, then change the way 
redirects are send, or the way database is accessed in parallel in Ajax 
requests. not the way EM is used IMHO
That might be a solution. Or force the EM to get closed before the redirect.

Also your remark on „unfinished thread" is valid for ANY components/resources 
held in ConversationScope, not just the EM, true?
Yes, but most components have no problems with getting accessed in parallel. 
For managed Entities and EntityManagers it’s explicitly forbidden by the JPA 
spec.

LieGrue,
strub

Reply via email to