Bonjour,
je suis actuellement en stage en entreprise et je développe une application web. Mon stage se termine demain et je n'ai pas réussi à résoudre ce bug que j'essaie de résoudre depuis le mois de juin !

S'il y a des connaisseurs en Hibernate et JDBC, je ne serais pas contre quelques idées :

Le problème survient le matin, lorsque la serveur n'a pas répondu depuis longtemps à une requête. L'erreur est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
com.mysql.jdbc.CommunicationsException: The last packet successfully received from the server was52790 milliseconds ago.The last packet sent successfully to the server was 52790 milliseconds ago, which  is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
J'ai essayé le autoReconnect ou d'autres choses. Il semble qu'il y ait un timeout sur ma base de donnée MySQL et que le serveur tente d'utiliser une connexion qui n'est plus ouverte à cause de ce timeout. Je n'y connais pas grand chose en pool de connexion mais j'ai pensé que ça pourrait venir de là.
Voici mon fichier hibernate config :
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
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
		"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
        <property name="hibernate.connection.password">admin12</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3307/visualtr</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
        <property name="hibernate.c3p0.min_size">0</property>
        <property name="hibernate.c3p0.max_size">120</property>
        <property name="hibernate.c3p0.timeout">1800</property>
        <property name="hibernate.c3p0.max_statements">80</property>
        <property name="hibernate.current_session_context_class">thread</property>
        <mapping resource="com/highdeal/tests/visualtr/persistence/reports/Branch.hbm.xml" />
        <mapping resource="com/highdeal/tests/visualtr/persistence/reports/Bug.hbm.xml" />
        etc...
        </session-factory>
</hibernate-configuration>
Ensuite, j'ai augmenté la valeur du timeout de MySQL. En le mettant à une semaine, si on se sert de l'appli au moins une fois par semaine il ne devrait plus y avoir de problème quoique j'aimerais, plutot que repousser le problème, le résoudre complètement... Mais quoiqu'il en soit, maintenant, c'est une autre erreur qui se produit :
java.net.SocketException: Software caused connection abort: socket write error
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
	at java.net.SocketOutputStream.socketWrite0(Native Method)
	at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
	at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
	at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
	at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
	at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3251)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1932)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2554)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1761)
	at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1912)
	at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
	at org.hibernate.loader.Loader.getResultSet(Loader.java:1808)
	at org.hibernate.loader.Loader.doQuery(Loader.java:697)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
	at org.hibernate.loader.Loader.doList(Loader.java:2228)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)
	at org.hibernate.loader.Loader.list(Loader.java:2120)
	at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
	at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361)
	at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
	at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
	at com.highdeal.tests.visualtr.recorder.api.RepositoryHandler.loadMainRepository(RepositoryHandler.java:220)
	at com.highdeal.tests.visualtr.recorder.api.RepositoryHandler.<init>(RepositoryHandler.java:73)
	at com.highdeal.tests.visualtr.ui.Recording.<init>(Recording.java:52)
	at org.apache.jsp.recording.recording_jsp._jspService(recording_jsp.java:104)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:595)
Et quelque fois la première erreur se produit de nouveau même sans timeout comme si le pool de connexion utilisait de temps en temps des vieilles connexions qui ont plus d'une semaine. Enfin je sais pas trop comment tout ça marche, je suis complètement embrouillé. J'ai recherché partout mais je n'ai rien trouvé qui fonctionne !

Je précise également : le redémarrage du serveur Tomcat permet de ne plus avoir l'erreur. On est donc obligé de faire ça à chaque fois, tous les jours.

Autre précision, pour tester, comme il ne me reste plus que demain, que dois-je faire pour produire volontairement l'erreur ?

Toutes les solutions sont les bienvenues ! Merci !