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 :

org.hibernate.SessionException: Session is closed


Sujet :

Hibernate Java

  1. #1
    Membre éprouvé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Par défaut org.hibernate.SessionException: Session is closed
    Salut
    Je débute actuellement avec hibernate. J'essaye actuellement de charger un objet véhicule et voici le message d'erreur que je reçois :

    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
    og4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax).
    log4j:WARN Please initialize the log4j system properly.
    org.hibernate.SessionException: Session is closed
    	at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:131)
    	at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:49)
    	at org.hibernate.transaction.JDBCTransactionFactory.beginTransaction(JDBCTransactionFactory.java:24)
    	at org.hibernate.jdbc.JDBCContext.beginTransaction(JDBCContext.java:271)
    	at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1079)
    	at ddd.bujuman.service.parc.dao.HibernateVehiculeDAO.loadVehicule(HibernateVehiculeDAO.java:36)
    	at ddd.bujuman.service.parc.actions.ParcDAOAction.idVehicule(ParcDAOAction.java:47)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:276)
    	at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:196)
    	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
    	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
    	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
    	at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
    	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
    	at java.lang.Thread.run(Unknown Source)
    Le méthode pour charger un véhicule.

    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
    public Vehicule loadVehicule(int idVehicule) {
    		org.hibernate.Session session = HibernateDAOFactory.creerConnexion();
    		Vehicule vehicule = null;
    		Transaction tx = null;
    		try {
    			tx = session.beginTransaction();
    			vehicule = (Vehicule) session.load(Vehicule.class, idVehicule);
    			tx.commit();
    		} catch (org.hibernate.HibernateException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				HibernateUtil.closeSession();
    			} catch (org.hibernate.HibernateException e1) {
    				if (tx != null) tx.rollback();
    				e1.printStackTrace();
    			}
    		}
    		return vehicule;
    	}
    C'est après que j'ai ajouté une transaction, mais en vain.

  2. #2
    Membre chevronné
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Par défaut
    Salut,
    - le message de l'exception c'est bien celui qui est dans le titre de la discussion?
    - le code qui lance l'exception n'est pas celui que tu donnes (c'est dans HibernateVehiculeDAO.listVehicule et non loadVehicule, à moins que tu l'aie renommé ?)

  3. #3
    Membre éprouvé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Par défaut
    Citation Envoyé par Grégory Picavet
    le message de l'exception c'est bien celui qui est dans le titre de la discussion?
    J'avais mélangé, maintenant j'ai édité.

  4. #4
    Membre chevronné
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Par défaut
    quel est le code de ces méthodes :
    -HibernateDAOFactory.creerConnexion();
    -HibernateUtil.closeSession();

    tu effectues sans doute plusieurs transactions à la suite? j'imagines qu'une des méthodes précédentes comporte un bug qui fait que tu réutilises une session jdbc fermée.

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Oui le bug doit se trouver dans creerConnexion(); SI ca se trouve tu crée la connexion et la referme aussitot. Ou bien elle est mal ouverte.

    On attend le code....

  6. #6
    Membre éprouvé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Par défaut
    Je m'excuse du retard de ma réaction, j'avais des bugs dans les autres couches de mon application. Comme c'est dur J2EE !
    HibernateUtil.java
    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 class HibernateUtil {
     
    	  private static final SessionFactory sessionFactory;
     
    	  public static final ThreadLocal<Session> threadSession = new ThreadLocal<Session>();
     
    	  public static final ThreadLocal<Transaction> threadTransaction = new ThreadLocal<Transaction>();
     
    	  static {
    	    try {
    	      sessionFactory = new Configuration().configure().buildSessionFactory();
    	    } catch (Throwable ex) {
    	      System.err.println("Initial SessionFactory creation failed." + ex);
    	      throw new ExceptionInInitializerError(ex);
    	    }
    	  }
     
    	  public static Session currentSession() throws HibernateException {
    	    Session s = threadSession.get();
    	    if (s == null) {
    	      s = sessionFactory.openSession();
    	      threadSession.set(s);
    	    }
    	    return s;
    	  }
    HibernateDAOFactory.java
    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
    47
    48
     
    public class HibernateDAOFactory extends DAOFactory {
    	private static org.hibernate.Session session;
     
    	public static org.hibernate.Session creerConnexion() {
    		try {
    			session = HibernateUtil.currentSession();
    		} catch (org.hibernate.HibernateException e) {
    			e.printStackTrace();
    		}
    		return session;
    	}
     
    	@Override
    	public VehiculeDAO getVehiculeDAO() {
    		// TODO Auto-generated method stub
    		return new HibernateVehiculeDAO();
    	}
     
    }
     
     
    	  public static void closeSession() throws HibernateException {
    	    Session s = threadSession.get();
    	    threadSession.set(null);
    	    if (s != null)
    	      s.close();
    	  }
     
    	  public static void beginTransaction() {
    	    Transaction tx = threadTransaction.get();
    	    if(tx == null) {
    	      tx = currentSession().beginTransaction();
    	      threadTransaction.set(tx);
    	    }
    	  }
     
    	  public static void commitTransaction() {
    	    Transaction tx = threadTransaction.get();
    	    try {
    	      if(tx != null && !tx.wasCommitted() && !tx.wasRolledBack())
    	        tx.commit();
    	      threadTransaction.set(null);
    	    } catch(HibernateException ex) {
    	      rollbackTransaction();
    	      throw ex;
    	    }
    	  }

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 83
    Par défaut
    Bonjour,

    J'ai exactement le même probleme, je cherche, je cherche mais rien a faire j'ai toujours une session is closed

  8. #8
    Membre éprouvé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Par défaut
    Remplace
    par
    C'est ce que j'ai et ça marche pour moi.

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

Discussions similaires

  1. org.hibernate.SessionException: Session is closed!
    Par domas_24 dans le forum Persistance des données
    Réponses: 1
    Dernier message: 16/03/2012, 16h50
  2. Réponses: 4
    Dernier message: 02/03/2012, 14h11
  3. [Hibernate] Exception session is closed
    Par K-Kaï dans le forum Hibernate
    Réponses: 29
    Dernier message: 02/11/2011, 09h33
  4. [Integration] [Spring/Hibernate/JSF] Session is closed!
    Par mr1azl dans le forum Spring
    Réponses: 4
    Dernier message: 15/03/2011, 08h39
  5. Réponses: 1
    Dernier message: 09/11/2010, 15h25

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