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 :

Hibernate erreur accès à la base (pas à chaque lancement) (methode Query.list())


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 8
    Par défaut Hibernate erreur accès à la base (après un jour)
    Bonjour,

    Je me permets de poster sur ce forum (pour la première fois), parce que là je suis complètement perdue, et après des heures à chercher sur google et les docs hibernate, je ne sais plus quoi faire.

    En fait voilà, j'utilise hibernate pour une appli de production. Quand je bosse en local sur mon poste, pas de problème. Quand je le met en ligne, au départ pas de problème, et puis au bout d'un moment l'appli plante au moment où je fais une requête sur la base. Ca remarche si je relance mon serveur tomcat. Et l'erreur revient au bout d'un certain temps. Du coup c'est l'horreur pour faire des tests parce que ça ne plante pas à chaque fois. Je me suis demandée si je n'utilisais pas mal la session, ou si j'avais mal configuré hibernate. Voilà mon code :

    Ma requete :


    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
    static public java.util.List loadListeFromHQL(String queryHql) throws ModeleException  {
    	try {
     
    		if (queryHql == null) {
    			maLog.warn("loadListeFromHQL() - Erreur - Appel de la méthode avec un param. queryHql à null");
    			throw new ModeleException("loadListeFromHQL() - Erreur - Appel de la méthode avec un param. queryHql à null");
    		}
     
    		// Rècupère la session attachée au thread courant ou la crée si nécessaire
    		Session hibSes = hibSesFac.getCurrentSession();							
     
    		// démarre la transaction et charge l'objet.
    		Transaction tx = hibSes.beginTransaction();	
     
    		Query q = hibSes.createQuery(queryHql);
     
    		java.util.List maList = q.list();
     
    		// On ferme la session hibernate et on relache la connexion à la base 
    		tx.commit();
     
    		return maList;
     
    	} catch (Exception ex) {
    		maLog.warn("loadListeFromHQL() - Erreur load Hibernate pour la requete " + 
    					queryHql + " - " + ex.getMessage());
    		throw new ModeleException(ex.getMessage());
    	}
    }
    Avec hibSes une classe à part, instanciée une fois, et dedans la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public Session getCurrentSession(){
    		if (sessionFactory == null) init();
    		return sessionFactory.getCurrentSession();
    	}

    Ma config hibernate

    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
    <hibernate-configuration>
    	<session-factory>
    		<!-- local connection properties -->
    		<property name="hibernate.connection.url">
    			****
    		</property>
    		<property name="hibernate.connection.driver_class">
    			com.ibm.db2.jcc.DB2Driver
    		</property>
    		<property name="hibernate.connection.username">***</property>
    		<property name="hibernate.connection.password">***</property>
     
    		<!-- dialect for DB2 -->
    		<property name="dialect">
    			org.hibernate.dialect.DB2Dialect
    		</property>
    		<property name="current_session_context_class">thread</property>
    		<property name="hibernate.show_sql">true</property>
    		<property name="hibernate.transaction.factory_class">
    			org.hibernate.transaction.JDBCTransactionFactory
    		</property>
     
    		// mes mappings
     
    	</session-factory>
    </hibernate-configuration>

    Et l'erreur quand j'appelle la fonction :

    05-05-2009|08:44:57 [WARN] (AbstractBatcher.java:closeQueryStatement:280) - exception clearing maxRows/queryTimeout
    com.ibm.db2.jcc.a.SqlException: Invalid operation: statement closed
    at com.ibm.db2.jcc.a.hd.B(hd.java:2523)
    at com.ibm.db2.jcc.a.hd.getMaxRows(hd.java:666)
    at org.hibernate.jdbc.AbstractBatcher.closeQueryStatement(AbstractBatcher.java:276)
    at org.hibernate.jdbc.AbstractBatcher.closeQueryStatement(AbstractBatcher.java:212)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1801)
    at org.hibernate.loader.Loader.doQuery(Loader.java:674)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
    at org.hibernate.loader.Loader.doList(Loader.java:2220)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
    at org.hibernate.loader.Loader.list(Loader.java:2099)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)

    ... erreur dans mes classes

    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
    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:213)
    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.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
    at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
    at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
    at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
    at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Unknown Source)
    05-05-2009|08:44:57 [WARN] (JDBCExceptionReporter.java:logExceptions:77) - SQL Error: -4499, SQLState: null
    05-05-2009|08:44:57 [ERROR] (JDBCExceptionReporter.java:logExceptions:78) - A communication error has been detected. Communication protocol being used: Reply.fill(). Communication API being used: InputStream.read(). Location where the error was detected: insufficient data. Communication function detecting the error: *. Protocol specific error codes(s) TCP/IP SOCKETS DB2ConnectionCorrelator: C0A847C1.A10C.090504144204
    05-05-2009|08:44:57 [WARN] (Log.java:log:67) - loadListeFromHQL() - Erreur load Hibernate pour la requete from appli.metier.ind.SaisieInd - could not execute query
    05-05-2009|08:44:57 [WARN] (PropertyMessageResources.java:loadLocale:352) - Resource org/apache/struts/action/ActionResources_fr_FR.properties Not Found.
    05-05-2009|08:44:57 [WARN] (PropertyMessageResources.java:loadLocale:352) - Resource org/apache/struts/action/ActionResources_fr.properties Not Found.
    05-05-2009|08:44:57 [WARN] (RequestProcessor.java:processException:512) - Unhandled Exception thrown: class appli.exception.ModeleException
    05-05-2009|08:44:57 [ERROR] (StandardWrapperValve.java:invoke:253) - "Servlet.service()" pour la servlet action a généré une exception
    appli.exception.ModeleException: could not execute query
    at appli.metier.Modele.loadListeFromHQL(Modele.java:259)

    ... dans mes classes

    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
    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:213)
    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.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
    at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
    at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
    at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
    at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Unknown Source)

    Merci pour votre aide, je suis désespérée.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 8
    Par défaut
    J'ai réussi à trouver la ligne qui lançait une exception :


    java.util.List maList = q.list();


    Mais je vois pas pourquoi ça me plante seulement plusieurs heures après la mise en ligne. C'est possible qu'une partie des données reste en cache ?

    Si quelqu'un a une petite idée, merci de m'aider, je me sens perdue

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 8
    Par défaut
    Finalement, j'ai trouvé d'où venait le problème. Au bout d'un jour d'inactivité, la connection à la base était coupée et on ne pouvait plus faire de requête. J'ai utilisé dans le fichier de config hibernate le pool de connection c3po et depuis ça marche. Si quelqu'un a le même problème que moi, j'ai télécharger la lib c3po et mis ces lignes dans ma config :

    <property name="c3p0.min_size">10</property>
    <property name="c3p0.max_size">100</property>
    <property name="c3p0.timeout">3600</property>
    <property name="c3p0.max_statements">0</property>
    <property name="c3p0.acquireRetryAttempts">30</property>
    <property name="c3p0.acquireIncrement">5</property>
    <property name="c3p0.idleConnectionTestPeriod">1800</property>
    <property name="c3p0.initialPoolSize">20</property>
    <property name="c3p0.maxPoolSize">100</property>
    <property name="c3p0.maxIdleTime">300</property>
    <property name="c3p0.minPoolSize">10</property>

    depuis, plus de problème ! Merci quand même !

Discussions similaires

  1. Erreur accès à ma base sous Windows 7 en VBS
    Par papyxy dans le forum VBScript
    Réponses: 3
    Dernier message: 07/10/2015, 16h38
  2. [VB] (débutant) erreur accès base de registre
    Par bandit boy dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/02/2006, 13h15
  3. [hibernate] Probleme acces a ma base SQL
    Par parker180 dans le forum Hibernate
    Réponses: 3
    Dernier message: 19/02/2006, 17h09
  4. []Erreur d'accès à la Base de registres
    Par oulai_evado dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/12/2005, 13h59
  5. [TestStand] Erreur lors d'un accès à une Base de données
    Par capblans dans le forum Autres langages
    Réponses: 1
    Dernier message: 20/07/2005, 10h29

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