Aller au contenu | Aller au menu | Aller à la recherche


Tomcat DataSource

Comment utilisé une DataSource déployé sous Tomcat 6 pour une application ?

DataSource Tomcat 6

La DataSource étant l'interface de connexion à votre base de donnée, la première chose a faire est de fournir le connecteur java jdbc adéquat. Par exemple pour MySql, placez mysql-connector-java-5.0.8-bin.jar dans de le dossier des librairies de tomcat C:\apache-tomcat-6.0.18\lib

Ensuite, il faut configurer vos fichiers de votre application nommé "ProgrammeDatasource" :

WebContent/WEB-INF/web.xml :

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>ProgrammeDatasource</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/MaDataSourceDB</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>
  <servlet>
    <description></description>
    <display-name>TestDataSource</display-name>
    <servlet-name>TestDataSource</servlet-name>
    <servlet-class>com.placeoweb.servlet.TestDataSource</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>TestDataSource</servlet-name>
    <url-pattern>/TestDataSource</url-pattern>
  </servlet-mapping>
</web-app>

WebContent/META-INF/context.xml :

<?xml version="1.0" encoding="UTF-8"?>
 
<!-- <Context path="/ProgrammeDatasource" debug="1" reloadable="true"> -->
 
<Context>
 
        <Resource name="jdbc/MaDataSourceDB"
            auth="Container"
            type="javax.sql.DataSource"
            username="utilisateurMysql"
            password="motDePasseMysql"
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost:3306/maBaseDeDonnees"
            maxActive="8"
            maxIdle="4"/>
 
</Context>

com.placeoweb.servlet.TestDataSource.java :

package com.placeoweb.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
 
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
 
/**
 * Servlet implementation class TestDataSource
 */
public class TestDataSource extends HttpServlet {
	private static final long serialVersionUID = 1L;
 
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TestDataSource() {
        super();
    }
 
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
		try {
			Context initCtx = new InitialContext();
			Context envCtx = (Context) initCtx.lookup("java:comp/env");
			DataSource ds = (DataSource) envCtx.lookup("jdbc/MaDataSourceDB");
 
			Connection conn = ds.getConnection();
//			... use this connection to access the database ...
 
			String out = "La connexion à la datasource est OK";
			System.out.println(out);
			PrintWriter printWriter = response.getWriter();
			printWriter.write(out);
 
			conn.close();
 
			return;
 
		} catch (NamingException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
 
		String out = "La connexion à la datasource est mauvaise";
		System.out.println(out);
		PrintWriter printWriter = response.getWriter();
		printWriter.write(out);
 
	}
 
}

Voilà, vous devez relancer votre serveur Apache Tomcat, publier votre programme avec Eclipse ou autre, et l'essayer sur http://localhost:8080/ProgrammeDatasource/TestDataSource

JNDI Datasource with GWT Embedded Tomcat Server

Comment monter une source de données pour Tomcat GWT (Cypal) ? C'est une bonne question dont un début de solution est proposée par codemuch.com

Ressources

  • Tomcat
  • developpez.net
    • Tutoriel : Gestion d'un pool de connexions SGBD par Tomcat 4.x
    • Tomcat 6 et JNDI sur le forum
  • benoitpiette.com
    • Déploiement Tomcat, Context.xml, Server.xml et DataSource : Pour simplifier le déploiement de l’application sur laquelle je travaille présentement, j’ai décidé de transférer l’information sur le datasource du server.xml vers le context.xml puisqu’elle est spécifique à mon application. C’est d’ailleurs ce qui est conseillé de faire. Toutefois, après l’avoir fait, l’application ne retrouve plus le datasource. Après avoir cherché longuement, j’ai trouvé ce qui n’allait pas. Il manquait une référence explicite au Datasource (resource-ref) dans le web.xml. Lorsque le datasource est défini dans server.xml, il ne semble pas nécessaire de mettre la référence dans le web.xml.
    • Configuration et context root pour les applications Web Java : Étant donné que l’on ne se rappelle jamais ou dans les fichiers de configuration se retrouve l’attribut context-root pour les applications Web en Java, voici un petit rappel : Pour les applications d’entreprises (EAR), c’est dans le fichier application.xml qui se retrouve dans le répertoire META-INF. Pour les applications Web seulement (dans un fichier WAR), la config du context-root est relative au serveur d’application. Elle ne se retouve pas dans aucun fichier spécifique au WAR. Elle est décidée lors du déploiement. Dans le cas du déploiement automatique de Tomcat, c’est le nom du répertoire de l’application qui est utilisé.

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet