# JDBC Verbindungsabbruch (Connection reset)



## timbo (7. Feb 2006)

Hallo,

ich habe ein RMI remote Object welches eine Datenbankverbindung zu einem MySQL Server über JDBC aufbaut. Soweit funktioniert alles super. Nach einiger Leerlaufzeit aber beendet der MySQL Server die Verbindung und ich bekomme dieses nicht abgefangen um die Verbindung neu zu initialisieren.

Das RMI Object wirft dann folgende Exception.


```
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.SocketException
MESSAGE: Connection reset

STACKTRACE:

java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(SocketInputStream.java:168)
        at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:113)
        at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:160)
        at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:188)
        at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1902)
        at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2351)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
        at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
        at com.mysql.jdbc.Connection.execSQL(Connection.java:2917)
        at com.mysql.jdbc.Statement.executeQuery(Statement.java:824)
        at server.ProjektorDatabaseImpl.query(ProjektorDatabaseImpl.java:210)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:261)
        at sun.rmi.transport.Transport$1.run(Transport.java:148)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Transport.java:144)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
        at java.lang.Thread.run(Thread.java:534)


** END NESTED EXCEPTION **
```

Hier der Code von meiner connect Funktion die immer am Anfang einer DB Operation aufgerufen wird.


```
private void connect()
	{	
		try
		{
			if( connection == null || connection.isClosed() )
			{					
				connection = DriverManager.getConnection("jdbc:"+properties.getProperty("type")+"://"+properties.getProperty("host")+"/"+properties.getProperty("database")+"", properties.getProperty("user"), properties.getProperty("password"));
				System.out.println("Datenbankverbindung hergestellt ...");
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();			
			connect();
		}
	}
```

Vielleicht kann mir jemand einen Hinweis geben wo ich da ansetzen kann.

Gruß, Tim


----------



## Bleiglanz (8. Feb 2006)

1. fang nur die SQL-Exception ab

2. wenn eine Ex fliegt, dann geht er in eine Endlosschleife?

3. in obigem Stacktrace fehlt diese Methode?

4. schau mal in die Doku, es gibt ein autoreconnect=true für die URL


----------



## timbo (8. Feb 2006)

Hallo,

autoReconnect=true hat geholfen.

Vielen Dank,

Gruß, Tim


----------

