Tomcat, Hibernate, MySQL und die EOFException

Status
Nicht offen für weitere Antworten.

Mr_Blonde

Mitglied
Servus,

ich habe bei mir das klassische Problem. Ich benutze Hibernate, MySQL und einen beliebigen Connection Pool (C3P0, DBCP). Anfänglich funktioniert alles wunderbar, doch noch einer Weile inaktivität (> 12h) funktioniert kein Datenbankzugriff mehr.

Hier ist die Fehlermeldung:
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.io.EOFException

STACKTRACE:

java.io.EOFException
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1963)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2375)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2874)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1623)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1715)
[...]

Das Problem wird ja oft in Foren angesprochen, doch nirgends finde ich eine Lösung, welche bei mir funktioniert. Ab und zu wird zwar geschrieben, dass es mit dieser oder jener Einstellung funktionieren soll, aber alles Ausprobierte brachte mich nicht weiter. Teilweise sind auch die Ratschläge in unterschiedlichen Foren/Mailinglisten wiedersprüchlich.

Meine Frage daher: Hat jemand eine Hibernate Config, die funktioniert? Hat eventuell schonmal jemand ein ähnliches Problem gelöst?

Bin für jeden Hinweis dankbar.

Hier ist meine momentane Hibernate Config:
Code:
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.password">XYZ</property>
        <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1/k2?useUnicode=true&connectionCollation=utf8_general_ci&characterSetResults=utf8</property>
        <property name="hibernate.connection.username">XYZ</property>
	<property name="hibernate.connection.is-connection-validation-required">true</property>
		
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.current_session_context_class">thread</property>

		
		<property name="hibernate.dbcp.maxActive">100</property>
		<property name="hibernate.dbcp.whenExhaustedAction">1</property>
		<property name="hibernate.dbcp.maxWait">20000</property>
		<property name="hibernate.dbcp.maxIdle">10</property>
		
		
		<property name="hibernate.dbcp.ps.maxActive">100</property>
		<property name="hibernate.dbcp.ps.whenExhaustedAction">1</property>
		<property name="hibernate.dbcp.ps.maxWait">120000</property>
		<property name="hibernate.dbcp.ps.maxIdle">100</property>
		
		
		<property name="hibernate.dbcp.validationQuery">select 1 from hibernate_unique_key</property>
		<property name="hibernate.dbcp.testOnBorrow">true</property>
		<property name="hibernate.dbcp.testOnReturn">true</property> 

   
        
      

      [..]

    </session-factory>
</hibernate-configuration>

Benutzte Versionen:
Tomcat: 6.0.10.0
Hibernate: 3.2.2
MySQL: 5.0.32
JVM Version: 1.5.0_10-b03


Schönes Wochenende noch!
 
N

nero30

Gast
schliesse mich an, hab genau das selbe Problem allerdings mit Toplink und Java 1.6.0. Der Fehler passiert bei update-Statements.
 

KSG9|sebastian

Top Contributor
Das ist doch nicht der komplette Stacktrace?! Zeig mal den Rest her..
Und bitte das Codesnippet bei dem die Exception auftritt.

gruß sebastian
 
N

nero30

Gast
ich mische mich nochmal ein ;)
bei mir sieht das so aus:

Code:
[TopLink Warning]: 2007.05.10 06:17:16.293--ClientSession(12964119)--Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0 (Build b44-beta3 (04/25/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.io.EOFException

STACKTRACE:

java.io.EOFException
        at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1963)
        at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2375)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2874)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1623)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1715)
        at com.mysql.jdbc.Connection.execSQL(Connection.java:3243)
        at com.mysql.jdbc.Connection.setAutoCommit(Connection.java:5371)
        at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.basicBeginTransaction(DatabaseAccessor.java:159)
        at oracle.toplink.essentials.internal.databaseaccess.DatasourceAccessor.beginTransaction(DatasourceAccessor.java:144)
        at oracle.toplink.essentials.internal.sessions.AbstractSession.basicBeginTransaction(AbstractSession.java:283)
        at oracle.toplink.essentials.threetier.ClientSession.basicBeginTransaction(ClientSession.java:123)
        at oracle.toplink.essentials.internal.sessions.AbstractSession.beginTransaction(AbstractSession.java:378)
        at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.beginTransaction(UnitOfWorkImpl.java:419)
        at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.beginEarlyTransaction(UnitOfWorkImpl.java:409)
        at oracle.toplink.essentials.queryframework.DataModifyQuery.executeDatabaseQuery(DataModifyQuery.java:67)
        at oracle.toplink.essentials.queryframework.DatabaseQuery.execute(DatabaseQuery.java:613)
        at oracle.toplink.essentials.queryframework.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:540)
        at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2219)
        at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:937)
        at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:909)
        at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.executeUpdate(EJBQueryImpl.java:372)
        at business.COnlineshop.updateProductsQuantities(COnlineshop.java:174)
        at business.CTransferObjectsAssembler.updateProductsQuantities(CTransferObjectsAssembler.java:171)
        at rmi.CRemoteService.updatesProductsQuantities(CRemoteService.java:71)
        at sun.reflect.GeneratedMethodAccessor20.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
        at sun.rmi.transport.Transport$1.run(Transport.java:159)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
        at java.lang.Thread.run(Thread.java:619)


** END NESTED EXCEPTION **



Last packet sent to the server was 62 ms ago.
Error Code: 0


eine der Funktionen in der das passiert macht eigentlich nur das:

Code:
EntityManager em=emf.createEntityManager();
.
.
.
Query q = em.createNativeQuery("update products set products_quantity=?1 where products_model=?2");
q.setParameter(1,menge);
q.setParameter(2,artikelnr);
            
em.getTransaction().begin();
int erg=q.executeUpdate();
em.getTransaction().commit();

ist der Fehler einmal passiert, funktionieren keine Update-Queries mehr, es gibt dann immer diese Exception, selects funktionieren weiterhin (benötigen auch keine Transaktionen).
 

Mr_Blonde

Mitglied
Die ganze Ausgabe ist etwas viel um hier gepostet zu werden. Ich habe den kompletten Trace hier hochgeladen (html)

Stack trace

Das Problem tritt bei jedem Datenbank-Zugriff auf. Allerdings nur nach einer längeren Zeit von Inaktivität.
Hier ist ein Codestück, bei dem das Problem z.B. auftritt:

Code:
	public List<Trip> getAllTrips() {
		List<Trip> tripList = new ArrayList<Trip>();
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		
		// sort trips by trip start date
		Query q = session.createQuery("FROM Trip t ORDER BY t.startDate ASC");
		
		// get the list
		tripList = q.list();
		
		return tripList;
	}

Dies ist die Klasse HibernateUtil:

Code:
public class HibernateUtil {

    private static final SessionFactory sessionFactory;

    static {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            sessionFactory = new Configuration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

}
 

ptriller

Mitglied
Ich würde an deiner stelle mal überprüfen ob hibernate tatsächlich die query an den server schickt. Falls du zugriff auf die mysql datenbank hast würde ich da mal in den logs nachsehen. oder wenn man es etwas technischer will, den network traffic angucken
 

KSG9|sebastian

Top Contributor
Autoreconnect angeschalten? Verwendung von ner Datasource? Würd ich dir empfehlen...

Ich kenn das Problem aus folgendem Context:

- Hibernate baut Verbindung auf
- Anwendung läuft
- 20Uhr, die Anwendung wird nichtmehr benutzt, Hibernate hält sich die Verbindung
- MySQL killt die Verbindung zwecks inaktivität
- Morgens 8Uhr kommt ne Exception weil die Verbindung "gekillt" wurde

Datasource verwenden, MySQL umkonfigurieren oder alle Stunde einen DB-Zugriff mit Hibernate simulieren
 
N

nero30

Gast
falls es noch jemanden interessiert, hab die Lösung für meine Version des Problems gefunden.
Es liegt an dem mysql-Server und zwar an der Variable wait_timeout. Sie ist standardmässig auf 28800 Minuten
also 8 Stunden eingestellt. Deswegen kam die Exception bei mir immer morgens, wenn meine Anwendung die ganze
Nacht nicht auf die DB zugegriffen hatte. Setzen der Variable auf einen höheren Wert hat das Problem beseitig.

Gruß
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Speicher-Problem bei WebApp unter Tomcat, Struts, Hibernate Allgemeines EE 3
S Hibernate, Tomcat und Eclipse treiben mich zum Wahnsinn. Allgemeines EE 2
S Tomcat Application Path bestimmen Allgemeines EE 0
TheWhiteShadow JSF plugins für tomcat webapp Allgemeines EE 0
X Tomcat checkParachute Allgemeines EE 3
C Servlet Tomcat/Jersey findet REST-Service nicht Allgemeines EE 3
J Global JNDI Tomcat Allgemeines EE 0
N WebService WAR-File auf Tomcat-Server Allgemeines EE 1
C WebSocket in Tomcat wirft 404 Allgemeines EE 0
S Eclipse mit Tomcat und Jersey Allgemeines EE 7
S Fehlersuche in Eclipse/Tomcat -> Error-log?? Allgemeines EE 2
S Tomcat und 404 -> von jetzt auf gleich Allgemeines EE 4
L JNDI auf Tomcat mit EE Allgemeines EE 4
E Servlet Tomcat Method Signature Resolution Allgemeines EE 7
J Logging und Monitoring unter Tomcat Allgemeines EE 2
aze Tomcat:Error Pages werden nicht angezeigt Allgemeines EE 4
D JSF JSF 2.0 + ICEFaces + Tomcat 7 Allgemeines EE 3
R Sessionmanagement und Tomcat Allgemeines EE 6
W Tomcat Support mit SLA? Allgemeines EE 3
P Tomcat lädt falsche Datei obwohl richtig angegeben Allgemeines EE 11
N Tomcat funktioniert nach shutdown/startup nicht mehr korrekt Allgemeines EE 9
B Tomcat, JNDI und datasource - Konfiguartion Allgemeines EE 2
JimPanse Tomcat Fehler nach redeploy Allgemeines EE 5
A Java Tomcat findet Website nicht Allgemeines EE 8
S Anfängerfrage Eclipse/Tomcat Allgemeines EE 4
H Installer für Tomcat-Anwendung Allgemeines EE 5
A Tomcat in Eclipse Allgemeines EE 11
T Tomcat: Sessions bleiben zu lange erhalten Allgemeines EE 13
C Tomcat Zugriff auf lokale Dateien Allgemeines EE 2
A Tomcat, Exceptions beim redeploy Allgemeines EE 4
P Hilfe: Tomcat periodischer Absturz Allgemeines EE 5
MQue Tomcat reload Allgemeines EE 4
neurox Tomcat stoppen Allgemeines EE 1
S Unterschied zwischen Tomcat und Application Server? Allgemeines EE 3
MQue Tomcat PermGen Allgemeines EE 7
MQue Tomcat Methodenaufruf Allgemeines EE 3
P Eclipse Tomcat Plugin funktioniert nicht mit externem TC-Server? Allgemeines EE 4
MQue TCP- Verbindung nach Tomcat- Start (global) starten Allgemeines EE 4
reibi Tomcat Proxy eintragen Allgemeines EE 2
P CXF Project auf Tomcat laufen lassen - wie? Allgemeines EE 35
R (TOMCAT] Installation Tomcat auf WinXP Allgemeines EE 8
S Tomcat + Eclipse Allgemeines EE 6
T Security Manager in Tomcat Allgemeines EE 2
S Unterschiedliche Pfade bei Tomcat Allgemeines EE 4
ps EJB3 in Tomcat. das hat selbst mich erstaunt Allgemeines EE 18
B Tomcat Manager - .war Datei hochladen. Einfache Frage Allgemeines EE 5
G Probleme im Tomcat - loading WebappClassLoader Allgemeines EE 3
O ApplicationServer vs. Tomcat Allgemeines EE 5
G Verbindung zu Tomcat Allgemeines EE 15
B Tomcat -> Funktions User Credentials hinterlegen Allgemeines EE 7
B fmt:setBundle => Wo liegt die Properties-Datei im Tomcat? Allgemeines EE 3
U Tomcat Compilierproblem Allgemeines EE 2
A Tomcat -- JSP: komisches Problem Allgemeines EE 11
M Gelegentlicher Absturz Tomcat Anwendung: PermGen Space Allgemeines EE 6
R Error ServletContextListener auf Tomcat 6 Allgemeines EE 2
Y myFaces 1.2 und Tomcat 5.x / 6.0 Allgemeines EE 9
S tomcat session timeout - und was danach? Allgemeines EE 1
A Tomcat startet nicht, Einstellungsfehler? Allgemeines EE 3
S Auf Datei ausserhalb des Tomcat zugreifen Allgemeines EE 4
S JSP / Tomcat / Eclipse / Unable to compile class for JSP Allgemeines EE 4
E JBoss mit existierendem Tomcat nutzen? Allgemeines EE 4
M JSP: Tomcat: Serverfehler 500 nur beim IE. Allgemeines EE 2
G JSF 1.2 unter Netbeans 6 mit Tomcat 6.0 ->Navigationsprob Allgemeines EE 6
O eclipse - tomcat: Problem bei einfachem Webservice Allgemeines EE 16
L Tomcat Service mit JPDA debugging starten Allgemeines EE 2
J Tomcat: "Unable to get connection, DataSource invalid&q Allgemeines EE 8
A web.xml für Servlet in Tomcat 5.5 erstellen Allgemeines EE 2
F Tomcat: zentraler Class-Ordner? Allgemeines EE 2
A web.xml für Servlet in Tomcat erstellen Allgemeines EE 6
T Tomcat: JNDI + JDBC Problem Allgemeines EE 3
N Zugriff auf Webapp nur für localhost definieren (Tomcat) Allgemeines EE 2
byte Tomcat Deployment Problem (HTTP Status 503) Allgemeines EE 8
H Tomcat, MySQL Allgemeines EE 4
B tomcat verbergen Allgemeines EE 3
M classNotFoundexception vom tomcat Allgemeines EE 10
B Liferay + Tomcat Allgemeines EE 4
K tomcat: session-unabhängiges speichern Allgemeines EE 3
G Tomcat übersetzt nichts mehr Allgemeines EE 6
M tomcat beim booten mit starten Allgemeines EE 4
F Serverdienst in Tomcat implementieren Allgemeines EE 14
J Tomcat mit eigener Session-Implementierung Allgemeines EE 15
V tomcat 6 webserver oder was ist sein Sinn? Allgemeines EE 3
G eigener Tomcat-Connector f. propiet. Protokoll via TCP/IP Allgemeines EE 2
J wsdl-tomcat-AXIS Allgemeines EE 2
G Tomcat unter Eclipse starten Allgemeines EE 9
F Tomcat mit 128 MB Ram Allgemeines EE 9
C Unable to query Tomcat Manager: couldn't connect to host Allgemeines EE 2
A Cronjob mit Tomcat starten ? Allgemeines EE 4
B Connection Poll ohne TomCat Allgemeines EE 5
N Tomcat GWT-Anwendung - An beliebiger Stelle schreiben Allgemeines EE 2
E Tomcat Einstellungen Allgemeines EE 10
B Servlet-Api.jar auf JBoss? (Migration von Tomcat zu JBoss) Allgemeines EE 4
H Eine kurze Verständnisfrage zum Tomcat Allgemeines EE 2
F webanwendung läuft nicht auf Tomcat Allgemeines EE 2
Y Tomcat Thread-Handling Allgemeines EE 2
K Tomcat als Client nutzen Allgemeines EE 2
L Tomcat auf Windows Server 2003 Allgemeines EE 10
T Sysdeo Eclipse Tomcat Plug-in Allgemeines EE 4
H Tomcat in jbuilder mit startup.bat starten Allgemeines EE 5
P Tomcat Servlet POST Daten als Array Allgemeines EE 2

Ähnliche Java Themen

Neue Themen


Oben