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]> 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].
> 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.
>

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