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

Enhancement

Major
#28073
Optimierter Attributzugriff auf historische Stände
#28101
Enlarge scroll bar
Detail
#28040
Redesign of the JSP pages of the maintenance page in the technical administration
#28077
CoreTheme: Correction of icons in tree structures
#28100
Insert logout button in the sidebar
#28137
Alias %HOST% also when starting from the development environment
#28138
Aliases in test scripts

Bugfix

Detail
#28086
Missing statements in SQL Monitor
#28091
Transaction monitor: Reason if a revert is not possible
#28097
TLScript: Copy(): Error if target type attribute not defined.
#28103
TLDoclet must not generate invalid XML for {@code ...} sections must not generate invalid XML
#28113
Setting components do not listen to updates of the edit mode channel
#28120
Layout editor: Tile context menu command is not offered
#28129
Transient objects: Incorrect/insufficient value conversion when setting values
#28141
Rendering safety: Subsequent errors after error handling of errors in template variables
#28142
Error when inlining layouts: ThreadContextManager not started
Enhancement

Major

#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
  • DE
  • Login