Fix closing connection on invalid connection #28

Zusammengeführt
Lixfel hat 1 Commits von fix-sql-restart nach master 2023-01-15 16:45:40 +01:00 zusammengeführt
Nur Änderungen aus Commit dbd91bf41a werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -157,32 +157,36 @@ public class Statement implements AutoCloseable {
private <T> T withConnection(SQLRunnable<T> runnable, Object... objects) { private <T> T withConnection(SQLRunnable<T> runnable, Object... objects) {
Connection connection = aquireConnection(); Connection connection = aquireConnection();
T result;
try { try {
try { result = tryWithConnection(connection, runnable, objects);
return tryWithConnection(connection, runnable, objects); } catch (Throwable e) {
} finally {
if(connectionInvalid(connection)) { if(connectionInvalid(connection)) {
closeConnection(connection); closeConnection(connection);
return withConnection(runnable, objects);
} else { } else {
synchronized (connections) { synchronized (connections) {
connections.push(connection); connections.push(connection);
connections.notify(); connections.notify();
} }
}
}
} catch (SQLException e) {
if(connectionInvalid(connection)) {
return withConnection(runnable, objects);
} else {
throw new SecurityException("Failing sql statement", e); throw new SecurityException("Failing sql statement", e);
} }
} }
synchronized (connections) {
connections.push(connection);
connections.notify();
}
return result;
} }
private boolean connectionInvalid(Connection connection) { private boolean connectionInvalid(Connection connection) {
try { try {
return connection.isClosed(); return connection.isClosed() || !connection.isValid(1);
} catch (SQLException e) { } catch (SQLException e) {
logger.log(Level.INFO, "Could not check SQL connection status", e); // No database logging possible at this state logger.log(Level.INFO, "Could not check SQL connection status", e); // No database logging possible at this state
return true; return true;