I have an EntityManagerFactory
for which I can create one (or multiple) EntityManager
instances. I'm using a Servlet environment, and I've got one EntityManagerFactory wired up to the servlet (via the servlet context) which is shared for the lifetime of the servlet (and therefore, for all users).
I can do one of the following:
- Create a single EntityManager for the lifetime of my servlet (e.g. shared between all users)
- Create one per user (so each user gets their own in the HttpSession)
- Create one per HTTP request (say, by instantiating a new one and closing it at the end of a
doGet
method)
Which is most appropriate? Is the cost of creating an EntityManager significant? If I do a single shared EntityManager, is there a single transaction scope (i.e. updates between independent users could commit others changes)?