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

Tomcat et TomEE Java Discussion :

JNDI sous Tomcat, class not found exception


Sujet :

Tomcat et TomEE Java

  1. #1
    En attente de confirmation mail
    Inscrit en
    Juin 2002
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 32
    Points : 29
    Points
    29
    Par défaut JNDI sous Tomcat, class not found exception
    Bonjour,
    J'essaie de recupérer une source de données avec JNDI sous tomcat 5.5.
    Tout se passe bien, jusqu'a la connection, Je recois une class not fuund exception Cannot load JDBC driver class 'com.mysql.jdbc.Driver'.

    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
     
    Context initCtx = new InitialContext();
    Context envCtx = (Context) initCtx.lookup("java:comp/env");
     
    DataSource ds = (DataSource) envCtx.lookup("jdbc/Persons");
     
    //ici je recois un class not found exception  
    // Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
    Connection con = ds.getConnection();
     
    //alors que ce bout de code marche parfaitement bien 
    //Class.forName("com.mysql.jdbc.Driver");
    //Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/person", "user", "pass");
     
    Statement st = con.createStatement();
    ResultSet res = st.executeQuery("select * from person");
    pourtant le fichier jar du driver est au bon endroit, la preuve, quand je recupère la connection de la facon habituelle, cela marche parfaitement bien.

    comprends pô...

  2. #2
    Membre du Club
    Profil pro
    xxx
    Inscrit en
    Décembre 2004
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : xxx

    Informations forums :
    Inscription : Décembre 2004
    Messages : 51
    Points : 48
    Points
    48
    Par défaut
    Bonjour,
    avez déclaré votre connexion dans le fichier server.xml ?

  3. #3
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    As tu mis le jar mysql contenant les classes java necessaire à la compilation dans le classpath de lancement de tomcat?
    Une solution a été apporté pour résoudre votre problème alors vous aussi faites en profitez les autres grâce au tag qui se trouve tout en bas de la page....

    Merci de ne pas utiliser les messages privés pour un problème sauf si je vous l'ai explicitement demandé.

    -- Maxf1 --

  4. #4
    En attente de confirmation mail
    Inscrit en
    Juin 2002
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 32
    Points : 29
    Points
    29
    Par défaut
    J'ai essayé plusieurs emplacement pour le jar du driver mysql :
    - CATALINA_HOME/server/lib
    - CATALINA_HOME/common/lib
    - CATALINA_HOME/webapp/monapp/WEB-INF/lib
    Aucun ne fonctionne... En tout cas avec JNDI

    voici l'element context que j'ai ajouté au fichier serveur.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <Context docBase="jndiTuto" path="/jndiTuto" reloadable="true" 
          		source="org.eclipse.jst.j2ee.server:jndiTuto">
     
          		<Resource name="jdbc/Persons" auth="Container" type="javax.sql.DataSource"
                   maxActive="100" maxIdle="30" maxWait="10000"
                   username="user" password="pass" driverClassName="com.mysql.jdbc.Driver"
                   url="jdbc:mysql://localhost:3306/builder"/>
     
    </Context>
    JNDI trouve bien ces infos, mais c'est à l'instantiation de la connexion que le driver n'est pas chargé.

    voici le début du message d'erreur :
    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
    org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
    	at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:766)
    	at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
    	at dbgs.jndi.JNDIServlet.doGet(JNDIServlet.java:61)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
    	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    	at java.lang.Thread.run(Unknown Source)
    Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    	at java.net.URLClassLoader$1.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.net.URLClassLoader.findClass(Unknown Source)
    	at java.lang.ClassLoader.loadClass(Unknown Source)
    	at java.lang.ClassLoader.loadClass(Unknown Source)
    	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    	at java.lang.Class.forName0(Native Method)
    	at java.lang.Class.forName(Unknown Source)
    	at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:760)
    	... 18 more

  5. #5
    Membre expérimenté Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Points : 1 639
    Points
    1 639
    Par défaut
    normalement pour les drivers jdbc c'est Tomcat_install_dir\common\lib

  6. #6
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    Normalement les 2 la devrait fonctionner :

    - CATALINA_HOME/common/lib
    - CATALINA_HOME/webapp/monapp/WEB-INF/lib

    CaTALINA_HOME EST bien défini sur le repertoire d'install de tomcat?

    En tout cas pas de probleme de nom dans ton pilote donc c'est un probleme 100% classpath selon mon diagnostic.
    Une solution a été apporté pour résoudre votre problème alors vous aussi faites en profitez les autres grâce au tag qui se trouve tout en bas de la page....

    Merci de ne pas utiliser les messages privés pour un problème sauf si je vous l'ai explicitement demandé.

    -- Maxf1 --

  7. #7
    En attente de confirmation mail
    Inscrit en
    Juin 2002
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 32
    Points : 29
    Points
    29
    Par défaut
    Oui, ca marche bien pour ce code la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Class.forName("com.mysql.jdbc.Driver");
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/person", "user", "pass");
    Mais pour celuis ci, rien a faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Context initCtx = new InitialContext();
    Context envCtx = (Context) initCtx.lookup("java:comp/env");
     
    DataSource ds = (DataSource) envCtx.lookup("jdbc/Persons");
     
    //ici je recois un class not found exception  
    // Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
    Connection con = ds.getConnection();
    On dirait que l'implementation de DataSource n'utilise pas le même class loader que tomcat...

  8. #8
    Membre expérimenté Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Points : 1 639
    Points
    1 639
    Par défaut
    essaye de te creer un datasource sans le / de jdbc/Persons.

    J utilise moi aussi jndi et je vois pas vraiment d erreur dans ce que tu as fais

    a part que pour le datsource j ecris directement java:comp/env/lenomdetonDS

  9. #9
    En attente de confirmation mail
    Inscrit en
    Juin 2002
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 32
    Points : 29
    Points
    29
    Par défaut
    J'ai essayé.
    Je resouds toujours le nom du driver, mais y a toujours pas moyens de le charger. J'ai meme extrait les fichiers du jar mysql dans le repertoire class du contexte mais ca ne change rien.
    C'est vraiment un mystere.

  10. #10
    Membre expérimenté Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Points : 1 639
    Points
    1 639
    Par défaut
    Comment tu demarre Tomcat
    depuis eclipse ? si c est le cas quel server.xml modifie-tu ?

  11. #11
    En attente de confirmation mail
    Inscrit en
    Juin 2002
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 32
    Points : 29
    Points
    29
    Par défaut
    Je démarre Tomcat depui eclipse avec le WTP.
    J'utilise le fichier server.xml construit par le wizzard au démarage du projet.

  12. #12
    Membre expérimenté Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Points : 1 639
    Points
    1 639
    Par défaut
    Sinon ma config jndi ressemble plutot a ca :
    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
     
              	<Resource auth="Container" name="dsSecurity1_1" type="javax.sql.DataSource"/> 		
    			<ResourceParams name="dsSecurity1_1">
    			  <parameter>
    			    <name>driverClassName</name>
    			    <value>oracle.jdbc.driver.OracleDriver</value>
    			  </parameter>
    			  <parameter>
    			    <name>url</name>
    			    <value>jdbc:oracle:thin:@127.0.0.1:1521:xe</value>
    			  </parameter>
    			  <parameter>
    			    <name>username</name>
    			    <value>user</value>
    			  </parameter>
    			  <parameter>
    			    <name>password</name>
    			    <value>pwd</value>
    			  </parameter>
    			  <parameter>
    			    <name>maxActive</name>
    			    <value>20</value>
    			  </parameter>
    			  <parameter>
    			    <name>maxIdle</name>
    			    <value>10</value>
    			  </parameter>
    			  <parameter>
    			    <name>maxWait</name>
     
     
     
    			    <value>-1</value>
    			  </parameter>
    			</ResourceParams>
    en utilisant un tag ressource puis un tag RessourceParams.
    Je ne sais pas si ca fait une difference mais bon tu peux essayer.

  13. #13
    En attente de confirmation mail
    Inscrit en
    Juin 2002
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 32
    Points : 29
    Points
    29
    Par défaut
    pas mieux
    Avec cette syntaxe, je ne vois meme plus le nom du driver dans le message d'erreur.
    Je pense vraiment que le problème se situe plus dans tomcat que jndi.
    Je laisse tomber. Après tout, passer des paramètre via le tag <context-param> dans web.xml marche très bien aussi. Alors finalement, je ne vois pas tellement ce qu'apporte de plus JNDI.

  14. #14
    Membre expérimenté Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Points : 1 639
    Points
    1 639
    Par défaut
    Un avantage non negligeable du jndi est de separer la base donnees de l appli.
    Si tu developpe ton appli avec mysql pour faire tes tests.
    Mais apres en production ca peut tres bien tourner sous Oracle. Au niveau de l appli tu n auras rien a configurer.
    Tu peux aussi avoir besoin d acceder a une base de donnees utilisateur qui sera differente en production.

    dans le cas de la syntaxe que je t ai passe attention l exmple donne est avec Oracle

  15. #15
    En attente de confirmation mail
    Inscrit en
    Juin 2002
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 32
    Points : 29
    Points
    29
    Par défaut
    Pour conclure, j'ai fait un essai avec tomcat 6.0 et sous cette version, tout fonctionne parfaitement... Il semble donc qu'il s'agisse d'un bug de tomcat 5.5.
    Je penche pour un problème de Class Loader au niveau du BasicDataSource de tomcat.
    Sinon la je vois pas...
    Comme je n'ai pas vraiment resolu le probleme, je ne mets pas le tag résolu.
    Merci à tous.

  16. #16
    Membre expérimenté Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Points : 1 639
    Points
    1 639
    Par défaut
    Juste pour info, j utilise Tomcat 5.0 et cela fonctionne parfaitement avec Oracle et aussi Hsqldb.
    Je n ai pas teste avec mysql malheureusement ...

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Points : 19
    Points
    19
    Par défaut Solution éventuelle.
    J'ai eu le même problème dernièrement, mais avec netbeans 6.8 et Tomcat 6.0.20. Pour moi ça venait de netbeans, un click droit sur le projet puis "résoudre un problème" de DataSource, vérifier et valider les champs. Ensuite plus d'erreurs lier au chargement du Driver. Voilà si ça peut aider.

Discussions similaires

  1. Accès à un JNDI à distance, Class not found
    Par Mhamed_dev dans le forum Wildfly/JBoss
    Réponses: 0
    Dernier message: 01/01/2011, 02h20
  2. Mapping Exception : component class not found
    Par lion13 dans le forum Hibernate
    Réponses: 2
    Dernier message: 06/05/2008, 15h30
  3. [Tomcat] Class Not Found :JasperException
    Par zlavock dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 22/01/2008, 18h59
  4. [Quartz][Tomcat] Jobs.xml file not found exception
    Par Arnaud Giuliani dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 05/08/2005, 10h20
  5. [EJB Session] class not found exception ?
    Par champion dans le forum Wildfly/JBoss
    Réponses: 4
    Dernier message: 12/02/2005, 00h46

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