Hibernate connection error

gufi

Mitglied
Hallo,

mein nachfolgendes Problem besteht schon ein paar Monate, doch konnt mir bisher noch keiner helfen bzw. ich selbst eine Lösung dafür finden.

Eine Java Webapp erzeugt laufend folgende Fehler die meist auftreten wenn 24 Stunden nichts passiert.

JDBCExceptionReporter.java:78 | The last packet successfully received from the server was 128.768.593 milliseconds ago. The last packet sent successfully to the server was 128.768.593 milliseconds ago. 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.

JDBCExceptionReporter.java:78 | No operations allowed after connection closed.Connection was implicitly closed by the driver.

Der Hinweis "autoReconnect=true" behebt dieses problem leider auch nicht. Konfiguriert ist eigentlich ein ConnectionPool der diese Fehler nicht erzeugen sollte aber das ich etwas falsch eingestellt bzw. etwas vergessen habe, schließ ich nicht aus.

Hier meine hibernate.cfg

Code:
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://url/db</property>
    <property name="hibernate.connection.username">user</property>
    <property name="hibernate.connection.password">pw</property>
    <property name="hibernate.connection.pool_size">20</property>
    <property name="hibernate.current_session_context_class">thread</property>
    <property name="hibernate.dbcp.initialSize">20</property>
    <property name="hibernate.dbcp.maxActive">20</property>
    <property name="hibernate.dbcp.maxIdle">20</property>
    <property name="hibernate.dbcp.minIdle">0</property>
    <property name="hibernate.dbcp.testOnBorrow">true</property>
    <property name="hibernate.dbcp.validationQuery">SELECT 1</property>
    <property name="hibernate.show_sql">false</property>

Weiß einer eine Lösung?

Danke
 

saftmeister

Nutze den Saft!
Hallo,

bitte nicht schlagen, wenn es nicht richtig ist, ich fange ebenfalls gerade erst an, mich mit Hibernate auseinander zu setzen. Es gibt eine recht lange Liste an Properties (http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html), in der mir "socketTimeout" ins Auge gefallen ist. Kannst du mal versuchen,

Code:
      <property name="hibernate.connection.socketTimeout">0</property>

zu setzen? Natürlich vorausgesetzt, du setzt den JDBC-Treiber ab Version 3.0.1 ein (steht in der Liste der Properties).
 

slowfly

Erfahrenes Mitglied
Hallo

Du musst eine "maximum idle time" setzen. Bedeutet: Eine Connection im Pool darf maximal n Sekunden lang nicht verwendet werden. Dann wird sie wieder abgebaut. Ist vor allem dann wichtig, wenn der die Applikation sich Netzübergreifend auf eine Datenbank verbindet - sofern eine Firewall dazwischen existiert und diese idle-Connections auch wirklich schliesst.

Wobei Zugriffe zu einer Datenbank, inkl. Connection Pool, eigentlich von einem Applikationsserver verwaltet werden sollten,...

Gruss
slowy
 

Neue Beiträge