En la clase siguiente me permite establecer conexion hacia la Base de Datos, que actualente son 3 BD. Anexo trozo de la clase:
Código:
En el archivo .properties tengo el nombre de 1 BD con el jdbc por ejemplo:public class DBPoolManager { public static final String KEYS_KEY = "pool_keys"; public static final String NAME_KEY = "name"; public static final String LOOKUP_KEY = "lookup"; private static DBPoolManager instance; private Map datasources = null; private Logger log = null; private synchronized void init() throws SQLException { // // Inicializa la clase Logger del administrador de conexiones. try { log = new Logger("DBPoolManager.log"); } catch (IOException e) { e.printStackTrace(); } log.log("\n-----------------------------------------\n" + "--- INICIALIZANDO POOLS DE CONEXIONES ---\n" + "-----------------------------------------\n"); // // obtiene el caracter separador de directorios (dependiente del SO) char c = File.separatorChar; // // obtiene el InputStream del archivo de properties de pool InputStream is = getClass().getResourceAsStream("properties" + c + "pools.properties"); // // crea store de properties Properties props = new Properties(); // // carga las properties desde el InputStream try { props.load(is); } catch (Exception e) { // by TM log.log("properties" + c + "testdb_pools.properties"); e.printStackTrace(log.getWriter()); log.log("No se pudo leer el archivo de propiedades de la base de datos."); // HEY THIS IS A FATAL!!!!!!!!!! // ToDo: ?? and now ... ?? ;) } // // get pool names property String poolKeysProperty = props.getProperty(KEYS_KEY); // // tokenize this by spaces and return an arrry of pool names entries String poolKeys[] = tokenize(poolKeysProperty); // // create Initial Context Context context = null; try { context = new javax.naming.InitialContext(); } catch (NamingException e) { e.printStackTrace(); throw new SQLException("Error al tratar de acceder al InitialContext."); } // // create datasources map datasources = new HashMap(); log.log("poolKeys.length "+poolKeys.length); // // iterate every entry for(int i=0; i<poolKeys.length; i++) { String poolKey = poolKeys[i]; String name = props.getProperty(poolKey+"."+NAME_KEY); name = (name==null)? poolKey : name; String lookup = props.getProperty(poolKey+"."+LOOKUP_KEY); DataSource ds = null; try { ds = (DataSource)context.lookup(lookup); log.log("Establishing Connection with : "+name); datasources.put(name,ds); } catch (NamingException e) { // // no da error porque quizas la aplicacion pueda seguir funcionando (sin toda su capacidad seguro) // sin este pool en particular. log.log(e.getMessage()); } } /* ******************** */ // Variables del Método DBConnection dbConn = null; OracleResultSet dbResult = null; String name = null; String jndi= null; DataSource ds=null; String query = "begin ? := PAQUETE_BD.func_consultar; end;"; try { // Conexión al Pool de Base de Datos dbConn = DBUtil.getConnection(); if (dbConn == null) { log.log("[email protected]: No se pudo crear la conexión con la base de datos."); } dbConn.prepareCall(query); dbConn.registerOutParameter(1, OracleTypes.CURSOR); // Ejecución del Query dbConn.executeCallableStatement(); // Resultados del Query dbResult = dbConn.cgetResultSet(1); // Agregar los dataSource desde la tabla e BD tabla while(dbResult.next()){ name = dbResult.getString(1); jndi = dbResult.getString(2); ds = (DataSource)context.lookup(jndi); log.log("Establishing Connection with : "+name); datasources.put(name,ds); } // Cierre del ResultSet dbResult.close(); // Validación del Resultado if (jndi.equals(null)) { log.log("No se encontraron registros para la consulta de nodos"); } } catch (Exception e) { log.log(e.getMessage()); } finally { DBUtil.closeConnection(dbConn); } /* ********************* */ } private DBPoolManager() throws SQLException { init(); } public DBConnection getConnection(String name) { DataSource ds = (DataSource) datasources.get(name); DBConnection dbConnection; if (ds != null) { Connection connection = null; try { connection = ds.getConnection(); dbConnection = new DBConnection(connection); } catch (SQLException e) { log.log(".getConnection() - ERROR!!. No fue posible obtener una conneccion del datasource "+name+". Se retorna null."); e.printStackTrace(); return null; } return dbConnection; } else { log.log(".getConnection() - ERROR!!. El datasource de nombre "+poolname+" no fue encontrado. Se retorna null."); return null; } } //FIN METODO } //FIN CLASE
Código:
y en la tabla de BD tengo los otros 2 nombres de Base de Datos con sus jdbc respectivo.pool_keys=name_BD1 rvirtual.name=name_BD1 rvirtual.lookup=jdbc/ORA9I_name_BD1
La funcion PAQUETE_BD.func_consultar; end;"; retorna un cursor con las otras dos conexiones a BD, tiene nombre y jndi
Sin embargo aun no me puedo conectar a las BD solo a la 1ra a la q esta en el archivo .properties
Gracias.....