TopLogic - the automated application engine
  • Releases
  • Dokumentation
  • Github
  • Discord
  1. Home
  2. Releases
  3. TL_7.5.0-M4
  4. #26626

7.5.0-M4
TopLogic Release

2022-09-28

Verbesserung

Wichtig
#26626
Systematisches Logging für Kafka
#26864
Passwort-Änderung bei Passwort-Vergabe durch Administrator erzwingen
#26893
Optionale Abhängigkeiten zwischen Services (ManagedClass)
#26905
Lösch-Callback am Fachobjekt
#26920
Wertvorschläge für Zahlen- und Zeichenketten-Attribute
#26959
Drag&Drop: Verallgemeinerung der DropByExpression-API
Detail
#26549
Formulartabellen: Anpassung Standardspalten
#26755
CKEditor auf Version 4.19.1 updaten
#26858
Aufrufe von ModelBuilder.supportsModel() reduzieren
#26871
Vereinfachte Mail-Konfiguration für IMAPS und SMTPS
#26872
Wählbare ID-Spalte am Typ
#26887
Datenbank-Passwörter verschlüsselt angeben
#26889
Pepper im Argon Hashing verschlüsseln
#26913
Performance beim Löschen mehrerer Objekte verbessern
#26917
Standardauswahl für Wertvorschläge: Optionen über Ausdruck
#26918
Implementierungen für in-app Annotationen priorisieren
#26938
Allow configuring control tag and CSS classes for all configurable control renderers
#26946
Resource-Path der Anwendung in den Umgebungsvariablen anzeigen
#26953
Icon-Bibliothek: Bootstrap Icons
Kleinigkeit
#26914
Alias und System Properties für ZooKeeper Port und Kafka Port

Fehlerbehebung

Detail
#23801
Labelberechnung im Excelexport berücksichtigt Tabellenkonfiguration nicht
#24788
Fehlendes Deployment von top-logic.js und CSS für Production-Mode
#25322
Formularfeld für mandatory DateTime Attribut fälschlich als geändert markiert
#25612
Modell Editor zeigt bei Änderungen von Referenzen Verknüpfungsenden in der Attributtabelle an
#25613
BPE: Anlage neuer Prozessinstanzen mit Pflichtfeldern nicht möglich
#25652
In-App-Modellierung: Rückreferenzen von Kompositionen werden als multiple=true angelegt
#25732
Modellbasierte Suche: Eingabevalidierung: Filterabfrage führt zu NullpointerException
#25858
Modell-Editor läd bei Script-Ausführung Seite neu
#26396
Drag and Drop: Icon aus Tabellenheader in Drop-Zone: NPE
#26406
WYSIWYG YouTube Plugin hat Probleme beim Einbetten
#26441
Keine Session-Invalidierung beim Login- und Passwort-Änderungsprozess
#26447
Überprüfungen von Referenzen: Werden nur im Formular geprüft, nicht beim Commit
#26461
Überschriebenes Attribut erbt zwingend Anpassung "Standardwert"
#26484
In-App Template für Grid und Tabellen: Funktion "Prüfer für Benutzung als Listenelement" bekommt Komponentenmodell nicht
#26529
Modellübernahme in Entwicklungsumgebung: ResKeys verbleiben in dynamic Properties
#26554
Berechnete Webfoldern-Referenzen löschen Ordner beim Löschen des Basisobjektes
#26569
Fehlende Constraint-Violation beim Löschen von Objekten die von Pflichtfeldern referenziert werden
#26583
Encodingprobleme in Hinweisseite auf Systemüberlastung
#26584
Wikiformatierung in mehrzeiligen Text-Attributen / -Textfeldern kaputt
#26587
Optionprovider aktualisieren berechnete Wertvorschläge nicht
#26691
Webfolder: Fehlerhaftes Verhalten mehrfacher Upload-Dateiauswahl
#26730
Spalten-Definitionen werden für Compositionstabellen nicht angewendet
#26750
Drop von Nicht-TL-Objekt auf Tabellen und Bäume verbieten
#26836
StackOverflow durch Konfigurationsfehler: Berechnetes String Attribut liefert Integer
#26852
ApplicationTesting: Keine zwei Sessions für denselben Nutzer im JUnit-Test möglich
#26853
EditComponent verliert Edit-Mode nach Löschung
#26856
Fehlende Dokumentationsanpassung zu new + Kontext
#26857
Inkonsistente "source" Properties in Dokumentationsseiten
#26859
Verschiedene Eclipse Einstellungen korrigieren
#26865
Fehlender Selektionsmarker in Kompositionstabellen
#26866
Instanz-Browser: Neues transiente Objekt zeigt Typ nicht an
#26867
Konfiguration verwendet unverschlüsseltes SMTP- und IMAP-Passwort
#26868
Animation beenden wenn Tabelle von der GUI abgeräumt wird
#26870
Inaktiver Scheduler crasht die Anwendung
#26873
Application-Monitor "Umgebungsvariablen" zeigt u.U sicherheitskritische Werte an
#26874
Service Editor zeigt "secret" des OpenID Services an
#26880
Auswahl von Icons im Icon-Chooser ist nicht skriptbar
#26883
Drag Vorschaubild im Script-Recorder benutzt Label nicht
#26884
Deklarative Formulare: Fehlendes GUI update bei programmatischen Änderungen eines List-wertigen Property
#26885
Constraints an deklarativen Formularen mit Argumenten aus einer Container-Referenz führen bei neuen Elementen zu Fehlern
#26890
Überschriebene Eigenschaften werden beim Booten aus Modelldefinition nicht richtig initialisiert
#26891
Ruckelnde Tabelleninhalte in FrozenTables
#26894
Fehlende Abhängigkeit ModelBasedSearch -> SearchBuilder
#26895
Fehlende Abhängigkeit MailServer -> MailReceiverService
#26896
DnD: Drop-Operation mit Drop-Type "child" auf Tabelle erhält das falsche Zeilenobjekt
#26903
Unter ungünstigen Umständen Daten aus zukünftigen Revisions sichtbar in AssociationCache's
#26904
CSS-Editor funktioniert nicht mit Top-Logic Theme-Variablen
#26906
Default-Annotationen lassen sich nicht vom Attributtyp erben
#26911
OutOfMemoryError bei App-WAR-Erzeugung
#26922
Mit generierten Fachklassen erhält ein Default-Provider eines Attributs in einer Nicht-Struktur-Klasse keinen Create-Context
#26923
ModelNamingSchemes bekommen teilweise "value context" nicht
#26924
Horizontal dargestellte Radio-Button-Selektion ragt über Formulargrenzen hinaus
#26925
BreadCrumbs aktualisieren sich nicht, wenn innere Tabbars nicht sichtbar sind
#26926
Seltene ArrayIndexOutOfBoundsException bei Tabwechsel
#26928
Ausgeblendete Komponente erscheint nicht mehr, obwohl sie ein unterstütztes Modell bekommt
#26929
Scripting-Recorder: In Project-Demo werden keine Templates geladen
#26934
Update yFiles auf Version 2.4.0.6
#26939
Geänderte Reihenfolge der Standardspalten in neuer Tabelle
#26942
Frozen-Table: Drag der Selektion enthält Duplikate
#26945
Inkonsistenter Lock-Timeout beim Applikationsstart
#26957
Kein Update der Knoteneigenschaften nach Modelländerung
#26960
Terminplan: Automatische Kollisionsvermeidung funktioniert nicht
#26965
Theme-Icon mit Wert "none" wird nicht richtig aufgelöst
#26972
Scripting-Recorder: Stoppt Ausführung nach Neuladen der Seite
#26988
In-App-Dokumentations-Generator extrahiert keine Dokumentation für überschriebene Config-Properties
#26996
ChartJS Update auf 3.9.1
#26997
JSoup Update auf 1.15.3
#26998
Update Batik Graphics auf 1.15
Verbesserung

Wichtig

#26626

Systematisches Logging für Kafka

Code-MigrationLoggingTLSync

Herausforderung

Die Systeme der DiFa innerhalb einer Netzwerkarchitektur machen regen Gebrauch von Kafkaschnittstellen, sei es mit TL-Sync oder selbst implementierten Protokollen (z.B. JSON).

Bei HTTP-Servern ist es üblich, dass jegliche Kommunikation serverseitig geloggt wird, z.B. request-logs die die Metainformationen jedweger Anfragen protokollieren. Durch diese Logs lässt sich die Kommunikation über Systeme und unterschiedliche Netzwerkkomponenten nachvollziehen. Im Fehlerfall ist auch ersichtlich, an welcher Stelle die Kommunikation abbricht oder welche Komponenten eine Weiterverarbeitung verweigern.

Die Kommunikation über Kafka hingegen ist in der aktuellen Situation nicht nachvollziehbar, aus mehreren Gründen:

  • Producer protokollieren den Versand von Nachrichten nur unzureichend
  • Empfänger protokollieren nicht den Empfang von Nachrichten
  • Empfänger protokollieren die Verarbeitung von Nachrichten nur unzureichend
  • Logdateien werden mit Nachrichteninhalten geflutet
  • Loginformationen werden nur ca. 20 Minuten vorgehalten, danach werden Logeinträge aufgrund der schieren Menge überschrieben, Dateigröße und Rolling-File-Nummern nicht ausreichend
  • Nachrichteninhalte sind verschlüsselt und dadurch durch Daimler-Tools wie Lenses nicht auffind- und inspizierbar.

Lösungsansatz

Unsere Kafkaimplementierung erzeugt ein Kommunikationsprotokoll. Der Versand und Empfang jeder einzelnen Nachricht wird vor weiterer fachlicher Verarbeitung und unabhängig vom Verarbeitungsergebnis protokolliert (exception save/finally). Die Protokolle enthalten die notwendigen Metainformationen, um den Weg einer Nachricht vom Producer bis zum Consumer nachvollziehen zu können.

Das Logformat ist standardisiert und weitestgehend symmetrisch zwischen Versandlog und Empfangslog zur leichteren Analyse.

Das Protokoll kennt zwei Loglevel:

  • INFO: Metainformationen zu einer Nachricht pro Zeile
  • DEBUG: Metainformationen + Inhalt einer Nachricht, ggf. mehrere Zeilen

Es gibt ein Versandprotokoll für alle Producer und ein Empfangsprotokoll für alle Consumer (unklar ob dies reicht, oder ob jeder Producer und Comsumer ein eigenes Protokoll erzeugt (eine eigene Datei)).

Die Metainformationen müssen enthalten (obda):

  • Zeitstempel des Versands / Empfangs
  • Topic
  • Message-ID
  • Chunk-Informationen (falls vorhanden)
  • Offset (falls möglich)
  • Anwendungsserver (IP, Hostname, ID des Clusterknotens, o.ä)
  • Kafka-Server (IP, Hostname o.ä.)
  • Name/ID/Klasse des Producers bzw. Consumers
  • tbd...

Die Logeinstellungen sind ausreichend konfiguriert um im INFO-Level die Kommunikation für mind. 1 Woche nachzuhalten.

Der Lösungsansatz beschränkt sich nicht auf EPP, sondern gilt für alle ASCon-Systeme in der DiFa-Landschaft gleichermaßen.

Umsetzung

Ich würde nur darum bitten, dass wir vor der endgültigen Fertigstellung zusammen auf die Umsetzung schauen, insbesondere bei den Loginformationen.

Code Migration

  • Kafka Sender und Empfänger haben eine neue verpflichtende Konfigurationsoption: CommonClientConfig.getLogWriter()
    • Der tl:KafkaLogWriter dient dazu aus den Kafka Nachrichten die Meta-Daten und Inhalte in brauchbarer Form zu loggen.
    • Als Vorlagen für eigene Implementierungen können der tl:TLSyncRecordLogWriter und der tl:KafkaStringLogWriter verwendet werden.
    • Um alle Vorkommen zu finden bei denen ein tl:KafkaLogWriter eingetragen werden muss, in allen .config.xml Dateien nach KafkaProducerService und KafkaConsumerService suchen.
    • Als Beispiel-Konfiguration kann die Datei com.top_logic.kafka/src/main/webapp/WEB-INF/conf/kafkaConf.config.xml verwendet werden, in der sowohl der tl:KafkaProducerService als auch der tl:KafkaConsumerService vorkommen.
  • Der Konstruktor der Klasse tl:ProducerProxy benötigt jetzt als Argument einen tl:KafkaLogWriter.
  • Die Klassen tl:CommonClientConfig und tl:KafkaCommonClient haben als zusätzlichen Typ-Parameter jetzt den Typ des Wertes der verschickt bzw. empfangen wird.

Test

Das Kafka Demo einmal mit Log Level DEBUG und einmal mit INFO starten. Jeweils mindestens ein Objekt anlegen. Anschließend prüfen, ob für die Kafka Nachrichten die erwartete Menge an Daten im Log stehen.

  • INFO: Nur die Meta-Daten.
  • DEBUG: Zusätzlich auch der gesamte Inhalt.

Die Daten müssen sowohl vom Sender als auch vom Empfänger geloggt werden.

  • 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