A veces entregamos una aplicación la cual contiene la información de la conexión a la base de datos dentro de una clase, en caso de que esta aplicación sea WEB la lectura de un archivo nos complica más las cosas.
Para esto es posible dejar a Apache Tomcat administrar la conexión y que nuestra aplicación sea independiente de los datos de conexión e incluso del motor de la base de datos.
A esto se le puede llamar, Datasource en el contexto de Tomcat, esto reemplaza crear un método que nos retorne una instancia de Connection del paquete sql y nos independiza de la configuración, es este caso lo presentare para ser configurado con MS Sql Server 2008.
El procedimiento es el siguiente:
1.- Asegurate de que SQL Server sea accesible desde una red, que su identificación sea mixta, inicio de windows y datos (usuario y contraseña).
2.- Tener los driver de JDBC de SQL Server (sqljdbc4.jar) y por si acaso (log4j-1.2.15.jar) o superior, estos archivos deben ser copiados a la carpeta /lib del directorio de Tomcat.
3.- Modificar o crear el archivo context.xml que esta en conf de Tomcat.
<?xml version="1.0" encoding="UTF-8"?>
<context >
<Resource name="jdbc/SqlServerTest" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="USUARIO" password="CONTRASEÑA" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;databaseName=NOMBRE_DB" />
</context>
encaso de ocurrir errores al final de todos estos pasos o estar ejecutando la aplicación desde Eclipse sera necesario creer el archivo context.xml en nuestroProyecto\WebContent\META-INF\
4.- Modificar el archivo web.xml en conf de Tomcat agregar lo siguiente justo antes de cerrar la equiqueta </web-app>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/SqlServerTest </res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
5.- Implementar esto en JAVA.
[java]
import java.io.File;
import java.net.InetAddress;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
/**
* @author Pedro Carrasco
*/
public class Conexion {
private static Connection getContextConnection(){
Context ctx;
try {
ctx = new InitialContext();
Context envctx = (Context) ctx.lookup("java:comp/env");
DataSource ds = (DataSource) envctx.lookup("jdbc/SqlServerTest");
Connection conn = ds.getConnection();
return conn;
} catch (NamingException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
Connection connetion = getContextConnection();
if( connetion != null ){
System.out.println("Funciona !!!");
}
}
}
[/java]
6.- Probar, una vez configurado los datos en los archivos xml y la clase Conexion.java compilada, esta debiera decir "Funciona!!!"
Comentarios