Ver Mensaje Individual
  #60 (permalink)  
Antiguo 12/05/2008, 14:45
Avatar de Lino-kun
Lino-kun
 
Fecha de Ingreso: mayo-2008
Ubicación: Cuernavaca Morelos Mexico
Mensajes: 126
Antigüedad: 15 años, 11 meses
Puntos: 2
Re: FAQ's de Java

Tema: NET y Coneccion a BD
Pregunta: Acceso a datos con un jndi?
Respuesta: un jndi es un metodo de tener acceso a bases de datos mucho mas rapido que con un acceso jdbc tradicional.

Si estamos trabajando con una Web application lo primero que debemos hacer es lo siguiente en el archivo web.xml
Código PHP:
<resource-ref>
      <
description>coneccion_prueba</description>
      <
res-ref-name>jdbc/mysql</res-ref-name>
      <
res-type>javax.sql.DataSource</res-type>
      <
res-auth>Container</res-auth>
      <
res-sharing-scope>Shareable</res-sharing-scope>
  </
resource-ref
lo siguiente es crear un archivo Content.xml dentro de la carpeta META-INF y dentro de este archivo poner
Código PHP:
<?xml version="1.0" encoding="UTF-8"?>
     <Context path="/prueba" docBase="/home/lino/sitios_web/prueba" reloadable="true">
         <Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource" maxActive="50" maxIdle="5" maxWait="20000" username="root" password="root" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/database"/>
      </Context>
donde docBase es el directorio de la aplicacion, asi mismo password y user son los datos para autentificarse en la BD.

En este punto se debe instalar el archivo .jar del mysql-connector en el lib de la aplicacion dentro de WEB-INF y de estar usando tomcat tambien en el lib de tomcat asi mismo se debe declarar en el Classpath el mysql-connector.

una vez todo configurado.

puedes hacer la siguiente aplicacion.

se crea una clase estatica que llamaremos ConnectionFactory.java
Código PHP:
import java.sql.*;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class 
ConnectionFactory {
  private static 
String jndi="jdbc/mysql";

  public static 
Connection getConnection() throws SQLException{
   
Connection conn=null;
   try{
     
InitialContext ini = new InitialContext();                                                                             
     
DataSource ds = (DataSourceini.lookup(jndi);                         
     
conn ds.getConnection();                                             
    }catch(
Exception e){
      
e.printStackTrace();
      throw new 
SQLException(e.getMessage());                                  
    }
    return 
conn;
  }
  
  public static 
void closeConnection(Connection connthrows SQLException{
    try{
     if(
conn!=null && !conn.isClosed()){
       
conn.close();
     }
    }catch(
SQLException e){
      
e.printStackTrace();
    }
  }

y en cualquier aplicacion invocar esta clase por ejemplo.

Código PHP:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class 
Consulta {

    public 
Consulta(){}
    
    public 
boolean isValidCP(String postalCodethrows Exception{
        
Connection con=null;
        
PreparedStatement ps=null;
        
ResultSet rs=null;
        
boolean isValid=false;
        
        
String query="select CodigoPos from CodigosPostales where CodigoPos=?";
        
        try{
          
con=ConnectionFactory.getConnection();
          
ps=con.prepareStatement(query);
          
ps.setString(1,postalCode);
          
rs=ps.executeQuery();
          if(
rs.next()){
              
isValid=true;
          }
        }catch(
Exception e){
          throw new 
Exception("[isValid]"+e.getMessage());
        }
finally{
          if(
rs!=null){
               
rs.close();
          }if(
ps!=null){
              
ps.close();
          }
          
ConnectionFactory.closeConnection(con);
        }
        return 
isValid;
    }

Listo.

el principio de la sabiduria es el respeto y amor a Dios.