Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/07/2007, 14:25
lidmartins
 
Fecha de Ingreso: octubre-2005
Mensajes: 69
Antigüedad: 19 años, 5 meses
Puntos: 0
Conexion desde java a la base de datos utilizando JDeveloper 9i

Hola.. ¿Cómo estan?

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:
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
En el archivo .properties tengo el nombre de 1 BD con el jdbc por ejemplo:

Código:
pool_keys=name_BD1

rvirtual.name=name_BD1
rvirtual.lookup=jdbc/ORA9I_name_BD1
y en la tabla de BD tengo los otros 2 nombres de Base de Datos con sus jdbc respectivo.

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.....
__________________
Ana Martins