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 :

[Eclipse / Tomcat7] Problème de connexion MySQL dans la servlet


Sujet :

Servlets/JSP Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Chef de projet ERP
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet ERP

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Par défaut [Eclipse / Tomcat7] Problème de connexion MySQL dans la servlet
    Bonjour,
    j'avais rencontré sur du Java EE un problème de connexion à une base MySQL à cause de la tendance à se connecter en IPv6 du jre7. J'ai résolu avec la ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     System.setProperty("java.net.preferIPv4Stack" , "true");
    avant de créer la connexion.
    Mais aujourd'hui en passant sur un projet java EE avec Tomcat 7, cela ne marche plus : la connexion à la base via une servlet gérée dans Eclipse. J'ai l'impression que cela vient de Tomcat qui se connecte en IPv6 mais je n'en suis pas sûr.
    Est-ce que quelqu'un sait comment résoudre ce problème ?
    Merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Chef de projet ERP
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet ERP

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Par défaut
    S'il faut plus de précisions pour m'aider, demandez-moi.

  3. #3
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Par défaut
    Bonjour,

    oui, je pense qu'il faut plus de précisions. Dans tous les cas, si tu n'arrives pas à te connecter sur ta base MySQL, tu auras forcément un message d'erreur ou d'avertissement soit sur ton code, soit sur les fichiers de logs de tomcat.

    Cordialement,
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  4. #4
    Membre confirmé
    Homme Profil pro
    Chef de projet ERP
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet ERP

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Par défaut
    En fait, j'aurais dû écrire les détails tout de suite, sans ça c'est clair qu'il n'y rien à comprendre.
    Mon appli JEE fonctionne avec Eclipse Juno, Java 7, TOmcat 7 et MySQL 5.5. J'ai une servlet, une vue JSP et des modèles. Mais j'ai un problème de connexion soit directement depuis la servlet soit en appelant un objet de connexion (instanciation de la classe DBConnection).

    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
    public class servphilo extends HttpServlet {
        ResultSet listeEtat;
        DBConnection conn = null;
     
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            try {
            conn=new DBConnection();
                System.out.println("création objet connexion OK");
            } catch(Exception e) {
                e.printStackTrace();
            }       
            try {
                conn.getDBConnection();
            } catch (Exception e) {
                e.printStackTrace();
            }
            this.getServletContext().getRequestDispatcher( "/WEB-INF/view.jsp" ).forward( request, response );      
        }
    }
    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
    public class DBConnection {
        Connection conn = null;
        public DBConnection () {
            //System.out.println("objet DBconnection OK");
        }
     
        public Connection getDBConnection() throws Exception{
            Class.forName("com.mysql.jdbc.Driver").newInstance();
     
            String sUserName="aaa";
            String sPwd="bbb";
            System.setProperty("java.net.preferIPv4Stack" , "true");
            conn = DriverManager.getConnection("jdbc:mysql://localhost/base",sUserName,sPwd);
            System.out.println("objet DBconnection OK");
            return conn;
        }
    }
    Depuis le navigateur l'appel de http://localhost/base renvoie bien la JSP demandée mais la console Eclipse renvoie ce message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
    The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    La ligne System.setProperty("java.net.preferIPv4Stack" , "true"); que j'avais ajoutée vient d'un ancien problème de connexion à forcer en IPv4 depuis une classe Java avec main() et qui fonctionnait bien, mais là ça plante.

    C'est le même message qu'en Java pur mais il semble qu'ici ce soit Tomcat qui se connecte en IPv6. Est-ce vraiment ça ? Comment résoudre précisément ce problème ?
    Merci

  5. #5
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Par défaut
    hmm, essaies de mettre directement l'adresse ip de la base de donnée et aussi le numéro de port de façon explicite.

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jdbc:mysql://12.34.56.789:3306/ma_base
    cela évitera le fait de devoir se baser sur un serveur dns.
    Autre chose aussi, fait un ping de ton serveur et vérifie que le port est accessible à partir de la machine où tu lances ton application.
    Déjà, si tu n'arrives pas à faire le ping et que le port n'est pas en écoute, faudrait corriger cela alors.

    Cordialement,
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  6. #6
    Membre confirmé
    Homme Profil pro
    Chef de projet ERP
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet ERP

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Par défaut
    En mettant 127.0.0.1 ou 127.0.0.1:3306 (je suis en local sur mon ordi) ça ne marche pas mieux.
    Le serveur Tomcat 7 est lancé depuis Eclipse mais quand je fais localhost:8080 dans mon navigateur, ça ne fait rien. Est-ce quecela veut dire qu'iln'est pas vraiment lancé ?
    Quand je fais un netstat -a le port 3306 apparaît en écoute (à condition d'avoir lancé MySQL via EasyPHP mais san Apache ! mais c'est logique), et le ping 127.0.0.1 fonctionne.

    Je n'y comprends rien, et je m'étonne qu'il n'y ait pas d'autres contributions, je ne dois pas être le seul à avoir ce problème quand même ?

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 196
    Par défaut
    C'est parce que lorsque tu lances ton serveur à partir d'Eclipse, par défaut il ne le lance pas à partir du répertoire d'installation de Tomcat.

    Pour remédier à cela sous eclipse tu va dans la vue Servers puis tu double-cliques sur ton serveur Tomcat et là tu verras apparaître une vue Overview.
    Dans la partie Server Locations tu cliques sur Use Tomcat installation.

    Si jamais tu ne peux pas modifier la partie Server Locations, regarde sur ce post, ils donnent la solution pour y remédier.

  8. #8
    Membre confirmé
    Homme Profil pro
    Chef de projet ERP
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet ERP

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Par défaut
    Bonjour,
    manip réussie merci, mais cela veut dire que ce n'était pas Tomcat qui tournait vraiment ? Et dans le gestionnaire de tâches je ne vois rien tourner ?
    Toujours est-il que la connexion à la base ne fonctionne pas (Caused by: java.net.ConnectException: connect: Address is invalid on local machine, or port is not valid on remote machine). Est-ce bien le bon driver (le même que celui en Java pur et JDBC MySQL) ?
    Je suis un peu perdu entre toutes ces configurations.

  9. #9
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 196
    Par défaut
    Si je ne m'abuse, quand tu lances ton serveur, tu as un processus nommé javaw.exe qui doit apparaître dans le gestionnaire des tâches.
    Lorsque tu tapes localhost:8080 dans ton navigateur et que la page d'accueil de tomcat s'affiche correctement c'est que ton serveur est bien lancé.

    Quant à la connexion avec la base, vérifie que tu as le bon driver (si tu utilise MySQL, c'est ce driver là).
    Dans ton code précédent met le numéro de port de façon explicite on sait jamais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/base",sUserName,sPwd);
    Est ce que le nom de ta base de données est bien base ?
    Vérifie également que le userName et le Password sont corrects ?

  10. #10
    Membre confirmé
    Homme Profil pro
    Chef de projet ERP
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet ERP

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Par défaut
    Bonjour,

    avec ce que tu m'avais dit de faire pour le serveur sur Eclipse, localhost:8080 fonctionne bien désormais sur mon navigateur donc Tomcat tourne.

    Pour le driver, j'utilise bien celui conseillé mysql-connector-java-5.1.23-bin.jar, je l'ai placé dans le répertoire bin de Tomcat pour qu'il soit chargé dès le lancement (j'ai bon là ?). J'ai enlevé du build path du projet sous eclipse le même driver pour éviter qu'ils ne se marchent dessus. J'ai un autre nom de base, de username et password que ceux indiqués mais là n'est pas le problème car avec une classe java et main() dedans je me connecte bien.

    Mais là j'ai toujours ce foutu message de connexion "Address is invalid on local machine, or port is not valid on remote machine" qui semble comme avant un problème d'IPv6 par défaut. Faut-il changer la config de Tomcat pour que ça marche ?

  11. #11
    Membre confirmé
    Homme Profil pro
    Chef de projet ERP
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet ERP

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Par défaut
    Qui a une autre solution à me proposer ? Je suis vraiment bloqué.
    Merci

  12. #12
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    Solution "pas propre" : désactive IPv6 sur ton PC

  13. #13
    Membre confirmé
    Homme Profil pro
    Chef de projet ERP
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet ERP

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Par défaut
    Oui, je peux faire ça, mais j'aurais préféré forcer la connexion en IPv4 (si là est bien le problème) mais ça je ne sais pas le faire avec Tomcat, il y a trop de fichiers de config.

  14. #14
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 196
    Par défaut
    Regarde ce lien, il donne une solution !

    En gros tu dois ajouter la commande suivante -Djava.net.preferIPv4Stack=true à ta variable d'environnement CATALINA_OPTS.

    En fait il faut créer le fichier setenv.bat dans le répertoire apache-tomcat-7/bin et tu mets la ligne suivante dedans :
    set "CATALINA_OPTS=-Djava.net.preferIPv4Stack=true"

    Je ne sais pas si cette solution fonctionne mais tu peux toujours essayer !

  15. #15
    Membre confirmé
    Homme Profil pro
    Chef de projet ERP
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet ERP

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Par défaut
    J'avais déjà vu ce truc là. Je viens de refaire un tour de ce que l'on peut trouver sur le sujet et c'est assez confus. Voilà ce que j'ai fait :
    - setenv.sh ET setenv.bat dans /bin de Tomcat avec la ligne pour forcer en IPv4
    - address="0.0.0.0" dans les connecteurs du fichier server.xml dans /conf
    Rien ne change, j'ai toujours l'erreur.

    Et quand au driver jdbc mysql et sa position, est-ce que c'est correct de l'avoir mis dans /lib de Tomcat uniquement ? Et dans ce cas comment j'y fais appel au lieu de le charger dans la classe Java ?

  16. #16
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 196
    Par défaut
    A priori oui, c'est le bon emplacement pour mettre le jar jdbc. Essaye de le mettre dans le classpath mais à mon avis ça ne va rien changer du tout. Je commence à sécher sur ton problème !!

  17. #17
    Membre confirmé
    Homme Profil pro
    Chef de projet ERP
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet ERP

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Par défaut
    C'est clair que ça devient insolvable. Je suis sûr que c'est un truc à la c**.
    Je suis en train de regarder les sites suivants :
    http://blog.paumard.org/cours/servle...iguration.html
    http://blog.paumard.org/cours/servle...-une-base.html

    J'ai remarqué que mes modifs dans server.xml ont été écrasées probablement lors du redémarrage ...

  18. #18
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    Je le répète : désactive TEMPORAIREMENT IPv6, pour être certain que ton problème vient bien de là et après tu avises ...

Discussions similaires

  1. Eclipse-hibernate-Problème de connexion
    Par matech dans le forum Hibernate
    Réponses: 9
    Dernier message: 14/08/2007, 11h36
  2. [PEAR][DB] PHPonTrax : problème de connexion à mysql
    Par Ttienne dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 25/10/2006, 12h40
  3. Problèmes de connexion à MySQL ?
    Par DiabloZizi dans le forum Débuter
    Réponses: 3
    Dernier message: 03/09/2006, 20h21
  4. [OLEANE] Problème de connexion MySQL
    Par Tocraz dans le forum Autres hébergeurs
    Réponses: 3
    Dernier message: 14/06/2006, 09h47
  5. [dreamweaver] problème de connexion Mysql avec dreamweaver
    Par goma771 dans le forum Dreamweaver
    Réponses: 4
    Dernier message: 30/01/2006, 14h14

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