Re: GWT-Hibernate application do not release session resources
Is the HashMap get/put code inside getFactory(String persistenceUnit) synchronized? If not there is a chance that you create more than one factory if you do not have an entry in your HashMap<String, EntityManagerFactory> instance yet. HashMap is not thread safe and if x threads call getFactory(String) and you don't have an entry yet then its likely that your code creates x EntityManagerFactory instances, each with at least one EntityManager (through getFactory(..).createEntityManager()), but only one EntityManagerFactory will be stored in your map. Thus you can never clear x-1 EntityManagers.
-- Now when the user logs out you close the factory and remove it from the map. Next time multiple users login in parallel you are back at the above situation where you might create more factories than you think, each with an entityManager attached that you can never close.
So make sure that getFactory() uses synchronized code and/or use ConcurrentHashMap. Also you don't have to close the Factory at all. We do something very similar in our app and we only close the Factory upon undeployment of old apps. So once a EntityManagerFactory is created for a customer we use it forever. We don't have any issues with it.
-- J.
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscribe@googlegroups.com.
To post to this group, send email to google-web-toolkit@googlegroups.com.
Visit this group at http://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/groups/opt_out.
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home