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

Hibernate Java Discussion :

pb connexion bdd via hibernate sur tomcat


Sujet :

Hibernate Java

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2008
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 168
    Points : 103
    Points
    103
    Par défaut pb connexion bdd via hibernate sur tomcat
    bonjour.

    j'ai développé une application java (servlet, jsp, hibernate) tournant correctement sur tomcat/mysql en local.

    je voudrais installer mon application sur un serveur dédié ovh mais je galère depuis 15 jours pour accéder à ma base de données via hibernate. en revanche, cela fonctionne quand je me connecte directement dans une servlet avec un code du genre


    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
     
     
            String loginUser = "***";
            String loginPasswd = "***";
            String loginUrl = "jdbc:mysql://localhost:3306/toupil";
     
            response.setContentType("text/html");    // Response mime type
     
            // Output stream to STDOUT
            PrintWriter out = response.getWriter();
     
     
     
            // Load the mm.MySQL driver
            try
               {
                  Class.forName("com.mysql.jdbc.Driver");
                  out.println("1");
                  Connection dbcon = DriverManager.getConnection(loginUrl, loginUser, loginPasswd);
                  // Declare our statement
                  out.println("2");
                  Statement statement = dbcon.createStatement();
                  out.println("3");
                  String query = "SELECT name_de FROM toupil.department";
     
                  // Perform the query
                  ResultSet rs = statement.executeQuery(query);
                  out.println("4");
                  out.println("il y a " + rs.getRow() + " départements");
                		  out.println("<TABLE border>");
     
                  // Iterate through each row of rs
                  while (rs.next())
                  {
                      String m_name = rs.getString("name_de");
     
                      out.println("<tr>" + "<td>" + m_name + "</td>" + "</tr>");
                  }
     
                  out.println("</TABLE>");
     
                  rs.close();
                  statement.close();
                  dbcon.close();
                  out.println("aa");
                }



    pour tester plus facilement, j'ai faius une servlet toute simple qui retourne la liste des départements stockés dans ma bdd. çà fonctionne en local mais pas sur le dédié. voilà le code de la servlet :

    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
     
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
     
    		response.setContentType("text/html");
    		PrintWriter out = response.getWriter();
    		out
    				.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
    		out.println("<HTML>");
    		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
    		out.println("  <BODY>");
    		out.print("    This is ");
    		out.print(this.getClass());
    		out.println(", using the GET method<br /><br />liste des departements ");
     
    		ArrayList<Department> l = com.toupil.Classes.Department.listAllDepartments();
     
     
     
    		for (int i=1;i<l.size();i++) {
    			out.println("<br />" + l.get(i).getName_de());
    		}
     
    		out.println("  </BODY>");
    		out.println("</HTML>");
    		out.flush();
    		out.close();
    	}
    et voici l'erreur à l'appel

    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
     
    Etat HTTP 500 -
     
    type Rapport d'exception
     
    message
     
    description Le serveur a rencontr? une erreur interne () qui l'a emp?ch? de satisfaire la requ?te.
     
    exception
     
    java.lang.NullPointerException
    	com.toupil.Test.Deps.doGet(Deps.java:59)
    	javax.servlet.http.HttpServlet.service(Unknown Source)
    	javax.servlet.http.HttpServlet.service(Unknown Source)
     
    note La trace compl?te de la cause m?re de cette erreur est disponible dans les fichiers journaux de Apache Tomcat/6.0-snapshot.
    Apache Tomcat/6.0-snapshot
    la ligne 59 est "for (int i=1;i<l.size();i++) {"


    dans les logs de tomcat, j'ai

    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
     
    25 janv. 2008 13:10:27 org.apache.catalina.core.StandardWrapperValve invoke
    GRAVE: "Servlet.service()" pour la servlet Deps a g?n?r? une exception
    java.lang.NullPointerException
            at com.toupil.Test.Deps.doGet(Deps.java:59)
            at javax.servlet.http.HttpServlet.service(Unknown Source)
            at javax.servlet.http.HttpServlet.service(Unknown Source)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown Source)
            at org.apache.catalina.core.StandardWrapperValve.invoke(Unknown Source)
            at org.apache.catalina.core.StandardContextValve.invoke(Unknown Source)
            at org.apache.catalina.core.StandardHostValve.invoke(Unknown Source)
            at org.apache.catalina.valves.ErrorReportValve.invoke(Unknown Source)
            at org.apache.catalina.core.StandardEngineValve.invoke(Unknown Source)
            at org.apache.catalina.connector.CoyoteAdapter.service(Unknown Source)
            at org.apache.jk.server.JkCoyoteHandler.invoke(Unknown Source)
            at org.apache.jk.common.HandlerRequest.invoke(Unknown Source)
            at org.apache.jk.common.ChannelSocket.invoke(Unknown Source)
            at org.apache.jk.common.ChannelSocket.processConnection(Unknown Source)
            at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(Unknown Source)
            at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(Unknown Source)
            at java.lang.Thread.run(Thread.java:619)

    pour passer du local au serveur, je change juste le user et le mot de passe de mon fichier hibernate.cfg.xml et je déploie le war
    y-a-il d'autres manipulatiuons à faire ?

    merci d'avance.

  2. #2
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    visiblement ta liste l est à null, ce qui implique que hibernate n'a pas fonctionne, puisqu'une requête renvoie toujours une liste

    t'est-il possible de logger les erreurs d'hibernate ?
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2008
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 168
    Points : 103
    Points
    103
    Par défaut
    bonjour.

    merci de ton aide. il me semble que les erreurs hibernate sont dans les logs de tomcat. c'est bien mon souci avec ce problème : il n'y a aucune erreur explicite. je peux par contre de donner ma methode listAllDepartments()

    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
     
    public static ArrayList<Department> listAllDepartments() {
     
     
    		Transaction tx = null;
    		Session session = InitSessionFactory.getInstance().getCurrentSession();
     
    		ArrayList<Department> deps = null;
    		try {
    			tx = session.beginTransaction();
    			try {		
    				deps = (ArrayList<Department>) session.createQuery("FROM Department dep ORDER BY dep.id_de").list();
    				log.debug(deps.size());
    			} catch (com.toupil.Utils.Hibernate.ObjectNotFoundException e) {}
    			tx.commit();
     
    		} catch (HibernateException e) {
    			e.printStackTrace();
    			if (tx != null && tx.isActive())
    				tx.rollback();
     
    		}
     
    		return deps;
     
    	}

  4. #4
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    sans erreur on ne peut que supposer...

    déjà il est clair que ta méthode listAllDepartement ne se termine pas normalement

    je vois que tu as un log.debug, peux-tu y acceder ? si oui y'a t'il quelque chose dedans ?
    si tu peux t'en servir alors essaies de logger à chaque étape de ta methode, peut-être tu pourras y voir plus clair... je pense en particulier à l'initialisation de ta session, si une erreur arrive là tu ne verras rien

    de plus à quoi te sers ton try/catch sur l'objectnotfoundexception si tu ne loggues pas au moins l'erreur ? à moins que tu ne le fasses dans ton exception ?

    en bref hibernate a un problème sur ton serveur dédié, probablement du à un problème de configuration, mais sans erreur, on peut pas vraiment te dire ou chercher...
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  5. #5
    Membre régulier
    Inscrit en
    Janvier 2008
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 168
    Points : 103
    Points
    103
    Par défaut
    effectivement, je suis d'accord avec toi pour dire qu'il y a un problème quelque part. je ne sais pas où chercher les logs d'hibernate sur mon dédié.

    sous eclipse, ils s'affichent dans la console, mélangés avec les logs de tomcat ...

    personne a une idée où trouver les logs d'hibernate ?

    (je rappelle que la fonction ci dessous marche parfaitement quand je me connecte à ma bdd depuis ma servlet)

  6. #6
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    le truc c'est que ce n'est pas forcément un problème de connexion à ta base de données...

    pour en être sur, dans ta servlet, crées une methode ou tu initialiseras ta sessionFactory, puis une session:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    try {
        System.out.println("initialisation de la factory")
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        System.out.println("initialisation d'une session");
        Session session = sessionFactory.openSession();
        System.out.println("Fini");
    } catch (Exception ex) {
        ex.printStackTrace();
        System.out.println("erreur durant initialisation"+ex.getMessage() +"\n"+ex.getStackTrace()[0])
     
    }
    si je me souviens bien, le System.out dans tomcat est redirigé dans le fichier catalina.out, donc le log de tomcat par defaut, donc tes e.print devraient afficher quelque chose...
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  7. #7
    Membre régulier
    Inscrit en
    Janvier 2008
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 168
    Points : 103
    Points
    103
    Par défaut
    ca à l'air de fonctionner. ca me rend bien :

    This is class com.toupil.Test.Deps, using the GET method

    liste des departements initialisation de la factory initialisation d'une session Fini

    donc ca ne vient pas de la factory.

    une autre idée ?

  8. #8
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    la même chose en ajoutant après la session

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    System.out.println("Essai de la requête");
    ArrayList<Department> deps = (ArrayList<Department>)session.createQuery("FROM Department dep ORDER BY dep.id_de").list();
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  9. #9
    Membre régulier
    Inscrit en
    Janvier 2008
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 168
    Points : 103
    Points
    103
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    This is class com.toupil.Test.Deps, using the GET method
     
    liste des departements initialisation de la factory initialisation d'une session Fini Essai de la requête erreur durant initialisationCannot open connection org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)

  10. #10
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    J'ai fini par me rappeler comment avoir la totalité de la stack trace, utilises ex.printStackTrace(System.out) au lieu de System.out.println(...)

    on devrait voir la cause de l'erreur sql
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  11. #11
    Membre régulier
    Inscrit en
    Janvier 2008
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 168
    Points : 103
    Points
    103
    Par défaut
    bonsoir.

    grâce à ton instruction miracle " ex.printStackTrace(System.out);" j'ai réussi à afficher TOUTES les traces (tomcat+hibernate) ce qui m'a permis de voir que j'avais une erreur sur une clé étrangère SQL

    bizarre que l'erreur passe à la trappe lorsque je n'utilise pas hibernate car j'ai pourtant déclaré les contraintes sur les clé étrangères dans mysql !

    merci infinement à toi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [8.4] Connexion impossible via pgAdmin sur une base d'une VM
    Par niacinside dans le forum Outils
    Réponses: 3
    Dernier message: 23/04/2013, 22h53
  2. [Core] Problème de connexion à MySQL via Hibernate
    Par wadi3 dans le forum Hibernate
    Réponses: 6
    Dernier message: 16/06/2012, 16h40
  3. Problème de connexion à SQLServer avec Hibernate sur MyEclipse
    Par bihakia89 dans le forum Persistance des données
    Réponses: 2
    Dernier message: 17/04/2012, 14h58
  4. Connexion BDD sur autre pc via jdbc
    Par tentsuken dans le forum JDBC
    Réponses: 5
    Dernier message: 02/07/2009, 12h03
  5. [Hibernate]Accès aux données BDD via Hibernate
    Par LESOLEIL dans le forum Hibernate
    Réponses: 8
    Dernier message: 17/05/2005, 20h39

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