sábado, 29 de enero de 2011

Como crear un datasource en Tomcat para una base de datos MySQL.

Para este ejemplo estoy usando Ubuntu 10.04, Tomcat 6 y tengo creada una base de datos en mysql, llamada db1, con permisos para el usuario “root”, con clave “root”

1.

Primeramente abrimos el archivo conf.xml de <CATALINA_HOME>/conf

2.

Luego agregamos las siguientes lineas dentro del contexto:

<Resource name="jdbc/conexionDB" auth="Container" type="javax.sql.DataSource"

maxActive="100" maxIdle="30" maxWait="10000"

username="root" password="root" driverClassName="com.mysql.jdbc.Driver"

url="jdbc:mysql://localhost:3306/db1"/>


3.

Copiamos el driver de MySQL a: <CATALINA_HOME>/lib



4.

Creamos un nuevo proyecto web, dentro de webapps con la siguiente estructura:

webapps

----ejemplodb

----------conexion.jsp

----------WEB-INF

---------------lib

--------------------jstl.jar

---------------------standard.jar

----------web.xml


Nota: Para esta prueba descargamos las librerias jstl.jar y standard.jar para poder hacer pruebas con Tag Lib y SQL.


5.

Modificamos web.xml para que tenga la siguiente forma:

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

version="2.4">

<description>Conexion MySQL</description>

<resource-ref>

<description>Conexion base de datos</description>

<res-ref-name>jdbc/conexionDB</res-ref-name>

<res-type>javax.sql.DataSource</res-type>

<res-auth>Container</res-auth>

</resource-ref>

</web-app>


Nota: jdbc/conexionDB es el nombre que definimos en context.xml

5.

Creamos la pagina conexion.jsp, con el siguiente codigo:

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>

<sql:query var="rs" dataSource="jdbc/conexionDB">

SELECT name,salary FROM PROFESOR

</sql:query>

<html>

<head>

<title>Ejemplo conexion a DB</title>

</head>

<body>

<h2>Results</h2>

<c:forEach var="row" items="${rs.rows}">

Nombre ${row.name}<br/>

Salario ${row.salary}<br/>

</c:forEach>

</body>

</html>



Tambien podemos crear el directorio META-INF a la altura de WEB-INF, conteniendo los archivos:
MANIFEST.MF
Con el contenido:
Manifest-Version: 1.0
Class-Path:

y el archivo: context.xml
con el contenido:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/DBTest">
<Resource name="jdbc/conexionDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/db1"/>

</Context>