From f0e654399a01d04f9da8232835bafcf0bbacd469 Mon Sep 17 00:00:00 2001 From: EmilMeindl Date: Fri, 17 Apr 2020 16:10:18 +0200 Subject: [PATCH 1/3] test reconnect logic --- .../com/wasteinformationserver/db/JDBC.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/java/com/wasteinformationserver/db/JDBC.java b/src/java/com/wasteinformationserver/db/JDBC.java index c3e4f33..0becc0b 100644 --- a/src/java/com/wasteinformationserver/db/JDBC.java +++ b/src/java/com/wasteinformationserver/db/JDBC.java @@ -94,8 +94,25 @@ public class JDBC { password); loggedin = true; } catch (SQLException e) { + //logintodb(usernamec, passwordc, dbnamec, ipc, portc); + new Thread(new Runnable() { + @Override + public void run() { + try { + Thread.sleep(10 * 1000); + } catch (InterruptedException interruptedException) { + interruptedException.printStackTrace(); + } + try { + logintodb(usernamec, passwordc, dbnamec, ipc, portc); + } catch (IOException ioException) { + ioException.printStackTrace(); + } + } + }).start(); throw new IOException("No connection to database"); // todo reconnect every 5mins or something + } } From 605a2ca33d1e3a0750214dcc65885e5608ad1e02 Mon Sep 17 00:00:00 2001 From: EmilMeindl Date: Fri, 17 Apr 2020 16:52:19 +0200 Subject: [PATCH 2/3] finished initial db reconnect --- src/java/com/wasteinformationserver/Main.kt | 11 ++---- .../com/wasteinformationserver/db/JDBC.java | 35 ++++++++++--------- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/src/java/com/wasteinformationserver/Main.kt b/src/java/com/wasteinformationserver/Main.kt index 2c3b603..012c3e4 100644 --- a/src/java/com/wasteinformationserver/Main.kt +++ b/src/java/com/wasteinformationserver/Main.kt @@ -37,14 +37,8 @@ fun main() { //initial connect to db Log.message("initial login to db") - try { - val stor = Storage.getInstance(); - JDBC.init(stor.dbUser, stor.dbPassword, stor.dbName, stor.dbhost, stor.dbPort) - //JDBC.init("ingproject", "Kb9Dxklumt76ieq6", "ingproject", "db.power4future.at", 3306) - //JDBC.init("users", "kOpaIJUjkgb9ur6S", "wasteinformation", "192.168.65.15", 3306); - } catch (e: IOException) { - Log.error("no connection to db") - } + val stor = Storage.getInstance(); + JDBC.init(stor.dbUser, stor.dbPassword, stor.dbName, stor.dbhost, stor.dbPort) //startup web server @@ -57,7 +51,6 @@ fun main() { if (JDBC.isConnected()) { val m = MqttService(Storage.getInstance().mqttServer, Storage.getInstance().mqttPort.toString()) - // val m = MqttService("mqtt.heili.eu", "1883") m.startupService() }else{ Log.error("could't start mqtt service because of missing db connection!") diff --git a/src/java/com/wasteinformationserver/db/JDBC.java b/src/java/com/wasteinformationserver/db/JDBC.java index 0becc0b..d771cce 100644 --- a/src/java/com/wasteinformationserver/db/JDBC.java +++ b/src/java/com/wasteinformationserver/db/JDBC.java @@ -1,6 +1,7 @@ package com.wasteinformationserver.db; import com.wasteinformationserver.basicutils.Log; +import com.wasteinformationserver.basicutils.Storage; import java.io.IOException; import java.sql.*; @@ -9,6 +10,7 @@ import java.sql.*; * basic connection class to a Database * * @author Lukas Heiligenbrunner + * @author Emil Meindl */ public class JDBC { private static Connection conn; @@ -22,7 +24,7 @@ public class JDBC { private static String ipc; private static int portc; - private JDBC(String username, String password, String dbname, String ip, int port) throws IOException { + private JDBC(String username, String password, String dbname, String ip, int port) { logintodb(username, password, dbname, ip, port); } @@ -66,11 +68,7 @@ public class JDBC { */ public static JDBC getInstance() { if (!loggedin) { - try { - logintodb(usernamec, passwordc, dbnamec, ipc, portc); - } catch (IOException e) { - Log.Log.error("no connetion to db - retrying in 5min"); - } + logintodb(usernamec, passwordc, dbnamec, ipc, portc); } return JDBC; } @@ -85,7 +83,7 @@ public class JDBC { * @param port Server port * @throws IOException thrown if no connection to db is possible. */ - private static void logintodb(String username, String password, String dbname, String ip, int port) throws IOException { + private static boolean logintodb(String username, String password, String dbname, String ip, int port) { try { DriverManager.setLoginTimeout(1); conn = DriverManager.getConnection( @@ -93,8 +91,10 @@ public class JDBC { username, password); loggedin = true; + Log.Log.message("Connected to database"); } catch (SQLException e) { - //logintodb(usernamec, passwordc, dbnamec, ipc, portc); + // reconnect every 10 sec + Log.Log.warning("Database-Connection not possible"); new Thread(new Runnable() { @Override public void run() { @@ -103,17 +103,20 @@ public class JDBC { } catch (InterruptedException interruptedException) { interruptedException.printStackTrace(); } - try { - logintodb(usernamec, passwordc, dbnamec, ipc, portc); - } catch (IOException ioException) { - ioException.printStackTrace(); - } + Log.Log.debug("Reading config"); + Storage st = Storage.Companion.getInstance(); + st.init(); + usernamec = st.getDbName(); + passwordc = st.getDbPassword(); + dbnamec = st.getDbName(); + ipc = st.getDbhost(); + portc = st.getDbPort(); + Log.Log.info("Retry connection"); + loggedin = logintodb(usernamec, passwordc, dbnamec, ipc, portc); } }).start(); - throw new IOException("No connection to database"); - // todo reconnect every 5mins or something - } + return loggedin; } public void disconnect(){ From 23df933504b51b40b47cb87e4757c473ecb19faf Mon Sep 17 00:00:00 2001 From: EmilMeindl Date: Fri, 17 Apr 2020 18:28:10 +0200 Subject: [PATCH 3/3] finished statement db reconnect --- .../com/wasteinformationserver/db/JDBC.java | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/java/com/wasteinformationserver/db/JDBC.java b/src/java/com/wasteinformationserver/db/JDBC.java index d771cce..2d3ed81 100644 --- a/src/java/com/wasteinformationserver/db/JDBC.java +++ b/src/java/com/wasteinformationserver/db/JDBC.java @@ -1,5 +1,6 @@ package com.wasteinformationserver.db; +import com.mysql.cj.exceptions.ConnectionIsClosedException; import com.wasteinformationserver.basicutils.Log; import com.wasteinformationserver.basicutils.Storage; @@ -135,12 +136,19 @@ public class JDBC { */ public ResultSet executeQuery(String sql) { try { + conn.isValid(5); PreparedStatement stmt = conn.prepareStatement(sql); return stmt.executeQuery(); + } catch (SQLNonTransientConnectionException ee){ + if (logintodb(usernamec, passwordc, dbnamec, ipc, portc)) { + return this.executeQuery(sql); + } else { + return null; + } } catch (SQLException e) { - e.printStackTrace(); + return null; } - return null; + } /** @@ -151,9 +159,19 @@ public class JDBC { * @throws SQLException */ public int executeUpdate(String sql) throws SQLException { - PreparedStatement stmt = conn.prepareStatement(sql); - - return stmt.executeUpdate(); + try { + conn.isValid(5); + PreparedStatement stmt = conn.prepareStatement(sql); + return stmt.executeUpdate(); + } catch (SQLNonTransientConnectionException ee){ + if (logintodb(usernamec, passwordc, dbnamec, ipc, portc)) { + return this.executeUpdate(sql); + } else { + throw new SQLException(); + } + } catch (SQLException e){ + throw new SQLException(); + } } /**