Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
757 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Hibernate] erreur accès à la base (après un jour)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Hibernate] erreur accès à la base (après un jour)

n°1881270
cespa
Posté le 06-05-2009 à 08:49:30  profilanswer
 

(pardon de redire ce que j'ai dit sur un autre forum, mais là j'ai vraiment besoin d'aide)
 
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 :
 
(ajout : J'ai réussi à trouver ce matin 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 :( )
 
Ma requete :
 
 

Citation :

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 :
 

Citation :

public Session getCurrentSession(){
  if (sessionFactory == null) init();
  return sessionFactory.getCurrentSession();
 }


 
 
Ma config hibernate
 

Citation :

<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 :
 

Citation :

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.


Message édité par cespa le 13-05-2009 à 13:42:04
mood
Publicité
Posté le 06-05-2009 à 08:49:30  profilanswer
 

n°1884131
cespa
Posté le 13-05-2009 à 13:41:35  profilanswer
 

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 !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Hibernate] erreur accès à la base (après un jour)

 

Sujets relatifs
[ksh ou bash] Erreur avec sedAccès concurrents au disque
[SQL] Etablir un MCD des relations d'une base relationnelle[HELP]MySQL-Logiciel métier Erreur
Erreur de compilation - typedef de complexErreur de compilation à n'y rien comprendre
hsqldb et hibernate.config.xml[PHP].htaccess et erreur 403
Erreur : Call to undefined function getByte()Affichage de texte provenant d'une base de donnée avec un timer....
Plus de sujets relatifs à : [Hibernate] erreur accès à la base (après un jour)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR