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.