T
timbo
Gast
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.
Hier der Code von meiner connect Funktion die immer am Anfang einer DB Operation aufgerufen wird.
Vielleicht kann mir jemand einen Hinweis geben wo ich da ansetzen kann.
Gruß, Tim
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.
Code:
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.
Code:
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