You should not inject the EntityManager directly.
Instead you should inject a Provoder<EntityManager> and then use get() to obtain the EntityManager just when you need it. The implementation of Provider<EntityManager> uses a ThreadLocal to ensure that every thread has its own instance of EntityManager.


On 08/26/2012 01:40 AM, Markus Fischboeck wrote:
Hi!

I've been integrating Guice 3.0 into a desktop application.
To access my database I use JPA together with EclipseLink. Everything is configured straight forward, using the JpaPersistModule guice provides. The application runs multiple threads and each thread is using the same data access object to read and write data in which the EntityManager is injected using constructor injection. However it appears that using the DAO within a thread, transactions are not commited and entities do not appear in the database.

After inspecting that issue, I've seen that the EntityManager get's injected as a singleton, which is not suitable as it is not thread-safe. I then tried to inject the EntityManagerFactory instead, which bypasses the transaction interception somehow.

Is there a general approach to get this working? Unfortunately I haven't found much about this topic especially in conjunction with guice on the web. Any help is greatly appreciated!



--
You received this message because you are subscribed to the Google Groups "google-guice" group. To view this discussion on the web visit https://groups.google.com/d/msg/google-guice/-/KlKbRlNE_TQJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-guice?hl=en.

--
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-guice?hl=en.

Reply via email to