IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

servlet et SGBD


Sujet :

Servlets/JSP Java

  1. #1
    Membre confirmé Avatar de r1-1024
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 138
    Par défaut servlet et SGBD
    Hello,
    De façon générale si on utilise une BD dans un servlet, doit on faire une connexion qd on a besoin de faire une requête sur la BD ou y a t il une autre méthode plus rapide par exemple avoir un pull de connexions dont la taille s'adapte au nombre de connexions utilisées ?

    Merci

  2. #2
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    Bonsoir,
    Bien que l'hiver approche, le terme approprié n'est pas pull mais pool... voici un lien vers un tutorial qui me semble a propos :
    http://christophej.developpez.com/tu...ee/pooltomcat/

  3. #3
    Membre confirmé Avatar de r1-1024
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 138
    Par défaut
    pull
    #
    pool

    Merci
    Résolu

  4. #4
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Typiquement on ne fait jamais directement une connection à une db mais on laisse le serveur s'en charger

  5. #5
    Membre confirmé Avatar de r1-1024
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 138
    Par défaut
    Typiquement on ne fait jamais directement une connection à une db mais on laisse le serveur s'en charger
    g pas compris

    Tu veux que le serveur (tomcat pas le servlet) doit se charger de Connection com=driver.connect ?
    Comment qui fait ça ?

  6. #6
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Ce que j'entends par là c'est que c'est le serveur d'application (ou avec tomcat le serveur web) qui se charge de faire la connexion et passe cette connexion à l'application.
    Sur les contrainer JEE comme JBoss, GlasshFish, JOnAS, (j'en passe) ceci se configure directement dans le container. La ressource pourra alors par la suite être injectée dans un EJB ou un Servlet.

    Avec tomcat cette configuration se fait dans /META-INF/context.xml. Ce fichier de config est une extenssion à la configuration de tomcat et permet d'adapter sa configuration à l'application déployée.

  7. #7
    Membre confirmé Avatar de r1-1024
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 138
    Par défaut
    OK ça rejoint bien l'esprit du tuto mentionné par totoche.

    J'espère que quelque soit le serveur d'application on manipule un javax.sql DataSource. Histoire d'avoir un code indépendant du conteneur.

    De façon générale est ce qu'on gère l'identification utilisateur dans la base de donnée ?
    C.a.d :
    1-On utilise getConnection qui utilise je suppose les attributs username et password du server.xml ou META-INF\context.xml (on accède donc à la base de donnée avec un utilisateur unique).

    Ou

    2-Utilise t on getConnection(String username,String password) en gérant les logins utilisateurs ?

    Tout ça pour savoir au fond si les droits d'accès aux données (dans la BD) sont généralement gérés par le servlet ou par la base de donnée.

    Visiblement facebook doit utiliser la première solution car on peut accéder à des infos supposées privées sans avoir de droits dessus.

    La solution 1 me semble dangereuse car gérer des droits d'accès n'est pas trivial et avec le context de dev ssii c chaud d'avoir qq chose de fiable. Mais elle simplifie grandement les choses.

  8. #8
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Pour la sécu on peut utiliser JAAS qui propose une gestion basique des droits

  9. #9
    Membre confirmé Avatar de r1-1024
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 138
    Par défaut
    Ce que je veux dire c'est que si on se connecte au DataSource avec un seul user pour le servlet (cf context.xml) deux utilisateurs différents (du servlet) auront forcément les mêmes droits d'accès sur la BD (celui de user dans context.xml). Je ne pense pas que JAAS puisse gérer ça. Donc la gestion des droits sera déléguée au servlet.

    Même si JAAS permet de limiter les accès sur les requêtes servlet, je ne pense pas qu'il puisse filtrer le ResultSet d'une requête SQL.

    Un petit éxemple :
    Utilisateur toto et admin.
    Admin à forcément tous les drois.
    toto ne devrait pas avoir accès à certaines valeurs de la BD.

    J'ai une table qui contient des utilisateurs. Je veux que certaines lignes ne soient accessibles que par l'admin.

    Côté servlet j'ai configuré le context pour les DataSource avec comme utilisateur unique http_myserver_database_user (c un service).

    J'ai une page qui permet de faire une recherche sur les abonnés. Je dois donc autoriser (JAAS) cette page à tout le monde.

    On imagine alors une requête : donne moi tous les noms commençant par A.

    Qd toto et admin se connectent sur cette page, leur identité n'est pas retransmise dans la requête SQL. Et donc ils ont exactement le même résultat. Ce qui ne devrait pas se produire si certains abonnés ne doivent êtres connus que de l'admin.

    J'me trompe ?

  10. #10
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Citation Envoyé par r1-1024 Voir le message
    J'me trompe ?
    Non en effet la granularité de JAAS n'est pas aussi fine

  11. #11
    Membre confirmé Avatar de r1-1024
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 138
    Par défaut
    J'imagine que de toute façon faire une base de donne contenant tous les étulisateurs en leur donnant des droits, ça rallonge énormément le temps d'exécution des requêtes.

    La solution de faire des groupes utilisateurs dans la BD n'est elle pas mieux ?

  12. #12
    Membre chevronné
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Par défaut
    Je suis pas administrateur BDD,

    mais je pense que c'est ce qu'il ya de mieux de faire 2 tables.

    la première pour les utilisateurs nom prenom identifiant ect .... + une PK qui pointe une seconde table de droit utilisateur.

    table droit_utilisateur id,droit
    1 utilisateur
    2 admin

    en terme de cout de requete ce n'est pas grand chose.
    Et derrière tu sais exactement ce que tu as qu'une seule et unique table a devoir déchiffrer

  13. #13
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    Salut,

    base de donne contenant tous les étulisateurs
    Dans ce cas tu t'éloignes de la notion de pool, pour passer a un mode d'authentification :
    http://www-igm.univ-mlv.fr/~dr/XPOSE...cat.php?rub=18

  14. #14
    Membre confirmé Avatar de r1-1024
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 138
    Par défaut
    Tu veux dire que si j'utilise un Realm (http://www.docjar.org/docs/api/org/a...ina/Realm.html) et un DataSource pour mes connexions SGBD, mes com au SGBD se feront implicitement avec le user/pwd de l'utilisateur ?

    Donc pas de pool possible alors ?

  15. #15
    Membre chevronné
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Par défaut
    Si je ne me trompe pas un pool de connexion permet de définir le nombre de connexion simultané à la base de données.

    Tu utilises toujours le même login/mdp pour te connecte à la base tu ne vas pas définir X comptes sur ta bases en spécifiant à chaque fois les droits un seul compte suffit.

    Une fois connecté via ta requete tu check les droits utilisateurs à partir des différentes tables comme je te le disais

  16. #16
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    Citation Envoyé par r1-1024 Voir le message
    Tu veux dire que si j'utilise un Realm (http://www.docjar.org/docs/api/org/a...ina/Realm.html) et un DataSource pour mes connexions SGBD, mes com au SGBD se feront implicitement avec le user/pwd de l'utilisateur ?

    Donc pas de pool possible alors ?
    Je ne sais pas si on peut faire cohabiter les deux :
    <web-app>
    Pour le pool
    <url-pattern>/*</url-pattern>

    Pour la bd
    <security-constraint>
    <display-name>Sécurité sous Tomcat</display-name>

    <web-resource-collection>
    <web-resource-name>Ressource protégée</web-resource-name>
    <url-pattern>/appli/*</url-pattern>
    </web-app>

  17. #17
    Membre confirmé Avatar de r1-1024
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 138
    Par défaut
    Ca me semble bien ça.

    J'vais tester l'ensemble mais ça va me prendre un peu de temps.

  18. #18
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Généralement, on utilise un pool de connexions comme réservoir à connexions et la notion d'authentification pour gérer le rôle de l'utilisateur connecté.

    Dans l'application, on trouvera des "request.getUserPrincipal()" et "request.isUserInRole(nomRole)" pour faire des tests et/ou masquer des éléments de pages jsp.

    Maintenant, si le SGBDR requiert un login/mot de passe spécifique pour gérer les droits, ça me semble assez contradictoire avec le pool.
    Là, autant stocker un objet Connection dans la session (http) et l'utiliser partout... mais attention à la libération des ressources
    Ou alors, utiliser un filtre pour l'acquisition de la connexion en début de request et sa libération en fin de response...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  19. #19
    Membre confirmé Avatar de r1-1024
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 138
    Par défaut
    Haaaa
    J'arrive pas à configurer le pool.
    Si ça vous dit qq chose j'obtiens : Cannot create JDBC driver of class '' for connect URL 'null'

    On dirait que tomcat n'a pas trouvé la conf du DataSource (fin c moi qui l'ai pas fait correctement).

    Alors, pour ceux qui veulent m'aider :
    -j'suis en tomcat 6 (http://tomcat.apache.org/tomcat-6.0-...ces-howto.html)
    -ma base de donnée est derby.

    Le driver JDBC est dans CATALINA_HOME/lib

    mon fichier web.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">
       <display-name>JDBC Pool</display-name>
       <description>JDBC Pool apps</description>
     
       <servlet>
         <servlet-name>jdbcPool</servlet-name>
         <servlet-class>org.JDBCPool</servlet-class>
         <description>DBC Pool servlet</description>
         <load-on-startup>1</load-on-startup>
       </servlet>
     
       <servlet-mapping>
         <servlet-name>jdbcPool</servlet-name>
         <url-pattern>/jdbcPool/*</url-pattern>
       </servlet-mapping> 
     
       <resource-ref>
          <description>reference a la ressource BDD pour le pool</description>
          <res-ref-name>jdbc/myPool</res-ref-name>
          <res-type>javax.sql.DataSource</res-type>
          <res-auth>Container</res-auth>
       </resource-ref>
    </web-app>
    mon context.xml (dans META-INF) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <?xml version="1.0" encoding="UTF-8"?>
    <Context 
    path="/jdbcpool-1.0" 
    reloadable="true" >
     
      <Resource
      maxActive="100" maxIdle="30" maxWait="10000"
      name="jdbc/myPool"
      auth="Container"
      type="javax.sql.DataSource"
      driverClassName="org.apache.derby.jdbc.ClientDriver"
      url="jdbc:derby://localhost:1527/db-pool"
      username="toto"
      password="toto2"/>
     
    </Context>
    Ma base de donnée n'est pas vide et je peux m'y connecter (c comme ça que je l'ai remplie).

    lors de l'init j'ai bien une DataSource.
    Mais lors d'une connexion DataSource.getConnection() BOUM

  20. #20
    Membre confirmé Avatar de r1-1024
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 138
    Par défaut


    Ca fonctionne impec.

    Il faut que je précise comment alors pour Tomcat6.
    On trouve dans la doc apache (http://tomcat.apache.org/tomcat-6.0-...g/context.html) qu'il est déconseillé de configurer l'appli dans serveur.xml mais dans un fichier propre à l'appli.

    Mais les conf ont un ordre de priorité. Ainsi si il existe une conf dans $CATALINA_BASE/conf/[enginename]/[hostname]/app.xml elle sera prioritaire sur META-INF/context.xml qui ne sera alors pas copié à la place du fichier existant

    Comme j'ai suivi le tuto proposé par Totoche (néanmoins indispensable : merci Totoche) qui est fait pour tomcat5, mon premier déploiement à crée la conf dans $CATALINA_BASE/conf/[enginename]/[hostname]/ et par la suite l'adaptation à tomcat6 n'a pas été prise en compte.

    Évidement en retirant ce fichier, mon appli s'est déployée correctement.

    Alors afin d'éviter que d'autres perdent leur temps comme ça, voilà un petit récapitulatif... (et pour google : Cannot create JDBC driver of class '' for connect URL 'null')

    Pool de connexions SGBD sous TOMCAT 5 :

    Lire ceci http://christophej.developpez.com/tu...ee/pooltomcat/

    Adaptation à TOMCAT 6 :

    Comme le fichier context.xml est spécifique à tomcat, je préfère ne pas le mettre dans le war (META-INF/context/xml) mais directement dans $CATALINA_BASE/conf/[enginename]/[hostname].

    Mes sources :
    • web.xml

    • context.xml

    • JDBCPool.java

    • build.xml

    • derbyclient.jar (driver JDBC à copier dans $CATALINA_BASE/lib)


    Le context.xml est copié lors du build à côté du war à déployer en portant le nom approprié.
    Ceci permet d'éviter de dupliquer l'info "nom_de_l'appli" dans le context.xml et dans le build.xml. En effet la conf étant dans $CATALINA_BASE/conf/[enginename]/[hostname]/nom_de_l'appli.xml on s'affranchit des balises path et docBase du context (on peut aussi changer les paramètres ressources plus facilement).

    web.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">
       <display-name>JDBC Pool</display-name>
       <description>JDBC Pool apps</description>
     
       <servlet>
         <servlet-name>jdbcPool</servlet-name>
         <servlet-class>org.JDBCPool</servlet-class>
         <description>DBC Pool servlet</description>
         <load-on-startup>1</load-on-startup>
       </servlet>
     
       <servlet-mapping>
         <servlet-name>jdbcPool</servlet-name>
         <url-pattern>/jdbcPool/*</url-pattern>
       </servlet-mapping> 
     
       <resource-ref>
          <description>reference a la ressource BDD pour le pool</description>
          <res-ref-name>jdbc/myPool</res-ref-name>
          <res-type>javax.sql.DataSource</res-type>
          <res-auth>Container</res-auth>
    	</resource-ref>
    </web-app>
    context.xml qui devient jdbcpool-1.0.xml lors du build et à copier dans $CATALINA_BASE/conf/Catalina/localhost pour moi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <?xml version="1.0" encoding="UTF-8"?>
    <Context  
    reloadable="true" >
      <!-- Add username="toto" and password="toto2" if data base authentification is required -->
      <Resource
      name="jdbc/myPool"
      auth="Container"
      type="javax.sql.DataSource"
      driverClassName="org.apache.derby.jdbc.ClientDriver"
      url="jdbc:derby://localhost:1527/db-pool"
      maxActive="100" 
      maxIdle="30" 
      maxWait="10000"/>
    </Context>
    JDBCPool.java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    package org;
     
    import java.io.*;
    import java.util.Enumeration;
    import java.net.URL;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import javax.sql.*;
    import javax.naming.*;
    import java.sql.*;
     
    public class JDBCPool extends HttpServlet {
    	private DataSource ds;
     
        public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException
        {
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Hello World!</title>");
            out.println("</head>");
            out.println("<body>");
     
            out.println("<h1>DataSource</h1>");
            if(ds!=null)
            	out.println("<p>"+ds.getClass().getCanonicalName()+"</p>");
            else
            	out.println("<p>null</p>");
     
            Connection com=null;
            Statement stmt=null;
            try
            {
            	com=ds.getConnection();
            	String query = "select * from restaurants";
            	stmt = com.createStatement();
            	ResultSet rs = stmt.executeQuery(query);
            	out.println("<p>");
            	while (rs.next()) 
    			{
    				out.println("-------------------------"+"<br/>");
    				out.println("id    : " + rs.getInt(1)+"<br/>");
    				out.println("name : " + rs.getString(2)+"<br/>");
    				out.println("city    : " + rs.getString(3)+"<br/>");
    			}
    			out.println("</p>");
    			rs.close();
     
            }
            catch(Throwable t)
            {
            		throw new RuntimeException(t.getMessage());
            }
            finally
            {
            	if(com!=null)
            	{
            		try{com.close();}catch(Throwable t){}
            	}
     
            	if(stmt!=null)
            	{
            		try{stmt.close();}catch(Throwable t){}
            	}	
            }
     
            out.println("</body>");
            out.println("</html>");
        }
     
        public void init() throws ServletException 
        {
    		try 
    		{
    			Context initCtx = new InitialContext();
    			Context envCtx = (Context) initCtx.lookup("java:comp/env"); 
    			ds = (DataSource) envCtx.lookup("jdbc/myPool");
    			if(ds==null)
    				throw new UnavailableException("DataSource is null");
    		} 
    		catch (Exception e) 
    		{
    			throw new UnavailableException(e.getMessage());
    		}
    	}
     
    }
    build.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    <?xml version="1.0" encoding="UTF-8"?>
    <project basedir="." default="war" name="jdbcpool">
            <property environment="env"/>
    	<property name="version" value="1.0"/>	
    	<property name="target.dir" value="target"/>
    	<property name="src.dir" value="src/main"/>
    	<property name="rsrc.dir" value="${src.dir}/rsrc"/>
    	<property name="src.java.dir" value="${src.dir}/java"/>	
    	<property name="war" value="${target.dir}/${ant.project.name}-${version}.war"/>
    	<property name="classes.dir" value="${target.dir}/classes"/>	
     
    	<property name="compiler.arg" value="-source 5"/>	
    	<property file="build.properties"/>
     
    	<target name="clean" description="Clean all build products.">
    		<delete dir="${target.dir}"/>
    	</target>
     
    	<target name="compile">
    		<mkdir dir="${classes.dir}"/>
    		<javac debug="true" deprecation="true" destdir="${classes.dir}" srcdir="${src.java.dir}">
    			<compilerarg line="${compiler.arg}"/>
    			<classpath>
    				<pathelement location="${servlet.jar}"/>
    			</classpath>
    		</javac>
    	</target>
     
    	<target name="war" depends="compile" description="war">		
    	  <war destfile="${war}" webxml="${src.dir}/web.xml">
                <classes dir="${classes.dir}"/>
                <lib dir="thirdparty/libs"/>
                <zipfileset dir="${rsrc.dir}" prefix="rsrc"/>
            </war>
            <copy file="${src.dir}/context.xml" tofile="${target.dir}/${ant.project.name}-${version}.xml"/>
    	</target>
     
    </project>
    Résultat :
    DataSource

    org.apache.tomcat.dbcp.dbcp.BasicDataSource

    -------------------------
    id : 1
    name : Irifunes
    city : San Mateo
    -------------------------
    id : 2
    name : Estradas
    city : Daly City
    -------------------------
    id : 3
    name : Prime Rib House
    city : San Francisco
    Rq : je me connecte à la BD de façon anonyme

    Merci à tous.



Discussions similaires

  1. Réponses: 87
    Dernier message: 06/07/2011, 15h33
  2. Réponses: 12
    Dernier message: 08/03/2006, 17h27
  3. [Choix] Quelles attentes par rapport aux SGBD ?
    Par thierry34 dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 13/07/2002, 20h08
  4. Réponses: 2
    Dernier message: 30/05/2002, 08h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo