Datenbank schließen

AcridMusak

Mitglied
Hi Leute,

hab nen kleines Problem mit dem Schließen einer Datenbankverbindung. Mir ist klar wie ich über connection.close() die Datenbank schließe, allerdings sollte die Verbindung auch geschlossen werden, wenn beispielsweise irgendwelche Fehler beim Server oder mit der JVM auftreten.
Es ist so, dass ich ein JSF Projekt habe mit Apache Tomcat 7, bei dem natürlich Daten in einer Postgre Datenbank persistent gespeichert werden sollen. Wenn der Server (oder besser die Applikation) gestartet wird, wird eine Datenbankverbindung aufgebaut. Wenn jetzt aus irgend einem Grund die Anwendung beendet wird, dann muss auch die Verbindung beendet werden, egal ob die Anwendung regulär heruntergefahren wird oder der Server, oder gar die JVM gekillt wird.
Wie kann ich so etwas bewerkstelligen?

Gruß
 

mfernau

Bekanntes Mitglied
Dann meinst du so etwas wie einen ShutdownHook
-> Galileo Computing :: Java ist auch eine Insel – 14.8 Einen Abbruch der virtuellen Maschine erkennen

Damit kannst Du Deine Ressourcen normal freigeben und Dein System entsprechend herunter fahren lassen.
Der Shutdown-Hook wird z.B. angesprochen, wenn mit einem üblichen SIGTERM (Posix) die VM beendet wird. Er wird natürlich nicht angesprochen, wenn die VM mit einem SIGKILL regelrecht abgewürgt wird. Dann ist aber eh alles Sinn- und Zwecklos.
Unter Windows würde die VM z.B. beim herunterfahren des System mit einem SIGTERM die Chance bekommen sich zu beenden. In einer consolenanwendung hat ein STRG+C denselben Effekt. Wohingegen ein "Prozess Beenden" im Task-Manager deine VM einfach tötet.

HTH
Martin
 

AcridMusak

Mitglied
Ok darüber bin ich auch schon gestoßen,
arbeitest du mit Eclipse? Da ist es so, dass es einen Stopbutton gibt, sowohl bei der Serversicht, als auch in der integrierten Konsole. Allerdings gibt es bei diesen beiden einen Unterschied, bei der Serversicht fährt man den Server normal runter, wenn man allerdings bei der Konsole diesen Button betätigt würgt man die JVM einfach ab, allerdings muss ich dafür sorgen, das bei beiden Fällen die Datenbankverbindung vernünftig runtergefahren wird, weißt du ob ich das mit dem ShutdownHook realisieren kann?
 

mfernau

Bekanntes Mitglied
Das mit dem STOP-Button im Eclipse ist so ne Sache. Mir ist dort auch schon aufgefallen, dass das Drücken des STOP-Buttons meinen shutdown-Hook nicht anspricht. Die VM wird da vermutlich anders abgewürgt.
Ich hab damals auch schon etwas gegoogelt und kam zu keinem wünschenswerten Ergebnis
-> java - ShutdownHook in eclipse - Stack Overflow

Da man üblicherweise in Eclipse nur entwickelt, habe ich mir einfach eine Krücke eingebaut. Durch das setzen einer entsprechenden Umgebungsvariable weiß ich in meiner Anwendung, dass es sich um eine Entwicklungsumgebung handelt. In diesen Fall lausche ich einfach an einem bestimmten Port nach einer Verbindungsanfrage. Möchte ich meinen Dienst beenden, baue ich einfach nur eine Telnet-Verbindung mit diesem Port auf und beende damit meinen Dienst. War für mich ausreichend.
Falls Du aber eine elegantere Lösung finden solltest würde ich mich auch dafür interessieren :)

Schöne Grüße
Martin
 

AcridMusak

Mitglied
Ich glaub das wäre mit Kanonen auf Spatzen geschossen.
Die ganze Geschichte gehört zu einer Einführungsaufgabe, ich kann mir nicht vorstellen, dass die da soweit ausholen. Aber für den Fall, dass ich doch noch eine andere Lösung finde rühr ich mich nochmal bei dir, danke erstmal. :)
 

mfernau

Bekanntes Mitglied
Na ja, so ne wahnsinns Kanone ist das nun auch wieder nicht :)
Java:
if(System.getenv("FooBar") != null) {
	new Thread(new Runnable() {
		@Override
		public void run() {
			try {
				System.out.println("Der Eclipse-Spezial Shutdown-Lauscher ist aktiv");
				ServerSocket blubb = new ServerSocket(4711);
				blubb.accept(); // Blockiert so lange bis jemand auf diesem Port eine Verbidnungsanfrage stellt
				shutMySystemDown(); // Diese Methode könnte z.B. auch vom Shutdown-Hook aufgerufen werden
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}, "Mein Eclipse-Spezial Lauscher-Thread").start();;
}

:toll:
 

AcridMusak

Mitglied
Hm, gut das hab ich nicht gewusst, dass man dies mit 16 Zeilen Code hin bekommt.
Muss mir verzeihen, bin erst im dritten Semester, von Ahnung kann man da noch nicht reden.
Danke aber für deine schnelle und aufschlussreiche Hilfe, dann werd ich mich in diese Richtungen nochmal mehr informieren.

Viele Grüße
Rudi
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T SQL-Statement Datenbank nach SQL Statement schließen? Datenbankprogrammierung 7
M H2 Verbindung zur Datenbank komplett schließen Datenbankprogrammierung 11
H EclipseLink: Schließen der Datenbank Datenbankprogrammierung 0
Z Jedesmal die Datenbank öffnen und schließen ? Datenbankprogrammierung 9
Baerdoc Empfehlungen zur Auswahl Datenbank Datenbankprogrammierung 6
torresbig MySQL hibernate - could not resolve entity class ... (Datenbank Anfänger) Datenbankprogrammierung 19
M Meine Datenbank lässt sich mit meiner Methode nicht ändern Datenbankprogrammierung 1
I SaaS Applikation: pro Kunde eine Datenbank / Schema oder eine DB für alle Kunden? Datenbankprogrammierung 76
M Datenbank Zugraff nach Umwandlung in .jar-Datei nicht mehr möglich Datenbankprogrammierung 4
Auf MySql Datenbank zugreifen funktioniert nicht Datenbankprogrammierung 8
MongoDB-Datenbank in Androidstudio einbinden Datenbankprogrammierung 1
thor_norsk Datenbank: Apache Derby Datenbankprogrammierung 6
B SQlite Datenbank, trotz Statements wurden nicht alle Zeilen erzeugt? Datenbankprogrammierung 35
M Datenbank mit REST API Datenbankprogrammierung 66
M Entfernte Datenbank Datenbankprogrammierung 11
T Datenbank: Tabelle erstellen bei Web-Applikation Datenbankprogrammierung 4
D SQLite Datenbank in Android Studio (Java) durchsuchen Datenbankprogrammierung 3
M MySQL Datenbank in Array Datenbankprogrammierung 2
S Den letzten Eintrag aus Datenbank ziehen (Oracle SQL Dev.) Datenbankprogrammierung 14
N Datenbank abfragen nach bestimmten Wort Datenbankprogrammierung 7
Beginner22 Zugriff auf Datenbank aus Java über mariadb Datenbankprogrammierung 3
ma095 value NULL- Datenbank Postgresql Spring - intellij community Datenbankprogrammierung 0
raptorrs Plötzlich keine Verbindung zur Datenbank mehr möglich Datenbankprogrammierung 14
Davee SQLite SQLite Datenbank lässt sich nicht auf anderen PCs öffnen Datenbankprogrammierung 8
P Datenbank Tool - besser als oracle SQL Developer gesucht mit effizinte Verbindungsverwaltung Datenbankprogrammierung 2
X JPA (EclipseLink) und Oracle Datenbank Datenbankprogrammierung 2
T Datenbank auf einer Webseite aus einer Exceltabelle erstellen Datenbankprogrammierung 5
L SQL Datenbank Datenbankprogrammierung 7
L SQL Datenbank INSERT INTO Datenbankprogrammierung 6
L SQL Datenbank Tabelle insert Datenbankprogrammierung 7
L SQL Datenbank Tabelle erstellen Datenbankprogrammierung 6
nonickatall MySQL Auf neue Datensätze in einer Datenbank reagieren Datenbankprogrammierung 5
W MYSQL Datenbank Login Android Datenbankprogrammierung 3
anton1 Online Datenbank Datenbankprogrammierung 7
krgewb H2-Datenbank öffnen Datenbankprogrammierung 8
J Datenbank abfragen Datenbankprogrammierung 6
P Verbindung zu einer Access Datenbank per Eclipse oder Intellij Datenbankprogrammierung 0
O SQL Abfragen mit Mini Datenbank Datenbankprogrammierung 12
Z Datenbank Choicebox wird nicht befüllt Datenbankprogrammierung 15
S Suche In SQL Datenbank mit array Datenbankprogrammierung 6
P Enum in der Datenbank Datenbankprogrammierung 1
Z SQL- Datenbank 1.PK zu 2.FK Datenbankprogrammierung 3
E netbeans - jsp Daten in Datenbank hinzufügen Datenbankprogrammierung 2
bueseb84 Spring Boot : Update Mysql Datenbank Datenbankprogrammierung 1
Avalon Attribute werden mit Unterstrich in eine MySQL Datenbank eingetragen Datenbankprogrammierung 10
MiMa wo Datenbank verbinden/trennen? Datenbankprogrammierung 1
H MySQL Verbindung Datenbank und Eclipse (Java) Datenbankprogrammierung 5
DeltaPilot12 Datenbank connect Funktion Datenbankprogrammierung 7
J Oracle Datenbank-Tabelle per Combobox (oder ähnliches) auswählen Datenbankprogrammierung 3
N SQL Datenbank Spalte in Java Array Datenbankprogrammierung 2
J JAR-Datei und Datenbank Datenbankprogrammierung 8
Bluedaishi Datenbank Abfrage Datenbankprogrammierung 36
Kirby.exe Zeile aus der Datenbank holen wenn ein match besteht Datenbankprogrammierung 7
Kirby.exe Es werden keine Einträge in der Datenbank gemacht Datenbankprogrammierung 23
C Datenbank anlegen und über eine Website mit Daten füllen? Datenbankprogrammierung 25
J Welche Kriterien haben Einfluss auf die Geschwindigkeit einer Datenbank ? Datenbankprogrammierung 4
B Frage zu Datenbank Design bei Events (ZenDesk) Datenbankprogrammierung 1
M SQLite Datenbank mit SQLite Datenbankprogrammierung 7
C String in Datenbank einfügen Datenbankprogrammierung 11
C Keinen Zugrift auf Datenbank Datenbankprogrammierung 2
C Datenbank zugreifen Datenbankprogrammierung 10
L Auf Strato Datenbank zugreifen Datenbankprogrammierung 7
H Fehler bei getConnection zu MySQL Datenbank Datenbankprogrammierung 18
G Datenbank Statement Datenbankprogrammierung 22
M Datenbank editierbach machen in JTable Datenbankprogrammierung 13
S Datenbank MySQL und Java Datenbankprogrammierung 8
J Aufbau meiner Datenbank/Tabelle - Verbessern? So lassen? Datenbankprogrammierung 39
J Nur CRUD über Datenbank Klasse, oder auch mehr ? Datenbankprogrammierung 2
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
L Appabsturz mit Datenbank Datenbankprogrammierung 4
J Zahlungseingänge von mehreren Kunden wie am besten abbilden in der Datenbank ? Datenbankprogrammierung 8
L Datenbank sichern Datenbankprogrammierung 8
S Daten von SQLite Datenbank nutzen Datenbankprogrammierung 5
J Datenbank VPS Server Datenbankprogrammierung 3
H MySQL MySQL - Keine Verbindung zur Datenbank?! Datenbankprogrammierung 4
NIckbrick MySQL Befehle aus Datenbank auslesen Datenbankprogrammierung 21
S Datenbank/Java true/false Datenbankprogrammierung 8
J JUNIT und CRUD-Datenbank Datenbankprogrammierung 4
F Datenbank/Datenabgleich/Wiederholungsabfrage Datenbankprogrammierung 12
@SupressWarnings() Eure bevorzugte Datenbank-Library Datenbankprogrammierung 9
C datenbank verbindung config Datenbankprogrammierung 23
L MySQL Android zu externer MySQL Datenbank verbinden Datenbankprogrammierung 5
M Datenbank vor unerlaubtem Zugriff durch Benutzer schützen Datenbankprogrammierung 3
U MySQL Aus Servlet in Datenbank schreiben Datenbankprogrammierung 4
H Datenbank Export mit Java Datenbankprogrammierung 3
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
S SQL-Statement Datenbank Zeitbereich durchsuchen Datenbankprogrammierung 2
L Messenger App - Wie am besten auf Datenbank zugreifen? Datenbankprogrammierung 4
H MySQL Datenbank auf Xampp nimmt keine Mediumblob an. Datenbankprogrammierung 0
D Datenbank Abfrage Datenbankprogrammierung 7
H MySQL Benutzer Login System mit Datenbank Informationen (Abfrage zu User ist auf DB gesichert) Datenbankprogrammierung 42
L Oracle Datenbank über Java aufrufen Datenbankprogrammierung 29
DaCrazyJavaExpert Derby/JavaDB Unfindbarer Fehler im Datenbank-Code Datenbankprogrammierung 87
DaCrazyJavaExpert Derby/JavaDB Wert einer Variable in der Datenbank direkt auf 1 setzten. Datenbankprogrammierung 71
W MySQL Ausgabe von Datenbank in Java-App Datenbankprogrammierung 6
M portable Datenbank Datenbankprogrammierung 2
S Name aus der Datenbank bekommen Datenbankprogrammierung 2
K Eclipse: JBoss Hibernate Tool: Kein Zugriff auf Datenbank Datenbankprogrammierung 5
MaxG. Datenbank werte vergleichen Datenbankprogrammierung 5
MaxG. Access Datenbank Datenbankprogrammierung 48

Ähnliche Java Themen


Oben