Thanks Sam, I'll post on the non-dev list.

Le mercredi 21 janvier 2015 14:38:04 UTC+11, Sam Berlin a écrit :
>
> The non-dev list is a better place to bring up questions.
>
> sam
>
> On Tue Jan 20 2015 at 10:37:00 PM <[email protected] <javascript:>> 
> wrote:
>
>> Also, correct me if I'm wrong, but if txn.begin() raises an exception, 
>> unitOfWork.end() is never called, the EntityManager is never closed and 
>> removed from ThreadLocal in JpaPersistService.
>>
>>
>> On Sunday, January 18, 2015 at 7:19:36 PM UTC+11, [email protected] 
>> wrote:
>>>
>>> Hi all,
>>>
>>> I'll use Hibernate as an example for the underlying JPA implementation.
>>> In JpaLocalTxnInterceptor.java, line 66, guice-persist starts a 
>>> transaction with txn.begin().
>>>
>>> When Guice asks Hibernate to start a transaction, this is what 
>>> Hibernates does:
>>> - Fetch a connection
>>> - Tries to disable auto-commit on the connection if autocommit was set 
>>> to true.
>>>
>>> The problem is, sometimes this operation fails (loss of connectivity, 
>>> whatever...) and an Hibernate exception is thrown (the most curious one can 
>>> have a look at Hibernate source-code, JdbcTransaction.java, line 72). But 
>>> guice-persist doesn't catch this potential RuntimeException when it begins 
>>> a transaction.
>>>
>>> And because it doesn't catch it, it doesn't call rollback on the 
>>> transaction. You might think, why would I call rollback on a transaction 
>>> which didn't even start ? (keep in mind txn.begin() just failed).
>>> Because the connection fetched by Hibernate is only released in case of 
>>> commit or rollback. By not calling rollback, the current thread gets stuck 
>>> in a stale state, and the next time this thread is used for JPA 
>>> transaction, Hibernate will throw an exception: "Already have an associated 
>>> managed connection".
>>>
>>> I had a quick look at the JPA interceptor source code, for Spring Data, 
>>> they do catch any potential exception, even when they begin a transaction, 
>>> and call rollback in case of problem.
>>>
>>> Any thoughts on this ?
>>>
>>> Thanks for your help guys
>>>
>>  -- 
>> You received this message because you are subscribed to the Google Groups 
>> "google-guice-dev" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> Visit this group at http://groups.google.com/group/google-guice-dev.
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"google-guice-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice-dev.
For more options, visit https://groups.google.com/d/optout.

Reply via email to