enhancement
major
minor
defect
critical
major
minor
major
#30059
Verwaltung der React-Benutzeroberfläche: Wartungsfunktionen der klassischen Wartungsseiten (Datenbank-Export/Import/Verlaufskomprimierung, SQL-Konsole, Neuladen, Suchindex, Sicherheitsspeicher, Verschlüsselung)
Abspaltung von #30047. Folge von #29767, siehe auch: #29108, #30057, #30058.
Kontext
Die Verwaltung der React-Benutzeroberfläche erfolgt über „admin/admin.view.xml“ von „tl-layout-view“ (Abschnitte „Zugriffskontrolle“, „Überwachung“, „System“; weitere Abschnitte werden durch Overlays mit gleichem Pfad bereitgestellt, siehe den Entwicklerartikel „view-layer/overlays“).
Die klassische Benutzeroberfläche verfügt über die Registerkarte „Administration“ -> „Technisch“ -> „Wartung“ (admin/technical/maintenancePages/maintenanceView.layout.xml). Sie listet alle JSPs im Verzeichnis /jsp/administration/maintenance/ (MaintenanceTableModelBuilder) auf und zeigt die ausgewählte Seite in einem IFRAME an. Bei den JSPs handelt es sich um sehr unterschiedliche Werkzeuge (Export der Datenbank, Roh-SQL, Neuladen von Ressourcen, Testseiten, Vorlagen). Die meisten davon sind Befehle mit einer Eingabeaufforderung. Die klassische Registerkarte und ihre JSPs bleiben erhalten und dienen weiterhin der klassischen Benutzeroberfläche.
Funktion
Die nach wie vor nützlichen Wartungsfunktionen sind in der React-Administration verfügbar. Eine Funktion, die als Befehl auf etwas einwirkt, ist ein Befehl, bei dem dieses „Etwas“ angezeigt wird, und keine eigene Seite. Ein Befehl mit Eingabefeld öffnet ein Dialogfeld.
System -> Datenbank (neue Ansicht):
- Der Zustand der Datenbank: Produkt und Version, JDBC-Treiber, SQL-Dialekt, aktuelle Revision und älteste im Verlauf gespeicherte Revision, jeweils mit dem Zeitpunkt des Commits.
- Dump exportieren: Lädt einen Dump der gesamten Datenbank herunter (gzippedes XML). Der Dump lässt den Sicherheitsspeicher und den Laufzeitzustand der Installation (Tabellen CLUSTER_NODE, CLUSTER_VALUE) außer Acht.
- Dump importieren: Lädt einen Dump hoch und zeigt dessen Datenversion sowie die erforderliche Migration an. Es konvertiert den Dump in ein SQL-Skript oder ein Oracle SQL*Loader-Skript zum Herunterladen oder ersetzt damit die gesamten Daten der Anwendung. Das Ersetzen erfordert ein aktives Wartungsfenster und einen einzigen laufenden Clusterknoten, wird zweimal bestätigt, läuft während der Neustart der Persistenzschicht und behält den Laufzeitzustand der Installation bei (das Wartungsfenster bleibt aktiv).
- Kompaktierungsverlauf: Dialogfeld mit einem Datum (standardmäßig vor einem Jahr), „Analysieren “ und „Kompaktieren“. Die Kompaktierung erfordert ein aktives Wartungsfenster und einen einzigen laufenden Clusterknoten und muss bestätigt werden; sie läuft als Hintergrundjob und startet anschließend die Persistenzschicht neu.
System -> SQL-Konsole (neue Ansicht): SQL-Eingabe, Abfrage ausführen (Ergebnis als Tabelle mit den Spalten des Ergebnisses, begrenzt auf eine maximale Zeilenzahl), Aktualisierung ausführen (mit Bestätigung; die Caches der Wissensbasis erkennen geänderte Zeilen erst, wenn die Persistenzschicht neu gestartet wurde), „Update simulieren“ (ausgeführt und zurückgesetzt), die im Fenster ausgeführten Anweisungen (durch Aktivieren einer Anweisung wird diese wieder in die Eingabezeile gesetzt), „Verlauf löschen“. Die Anweisungen werden in das Anwendungsprotokoll geschrieben, die Ergebnisse jedoch nicht.
System -> Neu laden (neue Ansicht): die registrierten neu ladbaren Ressourcen (ReloadableManager) mit einem Filter, der Befehl „Neu laden“ für die ausgewählten Ressourcen. Ein fehlgeschlagener Neuladevorgang wird pro Eintrag mit dem Grund gemeldet.
System -> Dienste, Detailseite eines Dienstes: Befehle für einen bestimmten Diensttyp, die nur angezeigt werden, wenn der laufende Dienst diesem Typ entspricht (TL-Script serviceInstanceOf($module, '<Klasse oder Schnittstelle>')). Weitere Module fügen Befehle für ihre Dienste hinzu, indem sie eine Überlagerung mit demselben Pfad für „admin/system/services/service-detail.view.xml“ ( Detail-Panel) erstellen. Die Befehle werden als Hintergrundaufträge ausgeführt, deren Status auf der Seite angezeigt wird.
- Indizierungsdienst: Index neu erstellen (mit Bestätigung), Typen neu indizieren (Dialog: zu indizierende Typen, nur noch nicht indizierte Objekte). Das Starten und Stoppen des Index entspricht dem Starten und Stoppen des Dienstes.
- Zugriffsmanager mit Sicherheitsspeicher: Sicherheitsspeicher neu aufbauen (mit Bestätigung).
System -> Geheimnisse: Wert verschlüsseln und Wert entschlüsseln (Dialog: Wert, Format) für die beiden verschlüsselten Formen, die eine Konfiguration akzeptiert: die Konfigurationsverschlüsselung ({gcm}..., jede verschlüsselte Konfigurationseigenschaft) und die RSA-Verschlüsselung von CryptSupport ( LDAP-Master-Anmeldeinformationen, <crypt-support-secret>). Fehler werden gemeldet, ohne den Wert preiszugeben; Werte werden niemals protokolliert.
Zugriffskontrolle -> Konten: Spalte „Letzte Anmeldung“ (Auslesen aller Konten mit einer Abfrage). Beim Export der Tabelle werden Datums- und Zeit-Spalten mit der entsprechenden Tageszeit geschrieben.
Nicht portiert
- An anderer Stelle behandelt: ActiveModules.jsp (System -> Dienste), CheckMemory.jsp (Überwachung -> Anwendung), ReleaseMemory.jsp (Speicherdiagramm, #30058), TriggerTask.jsp und ActivateMailServerDaemon.jsp (Scheduler, #30057).
- Settings.jsp (Laufzeit-Flags), die E-Mail-Seiten (SendTestMail.jsp, TestMailServer.jsp, TestMailConnect.jsp).
- Vorlagen und Testseiten: Dummy.jsp, Migration_Template_DeleteAttributes.jsp, DeleteSpareWebfolders.jsp, FixWebFolders.jsp, TestJDBCAccess.jsp, PerformanceTest.jsp, benchmark/.
Wird noch behoben
Die oben genannten Funktionen funktionierten in einer laufenden Anwendung aufgrund der folgenden Fehler, die auch die klassische Benutzeroberfläche betreffen, nicht zuverlässig:
- Nach einer Verlaufskompaktierung schlug jede Änderung an einem Objekt, das zuletzt vor der Kompaktierung geändert wurde, bis zum nächsten Neustart der JVM als „verlorene Aktualisierung“ fehl: Die Kompaktierung überschreibt die Startrevision der aktuellen Zeilen, die zwischengespeicherten Objekte kannten jedoch noch die alte. Die zwischengespeicherten Objekte werden nun an die Komprimierung angepasst (DBKnowledgeBase.historyCompacted).
- Ein nach einer Verlaufskomprimierung erstellter Dump enthielt keine Objekte, die in der Komprimierungsrevision erstellt wurden (ItemEventReader übersprang sie als Zweigkopien des Trunks); beim Importieren blieb die Datenbank leer.
- Der Neustart der Persistenzschicht nach einer Komprimierung oder einem Import machte die Anwendung unbrauchbar: Der Session-Dienst beendete keine Sitzungen mehr beim ersten fehlgeschlagenen Abmeldevorgang, er entwertete die HTTP-Sitzungen nicht (ein noch offenes Fenster verwendete dann Objekte der alten Wissensbasis) und beendete sie erst, nachdem der Person Manager beendet worden war. Instanziierte React-Ansichten behielten Modellteile der alten Wissensdatenbank bei. Anfragen, die während des Neustarts eintrafen, erhielten eine Fehlermeldung anstelle der „Besetzt“-Seite (die sich nun so lange neu lädt, bis die Anwendung wieder verfügbar ist).
- In einem Cluster wurde beim sofortigen Wechsel in den Wartungsmodus die Mindestwartezeit des Clusters abgewartet, auch wenn kein anderer Knoten lief.
- Der Dump behielt den Sicherheitsspeicher bei, obwohl die Dokumentation etwas anderes angab; er enthielt zudem den Laufzeitzustand der Installation, sodass das Importieren eines Dumps den Wartungszustand zum Zeitpunkt des Exports wiederherstellte.
- <close-dialog> wurde ignoriert, wenn es nach einer Aktion ausgeführt wurde, die den Befehl zurückhielt (<start-job>, <confirm>, <verify-identity>), z. B. in den Dialogen zum Ändern des Passworts und der Stellvertreter.
- Ein abgeschlossener Job zeigte neben seinem Ergebnis weiterhin seine letzte Fortschrittsmeldung an.
- ReloadableManager meldete ein fehlgeschlagenes Neuladen nur auf der Stufe „INFO“ und ohne Angabe des Grundes.
Überprüfung
tl-demo-react (/view/, root / root1234), Administration -> System -> Datenbank / SQL-Konsole / Neu laden / Dienste (Zugriffsmanager; Indizierungsdienst mit tl-search-lucene) / Geheimnisse, Administration -> Zugriffskontrolle -> Konten. Tests: TestHistoryCompaction, TestKBLoad, TestSqlFunctions, TestSecretFunctionsEncryption, TestReloadableManager, TestReloadableFunctions, TestAccountFunctions, TestColumnExport, TestSuspendedCommands, TestDatabaseState.
Migration
- Die Ansicht admin/system/logs.view.xml (Modul tl-layout-view) befindet sich nun unter admin/monitoring/logs.view.xml. Ein gleichnamiges Overlay einer Anwendung (WEB-INF/views/admin/system/logs.view.xml) oder ein <view-ref view="admin/system/logs.view.xml"/> muss auf den neuen Pfad umgestellt werden; ein Overlay auf den alten Pfad hat keine Basis mehr.