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

Conexion desde java a la base de datos utilizando JDeveloper 9i

Estas en el tema de Conexion desde java a la base de datos utilizando JDeveloper 9i en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 06/07/2007, 14:25
 
Fecha de Ingreso: octubre-2005
Mensajes: 69
Antigüedad: 18 años, 6 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
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 06:49.