[tomcat 5][datasource][mysql] Problème avec l'exemple de base...

[tomcat 5][datasource][mysql] Problème avec l'exemple de base... - Java - Programmation

Marsh Posté le 24-08-2004 à 14:11:03    

Bonjour,
 
j'essaie d'utiliser le pool de connexion de tomcat 5, et jusqu'à maintenant c'est pas très brillant!!
 
voici mon fichier serveur.xml
 
<Context path="/essai" docBase="essai" debug="5" reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_essai_log." suffix=".txt" timestamp="true"/>
<Resource name="jdbc/essai" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/essai">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
 
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
 
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
 
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
 
<parameter>
<name>username</name>
<value>test</value>
</parameter>
 
<parameter>
<name>password</name>
<value>test</value>
</parameter>
 
<parameter>
<name>driverClassName</name>
<value>com.mysql.jdbc.Driver</value>
</parameter>
 
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/javatest</value>
</parameter>
</ResourceParams>
</Context>
 
Maintenant voici mon fichier web.xml
 
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<display-name>essai</display-name>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/essai</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<listener>
<listener-class>listeners.ContextListener</listener-class>
</listener>
<listener>
<listener-class>listeners.SessionListener</listener-class>
</listener>
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>database.test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
</web-app>
 
et maintenant ma servlet:
 
public class test extends HttpServlet {
 
private DataSource ds;
 
public void init() throws ServletException  
{
try
{
Context init = new InitialContext();
Context ctx = (Context) init.lookup("java:comp/env" );
ds = (DataSource) ctx.lookup("jdbc/essai" );
}
catch(NamingException ne)
{
throw new ServletException("problème lors du chargement du driver ",ne);
}
}
 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
{  
PrintWriter out = response.getWriter();
try
{
Connection con = ds.getConnection();
String query = "SELECT * FROM userdata";
PreparedStatement pst = con.prepareStatement(query);
ResultSet r = pst.executeQuery();
while(r.next())
{
int id = r.getInt(0);
String foo = r.getString(1);
String bar = r.getString(2);
out.println(id+"|"+foo+"|"+bar);
}
}
catch(SQLException sqle){out.println(sqle);}
}
}
 
 
Et je reçois le message d'erreur suivant:  
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
 
J'obtiens le même message d'erreur avec l'exemple d'utilisation fourni sur le site de Apache http://jakarta.apache.org/tomcat/t [...] howto.html
 
Quelqu'un peut il m'aider? Merci d'avance

Reply

Marsh Posté le 24-08-2004 à 14:11:03   

Reply

Marsh Posté le 24-08-2004 à 14:42:41    

Ton lien c'est pour Tomcat 4 et je crois que la configuration n'est pas toute à fait la même pour Tomcat 5
 
http://jakarta.apache.org/tomcat/t [...] howto.html


---------------
http://anothergeekwebsite.com
Reply

Marsh Posté le 24-08-2004 à 15:24:43    

Effectivement je ne me basais pas sur le bon exemple. J'ai fais les modifications nécessaires pour coller à la version 5 de tomcat et j'obtiens la même erreur.
L'exception est levée à l'instruction Connection con = ds.getConnection()

Reply

Marsh Posté le 24-08-2004 à 16:20:25    

ton ds doit être null non?
 
pour ma part j'aurai fais comme ça  

Code :
  1. try{
  2.         Context ctx = new InitialContext();
  3.         if(ctx == null )
  4.             throw new Exception("Boom - No Context" );
  5.         DataSource ds =
  6.               (DataSource)ctx.lookup(
  7.                  "java:comp/env/jdbc/essai" );
  8.     catch (Exception e) {...}


Message édité par Niala le 24-08-2004 à 16:21:31

---------------
http://anothergeekwebsite.com
Reply

Marsh Posté le 25-08-2004 à 09:13:29    

En fait mon ds n'est pas nul, car l'exception levé à l'instruction Connection con = ds.getConnection(); serait 'Null pointer Exception'.
 
J'ai tout de même essayé ta solution, mais j'obtiens la même levé d'exception que précedemment...
 
Pour faire avancer un peu les choses, j'utilise le driver "mysql-connector-java-3.0.14-production-bin.jar" que j'ai mis dans le repertoire common/lib de TOMCAT. De plus, je parviens à faire des accès à la base de données sans passer par le Datasource( à l'ancienne ).
 
Je crois que mon problème ne vient pas du code de la servlet mais plutôt des fichiers xml.  
 
Serveur.xml (le nouveau  ;) )

Code :
  1. <Context>
  2.    <Resource name="jdbc/essai" auth="Container" type="javax.sql.DataSource"/>
  3.    <ResourceParams name="jdbc/essai">
  4.     <parameter>
  5.      <name>username</name>
  6.      <value>javauser</value>
  7.     </parameter>
  8.     <parameter>
  9.      <name>password</name>
  10.      <value>javadude</value>
  11.     </parameter>
  12.     <parameter>
  13.      <name>driverClassName</name>
  14.      <value>org.gjt.mm.mysql.Driver</value>
  15.     </parameter>
  16.     <parameter>
  17.      <name>url</name>
  18.      <value>jdbc:mysql://localhost:3306/javatest</value>
  19.     </parameter>
  20.     <parameter>
  21.      <name>maxActive</name>
  22.      <value>8</value>
  23.     </parameter>
  24.     <parameter>
  25.      <name>maxIdle</name>
  26.      <value>4</value>
  27.     </parameter>
  28.    </ResourceParams>
  29.   </Context>


 
et web.xml
 

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app>
  3. <display-name>essai</display-name>
  4. <resource-ref>
  5.  <description>
  6.     Resource reference to a factory for java.sql.Connection
  7.     instances that may be used for talking to a particular
  8.     database that is configured in the server.xml file.
  9.   </description>
  10.  <res-ref-name>
  11.     jdbc/essai
  12.   </res-ref-name>
  13.  <res-type>
  14.     javax.sql.DataSource
  15.   </res-type>
  16.  <res-auth>
  17.     Container
  18.   </res-auth>
  19. </resource-ref>
  20. <listener>
  21.  <listener-class>listeners.ContextListener</listener-class>
  22. </listener>
  23. <listener>
  24.  <listener-class>listeners.SessionListener</listener-class>
  25. </listener>
  26. <servlet>
  27.  <servlet-name>test</servlet-name>
  28.  <servlet-class>database.test</servlet-class>
  29. </servlet>
  30. <servlet-mapping>
  31.  <servlet-name>test</servlet-name>
  32.  <url-pattern>/test</url-pattern>
  33. </servlet-mapping>
  34. </web-app>

Reply

Marsh Posté le 25-08-2004 à 14:22:15    


J'ai comparé par rapport à mes fichiers de conf, y'a rien de choquant ; j'ai juste pas le même driver mysql que toi (enfin le nom du fichier jar).
 
T'as regardé dans les logs de Tomcat si t'as qqch?

Reply

Marsh Posté le 25-08-2004 à 14:35:03    

Le pire, c'est que j'ai l'impression que ça peut venir d'une erreur bête du style jar manquant ou point virgule oublié...  :sweat:  
En tout cas pour le moment, ça prend le chemin d'un problème insoluble!!


Message édité par poussy le 26-08-2004 à 09:13:24
Reply

Marsh Posté le 26-08-2004 à 14:05:18    

Rien du côté du fichier log...

Reply

Marsh Posté le 27-08-2004 à 14:09:32    

Personne ne sait...  :sarcastic:

Reply

Marsh Posté le 27-08-2004 à 14:21:52    

je ne peux pas t'aider pour ton pbm, mais quel est l'intérêt d'utiliser le pool de connexion plutôt que le driver JDBC :??: (ce que j'ai déjà expérimenté)

Reply

Marsh Posté le 27-08-2004 à 14:21:52   

Reply

Marsh Posté le 27-08-2004 à 15:04:10    

frabill a écrit :

je ne peux pas t'aider pour ton pbm, mais quel est l'intérêt d'utiliser le pool de connexion plutôt que le driver JDBC :??: (ce que j'ai déjà expérimenté)


 
Le gros intérêt est de pouvoir gérer un grand nombre de connexions simultanées et donc une plus grosse charge.
 

Reply

Marsh Posté le 02-09-2004 à 09:03:54    

L'idéal serait que quelqu'un ayant reussi à implemeter un exemple simple puisse me dire s'il a déjà rencontré ce problème et comment il l'a résolu (d'où la raison de vivre de ce sujet  :pt1cable: )
 
Sinon connaissez vous un autre pool de connexion me permettant de faire la même chose que ce qu'est sensé faire le Datasource de Tomcat?

Reply

Marsh Posté le 03-09-2004 à 11:14:16    

Ca va finir pas se voir, que je poste régulièrement pour rester sur la première page et avoir une solution

Reply

Marsh Posté le 15-09-2004 à 09:04:23    

:bounce:

Reply

Marsh Posté le 07-03-2005 à 20:51:09    

Niala a écrit :

J'ai comparé par rapport à mes fichiers de conf, y'a rien de choquant ; j'ai juste pas le même driver mysql que toi (enfin le nom du fichier jar).
 
T'as regardé dans les logs de Tomcat si t'as qqch?


 
 
moi je tente d'utiliser l'outil PoolMan pour gérer le regroupement de connexions mais tomcat ne trouve pas mon fichier poolman.xml
 
j'ai lu des docs sur Internet qui disent que ce fichier doit se situer dans le repertoire  WEB-INF/classes mais ça ne marche toujours pas.
 
quelqu'un arait une idée
 
 
Eventuellement la configuration via le fichier server.xml m'interesse également car j'ai essayé mais ça ne marche pas non plus!
 
merci d'avance


---------------
"Rendez tout aussi simple que possible mais ne simplifierez rien" Albert Einstein
Reply

Sujets relatifs:

Leave a Replay

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