Witam, mam problem z napisaniem poprawnego monitora połączeń JDBC.
Aplikacja o której mowa będzie się łączyć z jedną z 2-óch baz danych. Jest to tak naprawdę identyczna baza w trybie redundancji.
W aplikacji wpisujemy dane do połączenia dla obu baz, w momencie uruchomienia aplikacja sprawdza czy może nawiązać połączenie z bazą 1
lub w przypadku niepowodzenia z bazą 2.
Pseudokod:
// Wątek do testowania połączenia z bazą danych
while(run) {
switch (Constants.type) {
case 0: // stan przy uruchomieniu aplikacji (brak wybranej domyslnej bazy danych)
Constants.setDefaultDB(1);
break;
case 1:
if (!Constants.connectionTested) {
Constants.setDefaultDB(2);
}
break;
case 2:
if (!Constants.connectionTested) {
Constants.setDefaultDB(1);
}
break;
}
}
W oknie aplikacji jest kontrolka mówiąca o stanie połączenia z bazą danych.
W chwili obecnej sprawdzam to tak:
class ConnectionTestClass extends Thread {
static Logger log = Logger.getLogger(ConnectionTestClass.class);
private volatile Connection conn = null;
private volatile String url;
public ConnectionTestClass(String url) {
this.url = url;
}
@Override
public void run() {
try {
this.conn = DriverManager.getConnection(url);
} catch (SQLException e) {
// log.error("Blad polaczenia z baza");
// log.error(e);
// e.printStackTrace();
}
}
static synchronized public Connection getConnection(String url) {
ConnectionTestClass d = new ConnectionTestClass(url);
d.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return d.conn;
}
}
Jeśli Connection == null --> brak połączenia, zmień bazę.
Szukałem w internecie i nie znalazłem konkretnej odpowiedzi, obecnie przy wyłączeniu aplikacji wątki nie killują się poprawnie i aplikacja się nie wyłącza, pomaga tylko kill procesu java.
Pytanie: jak napisać poprawne sprawdzanie połączenia z bazą?
Być może istnieją już jakieś biblioteki, albo gotowe rozwiązania.