Virtuelle Tabellen (Databinding) |
Anfang Zurück Vor |
Letzte Änderung 03.01.2014
Virtuelle Tabellen (VTs) sind ein Architekturkonzept, welches das XDEV Application Framework für die einfache Verbindung von Datenbanken (ggf. auch anderen Datenquellen wie Dateien, Webservices, etc.) und grafischer Benutzeroberfläche zur Verfügung stellt. Virtuellen Tabellen sind eine Datenbankabstraktionsschicht auf dem Client, welche als Zwischenschicht die Datenschicht und Präsentationsschicht miteinander verbindet. Eine Virtuelle Tabelle ist praktisch das Databinding zwischen Datenbanktabellen und den Controls auf der Benutzeroberfläche. Virtuelle Tabellen automatisieren die Verarbeitung von Datenbank-Abfrageergebnissen und die anschließende Ausgabe der Daten auf der Oberfläche vollständig und vereinfachen damit die GUI-Programmierung mit Java Swing erheblich.
Die Virtuelle Tabelle übernimmt 6 wichtige Hauptaufgaben: ●Datenpuffer für alle Datenbank-Abfrageergebnisse - Eine Virtuelle Tabelle ist einfach ausgedrückt eine leere Kopie einer Datenbanktabelle, die zur Laufzeit im Hauptspeicher des Clients erzeugt wird. Für jede Datenbanktabelle die Sie abfragen möchten, benötigen Sie also eine Virtuelle Tabelle. In der Praxis liegt oft die komplette Datenbank in Form von Virtuellen Tabellen vor. Deshalb werden Virtuelle Tabellen als Datenbankabstraktionsschicht bezeichnet. Bis zur ersten Datenbankabfrage ist jede Virtuelle Tabelle völlig leer und belegt damit keinen Speicherplatz für Daten. Lediglich die Struktur der Virtuellen Tabelle wird in Form von Metadaten gespeichert. Dazu gehören Tabellen- und Spaltennamen, deren Datentypen sowie eine Reihe wichtiger Zusatzdaten, u.a. Primärschlüssel, bestehende Relationen, Spaltenbeschriftungen, Formatvorgaben für Zahlen- und Datumswerte etc. Der Speicherbedarf dafür ist jedoch unbedeutend gering. Erst bei einer Datenbankabfrage wird die Virtuelle Tabelle mit Daten aufgefüllt. Die eingehende Datenmenge hängt dabei allein von der vorausgehenden Datenbankabfrage ab, die entweder vom Entwickler selber in SQL, Java oder mit Hilfe des Query-Assistenten formuliert oder vom XDEV Application Framework automatisch erzeugt wird. Mit der Methode clear( ) können die Daten der Virtuellen Tabelle zu jeder Zeit gelöscht werden. VT-Instanzen werden von der Java VM automatisch gelöscht, sobald sie nicht mehr benötigt werden. ●Automatisierte Standard-Abfragen - Die Virtuelle Tabelle stellt Standardabfragen für die automatisierte Datenausgabe mit Tables, Trees, List- und ComboBoxen zur Verfügung, sodass Sie sich darum nicht kümmern müssen. Auch Abfragen über mehrere Datenbanktabellen sind dabei kein Problem. Sämtliche Joins dafür werden automatisch erzeugt. ●Lazy-Loading - Die Virtuelle Tabelle fordert von der Datenbank automatisch immer nur so viele Datensätze an, wie sich in der jeweiligen GUI-Komponente anzeigen lassen. Die restlichen Daten werden bei Bedarf nachgeladen (Lazy-Loading). Die Navigation durch das Abfrageergebnis erfolgt bei Listen mit Hilfe der vertikalen Scrollbar oder mit der speziell dafür vorgesehenen GUI-Komponente XdevPageNavigationBar, die ein seitenweises Blättern (Paging) ermöglicht. Um Lazy-Loading zu ermöglichen, wird das komplette Abfrageergebnis von der Datenbank intern als ScrollableResultset zwischengespeichert und bleibt so lange erhalten wie die Datenbank-Connection, die während des Scrollvorgang persistent bleibt. Mit Lazy-Loading wird der Speicherbedarf für des Abfrageergebnis minimiert und gleichzeitig die Performance optimiert.
●Datenquelle für die Benutzeroberfläche - Alle komplexen GUI-Komponenten erhalten ihr Model samt Daten zur Anzeige auf der Oberfläche von einer Virtuellen Tabelle. Dafür stellt die Virtuelle Tabelle für alle komplexen GUI-Komponenten passende GUI-Models, Renderer und Editoren zur Verfügung. Damit kann die Virtuelle Tabelle gemäß MVC-Architekturmuster (Model-View-Controller) im weiteren Sinne als Model bezeichnet werden, während die GUI-Komponenten die View und Controller-Einheit bilden. ●Persistierung und Transaktionssicherheit - Sämtliche Datenänderungen, die auf der Oberfläche zum Beispiel in einem Formular oder in einer Tabelle vorgenommen werden, finden immer in der jeweiligen Virtuellen Tabelle statt, d.h. ausschließlich im Hauptspeicher des Clients. Mit Hilfe der Virtuellen Tabelle lassen sich sämtliche Änderungen nicht nur auf einfache Weise sondern zudem transaktionssicher in der Datenbank speichern. Dafür stellt die Virtuelle Tabelle die Methode synchronizeChangedRows( ) zur Verfügung. ●Datensatz-Locking - Die Virtuelle Tabelle kümmert sich auch um konkurrierende Datenbankzugriffe. Editierte Datensätze werden automatisch gesperrt und damit gegen zeitgleiche Schreibzugriffe geschützt. Welches Sperrverfahren angewendet wird und wie der Sperrvorgang im Detail funktionieren soll, insbesondere Lebensdauer eines Locks, lässt sich individuell konfigurieren.
Datenbanktabelle mit entsprechender Virtueller Tabelle:
Im Programmcode werden Virtuelle Tabellen mit ihrer Bezeichnung zusammen mit der statischen Variable VT angegeben, z.B. Fahrzeuge.VT. VT ist eine statische Variable der Klasse VirtualTable, die beim Anlegen einer Virtuellen Tabelle automatisch deklariert wird und auf die Instanz der Virtuellen Tabelle verweist.
Zur Laufzeit wird die Virtuelle Tabelle automatisch instanziert, sobald die Virtuelle Tabelle zum ersten Mal verwendet wird. Über die statische Variable VT ist dann der Zugriff auf die globale Instanz dieser Virtuellen Tabelle im gesamten Projekt möglich.
Der Zugriff auf die Methoden der Virtuellen Tabelle erfolgt im Code-Editor ebenfalls über die Variable VT.
Die Virtuelle Tabelle verwaltet alle Zeilen mit Hilfe eines Index. Der Index einer Virtuellen Tabelle ist eine laufende Nummer, die von der Virtuellen Tabelle automatisch vergeben wird und mit dem Wert 0 beginnt. Der Index ist immer lückenlos. Nach dem Löschen einer Zeile aus der Virtuellen Tabelle wird der Index aller nachfolgenden Zeilen automatisch um 1 reduziert, sodass die entstandene Lücke automatisch geschlossen wird. Der Index ist ein ausschließlich intern verwendeter Wert, der bei der Datenausgabe auf der Oberfläche nicht sichtbar ist.
Der Index einer Virtuellen Tabelle ist nicht zu verwechseln mit der ID von Datensätzen. Die ID eines Datensatzes wird von der Datenbank vergeben und beginnt i.d.R. mit dem Wert 1. Nach dem Löschen eines Datensatzes in einer Datenbanktabelle bleiben die IDs aller anderen Datensätze unverändert. Die ID eines gelöschten Datensatzes wird von der Datenbank niemals ein zweites Mal vergeben.
Unterschied Index - Datensatz ID:
Index vor und nach dem Löschen von Zeilen:
Die Datentypen der verschiedenen Datenbanken unterscheiden sich z.T. erheblich von Java Datentypen sowie voneinander, insbesondere bei der Namensgebung und deren Wertebereiche. Deshalb werden die SQL Datentypen von JDBC abstrahiert und in entsprechende Java Datentypen umgewandelt. Darüber hinaus stellt XDEV 5 zusätzliche Erweiterungen für einige Java Datentypen zur Verfügung, um den Umgang mit bestimmten Datentypen zu vereinfachen. Von der Virtuellen Tabelle nicht angebotene JDBC Datentypen, z.B. ARRAY, DATA LINK, JAVA OBJECT etc., werden in entsprechend geeignete Xdev-Datentypen umgewandelt, z.B. XdevClob.
|