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 :

Appli Hibernate / web


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 213
    Par défaut Appli Hibernate / web
    bonjour,

    voila j'ai un souci!

    voila le doGet de ma 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
    29
     
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException {
     
    // on récupère les paramètres
    String nom = request.getParameter("txtNom");
     
    //on ouvre la session et on recupere les profils dont le nom est "nom"
    Session ss = HibernateUtil.currentSession();
    Transaction tx = ss.beginTransaction();
     
    Query q = ss.createQuery("from hibernate.Profil p where p.nom='"+nom+"'");
    List l=q.list();
     
    ArrayList<Profil> Profil=new ArrayList<Profil>();
    while(l.iterator().hasNext())
    {
    	candidat.add((Profil)l.iterator().next());
    }
    tx.commit();
    HibernateUtil.closeSession();
     
    //on passe le profil en parametre
    request.setAttribute("profil", profil);
     
    //redirection
    getServletContext().getRequestDispatcher(urlReponse).forward(request,response);
    return;
    }

    ma classe HibernateUtil :
    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
    package util;
     
    import org.hibernate.*;
    import org.hibernate.cfg.*;
     
    public class HibernateUtil {
     
     private static final SessionFactory sessionFactory;
     
     static 
     {
       try 
       {
    	   	// Crée la SessionFactory
    	   	sessionFactory =	 new Configuration().configure().buildSessionFactory();
       }
       		catch (HibernateException ex) 
       {
       		throw new RuntimeException("Problème de configuration : "+ ex.getMessage(), ex);
       }
     }
     
     public static final ThreadLocal session = new ThreadLocal();
     
     public static Session currentSession()throws HibernateException 
     {
       Session s = (Session) session.get();
       // Ouvre une nouvelle Session, si ce Thread n'en a aucune
       if (s == null) 
       {
    	   s = sessionFactory.openSession();
    	   session.set(s);
       }
       return s;
     }
     
     public static void closeSession()throws HibernateException 
     {
       Session s = (Session) session.get();
       session.set(null);
       if (s != null)
       s.close();
       }
     }
    mais quand je vais sur ma page que je rentre dans la servlet longlet debug d'eclipse souvre et m'indique que la ligne du lancement de l'exception "RuntimeException" de la classe HibernatUtil

    voila vous avez une solution sachant que les requetes fonctionnent

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 213
    Par défaut
    j'ai reussi a passé le cap de l'utilisation de la classe HibernateUtil!
    mais lorsque j'utilise la classe List voila ce que me donne le rapport 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
    org.hibernate.exception.GenericJDBCException: could not execute query
    	org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
    	org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
    	org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    	org.hibernate.loader.Loader.doList(Loader.java:2216)
    	org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
    	org.hibernate.loader.Loader.list(Loader.java:2099)
    	org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
    	org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
    	org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
    	org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
    	org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
    	candidat.ServletRecherche.doGet(ServletRecherche.java:113)
    	candidat.ServletRecherche.doPost(ServletRecherche.java:138)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

    a savoir que les ligne de code qui bloque dans mon doGet sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ligne 112 - Query q = ss.createQuery("from hibernate.Profil p where p.nom='"+nom+"'");
    ligne 113 - List list = q.list();
    j'enleve la recup. des infos par la classe List et la plus d'erreur mais je ppeut faire aucun traitement!

    vous auriez pas une solution?

    Merci et a bientot!

  3. #3
    Membre chevronné Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Par défaut
    Plusieurs conseils :

    La notion de session en cours est à présent gérée nativement par Hibernate, avec une stratégie pluggable ==> http://www.hibernate.org/hib_docs/v3...urrent-session

    Ensuite pour ta requête, si jamais il y a des caractères ' dans la valeur du champ nom, tu t'exposes à un bug. Utilises plutôt des paramètres nommés ==> http://www.hibernate.org/hib_docs/v3...ying-executing

    Pour la RuntimeException, peut-tu mettre la stack complète.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 213
    Par défaut
    Merci djsnipe!!

    mais les deux problemes etait deja reglé car j'ustilise maintenant une requete en dure dans createQuery

    et comme dit plus haut j'ai un probleme avec la methode list() de Query!

    j'ai fait un autre test ou je passe ma Query en attribut a une JSP!
    depuis la JSP, j'essaye d'affiché ce que je recupere!

    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
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//FR" "http://www.w3.org/TR/html4/loose.dtd">
    <%@ page import="hibernate.Profil"%>
    <%@ page import="java.util.List"%>
    <%@ page import="org.hibernate.Query;"%>
    <%
    	Query q = (Query) request.getAttribute("query");
    	String urlRetour = (String) request.getAttribute("urlRetour");
    %>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>trouver</title>
    </head>
    <body>
    <h2>les candidats trouver sont :</h2>
    <ul>
    	<%
    		List l = q.list();
    		while(l.iterator().hasNext())
    		{
    		out.println("<li>" + ((Profil)l.iterator().next()).getNom()+" "+((Profil)l.iterator().next()).getPrenom()+"</li>\n");
     
    		}
    	%>
    </ul>
    <br>
    <a href="<%= urlRetour %>">Retour au formulaire</a>
    </body>
    </html>

    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
    25: 		List l=q.list();
    26: 		while(l.iterator().hasNext())
    27: 		{
    28: 			out.println("<li>" + ((Profil)l.iterator().next()).getNom()+" "+((Profil)l.iterator().next()).getPrenom()+"</li>\n");
     
     
    Stacktrace:
    	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	candidat.ServletRecherche.doGet(ServletRecherche.java:123)
    	candidat.ServletRecherche.doPost(ServletRecherche.java:137)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
     
     
    cause mère 
     
    org.hibernate.SessionException: Session is closed!
    	org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:49)
    	org.hibernate.impl.SessionImpl.list(SessionImpl.java:1110)
    	org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
    	org.apache.jsp.trouver_candidat_jsp._jspService(trouver_candidat_jsp.java:71)
    	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	candidat.ServletRecherche.doGet(ServletRecherche.java:123)
    	candidat.ServletRecherche.doPost(ServletRecherche.java:137)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
     
     
    note La trace complète de la cause mère de cette erreur est disponible dans les fichiers journaux de Apache Tomcat/5.5.26.

  5. #5
    Membre chevronné Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Par défaut
    Un grand classique.
    Tu construis ta Query dans le cadre d'une Session de travail Hibernate, mais tu exploite le résultat après fermeture de la Session, donc trop tard.
    Pour tout un tas de raisons (MVC, Hibernate, Couplage ...) fait en sorte que ta Servlet mette en attribut de request comme dans ton exemple une liste de résultats et pas une query Hibernate.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    out.println("<li>" + ((Profil)l.iterator().next()).getNom()+" "+((Profil)l.iterator().next()).getPrenom()+"</li>\n");
    tu appelle plusieurs fois la méthode "next()", tu n'auras pas les bons noms devant les bons prénoms, sans parler de la NullPointerException en fin de parcours de l'Iterator

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 213
    Par défaut
    lol je crois avoir compris!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Session ss = HibernateUtil.currentSession();
    		Transaction tx = ss.beginTransaction();
     
    		List list = ss.createQuery("from hibernate.Utilisateur").list();
    		tx.commit();
    		HibernateUtil.closeSession();
     
    		request.setAttribute("list", list);
    		getServletContext().getRequestDispatcher(urlReponse).forward(request,
    				response);
    		return;
    ca ca marche!

    avec la jsp, comme affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    les utilisateur trouver sont :
    Homer Simpson
    Bart Simpson
    Lisa Simpson
    Joey Star
     
    Retour au formulaire

    mais si je remplace utilisateur par candidat tout plante!
    est ce du au fait que candidat est des liens avec d'autre classe?




    EDIT :
    je viens de regarder sur l'HQL editor et le Hibernate QUERY result
    quand je fait un "from hibernate.utilisateur"

    j'ai comme reponse un truc du genre : hibernate.utilisateur@212354
    mais j'ai une erreur : org.hibernate.exception.GenericJDBCException: could not execute query

    or j'ai plus de 2000 element dans ma table candidat!

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/11/2008, 19h08
  2. [Custom Tags 1.2] utiliser un tag "maison" développé en web 2.3 sur une autre appli en web 2.4?
    Par castrogne dans le forum Taglibs
    Réponses: 1
    Dernier message: 15/10/2008, 16h15
  3. appli win == web ?
    Par Monstros Velu dans le forum Général Dotnet
    Réponses: 7
    Dernier message: 06/05/2008, 01h07
  4. Réponses: 3
    Dernier message: 01/03/2007, 21h26
  5. Appli communication web
    Par cerede2000 dans le forum C++
    Réponses: 18
    Dernier message: 02/04/2006, 11h19

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