La specifica JPA Java Persistence API, consente di utilizzare database multipli.
In questa guida vedremo come si fa ad utilizzare database multipli con JPA. Supponiamo di avere molti dati da trattare, distribuiti in più di un database. Come si può fare con JPA? Esiste un modo per utilizzare database multipli con JPA? La risposta è SI! Vediamo come fare….
Il primo passo è quello di configurare JPA per utilizzare più database e lo si fa tramite il file persistence.xml. In particolare il persistence.xml può ospitare una o più persistence unit. Nell’esempio in basso abbiamo specificato due persistence unit che tramite l’elemento xml <jta-data-source> vanno a specificare il nome globale JNDI dell’origne dati utilizzata dall’application server.
<persistence> <persistence-unit name="sample-db1"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>jdbc/SamplesDB1</jta-data-source> </persistence-unit> <persistence-unit name="sample-db2"> <provider> oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider </provider> <jta-data-source>jdbc/SamplesDB2</jta-data-source> </persistence-unit> </persistence>
Le persistence unit: sample-db1 e sample-db2 sono relative ai data source jdbc/SampleDB1 e jdbc/SampleDB2.

Una volta definito il persistence.xml, si possono poi iniettare gli EntityManager all’interno del nostro EJB come segue.
@PersistenceContext(unitName="sample-db1", type=PersistenceContextType.TRANSACTION) private EntityManager em1; @PersistenceContext(unitName="sample-db2", type=PersistenceContextType.TRANSACTION) private EntityManager em2;
Il contesto di persistenza degli EntityManger viene definito specificando lo unitName della persistence unit relativa.