MySQL Refresh von JavaFX Anwendung bei DB Änderung

willyk311

Mitglied
Hallo Leute,

bräuchte ein paar Vorschläge für mein Vorhaben, Anhaltspunkte wonach ich googlen könnte oder Ähnliches wären auch sehr hilfreich.

Eine JavaFX Anwendung die nur Sachen anzeigen soll, aber mit der der User nicht interagieren soll (keine Eingaben / Klicks), bekommt ihre Daten von einer MySQL Datenbank. Wenn sich die entsprechende Tabelle in der Datenbank ändert, soll sich die JavaFX Anwendung refreshen. Bei Prüfungen in gewissen Zeitintervallen frage ich mich, ob das nicht zu aufwendig wäre bei 20 Anwendungen, die dann die DB, die auf einem nicht sehr potenten Server liegt, abchecken. Es sollte also eine möglichst elegante Lösung sein.
 

Joose

Top Contributor
Wie kommen die neuen/geänderten Werte in die Datenbank?

Eine Möglichkeit wäre ein kleiner Server mit dem sich die Clients verbinden. Der Server bekommt ein Signal geschickt sobald neue Daten vorhanden sind und leitet es an die einzelnen Clients weiter. Diese können dann eben refreshen.
 

Joose

Top Contributor
Allgemein sollte man auch wissen, das eine Client Applikation niemals direkt mit der Datenbank kommunizieren sollte ;)
Daher wäre es schon am sinnvollsten eine Server Applikation bereitzustellen. Und diese kann sich dann eben auch um den refresh für die Clients kümmern.
 

willyk311

Mitglied
Es soll eine Webseite geben, über die man Daten in die Datenbank einpflegt. Das Java Programm soll über JDBC die Daten von einigen Tabellen abfragen. Ich müsste die Aussage von oben berichtigen, bevor die JavaFX Anwendung in den Anzeige Modus wechselt, sollen Name und Passwort eingegeben werden um sich mit der Datenbank verbinden zu können. Das ganze soll in einem lokalen Netzwerk agieren.
Auf dem Computer (Raspberry Pi) läuft demnach auch ein Apache Server, MySQL und PHP.

Wenn also auf einem Client so ein Java Programm läuft und sich im Anzeigemodus befindet, so sollen sie sich aktualisieren, wenn neue Daten über die Website in die Datenbank eingetragen wurden. Klar könnte man noch einen Button in die Java Programme zum refreshen einbauen, dies kommt aber designmäßig und praktisch nicht in Frage :(
 

truesoul

Top Contributor
Hallo,

also diese Herangehensweise ist leider vollkommen falsch. Sorry.
Client greift nie direkt auf die DB zu.
Der Client kommuniziert mit einer Serveranwendung.
Der Server "kommuniziert" mit der DB (greift darauf zu).
Naja wenn du PHP verwendest dann google nach WebSocket php.

Du solltest auf jedenfall dich mal mit einfachen Client-Server Anwendung befassen.
Bei Client-Server Anwendung muss auch nicht die gleich Sprache genommen werden.

Bei dir wäre es dann Java(FX) Clientseitig und in Serverseitig mit PHP.

Grüße
 

willyk311

Mitglied
Bin neu in dieser Java Database Story. Wenn ein Client nie direkt auf die DB zugreift, wozu wird dann JDBC verwendet? Damit greift doch die Java Anwendung auf die Datenbank zu ohne irgendwelche Zwischenschichten. In welchen Fällen wird denn dann JDBC verwendet?

Also brauche ich eine Server Applikation um einen Refresh auf der Java Anwendung auszuführen, bzw. die Gui neu zu zeichnen. @truesoul: Also du sagst, selbst mit PHP könnte man das machen?

Vielen Dank für eure schnellen und hilfreichen Beiträge.
 

Joose

Top Contributor
Die Datenbankläuft normalerweise auf einem Server.

Des Weiteren kann nun am selben Server eine Java Anwendung laufen welche als Server Anwendung in einer Client-Server Architektur dient.
Diese Anwendung kann direkt auf die Datenbank zugreifen.

Die Client Anwendung (welche vom Enduser) bedient wird sollte keinen Zugriff auf die DB haben, sondern eben ihre Daten über die Server Anwendung bekommen.

Genau du brauchst eine Stelle wo sich alle Clients "registrieren". Sobald Daten geändert werden wird eben diese eine Stelle informiert und kann nun alle registrierten Client benachrichtigen.
 

truesoul

Top Contributor
In welchen Fällen wird denn dann JDBC verwendet?

Ja wie schon Joose geschrieben hat, könnte man eine Java-Anwendung schreiben die als Server fungiert und diese verwendet dann logischerweise JDBC.

Also der Server stellt nur die Daten zur Verfügung, das zeichnen der UI bleibt weiterhin der Client zuständig.

Der Server schickt an alle Clients eine Nachricht das neue oder geänderte Werte existieren.Der Client holt sich die neuen Daten vom Server und zeigt diese dann an (neu Zeichnen).

Natürlich kann auch der Server in der Nachricht die neuen oder geänderten Daten mitsenden.

Ja mit PHP kannst du die Serverseite dann implementieren und wenn du mit WebSockets arbeitest besteht dann sogar die Möglichkeit alle angemeldeten Clients zu benachrichtigen.

Wenn man das voneinander trennt, ist der Client austauschbar. Sprich, erst eine JavaFX Anwendung und später dann eine HTML/JavaScript Anwendung usw.

Grüße
 

willyk311

Mitglied
Naja, dann läuft die Funktion die ich auf dem Client haben wollte auf einem Java Programm auf dem Server. Und wie soll das Programm auf dem Server über Neuigkeiten auf der Datenbank benachrichtigt werden? Soll das Programm nun in gewissen Zeitintervallen (5 Sekunden) nach Daten fragen, was schon mal ein Vorteil wäre als wenn es 20 Anwendungen tun. Gibt es eine spezielle Methode bzw. Trigger die ein Abfragen der Datenbank nach Änderungen veranlassen? Eine andere Möglichkeit wäre evtl., dass wenn ein Nutzer über die Website Daten eingibt und sie über einen Button abschickt, dieser Button der Java App. auf dem Server Bescheid gibt. Gibts noch bessere?
 

Thallius

Top Contributor
Die Software auf dem Server ist die einzige die Änderungen an der Datenbank vornehmen darf. Somit weiß sie auch immer Bescheid wenn Änderungen gemacht wurden. Ist doch logisch
 

willyk311

Mitglied
Ja, aber die Rede war doch von einer Java App auf dem Server die den Clients Bescheid gibt. Die Frage war wie diese über Änderungen informiert wird. Ich hoffe wir reden nicht aneinander vorbei, aber ihr redet nicht grad über Java EE?
 

Thallius

Top Contributor
Du verstehst das Pronzip Webservice nicht. Die Java App auf dem Server verwaltet die Datenbank. KEINE ANDERE APP egal ob auf dem Server oder auf einem Client kommt direkt an die Datenbank ran. Die gehen alle über diese eine App auf dem Server. Also weiß diese eine App auch über jede Änderung an der Datenbank bescheid und muss nicht darüber informiert werden wenn sich an der Datenbank was ändert, da sie diese Änderung wenn dann selber gemacht hat.
 

klauskarambulut

Bekanntes Mitglied
Datenbanken werden in der Regel so eingestellt, dass diese nur Anfragen vom selben Rechner beantworten, also localhost. Alles andere ist sehr risikobehaftet, da hilfen auch nicht username und password.

State of the Art und am verständlichsten ist das ganze via Caching zu erklären.

Datenbank (persistent)

Cache (Key-Value-Store)

Server - Anwendung

Client A - View Client
Client B - Für Dateneingabe

Client B sendet Daten an den Server. Dieser validiert die Daten, schreibt die Änderungen in die Datenbank und invalidiert den Cache.

Client A1 fragt nach Daten. Server schaut im Cache, dieser ist leer. Server macht eine Datenbankabfrage füllt das Ergebnis in den Cache inclusive Timestamp (ts1) und schickt die Daten inclusive Timestamp (ts1) an den Client A1, der die Daten anzeigt.

Client A2 fragt nach Daten. Server schaut im Cache, findet Daten und schickt diese mit dem Timestamp (ts1) an A2. Anzeige wie gehabt.

Client A2 fragt sich ob es was neues gibt und schickt anfrage an Server mit ts1. Server schaut im Cache und sagt ts1 ist noch aktuell.

Client B sendet weitere Daten an den Server. Dieser validiert die Daten, schreibt die Änderungen in die Datenbank und invalidiert den Cache.

Client A1 fragt sich ob es was neues gibt und schickt anfrage an Server mit ts1. Server schaut im Cache und findet nichts macht Datenbankabfrage cacht das Ergebnis und sendet dieses mit Timestamp (ts2) an Client A1.

Client A2 fragt sich ob es was neues gibt und schickt anfrage an Server mit ts1. Server findet im Cache Daten, die aktueller sind und sendet diese mit Timestamp ts2 an A2.


Das ist mehr oder weniger das System das im Internet heute abläuft. Die Timestamps sind die sogenannten ETag.

Sehr gutes System, resourcensparend allerdings muss der Client immer Pollen. Kommt jetzt auf die Art der Anwendung an ob diese Variante Gangbar ist.


Variante 2 ist, das der Client sich via Socket mit dem Server verbindet und dieser die Verbindung hält. Statt bei neuen Daten den Cache zu invalidieren werden die Änderungen über die Sockets an alle Clients gesendet. Client pollt also nicht ständig, dafür ist aber immer eine Socketverbindung offen.
Vorteil Änderungen werden schnell sichtbar, nur die Deltas müssen übertragen werden. Aber aufgrund der vielen Sockets resourcenhungrig.


Es kommt also ganz auf die Anwendung an was man haben möchte.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F ResultSet refresh moeglich? Datenbankprogrammierung 3
Z Aus zwei bestehenden Table eine zusätzliche Gemeinsame machen (JavaFX) Datenbankprogrammierung 21
L Derby/JavaFX Fehlermeldung Datenbankprogrammierung 3
Sam96 SQLite mit JavaFX Datenbankprogrammierung 1
D JavaFX Anwendung zugriff auf MySQL DB. Datenbankprogrammierung 2
dat_vin JavaFX Datenbankverbindung über JPA und MySQL Error Datenbankprogrammierung 0
L Speicherverbrauch Java Anwendung mit einer Datenbankanbindung Datenbankprogrammierung 19
C Mit asm laufende Java Anwendung manipulieren Datenbankprogrammierung 1
D Multi User Datenbank Anwendung Datenbankprogrammierung 5
G HSQLDB Inserts/Updates sind nach Neustart der Anwendung Datenbankprogrammierung 1
P JPA in einer größeren Java SE Anwendung Datenbankprogrammierung 0
P PostgreSQL Java-Anwendung zählt rollbacks nicht Datenbankprogrammierung 0
eskimo328 Datenbankverbindung ohne Passwort im Quelltext bei einer offline Anwendung Datenbankprogrammierung 14
M Ein kleine Anwendung mit Java Schreiben Datenbankprogrammierung 2
L Mit Java Desktop Anwendung auf Mysql Server auf Webspace verbinden Datenbankprogrammierung 11
M Sinnvoller Entwurf einer Java DB-Anwendung Datenbankprogrammierung 2
H CREATE-Strings in Anwendung verwalten Datenbankprogrammierung 2
A Client-Server anwendung sofort aktualisieren Datenbankprogrammierung 7
Saxony JPA und Eclipse RCP Anwendung mit Fragmenten Datenbankprogrammierung 3
R Lokale Derby in einer JPA-Anwendung Datenbankprogrammierung 3
G client <> db anwendung - zugangsdaten? Datenbankprogrammierung 3
P lokale Datenbank innerhalb einer Swing-Anwendung Datenbankprogrammierung 7
C Swing Anwendung mit DB Datenbankprogrammierung 23
G Wie baut man eine Anwendung mit DB Zugriff Datenbankprogrammierung 3
P Datenbank für Java Anwendung wie SQLite ohne Installation Datenbankprogrammierung 4
B anfängerfrage db anwendung Datenbankprogrammierung 7
G update sperren bei client/server anwendung Datenbankprogrammierung 7
J Suche für meine Anwendung optimale Datenbank ! Datenbankprogrammierung 26

Ähnliche Java Themen


Oben