[tomcat5] DataSource

DataSource [tomcat5] - Java - Programmation

Marsh Posté le 12-03-2004 à 10:54:29    

Bonjour,
J'ai crée une datasource (avec test comme jndiname )depuis la page d'admin de tomcat.
Je voudrais l'utiliser avec la lib dbutils mais j'ai un message d'erreur :

Citation :

exception
 
javax.servlet.ServletException: javax.naming.NameNotFoundException: Le Nom test n'est pas lié à ce Contexte
 org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:867)
 org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:800)
 org.apache.jsp.index_jsp._jspService(index_jsp.java:206)
 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
 
cause mère
 
javax.servlet.jsp.JspTagException: javax.naming.NameNotFoundException: Le Nom test n'est pas lié à ce Contexte
 org.apache.taglibs.dbtags.connection.ConnectionTag.doEndTag(ConnectionTag.java:167)
 org.apache.jsp.index_jsp._jspService(index_jsp.java:110)
 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
 


 
et voici mon code de connexion dans mon fichier jsp:

Citation :

<sql:connection id="conn1">
  <sql:jndiName>java:/test</sql:jndiName>
</sql:connection>


 
Est ce qu'il faut aussi modifier mon web.xml ? Faut-il encore ajouter des lib pour utiliser ma datasource ?
 
Merci pour votre aide.
 
++

Reply

Marsh Posté le 12-03-2004 à 10:54:29   

Reply

Marsh Posté le 12-03-2004 à 11:28:09    

Tu dois modifier ton fichier web.xml pour y déclarer ton objet datasource. (cf How To de Tomcat). Dans ton code de JSP, tu appelles la datasource java:/test alors qu'elle n'est déclarée nulle part.  
 
C'est pas un truc que je masterise mais il faut globalement:
 
1. Déclarer la datasource via JNDI dans le fichier web.xml
2. T'assurer que ton driver JDBC est dans ton classpath
3. Appeler ta datasource dans ta JSP comme tu le fais en t'assurant que le nom JNDI que tu lui as affecté est correct. je suis pas sûr que java:/test soit correct mais je peux me tromper

Reply

Marsh Posté le 12-03-2004 à 11:31:41    

Salut,
entre temps, j'ai ajouté ca à mon web.xml
<resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/test</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>
 
Mais je en suis pas sur du dernier parametre.
 
Sans utiliser ce pool de connexion (en déclarant ma connexion dans mon fichier jsp), mes requetes fonctionnent bien.
 
Pour la syntaxe,java:/test, c'est ce que j'ai lu mais je ne suis pas sur aussi.
 
Merci pour vos précisions.
 
++

Reply

Marsh Posté le 12-03-2004 à 11:56:05    

D'après la doc de Tomcat, dans ton fichier server.xml tu dois ajouter un code semblable à celui-là:
 

Code :
  1. <Context ...>
  2.   ...
  3.   <Resource name="jdbc/EmployeeDB" auth="Container"
  4.             type="javax.sql.DataSource"/>
  5.   <ResourceParams name="jdbc/EmployeeDB">
  6.     <parameter>
  7.       <name>username</name>
  8.       <value>dbusername</value>
  9.     </parameter>
  10.     <parameter>
  11.       <name>password</name>
  12.       <value>dbpassword</value>
  13.     </parameter>
  14.     <parameter>
  15.       <name>driverClassName</name>
  16.       <value>org.hsql.jdbcDriver</value>
  17.     </parameter>
  18.     <parameter>
  19.       <name>url</name>
  20.       <value>jdbc:HypersonicSQL:database</value>
  21.     </parameter>
  22.     <parameter>
  23.       <name>maxActive</name>
  24.       <value>8</value>
  25.     </parameter>
  26.     <parameter>
  27.       <name>maxIdle</name>
  28.       <value>4</value>
  29.     </parameter>
  30.   </ResourceParams>
  31.   ...
  32. </Context>


 
Car avec ta balise <resource-ref>, tu déclares que tu vas utiliser une datasource référencée sous le nom jdbc/test mais le paramétrage de cette datasource se fait dans le fichier server.xml

Reply

Marsh Posté le 12-03-2004 à 12:33:05    

machinbidule1974 a écrit :

D'après la doc de Tomcat, dans ton fichier server.xml tu dois ajouter un code semblable à celui-là:
 

Code :
  1. <Context ...>
  2.   ...
  3.   <Resource name="jdbc/EmployeeDB" auth="Container"
  4.             type="javax.sql.DataSource"/>
  5.   <ResourceParams name="jdbc/EmployeeDB">
  6.     <parameter>
  7.       <name>username</name>
  8.       <value>dbusername</value>
  9.     </parameter>
  10.     <parameter>
  11.       <name>password</name>
  12.       <value>dbpassword</value>
  13.     </parameter>
  14.     <parameter>
  15.       <name>driverClassName</name>
  16.       <value>org.hsql.jdbcDriver</value>
  17.     </parameter>
  18.     <parameter>
  19.       <name>url</name>
  20.       <value>jdbc:HypersonicSQL:database</value>
  21.     </parameter>
  22.     <parameter>
  23.       <name>maxActive</name>
  24.       <value>8</value>
  25.     </parameter>
  26.     <parameter>
  27.       <name>maxIdle</name>
  28.       <value>4</value>
  29.     </parameter>
  30.   </ResourceParams>
  31.   ...
  32. </Context>


 
Car avec ta balise <resource-ref>, tu déclares que tu vas utiliser une datasource référencée sous le nom jdbc/test mais le paramétrage de cette datasource se fait dans le fichier server.xml


 
En utilisant l'interface d'admin de tomcat, le fichier server.xml se configure automatiquement et voici le miens (enfin, une partie...)

Citation :

<ResourceParams name="conn1">
      <parameter>
        <name>maxWait</name>
        <value>5000</value>
      </parameter>
      <parameter>
        <name>maxActive</name>
        <value>10</value>
      </parameter>
      <parameter>
        <name>password</name>
        <value></value>
      </parameter>
      <parameter>
        <name>url</name>
        <value>jdbc:mysql://localhost/test&quot;</value>
      </parameter>
      <parameter>
        <name>driverClassName</name>
        <value>org.gjt.mm.mysql.Driver</value>
      </parameter>
      <parameter>
        <name>maxIdle</name>
        <value>5</value>
      </parameter>
      <parameter>
        <name>username</name>
        <value>root</value>
      </parameter>
    </ResourceParams>


 
Voilà, j'espère que ces infos pourront vous aider à m'aider.
 
Merci
++

Reply

Marsh Posté le 12-03-2004 à 12:43:38    

je vais le modifier pour le mettre comme le tiens...

Reply

Marsh Posté le 12-03-2004 à 12:43:58    

Essaie avec la combinaison de fichiers suivante:
 

Code :
  1. web.xml
  2. <resource-ref>
  3.      <description>DB Connection</description>
  4.      <res-ref-name>conn1</res-ref-name>
  5.      <res-type>javax.sql.DataSource</res-type>
  6.      <res-auth>Container</res-auth>
  7. </resource-ref>


 

Code :
  1. server.xml
  2. <ResourceParams name="conn1">
  3.      <parameter>
  4.        <name>maxWait</name>
  5.        <value>5000</value>
  6.      </parameter>
  7.      <parameter>
  8.        <name>maxActive</name>
  9.        <value>10</value>
  10.      </parameter>
  11.      <parameter>
  12.        <name>password</name>
  13.        <value></value>
  14.      </parameter>
  15.      <parameter>
  16.        <name>url</name>
  17.        <value>jdbc:mysql://localhost/test&quot;</value>
  18.      </parameter>
  19.      <parameter>
  20.        <name>driverClassName</name>
  21.        <value>org.gjt.mm.mysql.Driver</value>
  22.      </parameter>
  23.      <parameter>
  24.        <name>maxIdle</name>
  25.        <value>5</value>
  26.      </parameter>
  27.      <parameter>
  28.        <name>username</name>
  29.        <value>root</value>
  30.      </parameter>
  31.    </ResourceParams>
  32. Que fait ton &quot; dans la valeur du paramètre url ???


Message édité par machinbidule1974 le 12-03-2004 à 12:44:43
Reply

Marsh Posté le 12-03-2004 à 13:21:49    

j'en ai vraiment marre !!! je désespère !!!
 
J'ai exactement mis ce que tu m'as donné avec en plus dans mon fichier jsp :
[quote][<sql:connection id="conn1">
  <sql:jndiName>java:/conn1</sql:jndiName>
</sql:connection>/quote]
 
et comme ca ne marchait pas :
[quote][<sql:connection id="conn1">
  <sql:jndiName>java:/test</sql:jndiName>
</sql:connection>/quote]
 
Je en sais vraiment plus quoi faire :(
 
++

Reply

Marsh Posté le 12-03-2004 à 14:09:19    

est-ce-que tu peux me poster tes fichiers web.xml et server.xml ainsi que le code de ta JSP ?

Reply

Marsh Posté le 12-03-2004 à 14:16:31    

salut et merci,
Voilà le web.xml

Citation :

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app     PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
 
<web-app>
  <display-name>Le serveur de test de ohan</display-name>
  <description>
     Bienvenue sur le serveur de test de ohan
  </description>
 
 
<!-- JSPC servlet mappings start -->
<taglib>
  <taglib-uri>http://jakarta.apache.org/taglibs/dbtags</taglib-uri>
  <taglib-location>/WEB-INF/dbtags.tld</taglib-location>
</taglib>
 
<resource-ref>  
       <description>DB Connection</description>  
       <res-ref-name>conn1</res-ref-name>  
       <res-type>javax.sql.DataSource</res-type>  
       <res-auth>Container</res-auth>  
</resource-ref>
 
<!-- JSPC servlet mappings end -->
 
</web-app>


 
Voilà le fichier jsp

Citation :

<%@ taglib uri="http://jakarta.apache.org/taglibs/dbtags" prefix="sql" %>
 
 
 
<%-- open a database query --%>
<table>
<sql:connection id="conn">
  <sql:jndiName>conn1</sql:jndiName>
</sql:connection>
  <sql:statement id="stmt1" conn="conn">  
  <sql:query>
    select id,nom from test
  </sql:query>
  <%-- loop through the rows of your query --%>
  <sql:resultSet id="rset2">
    <tr>
      <td><sql:getColumn position="1"/></td>
      <td><sql:getColumn position="2"/></td>
          <sql:wasNull>[no description]</sql:wasNull></td>
    </tr>
  </sql:resultSet>
</sql:statement>
</table>
 
<%-- close a database connection --%>
<sql:closeConnection conn="conn"/>


 
et voici le server.xml

Citation :


<ResourceParams name="conn1">  
       <parameter>  
         <name>maxWait</name>  
         <value>5000</value>  
       </parameter>  
       <parameter>  
         <name>maxActive</name>  
         <value>10</value>  
       </parameter>  
       <parameter>  
         <name>password</name>  
         <value></value>  
       </parameter>  
       <parameter>  
         <name>url</name>  
         <value>jdbc:mysql://localhost/test</value>  
       </parameter>  
       <parameter>  
         <name>driverClassName</name>  
         <value>org.gjt.mm.mysql.Driver</value>  
       </parameter>  
       <parameter>  
         <name>maxIdle</name>  
         <value>5</value>  
       </parameter>  
       <parameter>  
         <name>username</name>  
         <value>root</value>  
       </parameter>  
     </ResourceParams>  


Il n'est pas en entier  car trop trop grand !
 
Merci encore
++

Reply

Marsh Posté le 12-03-2004 à 14:16:31   

Reply

Marsh Posté le 12-03-2004 à 14:37:19    

L'erreur générée avec ces fichiers c'est bien "javax.servlet.ServletException: javax.naming.NameNotFoundException: Le Nom conn1 n'est pas lié à ce Contexte" ?

Reply

Marsh Posté le 12-03-2004 à 14:41:36    

oui, c'est bien ca!

Reply

Marsh Posté le 12-03-2004 à 14:51:00    

Est-ce-que ton fichier server.xml contient bien une ligne comme ceci:
 
<Resource name="conn1" auth="Container"
            type="javax.sql.DataSource"/>
 
avant <ResourceParams name="conn1">    
...
 
?

Reply

Marsh Posté le 12-03-2004 à 15:09:25    

oui
j'ai essaye de mettre aussi name="jdbc/conn1"

Reply

Marsh Posté le 12-03-2004 à 15:21:31    

Ben je vois pas :/ Tout semble correct. Suggestion stupide mais si tu remplaces "conn1" par un truc du type "jdbc/conn1" (partout) ? T'as aucune erreur dans la log de ton serveur Tomcat au lancement ?


Message édité par machinbidule1974 le 12-03-2004 à 15:24:50
Reply

Marsh Posté le 15-03-2004 à 11:21:24    

Dans ton server.xml, as tu réellement une entrée nommée "Context" ?  
Ensuite, assures toi que ton driver JDBC est bien présent dans le répertoire $TOMCAT_HOME/common/lib.
Tomcat est assez capricieux avec les DataSources :-)

Reply

Marsh Posté le 15-03-2004 à 12:35:13    

salut,  
dans ma balise context, je n'ai pas d'attribut, en faut-il ?
 
 
Merci
++

Reply

Marsh Posté le 15-03-2004 à 16:57:27    

oui regarde du coté de la fac tomcat
 
dans google : jakarta howto datasource
ils te donnent un exemple de la modification de server.xml et web.Xml
perso j'ai laché l'affaire pour l'instant sous tomcat 5 mais sous tomcat 4.1 ca fonctionne :)

Reply

Marsh Posté le 16-03-2004 à 14:00:21    

Oui, il faut que ta balise contexte soit remplie.
Elle doit contenir des infos globales relatives à ta web-app, et à l'intérieur, tu y inclues toutes les informations concernant ta datasource.
 
-- Mike

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed