Foros del Web » Programación para mayores de 30 ;) » Java »

Manejo de dos bases de datos con hibernate

Estas en el tema de Manejo de dos bases de datos con hibernate en el foro de Java en Foros del Web. Qué tal foro! Se me presenta la siguiente situación: Debo manejar dos bases de datos en una aplicación, que está en un nivel más que ...
  #1 (permalink)  
Antiguo 22/10/2009, 01:25
 
Fecha de Ingreso: enero-2009
Ubicación: Salou
Mensajes: 36
Antigüedad: 15 años, 3 meses
Puntos: 0
Manejo de dos bases de datos con hibernate

Qué tal foro!
Se me presenta la siguiente situación:
Debo manejar dos bases de datos en una aplicación, que está en un nivel más que avanzado de desarrollo (originalmente era solo una BBDD).
Mi objetivo ahora es que he llegado a un punto en que tengo que recuperar datos de una base (secundaria) para mostrarlos en pantalla y luego guardarlos en la otra base (llamemosla primaria).
¿Qué debería configurar para agregar otra base de datos? ¿cómo quedaría diferenciada una conexión con otra? ¿debo configurar algo en el servidor web?
Utilizo las siguientes tecnologías en el desarrollo: hibernate, spring, glassfish, struts.

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 22/10/2009, 02:47
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Manejo de dos bases de datos con hibernate

Wenas

En realidad es 'casi' lo mismo a trabajar con una sola BBDD.

Es sencillo. Debes crearte un fichero cfg.xml para cada base de datos.

Una vez hecho eso puedes crearte una clase que conecte con la BBDD que te interese y te devuelva la conexion de turno de tal modo que puedas trabajar con las 2 conexiones (cada una a una BBDD) en un mismo java.

La ventaja de hibernate es que te puedes olvidar del manejo de las querys y demas (a no ser que sean muy especificas, ya que es independiente del lenguaje de BBDD usado).

Saludos.
  #3 (permalink)  
Antiguo 22/10/2009, 06:30
 
Fecha de Ingreso: enero-2009
Ubicación: Salou
Mensajes: 36
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Manejo de dos bases de datos con hibernate

Hola elAntonie
Intepreto por lo que me comentás que tengo que agregar un hibernate.cfg.xml nuevo para esta base, ¿sería un hibernate2.cfg.xml (ya que tengo un hibernate.cfg.xml)? ¿donde debería indicar que uso tambien este archivo?
  #4 (permalink)  
Antiguo 22/10/2009, 09:50
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Manejo de dos bases de datos con hibernate

Eso es.

Para usar una sesion u otra, como ya te he indicado, podrias hacer un java que te proporcionase la conexion que necesitas en cada momento.

Para leer el fichero puedes usar algo como esto
Código:
public void obtenerSesion (String fileName) throws HibernateException
{
SessionFactory sessionFactory = new Configuration().configure(filename).buildSessionFactory();
Session s = sessionFactory.openSession();
return s;
}
Y para obtener una sesion del cfg.xml de turno

Código:
Session misesion = obtenerSesion("hibernate.cfg.xml");
Session misesion2 = obtenerSesion("hibernate2.cfg.xml");
Con el manejo de excepciones de turno.

Saludos.

PD. Ya puestos, podrias hacer un 'pool' (observese el matiz delas comillas) guardando las sesiones en un hashtable (por ejemplo), y que sea esta clase la que se encargue de obtener la sesion (si no existe en la hashtable, la crea y la devuelve, y si existe devuelve la que tiene creada) y devolverla y tambien de cerrarla (la devuelve a la hashtable). De tal modo que solo tengas que llamarla como


Session s1 = conexionHibernate.dameSesion1();
Session s2 = conexionHibernate.dameSesion2();

... blableblublublibla ...

conexionHibernate.cierraSesion1();
conexionHibernate.cierraSesion2();

Última edición por elAntonie; 22/10/2009 a las 09:56
  #5 (permalink)  
Antiguo 10/11/2009, 04:00
 
Fecha de Ingreso: enero-2009
Ubicación: Salou
Mensajes: 36
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Manejo de dos bases de datos con hibernate

Gracias elAntonie, el código funcionó perfectamente.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:28.