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.
