I have a JSF web application where I configure 2 layers. Controllers performing presentation logic, Services handling transactions and DAOs performing actual access of entities.
The Services and DAOs are configured as application scoped managed beans. The controllers are defined with request or session scope based on its purpose.
I have used annotations to inject UserTransaction into Services and EntityManager (not EntityManagerFactory) into DAOs. One service method can access more than one DAO.
I read that EntityManager is not thread safe. So is it a better to inject EntityManagerFactory into DAOs rather than EntityManager? If so, what overhead will creating and closing multiple EntityManager instances within a single transaction cause?