sql >> Base de Datos >  >> RDS >> Oracle

Java conectándose a múltiples bases de datos

Está almacenando una fuente de datos única (y conexión, y dbMainConnection) en un estático variable de su clase. Cada vez que alguien solicita una fuente de datos, reemplaza la anterior por la nueva. Si ocurre una excepción al obtener una fuente de datos de JNDI, la fuente de datos estática permanece como está. No debe almacenar nada en una variable estática. Dado que su clase dbMainConnection se construye con el nombre de una base de datos y hay varios nombres de bases de datos, no tiene sentido convertirla en un singleton.

Simplemente use el siguiente código para acceder a la fuente de datos:

public final class DataSourceUtil {
    /**
     * Private constructor to prevent unnecessary instantiations
     */
    private DataSourceUtil() {
    }

    public static DataSource getDataSource(String name) {
        try {
            Context ctx = new InitialContext();
            String database = "jdbc/" + name;
            return (javax.sql.DataSource) ctx.lookup (database);
        }
        catch (NamingException e) {
            throw new IllegalStateException("Error accessing JNDI and getting the database named " + name);
        }
    }
}

Y deje que las personas que llaman obtengan una conexión de la fuente de datos y la cierren cuando hayan terminado de usarla.