==== Múltiples Fuentes de Datos ====
Vamos a ver los diferentes pasos para configurar una aplicación con dos fuentes de datos.\\
\\
=== persistencexml ===
Modificaremos el fichero persistence.xml para que contenga ambas fuentes.
org.hibernate.ejb.HibernatePersistence
META-INF/orm-uno.xml
jdbc/Fundeweb DataSource
action.session.archivos.entities.FundewebPojo1
action.session.archivos.entities.FundewebPojo2
true
...
...
org.hibernate.ejb.HibernatePersistence
jdbc/Fundeweb2 DataSource
META-INF/orm-dos.xml
action.session.archivos.entities.FundewebPojo3
action.session.archivos.entities.FundewebPojo4
true
...
...
Cada fuente de datos tendrá acceso a unos determinados beans, los cuales hemos de indicar en el //persistence. xml//.
Así mismo también habrá que indicar el fichero **//orm.xml//** que usa (en caso de que sea necesario) cada fuente de datos, renombrando o eliminando el actual //orm.xml//, sino se cargara en las dos fuentes de datos y puede producir errores.
\\
=== components.xml ===
En el fichero //components.xml// eliminamos
y añadimos
Ahora eliminamos
jdbc/FundeWeb DataSource
javax.sql.DataSource
y añadimos
jdbc/Fundeweb2 DataSource
javax.sql.DataSource
jdbc/Fundeweb2 DataSource
javax.sql.DataSource
\\
=== components.properties ===
En el fichero //components.properties//, buscamos la propiedad //puName// y la borramos añadiendo las siguentes:
puUnoName=fuenteUnoPU
puDosName=fuenteDosPU
\\
=== DAS ===
Para los //DAS//, es necesario realizar la siguiente modificación. Para los //DAS// de las entidades de la //fuenteUnoPU// tendrian que heredar de la clase:
public abstract class DataAccessService1PUImpl extends DataAccessServiceImpl {
@In("entityManagerUnoPU")
protected EntityManager entityManager;
@Override
protected EntityManager getEntityManager() {
return entityManager;
}
@Override
protected void setEntityManager( EntityManager entityManager ) {
this.entityManager = entityManager;
}
}
Para los //DAS// de las entidades de la //fuenteDosPU// tendrian que heredar de la clase:
public abstract class DataAccessService2PUImpl extends DataAccessServiceImpl {
@In("entityManagerDosPU")
protected EntityManager entityManager;
@Override
protected EntityManager getEntityManager() {
return entityManager;
}
@Override
protected void setEntityManager( EntityManager entityManager ) {
this.entityManager = entityManager;
}
}
\\
=== Entidades ===
Para aplicaciones FundeWeb 1.5, parece que es necesario añadir la anotación //@PersistenceUnit// a las entidades, indicando el nombre de la unidad de persistencia a la que pertenecen. Ejemplo para las entidades de la unidad de persitencia //fuenteUnoPU//:
import javax.persistence.Entity;
import javax.persistence.PersistenceUnit;
import javax.persistence.Table;
@PersistenceUnit("fuenteUnoPU")
@Entity
@Table(name = "TABLA_TRES", schema = "ESQUEMA_UNO")
public class FundewebPojo1 {
...
}
Ejemplo para las entidades de la unidad de persitencia //fuenteUnoDos//:
import javax.persistence.Entity;
import javax.persistence.PersistenceUnit;
import javax.persistence.Table;
@PersistenceUnit("fuenteUnoDos")
@Entity
@Table(name = "TABLA_TRES", schema = "ESQUEMA_DOS")
public class FundewebPojo3 {
...
}
----
--- //[[juanmiguel.bernal@ticarum.es|JUAN MIGUEL BERNAL GONZALEZ]] 11/03/2020 16:07//