I have an application using Java servlets/JSP’s. There are multiple clients using my app, however each client has a separate database. All the databases have the same schema. I would like to determine which database connection to use at the time when a user logs into the system.
For example client A logs in, I determine that client A belongs to database C, grab the connection for database C and continue on my merry way.
I am using JPA with Hibernate as my JPA provider. Is it possible to do this using multiple persistence units and determining which unit to use at login time? Is there a better/preferred way to do this?
Edited to add:
I am using annotations and EJB’s so the Persistence Context is being set in the EJB with @PersistenceContext(unitName = “blahblah”), can this be determined at login time? Can I change the unitName at runtime?
Thanks
1) Create several persistent units in your
persistence.xmlwith different names.2) Create necessary number of
EntityManagerFactorys (1 per persistence-unit) and specify which persistence-unit should be used for concrete factory:3) Create necessary number of
TransactionManagers:4) In your DAO’s classes specify with which persistence-unit (and so with which EntityManagerFactory) you want to work:
5) In your service-objects specify which TransactionManager should be used (this feature is supported only in Spring 3.0):
6) If you have
OpenEntityManagerInViewFilterin your web.xml, then specify in its init-param name of necessary EntityManagerFactory (or create several filters with correspondent init-blocks):