TopLogic - the automated application engine
  • Releases
  • Dokumentation
  • Github
  • Discord
  1. Home
  2. Releases
  3. TL_7.8.2
  4. #28073

7.8.2
TopLogic Release

2024-07-15

Verbesserung

Wichtig
#28073
Optimierter Attributzugriff auf historische Stände
#28101
Scrollbalken vergrössern
Detail
#28040
Umgestaltung der JSP-Seiten der Wartungsseite in der technischen Administration
#28077
CoreTheme: Korrektur der Icons in Baumstrukturen
#28100
Logout Button in der Sidebar einfügen
#28137
Alias %HOST% auch bei Start aus der Entwicklungsumgebung
#28138
Aliases in Test-Scripts

Fehlerbehebung

Detail
#28086
Fehlende Statements im SQL Monitor
#28091
Transaktionsmonitor: Begründung, wenn ein Revert nicht möglich ist
#28097
TLScript: Copy(): Fehler wenn Zieltyp Attribut nicht definiert.
#28103
TLDoclet darf für {@code ...} Abschnitte kein ungültiges XML generieren
#28113
Einstellungskomponenten hören nicht auf Updates des Edit-Mode-Channels
#28120
Layout-Editor: Tile-Kontext-Menü-Command werden nicht angeboten
#28129
Transiente Objekte: Falsche/unzureichende Wertkonvertierung beim Setzen von Werten
#28141
Rendering safety: Folge-Fehler nach der Fehlerbehandlung von Fehlern in Template-Variablen
#28142
Fehler bei Inlining von Layouts: ThreadContextManager not started
Verbesserung

Wichtig

#28073

Optimierter Attributzugriff auf historische Stände

MetaModelPerformance

Beim Attributzugriff muss berechnet werden, welche konkrete Attribut-Überschreibung statsächlich den Zugriff durchführen soll. Da das Attribut in einer Unterklasse mit einer Berechnungsvorschrift überschrieben sein könnte. Hierfür muss die Beziehung der Klasse, die das Attribut definiert mit dem zugegriffen wird und der konkreten Klasse des Objektes auf das zugegriffen wird, bestimmt werden.

Für diese Berechnung ist der Cache TLModelCache verantwortlich/relevant. Dieser ist aber nur für aktuelle Versionen aktiv, da es von historischen Ständen eine fast unbegrenzte Anzahl geben kann und die Cache-Entries nicht abgeräumt werden.

Aufrufpfad beim Attributzugriff:

Verbesserung

Versionierung von Modell und Daten unabhängig voneinander.

Die "Produktionsversion" (die den Zugriff auf die Attribute steuert) des Modells ist immer die aktuelle Version des Modells. Diese ist unabhängig von der Version des Objekts, auf das zugegriffen wird. Dadurch ist es nicht erforderlich, alte Versionen des Modells abzurufen, um auf historische/stabile Versionen der Daten zuzugreifen.

Die Annahme hinter dieser Optimierung ist, dass sich das Modell im Produktionsmodus einer Anwendung nicht ändert. Nur während der Entwicklung kann das Modell geändert werden, und die Änderung spiegelt sich sofort in den Daten wider. Wenn nur konservative Änderungen vorgenommen werden, ist das aktuelle (aktualisierte) Modell auch für den Zugriff auf historische Werte geeignet. Werden während der Entwicklung nicht-konservative Änderungen vorgenommen, kann der Zugriff auf historische Daten fehlschlagen. In fast allen Anwendungen wird jedoch eine Datenmigration durchgeführt, wenn eine neue Softwareversion ausgeliefert wird, die eine nicht konservative Modelländerung enthält. Andernfalls würden historische Ansichten der Daten anders aussehen bzw. sich anders verhalten als aktuelle Daten. Dies ist zwar theoretisch möglich, erschwert aber die Wartung der Anwendung ungemein.

Bei der Datenmigration, die nach einer nicht konservativen Modelländerung erforderlich ist, werden in der Regel alle historischen Versionen des Modells auf die neue aktuelle Version des Modells aktualisiert und alle historischen Daten so aktualisiert, dass sie mit der aktuellen Version des Modells kompatibel sind. Bei dieser Änderung ist der erste Teil der Migration nicht mehr erforderlich, da ohnehin nur die aktuelle Version des Modells verwendet wird. Historische Versionen des Modells dienen nur noch zu Dokumentationszwecken.

Die Änderung erfolgt durch die Verwendung eines speziellen Speichers für die Referenz TLObject#tType, der die Daten an ihr Modell bindet. Während der Verweis ein normaler "aktueller" Verweis ist, der zwei versionierte Objekte desselben historischen Kontexts verbindet, ruft der Speicher immer die aktuelle Version des referenzierten Modellelements ab, wenn ein Wert abgerufen wird. Dadurch bleibt die versionierte Verknüpfung zwischen Daten und Modell in der DB erhalten, aber es wird nur die aktuelle Version des Modells für Operationen mit den Daten verwendet.

Test

Kein zusätzlicher Test.

  • Get Started
  • Github
  • Discord
  • Das Unternehmen hinter TopLogic
  • Softwareentwicklung heute
  • Kontakt

© Copyright – Business Operation Systems GmbH

  • top-logic.com
  • Nutzungsbedingungen
  • Impressum
  • Rechtlicher Hinweis
  • Datenschutz
  • EN
  • Login