Multiples Data Sources

Buen dia espero alguen tenga alguna referencia sobre mi tema, tengo un proyecto el cual debe de usar mas de un datasource, mi pregunta es, de que manera puedo hacer q solo seleccione uno datasource al momento de que el usuario ingrese al sistema. Saludos...

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de tav

se valida el usuario por cada

se valida el usuario por cada datasource.... Hasta q lo accesa

Imagen de neko069

eh?

se valida el usuario por cada datasource.... Hasta q lo accesa

... no creo que sea lo más conveniente a menos que en cada datasource que apunta (presumiblemente) a bases de datos distintas, tuviera cada una, una tabla de usuarios. Si sabes de qué data source vas a hacer la consulta para que el usuario pueda entrar al sistema, al momento de validar, pues del data source identificado sacas la conexión correspondiente y haces la consulta.

repetición?

¿Será una repetición de aquella historia de terror de las veintitantas bases de datos?

Imagen de arterzatij

Yo hice eso pero con JPA,

Yo hice eso pero con JPA, pero en ese caso era para hacer peticiones de solo lectura de distintos DS con tablas con estructura similar. Pero esto que deseas hacer esta muy rarito.

Imagen de Cid

Alguna vez lo hice

Mi inexperiencia me dictaba que solo podia definir un solo datasource, pero en un requerimiento que tuve tenia que conectarme a 2 BD con casi la misma información pero que pertenecian a dos cosas distintas, y al igual que @areztij use JPA y solo era para leer datos no para escritura, en mi caso era sencillo seleccionar si se tendría que usar uno u otro datasource colocaba una sentencia if y con un atributo llamado idEmpresa se definia si era uno u otro, imagino pues que tus usuarios tienen roles o algo que te ayude a identificar si utilizas uno u otro datasource a menos que tengas que consultar datos en ambas partes del mismo usuario ahi tendría que ser más refinado el asunto.

Si usas JPA tal vez esto te ayude: checalo

misma base de datos

Ahora, no debería crearse otro pool de conexiones sólo para conectarse a la misma base de datos pero en diferente esquema…

datasource

La idea es tener por ejemplo dos datasource "abiertos" por decirlo asi apuntando a diferentes ip's, cuando no este disponible una IP se conecta a la otra

¿Qué manejador de base de

¿Qué manejador de base de datos estás usando (Oracle, SQL Server, etc.)?

oracle

oracle y uso Jboss

Por que tienes dos bases de

Por que tienes dos bases de datos con la misma información?
Que pasa si la segunda base de datos no funciona?
Que pasa con los registros que se modifican en la segunda cuando la primera está fuera de línea?

Dependiendo de tu aplicación quizá lo mejor sería usar una sola base de datos y si está abajo no dejar al usuario hacer nada hasta que esté de nuevo funcionando. De cualquier forma los datos podrían quedar inconsistentes.

Si aún así quieres tener dos datasources con la misma información puedes simplemente configurarlos y utiliza uno como principal y el otro como respaldo Si el primero falla utilizas el alterno.

Puede ser tan sencillo como esto:

...
DataSource dsPrinc = (DataSource)envContext.lookup("jdbc/miOracle");
DataSource alterno = (DataSource)envContext.lookup("jdbc/miOtroOracle");
Connection conn = getConnection(dsPrinc, alterno);
....
// Regresa una conexión del datasource y si no puede lo intenta del datasource alterno.
public Connection getConnection( DataSource ds, DataSource backup ) throws SQLException {
     try {
           return ds.getConnection();
     } catch ( SQLException sqle ) {
         if ( backup != null ) {
          return getConnection( backup, null );
         } else {
             throw sqle;
         }
    }
}

Oracle RAC

Si la base de datos está en clúster (Oracle RAC), entonces la URL de conexión se ve así.

UPDATE: Si acaso estás usando Oracle RAC, tal vez quieras ver también estos ejemplos dentro de la Universal Connection Pool for JDBC Developer’s Guide.

Muchas gracias lo voy a

Muchas gracias lo voy a corroborar con el código que me brindas, mas que nada es solo dashboard y en un ningún momento se hará un insert, delete, update, etc, esta balanceado el servidor en dos ip's y en caso de que no funcione uno pues esta el otro disponible, y todo va a una sola base de datos. Gracias y saludos...