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 = (DataSource) ini.lookup(jndi);
conn = ds.getConnection();
}catch(Exception e){
e.printStackTrace();
throw new SQLException(e.getMessage());
}
return conn;
}
public static void closeConnection(Connection conn) throws 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 postalCode) throws 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.