<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://download.osbee.org/documentation/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mollik</id>
		<title>OS.bee documentation - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://download.osbee.org/documentation/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mollik"/>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php/Special:Contributions/Mollik"/>
		<updated>2026-11-12T22:26:06Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4635</id>
		<title>Releasenotes 2026 OS.pos</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4635"/>
				<updated>2026-11-11T10:22:16Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261110 ==&lt;br /&gt;
&lt;br /&gt;
Schwerpunkt dieses Zeitraums ist ein '''schnellerer und ruhigerer Start''' der Kasse. &amp;lt;br&amp;gt;Dazu kommen Datenimporte, die Datumsangaben in den üblichen Schreibweisen lesen, nicht nur im Format, das im Modell definiert ist.&lt;br /&gt;
&lt;br /&gt;
== Änderungen ==&lt;br /&gt;
&lt;br /&gt;
* Änderung: Die Kasse ist nach dem Start deutlich schneller bereit. Die Datenbank wird angebunden, während die Modelle noch eingelesen werden, statt danach. Betroffene Komponenten: Softwarefactory 5.3.0.20261109&lt;br /&gt;
* Fix: Wird die Kasse kurz nach dem Start im Browser geöffnet, erscheint weder eine weiße Seite noch die Meldung „Failed to load the widgetset“. Die Startseite („Starting …“) bleibt stehen, bis die Kasse bereit ist, und lädt dann von selbst die Anmeldung. Ein Neuladen mit F5 ist nicht mehr nötig. Betroffene Komponenten: Softwarefactory 5.3.0.20261109&lt;br /&gt;
* Änderung: Die Datenimporte des Backoffice lesen Datumsangaben in den üblichen Schreibweisen, zum Beispiel 30.01.2023 oder 2023-01-30, jeweils auch mit Uhrzeit. Dateien mit deutschem Datum, etwa die Zuordnung von Kunden zu exklusiven Produktgruppen, werden damit ohne Anpassung eingelesen. Ungültige Daten wie der 31.02. und Schreibweisen mit Schrägstrich (01/02/2023) werden wie bisher abgelehnt. Betroffene Komponenten: net.osbee.app.pos.backoffice/net.osbee.app.pos.backoffice.datainterchange, Softwarefactory 5.3.0.20261109&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261109|Softwarefactory 20261109]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20261103 (OS) ==&lt;br /&gt;
&lt;br /&gt;
Schwerpunkt dieses Zeitraums ist das '''Speicherwachstum des Kassendienstes''' über einen Verkaufstag: Ursachen gefunden, behoben und an einer Kasse nachgemessen.&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261104|Softwarefactory 20261104]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261012 ==&lt;br /&gt;
&lt;br /&gt;
Schwerpunkt dieses Zeitraums ist das '''Speicherwachstum des Kassendienstes''' über einen Verkaufstag: Ursachen gefunden, behoben und an einer Kasse nachgemessen. Daneben wurde die Verfügbarkeitsprüfung der Webservices auf eine Implementierung zusammengeführt und ein Datumsfehler darin behoben.&lt;br /&gt;
&lt;br /&gt;
=== Neue Funktionen ===&lt;br /&gt;
* '''NF 525 – Neustart durch den Bediener im Ereignisjournal:''' Ein über die Dienststeuerungsseite (&amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;) ausgelöster Neustart wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben, mit dem auslösenden Bediener. Bisher zeigte das Journal nur „System gestoppt“ und „System gestartet“, nicht aber, wer den Neustart veranlasst hat.&lt;br /&gt;
&lt;br /&gt;
=== Fehlerbehebungen ===&lt;br /&gt;
* '''Speicherwachstum je Verkauf:''' Die DTOs von &amp;lt;code&amp;gt;net.osbee.app.pos.common&amp;lt;/code&amp;gt; wurden neu generiert und halten nur noch Klasse und ID ihrer Entität statt der Entität selbst. Zusammen mit den Korrekturen im Framework (siehe Releasenotes der Softwarefactory, Version 5.3.0.20261012) hält eine Kasse je Verkauf praktisch keinen Persistenzkontext mehr fest; vorher waren es rund 42 je Verkauf, etwa 1 MB.&lt;br /&gt;
* '''Kassenabschluss gibt seine Daten wieder frei:''' Nach dem Speichern eines Kassenabschlusses werden die dafür im Zustandsautomaten abgelegten Daten entfernt. Sie hielten über ihre Mapping-Kontexte alle Bons und Zahlungen der abgeschlossenen Periode bis zum nächsten Abschluss fest.&lt;br /&gt;
* '''NF 525 – Ereignisjournal:''' Beim Anhängen eines Eintrags wird nicht mehr das gesamte Journal gelesen, um dessen letzten Eintrag zu finden. Der Aufwand je Eintrag wuchs bisher mit der Länge des Journals.&lt;br /&gt;
* '''Webservice-Verfügbarkeitsprüfung über Mitternacht:''' Ein als nicht erreichbar vermerkter Webservice wurde nach Mitternacht zu spät oder gar nicht mehr erneut geprüft, weil der Zeitstempel als Millisekunden des Tages abgelegt war. Ein Ausfall um 20:00 Uhr hielt den Webservice bis 21:00 Uhr des Folgetags abgeschaltet, ein Ausfall ab 23:00 Uhr dauerhaft. Der Zeitstempel ist nun fortlaufend.&lt;br /&gt;
&lt;br /&gt;
=== Aktualisierungen ===&lt;br /&gt;
* '''Webservice-Verfügbarkeitsprüfung zusammengeführt:''' Die Prüfung existierte viermal (zweimal in &amp;lt;code&amp;gt;net.osbee.app.pos.common&amp;lt;/code&amp;gt;, zweimal in &amp;lt;code&amp;gt;net.osbee.sample.pos&amp;lt;/code&amp;gt;). Einzige Implementierung ist nun &amp;lt;code&amp;gt;WebService.check(sm, ws)&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;posbase&amp;lt;/code&amp;gt;; die übrigen delegieren dorthin. Der Zustand wird je Webservice in &amp;lt;code&amp;gt;ws.accesible&amp;lt;/code&amp;gt; geführt, der gemeinsame Speicherschlüssel entfällt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261012|Softwarefactory 20261012]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261006 ==&lt;br /&gt;
&lt;br /&gt;
* Ergänzung bei Kundenkartenverarbeitung&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260907 ==&lt;br /&gt;
&lt;br /&gt;
* Schwerpunkt dieses Zeitraums ist die französische Fiskalkonformität '''NF 525''' (WORM-Sicherungseinrichtung, Write-once-Nachweis, Geräte-Lebenszyklus) sowie die Auslagerung des '''DSFinV-K'''-Datenmodells. &lt;br /&gt;
&lt;br /&gt;
=== Änderungen / Neue Funktionen ===&lt;br /&gt;
&lt;br /&gt;
* '''Ausgeschlossene Zahlarten:''' Die Perspektive für ausgeschlossene Zahlungsarten wurde zur Kundenpflege verschoben.&lt;br /&gt;
* '''Benutzerverwaltung:''' Die automatische Synchronisierung der einzelnen views in der Benutzerverwaltungsperspektive wurde abgeschaltet.&lt;br /&gt;
* '''Authentifizierung:''' Die Authentifizierungs-Logger wurden zusammengefasst und schreiben wieder in eine Datei.&lt;br /&gt;
* '''remember me Anmeldefunktion:''' überarbeitet, Cookieverwendung sicherer gemacht.&lt;br /&gt;
* '''Kennwort vergessen?:''' Zurücksetzen des Kennworts löst eine Benutzersperre nicht mehr automatisch auf. Dies muss aktiv durch den Administrator geschehen.&lt;br /&gt;
* '''showResetPasswordOnScreen:''' neuer Konfigurationsschlüssel. Default: false. Bei true wird das neue Passwort im Log angezeigt, falls lein Mailserver kongiguriert ist.&lt;br /&gt;
&lt;br /&gt;
* '''NF 525 – WORM Write-once-Nachweis:''' Ein zertifiziertes WORM-Gerät darf Fiskalverkäufe erst nach einem signierten &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;-Verdikt tragen. Ein asynchroner Probe-Lauf weist die Write-once-Eigenschaft nach (das Medium nimmt eine Teständerung zurück); der Verdikt wird signiert und ist „sticky&amp;quot;. ''(cache-defeat probe, verbreiterte Signaturspalte)''&lt;br /&gt;
* '''NF 525 – Zertifizierungs-Gate:''' Auf einem zertifizierten Gerät führen Struktur-/Integritätsfehler zu einem harten Verkaufsstopp (STOP_SALES); auf einem nicht-zertifizierten Gerät wird die Anomalie nur als Warnung protokolliert (warn-only) und dem Kassierer als Hinweis am Verkauf angezeigt.&lt;br /&gt;
* '''NF 525 – Reaktivierung der Write-once-Bestätigung:''' Der zuvor pausierte Bestätigungs-Block wurde wieder aktiviert; der Scheduler führt ein zertifiziertes Gerät nun wieder von &amp;lt;code&amp;gt;PENDING&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''NF 525 – Schutz gegen Zertifizierungs-Downgrade:''' Eine bereits fiskalisch aktive, zertifizierte Kasse kann nicht mehr auf ein nicht-zertifiziertes oder entferntes Sicherungsgerät umgestellt werden (Geräte-Tausch), und ein zertifiziertes Gerät kann nicht mehr in-place ent-zertifiziert werden. Beide Wege werden abgewiesen (Umgehung der zertifizierten Durchsetzung verhindert).&lt;br /&gt;
* '''NF 525 – Auditierung von Geräte-Konfigurationsänderungen:''' Eine Änderung an der zertifizierungsrelevanten WORM-Konfiguration wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben.&lt;br /&gt;
* '''NF 525 – Retention/Archivierung beim Geräte-Tausch:''' Perioden ohne Fiskaldatensätze werden nicht mehr als leeres ZIP archiviert, sondern als schlanker „abgedeckt&amp;quot;-Marker vermerkt (kein Medium-Scan) – die „Gespeichert&amp;quot;-Rückmeldung nach einem Geräte-Tausch kommt dadurch deutlich schneller. Zum Abschluss wird eine Zusammenfassung protokolliert.&lt;br /&gt;
* '''NF 525 – Write-once-Probe:''' Die Anwesenheit der Probe-Datei wird nun über eine frische Verzeichnis-Enumeration gelesen (behebt eine Fehlerkennung durch veraltete Verzeichnis-Zwischenstände).&lt;br /&gt;
* '''Internationalisierung:''' Neue NF-525-WORM-Schlüssel (Write-once, worm_protection, warn-only) in das zentrale Übersetzungsbündel gespiegelt; allgemeine Vokabular-Erweiterungen.&lt;br /&gt;
* '''Rechnungsdruck (Invoice2p):''' NF-525-Daten in der Rechnungsvorlage berücksichtigt.&lt;br /&gt;
* '''Bondruck:''' NF-525-Daten ergänzt&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260907|Softwarefactory 5.2.0.20260907]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260707 ==&lt;br /&gt;
&lt;br /&gt;
Diese Ausgabe bringt vor allem die Unterstützung französischer Kassen voran: eine&lt;br /&gt;
vollständige AZERTY-Tastaturunterstützung (physisch und als Bildschirmtastatur), das&lt;br /&gt;
französische Zahlungsterminal-Protokoll CAISSE-AP inklusive Simulator sowie virtuelle&lt;br /&gt;
Peripheriegeräte für Test und Diagnose. Ergänzt wird dies durch NF525-Härtungen,&lt;br /&gt;
Fehlerbehebungen bei Kartenzahlungen und eine durchgängige Vereinheitlichung der&lt;br /&gt;
Übersetzungsdateien.&lt;br /&gt;
&lt;br /&gt;
* Die '''physische französische AZERTY-Tastatur''' wird nun vollständig unterstützt. Der komplette Zeichensatz wurde auf realer Hardware getestet; die zuvor fehlende '''ù-Taste''' wurde ergänzt.&lt;br /&gt;
* Die '''Bildschirmtastatur''' (On-Screen-Keypad) &lt;br /&gt;
** bildet nun eine echte französische AZERTY-Belegung über alle drei Ebenen ab (Grundebene, Umschalt, AltGr) inklusive Akzentkomposition über die Tottasten ^ und ¨.&lt;br /&gt;
** folgt jetzt '''einheitlich der Oberflächensprache''': Französisch → AZERTY, Englisch → englische Belegung, alle übrigen Sprachen → deutsches QWERTZ. Die Belegung wird beim Öffnen des Dialogs in der aktiven Sprache neu aufgebaut.&lt;br /&gt;
* Neue Konfiguration '''Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry''' zur Auswahl der physischen Tastaturbelegung je Kasse.&lt;br /&gt;
&lt;br /&gt;
* '''CAISSE-AP – französisches Zahlungsterminal'''&lt;br /&gt;
** Unterstützung des '''Tagesabschlusses (télécollecte)''' für Concert/CAISSE-AP-Terminals; die obligatorischen Felder CB und CE werden nun sowohl in der Abschluss- als auch in der Abbruch-Anfrage übertragen.&lt;br /&gt;
&lt;br /&gt;
* NF525 / Fiskalkonformität&lt;br /&gt;
** Die '''Persistierung des Grand-Totals''' ist nun zwingende Vorbedingung für die Signatur eines Belegs – verhindert eine Signatur bei unvollständig gespeichertem Umsatzzähler. ''(net.osbee.app.pos.common d5a4578ec)''&lt;br /&gt;
&lt;br /&gt;
* Kartenzahlung&lt;br /&gt;
** Eine Kartenzahlung kann nun korrekt '''storniert''' werden: das Belegfeld (receipt) wird aus dem CJ-Feld der Concert-Antwort befüllt.&lt;br /&gt;
** Das '''Löschen einer nicht stornierbaren Terminal-Zahlung''' wird blockiert, um inkonsistente Zustände zu vermeiden. &lt;br /&gt;
** setPaymentTerminalReversal stürzt bei einer fehlerhaften Anfrage nicht mehr ab. &lt;br /&gt;
&lt;br /&gt;
* Oberfläche / Internationalisierung ===&lt;br /&gt;
** Die '''Laufzeit-Sprachumschaltung''' funktioniert nun in der Kassierperspektive&lt;br /&gt;
** Zentrale Übersetzungen aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Systemvoraussetzungen ===&lt;br /&gt;
** Für den französischen Markt: Zahlungsterminal mit CAISSE-AP-/Concert-Protokoll (CB-Port 8888, konfigurierbae), physische AZERTY-Tastatur optional&lt;br /&gt;
** Konfiguration je Kasse über Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry und Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardLayout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260707|Softwarefactory 5.2.0.20260707]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260618 ==&lt;br /&gt;
&lt;br /&gt;
* Version von 5.2 auf 5.3&lt;br /&gt;
* frz. Fiskalanforderungen: erste Implementierung&lt;br /&gt;
* frz. Übersetzungen aktualisiert&lt;br /&gt;
* Verwendung frz. Tastatur in Kassiersicht&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260618|Softwarefactory 5.3.0.20260618]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260410 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Fix Performanceproblem ( eingeführt mit 4.5.7-V20260402 (OS) ), dbcaching Einstellungen&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260410|Softwarefactory 5.2.0.20260410]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260402 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Automatischer Wechsel zum Status &amp;lt;code&amp;gt;PAYMENTTERMINAL_REPEATRECEIPT&amp;lt;/code&amp;gt; im Modus 'store' (statt 'print') bei leeren Bonzeilen&lt;br /&gt;
** Neue Funktion &amp;lt;code&amp;gt;attachRemarks&amp;lt;/code&amp;gt; zum Zeichnen von Bonbemerkungen und deren Verknüpfung mit dem Kassenbon&lt;br /&gt;
** Möglichkeit zur Eingabe von freien Bemerkungen zum Kassenbon&lt;br /&gt;
** Bonbemerkungen: &amp;lt;code&amp;gt;observeFocus&amp;lt;/code&amp;gt; von remark1/2 an Events gebunden&lt;br /&gt;
&lt;br /&gt;
* Kassenkonfiguration:&lt;br /&gt;
** Menüeintrag für Stammdaten der Bonbemerkungen hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Neue Entitäten für Bonbemerkungen (SlipRemarks)&lt;br /&gt;
** Neue Spalten &amp;lt;code&amp;gt;remark_1&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;remark_2&amp;lt;/code&amp;gt; für CashSlip-Entität&lt;br /&gt;
** Dialoge, Tabellen und Perspektive für Bonbemerkungen implementiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7.20260305 (OS) ==&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260305|Softwarefactory 5.2.0.20260305]]&lt;br /&gt;
&lt;br /&gt;
* Berichtanzeige&lt;br /&gt;
** Fix: Probleme bei der Berichtsanzeige mit schneller Klickfolge in Auswahltabelle behoben.&lt;br /&gt;
&lt;br /&gt;
* Kassenschluss:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;determineCloseExpectation&amp;lt;/code&amp;gt; - Sortierung von CashPaymentTermData nach traceNumber absteigend, um den letzten Eintrag zu erhalten&lt;br /&gt;
&lt;br /&gt;
* Kassenentsorgung:&lt;br /&gt;
** Neues Systemprodukt &amp;quot;fee&amp;quot; aktiviert&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Einige Entitäten auf &amp;lt;code&amp;gt;cacheable=false&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
** Entitäten mit escaped Spaltennamen aktualisiert&lt;br /&gt;
** Generierte Entitäten und DTOs aktualisiert&lt;br /&gt;
** Entitäten mit neuem Service Framework aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;canUnparkSelected&amp;lt;/code&amp;gt; - Ablehnung eines Slips mit Zahlungen an einer SiS-Kasse&lt;br /&gt;
** Fix: PRINT_SLIP - &amp;lt;code&amp;gt;onOK&amp;lt;/code&amp;gt; verlässt nicht, wenn Slip änderbar ist&lt;br /&gt;
** Neue Eingabeaktion für MODIFY_FLD, setzt &amp;lt;code&amp;gt;cashposiupdate&amp;lt;/code&amp;gt; auf ausgewählte Position&lt;br /&gt;
&lt;br /&gt;
* Archivierung:&lt;br /&gt;
** &amp;lt;code&amp;gt;archivDescription xml-os&amp;lt;/code&amp;gt; für XML-Format der Beschreibungsdatei für Archiv hinzugefügt&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4634</id>
		<title>Releasenotes 2026 OS.pos</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4634"/>
				<updated>2026-11-09T13:01:08Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261109 ==&lt;br /&gt;
&lt;br /&gt;
Schwerpunkt dieses Zeitraums ist ein '''schnellerer und ruhigerer Start''' der Kasse. &amp;lt;br&amp;gt;Dazu kommen Datenimporte, die Datumsangaben in den üblichen Schreibweisen lesen, nicht nur im Format, das im Modell definiert ist.&lt;br /&gt;
&lt;br /&gt;
== Änderungen ==&lt;br /&gt;
&lt;br /&gt;
* Änderung: Die Kasse ist nach dem Start deutlich schneller bereit. Die Datenbank wird angebunden, während die Modelle noch eingelesen werden, statt danach. Betroffene Komponenten: Softwarefactory 5.3.0.20261109&lt;br /&gt;
* Fix: Wird die Kasse kurz nach dem Start im Browser geöffnet, erscheint weder eine weiße Seite noch die Meldung „Failed to load the widgetset“. Die Startseite („Starting …“) bleibt stehen, bis die Kasse bereit ist, und lädt dann von selbst die Anmeldung. Ein Neuladen mit F5 ist nicht mehr nötig. Betroffene Komponenten: Softwarefactory 5.3.0.20261109&lt;br /&gt;
* Änderung: Die Datenimporte des Backoffice lesen Datumsangaben in den üblichen Schreibweisen, zum Beispiel 30.01.2023 oder 2023-01-30, jeweils auch mit Uhrzeit. Dateien mit deutschem Datum, etwa die Zuordnung von Kunden zu exklusiven Produktgruppen, werden damit ohne Anpassung eingelesen. Ungültige Daten wie der 31.02. und Schreibweisen mit Schrägstrich (01/02/2023) werden wie bisher abgelehnt. Betroffene Komponenten: net.osbee.app.pos.backoffice/net.osbee.app.pos.backoffice.datainterchange, Softwarefactory 5.3.0.20261109&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261109|Softwarefactory 20261109]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20261103 (OS) ==&lt;br /&gt;
&lt;br /&gt;
Schwerpunkt dieses Zeitraums ist das '''Speicherwachstum des Kassendienstes''' über einen Verkaufstag: Ursachen gefunden, behoben und an einer Kasse nachgemessen.&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261104|Softwarefactory 20261104]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261012 ==&lt;br /&gt;
&lt;br /&gt;
Schwerpunkt dieses Zeitraums ist das '''Speicherwachstum des Kassendienstes''' über einen Verkaufstag: Ursachen gefunden, behoben und an einer Kasse nachgemessen. Daneben wurde die Verfügbarkeitsprüfung der Webservices auf eine Implementierung zusammengeführt und ein Datumsfehler darin behoben.&lt;br /&gt;
&lt;br /&gt;
=== Neue Funktionen ===&lt;br /&gt;
* '''NF 525 – Neustart durch den Bediener im Ereignisjournal:''' Ein über die Dienststeuerungsseite (&amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;) ausgelöster Neustart wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben, mit dem auslösenden Bediener. Bisher zeigte das Journal nur „System gestoppt“ und „System gestartet“, nicht aber, wer den Neustart veranlasst hat.&lt;br /&gt;
&lt;br /&gt;
=== Fehlerbehebungen ===&lt;br /&gt;
* '''Speicherwachstum je Verkauf:''' Die DTOs von &amp;lt;code&amp;gt;net.osbee.app.pos.common&amp;lt;/code&amp;gt; wurden neu generiert und halten nur noch Klasse und ID ihrer Entität statt der Entität selbst. Zusammen mit den Korrekturen im Framework (siehe Releasenotes der Softwarefactory, Version 5.3.0.20261012) hält eine Kasse je Verkauf praktisch keinen Persistenzkontext mehr fest; vorher waren es rund 42 je Verkauf, etwa 1 MB.&lt;br /&gt;
* '''Kassenabschluss gibt seine Daten wieder frei:''' Nach dem Speichern eines Kassenabschlusses werden die dafür im Zustandsautomaten abgelegten Daten entfernt. Sie hielten über ihre Mapping-Kontexte alle Bons und Zahlungen der abgeschlossenen Periode bis zum nächsten Abschluss fest.&lt;br /&gt;
* '''NF 525 – Ereignisjournal:''' Beim Anhängen eines Eintrags wird nicht mehr das gesamte Journal gelesen, um dessen letzten Eintrag zu finden. Der Aufwand je Eintrag wuchs bisher mit der Länge des Journals.&lt;br /&gt;
* '''Webservice-Verfügbarkeitsprüfung über Mitternacht:''' Ein als nicht erreichbar vermerkter Webservice wurde nach Mitternacht zu spät oder gar nicht mehr erneut geprüft, weil der Zeitstempel als Millisekunden des Tages abgelegt war. Ein Ausfall um 20:00 Uhr hielt den Webservice bis 21:00 Uhr des Folgetags abgeschaltet, ein Ausfall ab 23:00 Uhr dauerhaft. Der Zeitstempel ist nun fortlaufend.&lt;br /&gt;
&lt;br /&gt;
=== Aktualisierungen ===&lt;br /&gt;
* '''Webservice-Verfügbarkeitsprüfung zusammengeführt:''' Die Prüfung existierte viermal (zweimal in &amp;lt;code&amp;gt;net.osbee.app.pos.common&amp;lt;/code&amp;gt;, zweimal in &amp;lt;code&amp;gt;net.osbee.sample.pos&amp;lt;/code&amp;gt;). Einzige Implementierung ist nun &amp;lt;code&amp;gt;WebService.check(sm, ws)&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;posbase&amp;lt;/code&amp;gt;; die übrigen delegieren dorthin. Der Zustand wird je Webservice in &amp;lt;code&amp;gt;ws.accesible&amp;lt;/code&amp;gt; geführt, der gemeinsame Speicherschlüssel entfällt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261012|Softwarefactory 20261012]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261006 ==&lt;br /&gt;
&lt;br /&gt;
* Ergänzung bei Kundenkartenverarbeitung&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260907 ==&lt;br /&gt;
&lt;br /&gt;
* Schwerpunkt dieses Zeitraums ist die französische Fiskalkonformität '''NF 525''' (WORM-Sicherungseinrichtung, Write-once-Nachweis, Geräte-Lebenszyklus) sowie die Auslagerung des '''DSFinV-K'''-Datenmodells. &lt;br /&gt;
&lt;br /&gt;
=== Änderungen / Neue Funktionen ===&lt;br /&gt;
&lt;br /&gt;
* '''Ausgeschlossene Zahlarten:''' Die Perspektive für ausgeschlossene Zahlungsarten wurde zur Kundenpflege verschoben.&lt;br /&gt;
* '''Benutzerverwaltung:''' Die automatische Synchronisierung der einzelnen views in der Benutzerverwaltungsperspektive wurde abgeschaltet.&lt;br /&gt;
* '''Authentifizierung:''' Die Authentifizierungs-Logger wurden zusammengefasst und schreiben wieder in eine Datei.&lt;br /&gt;
* '''remember me Anmeldefunktion:''' überarbeitet, Cookieverwendung sicherer gemacht.&lt;br /&gt;
* '''Kennwort vergessen?:''' Zurücksetzen des Kennworts löst eine Benutzersperre nicht mehr automatisch auf. Dies muss aktiv durch den Administrator geschehen.&lt;br /&gt;
* '''showResetPasswordOnScreen:''' neuer Konfigurationsschlüssel. Default: false. Bei true wird das neue Passwort im Log angezeigt, falls lein Mailserver kongiguriert ist.&lt;br /&gt;
&lt;br /&gt;
* '''NF 525 – WORM Write-once-Nachweis:''' Ein zertifiziertes WORM-Gerät darf Fiskalverkäufe erst nach einem signierten &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;-Verdikt tragen. Ein asynchroner Probe-Lauf weist die Write-once-Eigenschaft nach (das Medium nimmt eine Teständerung zurück); der Verdikt wird signiert und ist „sticky&amp;quot;. ''(cache-defeat probe, verbreiterte Signaturspalte)''&lt;br /&gt;
* '''NF 525 – Zertifizierungs-Gate:''' Auf einem zertifizierten Gerät führen Struktur-/Integritätsfehler zu einem harten Verkaufsstopp (STOP_SALES); auf einem nicht-zertifizierten Gerät wird die Anomalie nur als Warnung protokolliert (warn-only) und dem Kassierer als Hinweis am Verkauf angezeigt.&lt;br /&gt;
* '''NF 525 – Reaktivierung der Write-once-Bestätigung:''' Der zuvor pausierte Bestätigungs-Block wurde wieder aktiviert; der Scheduler führt ein zertifiziertes Gerät nun wieder von &amp;lt;code&amp;gt;PENDING&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''NF 525 – Schutz gegen Zertifizierungs-Downgrade:''' Eine bereits fiskalisch aktive, zertifizierte Kasse kann nicht mehr auf ein nicht-zertifiziertes oder entferntes Sicherungsgerät umgestellt werden (Geräte-Tausch), und ein zertifiziertes Gerät kann nicht mehr in-place ent-zertifiziert werden. Beide Wege werden abgewiesen (Umgehung der zertifizierten Durchsetzung verhindert).&lt;br /&gt;
* '''NF 525 – Auditierung von Geräte-Konfigurationsänderungen:''' Eine Änderung an der zertifizierungsrelevanten WORM-Konfiguration wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben.&lt;br /&gt;
* '''NF 525 – Retention/Archivierung beim Geräte-Tausch:''' Perioden ohne Fiskaldatensätze werden nicht mehr als leeres ZIP archiviert, sondern als schlanker „abgedeckt&amp;quot;-Marker vermerkt (kein Medium-Scan) – die „Gespeichert&amp;quot;-Rückmeldung nach einem Geräte-Tausch kommt dadurch deutlich schneller. Zum Abschluss wird eine Zusammenfassung protokolliert.&lt;br /&gt;
* '''NF 525 – Write-once-Probe:''' Die Anwesenheit der Probe-Datei wird nun über eine frische Verzeichnis-Enumeration gelesen (behebt eine Fehlerkennung durch veraltete Verzeichnis-Zwischenstände).&lt;br /&gt;
* '''Internationalisierung:''' Neue NF-525-WORM-Schlüssel (Write-once, worm_protection, warn-only) in das zentrale Übersetzungsbündel gespiegelt; allgemeine Vokabular-Erweiterungen.&lt;br /&gt;
* '''Rechnungsdruck (Invoice2p):''' NF-525-Daten in der Rechnungsvorlage berücksichtigt.&lt;br /&gt;
* '''Bondruck:''' NF-525-Daten ergänzt&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260907|Softwarefactory 5.2.0.20260907]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260707 ==&lt;br /&gt;
&lt;br /&gt;
Diese Ausgabe bringt vor allem die Unterstützung französischer Kassen voran: eine&lt;br /&gt;
vollständige AZERTY-Tastaturunterstützung (physisch und als Bildschirmtastatur), das&lt;br /&gt;
französische Zahlungsterminal-Protokoll CAISSE-AP inklusive Simulator sowie virtuelle&lt;br /&gt;
Peripheriegeräte für Test und Diagnose. Ergänzt wird dies durch NF525-Härtungen,&lt;br /&gt;
Fehlerbehebungen bei Kartenzahlungen und eine durchgängige Vereinheitlichung der&lt;br /&gt;
Übersetzungsdateien.&lt;br /&gt;
&lt;br /&gt;
* Die '''physische französische AZERTY-Tastatur''' wird nun vollständig unterstützt. Der komplette Zeichensatz wurde auf realer Hardware getestet; die zuvor fehlende '''ù-Taste''' wurde ergänzt.&lt;br /&gt;
* Die '''Bildschirmtastatur''' (On-Screen-Keypad) &lt;br /&gt;
** bildet nun eine echte französische AZERTY-Belegung über alle drei Ebenen ab (Grundebene, Umschalt, AltGr) inklusive Akzentkomposition über die Tottasten ^ und ¨.&lt;br /&gt;
** folgt jetzt '''einheitlich der Oberflächensprache''': Französisch → AZERTY, Englisch → englische Belegung, alle übrigen Sprachen → deutsches QWERTZ. Die Belegung wird beim Öffnen des Dialogs in der aktiven Sprache neu aufgebaut.&lt;br /&gt;
* Neue Konfiguration '''Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry''' zur Auswahl der physischen Tastaturbelegung je Kasse.&lt;br /&gt;
&lt;br /&gt;
* '''CAISSE-AP – französisches Zahlungsterminal'''&lt;br /&gt;
** Unterstützung des '''Tagesabschlusses (télécollecte)''' für Concert/CAISSE-AP-Terminals; die obligatorischen Felder CB und CE werden nun sowohl in der Abschluss- als auch in der Abbruch-Anfrage übertragen.&lt;br /&gt;
&lt;br /&gt;
* NF525 / Fiskalkonformität&lt;br /&gt;
** Die '''Persistierung des Grand-Totals''' ist nun zwingende Vorbedingung für die Signatur eines Belegs – verhindert eine Signatur bei unvollständig gespeichertem Umsatzzähler. ''(net.osbee.app.pos.common d5a4578ec)''&lt;br /&gt;
&lt;br /&gt;
* Kartenzahlung&lt;br /&gt;
** Eine Kartenzahlung kann nun korrekt '''storniert''' werden: das Belegfeld (receipt) wird aus dem CJ-Feld der Concert-Antwort befüllt.&lt;br /&gt;
** Das '''Löschen einer nicht stornierbaren Terminal-Zahlung''' wird blockiert, um inkonsistente Zustände zu vermeiden. &lt;br /&gt;
** setPaymentTerminalReversal stürzt bei einer fehlerhaften Anfrage nicht mehr ab. &lt;br /&gt;
&lt;br /&gt;
* Oberfläche / Internationalisierung ===&lt;br /&gt;
** Die '''Laufzeit-Sprachumschaltung''' funktioniert nun in der Kassierperspektive&lt;br /&gt;
** Zentrale Übersetzungen aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Systemvoraussetzungen ===&lt;br /&gt;
** Für den französischen Markt: Zahlungsterminal mit CAISSE-AP-/Concert-Protokoll (CB-Port 8888, konfigurierbae), physische AZERTY-Tastatur optional&lt;br /&gt;
** Konfiguration je Kasse über Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry und Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardLayout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260707|Softwarefactory 5.2.0.20260707]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260618 ==&lt;br /&gt;
&lt;br /&gt;
* Version von 5.2 auf 5.3&lt;br /&gt;
* frz. Fiskalanforderungen: erste Implementierung&lt;br /&gt;
* frz. Übersetzungen aktualisiert&lt;br /&gt;
* Verwendung frz. Tastatur in Kassiersicht&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260618|Softwarefactory 5.3.0.20260618]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260410 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Fix Performanceproblem ( eingeführt mit 4.5.7-V20260402 (OS) ), dbcaching Einstellungen&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260410|Softwarefactory 5.2.0.20260410]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260402 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Automatischer Wechsel zum Status &amp;lt;code&amp;gt;PAYMENTTERMINAL_REPEATRECEIPT&amp;lt;/code&amp;gt; im Modus 'store' (statt 'print') bei leeren Bonzeilen&lt;br /&gt;
** Neue Funktion &amp;lt;code&amp;gt;attachRemarks&amp;lt;/code&amp;gt; zum Zeichnen von Bonbemerkungen und deren Verknüpfung mit dem Kassenbon&lt;br /&gt;
** Möglichkeit zur Eingabe von freien Bemerkungen zum Kassenbon&lt;br /&gt;
** Bonbemerkungen: &amp;lt;code&amp;gt;observeFocus&amp;lt;/code&amp;gt; von remark1/2 an Events gebunden&lt;br /&gt;
&lt;br /&gt;
* Kassenkonfiguration:&lt;br /&gt;
** Menüeintrag für Stammdaten der Bonbemerkungen hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Neue Entitäten für Bonbemerkungen (SlipRemarks)&lt;br /&gt;
** Neue Spalten &amp;lt;code&amp;gt;remark_1&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;remark_2&amp;lt;/code&amp;gt; für CashSlip-Entität&lt;br /&gt;
** Dialoge, Tabellen und Perspektive für Bonbemerkungen implementiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7.20260305 (OS) ==&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260305|Softwarefactory 5.2.0.20260305]]&lt;br /&gt;
&lt;br /&gt;
* Berichtanzeige&lt;br /&gt;
** Fix: Probleme bei der Berichtsanzeige mit schneller Klickfolge in Auswahltabelle behoben.&lt;br /&gt;
&lt;br /&gt;
* Kassenschluss:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;determineCloseExpectation&amp;lt;/code&amp;gt; - Sortierung von CashPaymentTermData nach traceNumber absteigend, um den letzten Eintrag zu erhalten&lt;br /&gt;
&lt;br /&gt;
* Kassenentsorgung:&lt;br /&gt;
** Neues Systemprodukt &amp;quot;fee&amp;quot; aktiviert&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Einige Entitäten auf &amp;lt;code&amp;gt;cacheable=false&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
** Entitäten mit escaped Spaltennamen aktualisiert&lt;br /&gt;
** Generierte Entitäten und DTOs aktualisiert&lt;br /&gt;
** Entitäten mit neuem Service Framework aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;canUnparkSelected&amp;lt;/code&amp;gt; - Ablehnung eines Slips mit Zahlungen an einer SiS-Kasse&lt;br /&gt;
** Fix: PRINT_SLIP - &amp;lt;code&amp;gt;onOK&amp;lt;/code&amp;gt; verlässt nicht, wenn Slip änderbar ist&lt;br /&gt;
** Neue Eingabeaktion für MODIFY_FLD, setzt &amp;lt;code&amp;gt;cashposiupdate&amp;lt;/code&amp;gt; auf ausgewählte Position&lt;br /&gt;
&lt;br /&gt;
* Archivierung:&lt;br /&gt;
** &amp;lt;code&amp;gt;archivDescription xml-os&amp;lt;/code&amp;gt; für XML-Format der Beschreibungsdatei für Archiv hinzugefügt&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4633</id>
		<title>Releasenotes 2026 OS.Softwarefactory</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4633"/>
				<updated>2026-11-09T10:59:24Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261109 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Fix: Wird die Anwendung kurz nach dem Start im Browser geöffnet, erscheint nicht mehr die Meldung „Failed to load the widgetset“. Die Oberflächendateien (Widgetset, Themes, Symbole) werden jetzt gleich mit der Anwendung bereitgestellt und nicht erst, wenn alle Modelle eingelesen sind. Betroffene Komponenten: org.eclipse.osbp.vaaclipse.addons/org.eclipse.osbp.vaaclipse.addons.app&lt;br /&gt;
** Fix: Wird die Anwendung kurz nach dem Start im Browser geöffnet, bleibt die Seite nicht mehr weiß. Die Startseite („Starting …“) wird jetzt so lange angezeigt, bis auch alle Modelle eingelesen sind (Hinweis „the DSL models are being loaded“), und lädt danach von selbst die Anmeldung. Betroffene Komponenten: org.eclipse.osbp.vaaclipse.addons/org.eclipse.osbp.vaaclipse.addons.app&lt;br /&gt;
** Fix: QR-Codes in Bildfeldern werden jetzt angezeigt, z. B. auf der Kundenanzeige. Bisher blieb das Feld leer. Andere Barcodes und Bilder werden wie bisher angezeigt. Betroffene Komponenten: org.eclipse.osbp.runtime.web/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin&lt;br /&gt;
** Änderung: Die Anwendung ist beim Start schneller bereit. Die Datenbankanbindung wartet nicht mehr, bis alle Modelle vollständig eingelesen sind, sondern startet, sobald die Modelle gefunden sind; das Einlesen läuft parallel weiter. In der Entwicklungsumgebung war die Anwendung dadurch nach etwa 61 statt 111 Sekunden bereit. Betroffene Komponenten: org.eclipse.osbp.ui.api, org.eclipse.osbp.dsl/org.eclipse.osbp.xtext.builder.metadata.services, org.eclipse.osbp.dsl.metadata.service, org.eclipse.osbp.persistence, org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.configuration.service&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** Änderung: Auch die Editoren für Datenschnittstellen (Datainterchange) und Signale arbeiten jetzt wie der Editor der Funktionsbibliothek: Die Vorschläge (Strg+Leertaste) erscheinen auch in großen Dateien ohne spürbare Wartezeit, Gliederung, Einfärben und Ein- und Ausklappen bremsen das Tippen nicht mehr. Fehlermarkierungen und Gliederung erscheinen kurz nach dem Tippen. Betroffene Komponenten: org.eclipse.osbp.xtext.datainterchange/org.eclipse.osbp.xtext.datainterchange.ui, org.eclipse.osbp.xtext.signal/org.eclipse.osbp.xtext.signal.ui&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261106 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Neu: Die Seite &amp;lt;code&amp;gt;/showLog&amp;lt;/code&amp;gt; zeigt im laufenden Betrieb das Ende des Protokolls (die letzten 500 Zeilen), mit Textfilter, Aktualisieren und Herunterladen der aktuellen Datei. Anmelden können sich nur Benutzer mit der Superuser-Eigenschaft, mit derselben Sperre nach Fehlversuchen wie bei der normalen Anmeldung. Jeder Zugriff wird im Monitoring festgehalten. Die Seite ist standardmäßig ausgeschaltet und wird in der Systemkonfiguration mit &amp;lt;code&amp;gt;GLOBAL_PARAMETERS / showLog&amp;lt;/code&amp;gt; eingeschaltet. Da dabei ein Passwort übertragen wird, sollte die Anwendung über HTTPS erreichbar sein. Betroffene Komponenten: org.eclipse.osbp.vaaclipse.addons/org.eclipse.osbp.vaaclipse.addons.app, org.eclipse.osbp.ui.api, org.eclipse.osbp.authentication, org.eclipse.osbp.ecview.addons/org.eclipse.osbp.ecview.jetty.manager&lt;br /&gt;
** Neu: Auf der Seite &amp;lt;code&amp;gt;/showLog&amp;lt;/code&amp;gt; lässt sich die Schrift des Protokolls mit den Schaltflächen A− und A+ verkleinern und vergrößern. Die gewählte Größe bleibt beim Aktualisieren und Filtern erhalten, bis zur nächsten Anmeldung. Betroffene Komponenten: org.eclipse.osbp.vaaclipse.addons/org.eclipse.osbp.vaaclipse.addons.app&lt;br /&gt;
** Änderung: Wird eine falsche Adresse aufgerufen, zeigt die Hinweisseite jetzt alle Einstiegspunkte in einer Tabelle: Anwendung, Kundenanzeige (Display), Protokollseite und Dienststeuerung. Die automatische Weiterleitung zur Anwendung erfolgt nach 5 statt 3 Sekunden. Betroffene Komponenten: org.eclipse.osbp.ecview.addons/org.eclipse.osbp.ecview.jetty.manager&lt;br /&gt;
** Fix: Änderungen in der Systemkonfiguration wirken nach dem Speichern im Dialog wieder sofort. Seit Juni 2025 wurden Aufgaben, die nach dem Speichern im Hintergrund laufen sollen, nicht mehr ausgeführt; Konfigurationsänderungen wurden dadurch erst nach bis zu einer Stunde wirksam, und auch die Nachbearbeitung nach dem Speichern mancher Daten (z. B. für die Suche) unterblieb. Betroffene Komponenten: org.eclipse.osbp.dsl/org.eclipse.osbp.dsl.entity.postpersistservice&lt;br /&gt;
** Fix: Monitoring-Einträge mit dem Status „Info“ werden korrekt gespeichert. Bisher wurden sie als „Unbekannt“ abgelegt, und im Protokoll erschien ein Fehler. Nach dem Update wird die Datenbankstruktur des Monitorings einmalig geprüft. Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring.base&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** Änderung: Die Vorschläge im Editor der Funktionsbibliothek (Strg+Leertaste) erscheinen jetzt auch in großen Dateien ohne spürbare Wartezeit. Bisher wurde bei jedem Aufruf die ganze Datei neu gelesen, was in großen Dateien mehrere Sekunden dauern konnte. Die Gliederung (Outline) wird erst aktualisiert, wenn zwei Sekunden lang nicht getippt wurde, und bremst das Tippen dadurch nicht mehr. Auch das Einfärben und das Ein- und Ausklappen von Abschnitten werden nicht mehr bei jedem Aufruf der Vorschläge für die ganze Datei neu berechnet, sondern nur nach einer Änderung. Ist in der Gliederung „Mit Editor verknüpfen“ eingeschaltet, wartet der Editor nach größeren Änderungen nicht mehr, bis die Datei vollständig geprüft ist. Betroffene Komponenten: org.eclipse.osbp.xtext.functionlibrary/org.eclipse.osbp.xtext.functionlibrarydsl.ui&lt;br /&gt;
** Änderung: Die Editoren für Entitäten, DTOs, Statemachines und Datamarts arbeiten jetzt wie der Editor der Funktionsbibliothek: Die Vorschläge (Strg+Leertaste) erscheinen auch in großen Dateien ohne spürbare Wartezeit, Gliederung, Einfärben und Ein- und Ausklappen bremsen das Tippen nicht mehr. Nur der erste Aufruf der Vorschläge nach dem Start der Entwicklungsumgebung dauert etwas länger. Fehlermarkierungen und Gliederung erscheinen kurz nach dem Tippen. Betroffene Komponenten: org.eclipse.osbp.xtext.oxtype/org.eclipse.osbp.xtext.oxtype.ui, org.eclipse.osbp.dsl/org.eclipse.osbp.dsl.entity.xtext.ui, org.eclipse.osbp.dsl/org.eclipse.osbp.dsl.dto.xtext.ui, org.eclipse.osbp.xtext.statemachine/org.eclipse.osbp.xtext.statemachine.ui, org.eclipse.osbp.xtext.datamart/org.eclipse.osbp.xtext.datamartdsl.ui&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Änderung: Die Entwicklungsumgebung schreibt bei jedem Bauen nicht mehr die Versionsangaben aus Git in die Projekte. Das hat das Bauen in der Entwicklungsumgebung spürbar verlangsamt und oft eine weitere Baurunde ausgelöst. Die Versionsangaben entstehen weiterhin beim Bauen auf dem Build-Server, die ausgelieferten Stände enthalten sie wie bisher. Entwickler führen danach einmal in der Entwicklungsumgebung „Maven &amp;gt; Update Project“ mit „Force Update of Snapshots“ aus (Alt+F5). Betroffene Komponenten: org.eclipse.osbp.releng.maven, org.eclipse.osbp.releng.maven/org.eclipse.osbp.releng.maven.parent.tycho, org.osbee.releng.maven, org.osbee.releng.maven/org.osbee.releng.maven.parent.tycho, net.osbee.releng.maven, net.osbee.releng.maven/net.osbee.releng.maven.parent.tycho, net.osbee.app.releng.maven, net.osbee.app.releng.maven/net.osbee.app.releng.maven.parent.tycho&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261105 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Änderung: Beim Start wird die Datenbankstruktur nur noch geprüft, wenn sich das Datenmodell wirklich geändert hat, auch nach einem Update. Ein neuer Stand der Anwendung ohne Änderung am Datenmodell startet dadurch ohne diese Prüfung. Nach dem Update auf diese Version wird einmalig noch einmal alles geprüft. Bei sehr großen Tabellen kann das viele Minuten dauern. Die Anwendung darf in dieser Zeit nicht beendet werden. Über den echten Update-Fall auf einer Installation ist das noch nicht bestätigt. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Änderung: Der Start wartet jetzt so lange, wie die Prüfung der Datenbankstruktur braucht. Bisher brach er nach 5 Minuten ab, und bei sehr großen Tabellen kam die Anwendung dadurch nicht mehr hoch. Wer weiterhin eine Grenze möchte, setzt &amp;lt;code&amp;gt;-DPersistenceService.startupTimeoutSeconds=&amp;amp;lt;Sekunden&amp;amp;gt;&amp;lt;/code&amp;gt;. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Änderung: Vorhandene Indizes und Fremdschlüssel werden beim Start auf MySQL und MariaDB nicht mehr ein zweites Mal angelegt. Das verkürzt die Prüfung bei großen Tabellen deutlich. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Fix: Liegen auf einem Datenbankserver mehrere Datenbanken mit gleichen Tabellen, legt die Prüfung auf MySQL und MariaDB fehlende Spalten nun zuverlässig an. Bisher galt eine Spalte als vorhanden, wenn es sie in einer anderen Datenbank gab. Später erschien dann die Meldung „Unknown column“, zum Beispiel beim Wiederholdruck einer Rechnung. Im Betrieb ist diese Korrektur noch nicht bestätigt. Ohne Verbindungspool (&amp;lt;code&amp;gt;-DPersistenceService.connectionPool=false&amp;lt;/code&amp;gt;) greift sie nicht. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Neu: Die Startseite zeigt die verstrichene Zeit, damit man sieht, dass der Start noch läuft. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Neu: Die Startseite kann das Ende des Protokolls anzeigen, mit &amp;lt;code&amp;gt;-DStartupStatusPage.showLog=true&amp;lt;/code&amp;gt; in der &amp;lt;code&amp;gt;eclipse.ini&amp;lt;/code&amp;gt;. Die Datei wird automatisch ermittelt, &amp;lt;code&amp;gt;-DStartupStatusPage.logFile=&amp;amp;lt;Pfad&amp;amp;gt;&amp;lt;/code&amp;gt; gibt sie fest vor. Die Anzeige ist standardmäßig aus, denn die Startseite ist ohne Anmeldung erreichbar und das Protokoll kann vertrauliche Angaben enthalten. Auf Kassen beim Kunden sollte sie aus bleiben. Betroffene Komponenten: org.eclipse.osbp.ecview.addons/org.eclipse.osbp.ecview.jetty.manager&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261104 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Neu: Beim Start wird die Datenbankstruktur nur noch dort geprüft, wo sich das Datenmodell geändert hat. Auf einer Testinstallation war die Datenbank beim Start dadurch rund 18 Sekunden früher bereit; insgesamt entfallen dort rund 30 Sekunden Prüfarbeit. Der erste Start nach einem Update prüft noch einmal alles. Die Prüfung ergänzt nur und entfernt nichts aus der Datenbank. Betroffene Komponenten: org.eclipse.osbp.persistence, org.eclipse.osbp.system.configuration.api, org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.configuration.base, org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.configuration.service&lt;br /&gt;
** Neu: Eine neue Ansicht zeigt, wann die Datenbankstruktur zuletzt geprüft wurde. Administratoren können dort für einen Bereich eine neue Prüfung beim nächsten Start auslösen. Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.configuration&lt;br /&gt;
** Änderung: Der Startparameter &amp;lt;code&amp;gt;-DPersistenceService.NoCache&amp;lt;/code&amp;gt; wird nicht mehr gebraucht. Ein vorhandener Eintrag stört nicht. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Fix: Ein Bericht wird nach einem Klick nur noch einmal angezeigt. Seit Version 5.3.0.20261103 konnte er sich mehrfach neu aufbauen. Betroffene Komponenten: org.eclipse.osbp.osgi.hybrid.api, org.eclipse.osbp.xtext.report/org.eclipse.osbp.xtext.report.runtime&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261103 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Neu: Flyway findet Datenbankmigrationen, die Bundles mitbringen. Ein Bundle nennt seinen Migrationsordner im Manifest-Header &amp;lt;code&amp;gt;OSBP-Flyway-Migration: db/migration&amp;lt;/code&amp;gt; und legt die Skripte als &amp;lt;code&amp;gt;&amp;amp;lt;Persistence Unit&amp;amp;gt;/&amp;amp;lt;Hersteller&amp;amp;gt;/V&amp;amp;lt;Version&amp;amp;gt;__&amp;amp;lt;Beschreibung&amp;amp;gt;.sql&amp;lt;/code&amp;gt; ab, z.B. &amp;lt;code&amp;gt;monitoringData/mysql/V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;. Ein Skript läuft auf der Datenquelle, für die seine Persistence Unit konfiguriert ist, und zwar vor dem Anlegen und Erweitern der Tabellen durch EclipseLink. Der Herstellerordner wird aus den JDBC-Metadaten bestimmt: &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt; (auch für MariaDB), &amp;lt;code&amp;gt;postgresql&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oracle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sqlserver&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;derby&amp;lt;/code&amp;gt;. Bisher suchte Flyway über einen Class Loader, der in OSGi einen Ordner wie &amp;lt;code&amp;gt;db/migration&amp;lt;/code&amp;gt; nur im eigenen Bundle sieht – Skripte in anderen Bundles wurden nie gefunden. Die neue Klasse &amp;lt;code&amp;gt;BundleMigrations&amp;lt;/code&amp;gt; sammelt sie und übergibt sie Flyway als Resource Provider; die Skripte im Dateisystemordner der Datenquelle (&amp;lt;code&amp;gt;-DFlyway.&amp;amp;lt;Datenquelle&amp;amp;gt;.DatabaseMigrationSourcePath&amp;lt;/code&amp;gt;) werden wie bisher mitgelesen. '''Die Migrationen laufen weiterhin nur mit &amp;lt;code&amp;gt;-DFlyway.active=true&amp;lt;/code&amp;gt;; keine ausgelieferte Anwendung schaltet sie bisher ein''' Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Neu: HikariCP-Verbindungspool vor der Datenquelle des Treibers. Bisher öffnete jede Abfrage eine neue Verbindung zur Datenbank, etwa 3.000 je stündlichem Lauf des Zeitplaners auf einer ruhenden Kasse. Maximum ist &amp;lt;code&amp;gt;database.connectionpool.max&amp;lt;/code&amp;gt;, 5 Verbindungen bleiben offen, Austausch nach 30 Minuten. &amp;lt;code&amp;gt;-DPersistenceService.connectionPool=false&amp;lt;/code&amp;gt; schaltet den Pool ab; &amp;lt;code&amp;gt;.minIdle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.maxLifetimeMinutes&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;.leakDetectionSeconds&amp;lt;/code&amp;gt; stellen ihn ein. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Neu: Jeder Eintrag der Systemüberwachung enthält die Auslastung des Verbindungspools in Prozent und die Zahl der wartenden Threads. Wartende Threads markieren den Eintrag Memorycheck als Warnung. Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring, org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring.base&lt;br /&gt;
** Änderung: &amp;lt;code&amp;gt;db/README.md&amp;lt;/code&amp;gt; beschreibt Aufbau, Versions- und Historienkonventionen sowie die Regeln für ein Migrationsskript (nie ein ausgeliefertes Skript ändern, sondern eine neue Version schreiben; jeden Datenbankzustand vertragen, weil das Skript vor dem Anlegen der Tabellen läuft; Objekte an ihrer Struktur statt an ihrem Namen finden). Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring.base&lt;br /&gt;
** Änderung: Die Tabelle „Flyway info“ im Log richtet ihre Spaltenbreiten nach dem Inhalt. Bisher schnitten feste Breiten Version und Beschreibung ab (&amp;lt;code&amp;gt;2026.10.28.1&amp;lt;/code&amp;gt; erschien als &amp;lt;code&amp;gt;2026.10.&amp;lt;/code&amp;gt;). Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Änderung: Jedes Bundle mit Migrationen hat eine eigene Historientabelle, &amp;lt;code&amp;gt;flyway_&amp;lt;/code&amp;gt; und der symbolische Name, gekürzt wie ein Logger Klassennamen kürzt (führende Segmente auf ihren Anfangsbuchstaben, bis höchstens 30 Zeichen erreicht sind): &amp;lt;code&amp;gt;org.eclipse.osbp.system.monitoring.base&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;flyway_oeos_monitoring_base&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;net.osbee.app.bdi.ex.model.entity&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;flyway_noa_bdi_ex_model_entity&amp;lt;/code&amp;gt;. Versionen müssen daher nur innerhalb eines Bundles eindeutig sein; zwei Entwickler können in verschiedenen Bundles dieselbe Versionsnummer vergeben. Scheitern die Migrationen eines Bundles, wird das mit „the migrations of &amp;amp;lt;Bundle&amp;amp;gt; were NOT applied“ protokolliert, die übrigen Bundles laufen weiter. Ergäben zwei Bundles denselben gekürzten Namen, werden beide mit einem Fehler abgewiesen, statt sich eine Historie zu teilen. Die Skripte des Dateisystemordners behalten Flyways Standardtabelle &amp;lt;code&amp;gt;flyway_schema_history&amp;lt;/code&amp;gt;; eine Quelle ohne Skripte läuft gar nicht. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Fix: Das Grid fragt nach einem Wechsel des Inhalts nicht mehr für jede bekannte Zeile einzeln beim Container nach. Bei einem lazy ladenden Container war das je Zeile ein &amp;lt;code&amp;gt;SELECT COUNT&amp;lt;/code&amp;gt;: Ein Lauf des Zeitplaners mit offener Perspektive machte 10.468 Abfragen, danach 787. Die Schlüssel von Zeilen, die der Client nicht mehr anzeigt, werden beim nächsten Zurücksetzen freigegeben. Betroffene Komponenten: org.eclipse.osbp.ecview.extension/org.eclipse.osbp.ecview.extension.grid.presentation&lt;br /&gt;
** Fix: Eine Ansicht zeigt nach einer Folge von Änderungen immer den letzten Stand. Bisher wurden Aktualisierungen während des Zeichnens oder innerhalb der Ruhezeit (&amp;lt;code&amp;gt;RefreshTimeout&amp;lt;/code&amp;gt;, Standard 300 ms) verworfen, sodass die letzte Änderung fehlen konnte. Jetzt werden sie zurückgestellt: Die Ansicht zeichnet einmal nach der letzten Anforderung, spätestens 5 Sekunden nach der ersten zurückgestellten. Gilt für alle Ansichten über &amp;lt;code&amp;gt;AbstractHybridVaaclipseView&amp;lt;/code&amp;gt; (Tabellen, Diagramme, Berichte). Die Zahl der Abfragen sinkt dadurch nicht zwingend: gemessen am Überwachungsdiagramm 4 statt 3 bei einem Lauf des Zeitplaners, dafür mit dem letzten Stand. Betroffene Komponenten: org.eclipse.osbp.osgi.hybrid.api&lt;br /&gt;
** Fix: Flyway lief bei jedem Start mit &amp;lt;code&amp;gt;baseline()&amp;lt;/code&amp;gt;. Sobald die Historie Einträge hatte, lehnte Flyway das mit einer Ausnahme ab, die verschluckt wurde – &amp;lt;code&amp;gt;migrate()&amp;lt;/code&amp;gt; lief danach nie. Eine bestehende Datenbank ohne Historie wird nun über &amp;lt;code&amp;gt;baselineOnMigrate&amp;lt;/code&amp;gt; einmalig mit Version 0 versehen. Ebenso entfällt &amp;lt;code&amp;gt;repair()&amp;lt;/code&amp;gt; bei jedem Start: Es schrieb die Historie auf ein nachträglich geändertes oder ersetztes Skript um, das dann nie lief; ein solches Skript scheitert nun an der Prüfsumme. Versionen dürfen außer der Reihe eintreffen (&amp;lt;code&amp;gt;outOfOrder&amp;lt;/code&amp;gt;), ein entferntes, bereits gelaufenes Skript ist kein Fehler mehr. Der Lizenzschlüssel für die kommerzielle Flyway-Edition wird nicht mehr gelesen; die Open-Source-Edition genügt. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Fix: Wartezeit beim Start („Getting a lock required more than 20000 ms“). Jede Persistence Unit las beim Anlegen ihren EclipseLink-Cachetyp und ihre Cachegröße (&amp;lt;code&amp;gt;EclipseLink/&amp;amp;lt;Unit&amp;amp;gt;#cacheTypeDefault&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#cacheSizeDefault&amp;lt;/code&amp;gt;) aus der Konfiguration. Die Units werden parallel in einem Thread-Pool angelegt; das Lesen der Konfiguration holt DTO-Dienste und Mapper über Declarative Services, deren Sperre der Start-Thread während des gesamten Persistenzstarts hält. Jeder Pool-Thread wartete daher, bis DS nach 20 s aufgab. Die Werte werden nun vorher einmal auf dem Start-Thread gelesen, der die Sperre erneut nehmen darf; die Pool-Threads erhalten sie aus dem Zwischenspeicher der Konfiguration. Die Vorgabewerte (&amp;lt;code&amp;gt;Soft&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1000&amp;lt;/code&amp;gt;) sind Konstanten, sodass beide Lesestellen dieselben verwenden. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Fix: Überwachungseinträge gingen auf älteren Datenbanken verloren. Datenbanken, die mit einem früheren Monitoring-Modell angelegt wurden, tragen noch eindeutige Indizes auf einem Namen allein (&amp;lt;code&amp;gt;MONITOR_SUB_CATEGORY.MSC_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_CATEGORY.MCA_NAME&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DK&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_MAIN_CATEGORY.MMCA_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_COMPONENT.MCO_NAME&amp;lt;/code&amp;gt;). Das Modell verlangt einen eindeutigen Namen nur unterhalb des jeweiligen Elternelements; die Schemagenerierung legt Indizes an, entfernt aber nie einen. Eine zweite Kategorie mit einer gleichnamigen Unterkategorie – etwa „COMPLETE“ unter &amp;lt;code&amp;gt;XRECHNUNG_UP&amp;lt;/code&amp;gt; und unter &amp;lt;code&amp;gt;ZUGFERD_UP&amp;lt;/code&amp;gt; – scheiterte daher an einem doppelten Schlüssel, &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; fing den Fehler ab, und der Eintrag fehlte (auf einer BDI-Installation über 1.000 solcher Fehler an einem Tag, dazu „transactionRollback - no transactionhandler found“). Ebenso konnten sich zwei Installationen mit gemeinsamer Datenbank nicht beide als Komponente „Application“ anmelden. Die erste Flyway-Migration des Bundles (&amp;lt;code&amp;gt;V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;, für MySQL/MariaDB, PostgreSQL und Oracle) entfernt diese Indizes; &amp;lt;code&amp;gt;MONITOR_COMPONENTI1&amp;lt;/code&amp;gt; legt die Schemagenerierung danach in der Form des Modells (&amp;lt;code&amp;gt;MCO_NAME, MCO_INSTALLATION&amp;lt;/code&amp;gt;) neu an. Da die Indizes nicht mehr im Modell stehen, hängen ihre Namen vom Generator ab, der die Datenbank angelegt hat; die Skripte finden sie daher an ihrer Struktur (eindeutig, kein Primärschlüssel, genau eine dieser Spalten). Auf einer neuen oder bereits bereinigten Datenbank ändern sie nichts. '''Die PostgreSQL- und Oracle-Skripte sind ungetestet.''' Ohne Flyway lassen sich die Indizes auch von Hand entfernen (auf den lokalen Datenbanken &amp;lt;code&amp;gt;shipment&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;pos&amp;lt;/code&amp;gt; geschehen). Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring.base&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** Fix: Der Diagramm-Generator setzt den Zähler je Datenreihe zurück (ab 500 Zeilen passten Reihen und Beschriftung sonst nicht zusammen), Linien verschwinden beim Überfahren nicht mehr, der Tooltip nennt die Kategorie, und die Animation läuft nur noch beim ersten Zeichnen. Betroffene Komponenten: org.eclipse.osbp.xtext.chart&lt;br /&gt;
** Änderung: Das Speicherdiagramm der Überwachung ist mit dem korrigierten Generator neu erzeugt. Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Fix: Flyway 9 enthält die Unterstützung für MySQL und MariaDB nicht mehr im Kern, sondern im Modul &amp;lt;code&amp;gt;flyway-mysql&amp;lt;/code&amp;gt;, das sich über &amp;lt;code&amp;gt;META-INF/services&amp;lt;/code&amp;gt; registriert und von Flyway mit dessen eigenem Class Loader gesucht wird. Das Modul wird daher als Fragment &amp;lt;code&amp;gt;org.flywaydb.database.mysql&amp;lt;/code&amp;gt; 9.14.0.v20261028 an &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; ausgeliefert (das Manifest des Originals nennt sich selbst &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; und ist so nicht verwendbar) und mit dem Feature &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.feature.flyway&amp;lt;/code&amp;gt; verteilt. Ohne das Fragment endet Flyway auf MariaDB mit „Unsupported Database: MySQL 5.5“ (so meldet der alte MySQL-Treiber eine MariaDB). PostgreSQL und Oracle sind weiterhin im Kern enthalten. '''Das per Maven gebaute Fragment ist noch nicht auf einer Installation geprüft'''; '''Build-Reihenfolge:''' dependencies-mbp, dependencies, persistence, system.configuration. Betroffene Komponenten: org.eclipse.osbp.dependencies-mbp/org.eclipse.osbp.dependencies.bundle.flyway.mysql, org.eclipse.osbp.dependencies/org.eclipse.osbp.dependencies.feature.flyway&lt;br /&gt;
** Neu: HikariCP 4.0.3 wird als Feature mit ausgeliefert. Es ist wie Flyway aus den Quell-Features ausgenommen. Betroffene Komponenten: org.eclipse.osbp.dependencies/org.eclipse.osbp.dependencies.feature.hikaricp, org.eclipse.osbp.dependencies.p2, org.eclipse.osbp.technologystack/org.eclipse.osbp.technologystack.feature, org.eclipse.osbp.technologystack/org.eclipse.osbp.technologystack.target.feature, org.eclipse.osbp.persistence/org.eclipse.osbp.persistence.feature, org.eclipse.osbp.softwarefactory/org.eclipse.osbp.softwarefactory.runtime.feature&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261029 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Fix: org.eclipse.osbp.persistence: Wartezeit beim Start („Getting a lock required more than 20000 ms“). Jede Persistence Unit las beim Anlegen ihren EclipseLink-Cachetyp und ihre Cachegröße (&amp;lt;code&amp;gt;EclipseLink/&amp;amp;lt;Unit&amp;amp;gt;#cacheTypeDefault&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#cacheSizeDefault&amp;lt;/code&amp;gt;) aus der Konfiguration. Das führte zu einer gegenseitigen Blockierung der Initialisierung. Die Werte werden nun einmal auf dem Start-Thread gelesen, damit tritt die Sperre nicht mehr auf.&lt;br /&gt;
** Neu: org.eclipse.osbp.persistence: Flyway findet Datenbankmigrationen, die Bundles mitbringen. Ein Bundle nennt seinen Migrationsordner im Manifest-Header &amp;lt;code&amp;gt;OSBP-Flyway-Migration: db/migration&amp;lt;/code&amp;gt; und legt die Skripte als &amp;lt;code&amp;gt;&amp;amp;lt;Persistence Unit&amp;amp;gt;/&amp;amp;lt;Hersteller&amp;amp;gt;/V&amp;amp;lt;Version&amp;amp;gt;__&amp;amp;lt;Beschreibung&amp;amp;gt;.sql&amp;lt;/code&amp;gt; ab, z.B. &amp;lt;code&amp;gt;monitoringData/mysql/V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;. Ein Skript läuft auf der Datenquelle, für die seine Persistence Unit konfiguriert ist, und zwar vor dem Anlegen und Erweitern der Tabellen durch EclipseLink. Der Herstellerordner wird aus den JDBC-Metadaten bestimmt: &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt; (auch für MariaDB), &amp;lt;code&amp;gt;postgresql&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oracle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sqlserver&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;derby&amp;lt;/code&amp;gt;. Die neue Klasse &amp;lt;code&amp;gt;BundleMigrations&amp;lt;/code&amp;gt; sammelt die Migrationsskripte und übergibt sie Flyway als Resource Provider; die Skripte im Dateisystemordner der Datenquelle (&amp;lt;code&amp;gt;-DFlyway.&amp;amp;lt;Datenquelle&amp;amp;gt;.DatabaseMigrationSourcePath&amp;lt;/code&amp;gt;) werden mitgelesen. '''Die Migrationen laufen nur mit &amp;lt;code&amp;gt;-DFlyway.active=true&amp;lt;/code&amp;gt;;'''&lt;br /&gt;
** org.eclipse.osbp.persistence: Jedes Bundle mit Migrationen hat eine eigene Historientabelle, &amp;lt;code&amp;gt;flyway_&amp;lt;/code&amp;gt; und der symbolische Name, gekürzt wie ein Logger Klassennamen kürzt (führende Segmente auf ihren Anfangsbuchstaben, bis höchstens 30 Zeichen erreicht sind): &amp;lt;code&amp;gt;org.eclipse.osbp.system.monitoring.base&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;flyway_oeos_monitoring_base&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;net.osbee.app.bdi.ex.model.entity&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;flyway_noa_bdi_ex_model_entity&amp;lt;/code&amp;gt;. Versionen müssen innerhalb eines Bundles eindeutig sein. Scheitern die Migrationen eines Bundles, wird das mit „the migrations of &amp;amp;lt;Bundle&amp;amp;gt; were NOT applied“ protokolliert, die übrigen Bundles laufen weiter. Ergäben zwei Bundles denselben gekürzten Namen, werden beide mit einem Fehler abgewiesen, statt sich eine Historie zu teilen. Die Skripte des Dateisystemordners behalten Flyways Standardtabelle &amp;lt;code&amp;gt;flyway_schema_history&amp;lt;/code&amp;gt;; eine Quelle ohne Skripte läuft gar nicht&lt;br /&gt;
** Fix: org.eclipse.osbp.persistence: Flyway lief bei jedem Start mit &amp;lt;code&amp;gt;baseline()&amp;lt;/code&amp;gt;. Sobald die Historie Einträge hatte, lehnte Flyway das mit einer Ausnahme ab, die verschluckt wurde – &amp;lt;code&amp;gt;migrate()&amp;lt;/code&amp;gt; lief danach nie. Eine bestehende Datenbank ohne Historie wird nun über &amp;lt;code&amp;gt;baselineOnMigrate&amp;lt;/code&amp;gt; einmalig mit Version 0 versehen. Ebenso entfällt &amp;lt;code&amp;gt;repair()&amp;lt;/code&amp;gt; bei jedem Start: Es schrieb die Historie auf ein nachträglich geändertes oder ersetztes Skript um, das dann nie lief; ein solches Skript scheitert nun an der Prüfsumme. Versionen dürfen außer der Reihe eintreffen (&amp;lt;code&amp;gt;outOfOrder&amp;lt;/code&amp;gt;), ein entferntes, bereits gelaufenes Skript ist kein Fehler mehr.&lt;br /&gt;
** Fix: org.eclipse.osbp.system.configuration (monitoring.base): Überwachungseinträge gingen auf älteren Datenbanken verloren. Datenbanken, die mit einem früheren Monitoring-Modell angelegt wurden, tragen noch eindeutige Indizes auf einem Namen allein (&amp;lt;code&amp;gt;MONITOR_SUB_CATEGORY.MSC_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_CATEGORY.MCA_NAME&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DK&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_MAIN_CATEGORY.MMCA_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_COMPONENT.MCO_NAME&amp;lt;/code&amp;gt;). Das Modell verlangt einen eindeutigen Namen nur unterhalb des jeweiligen Elternelements; die Schemagenerierung legt Indizes an, entfernt aber nie einen. Eine zweite Kategorie mit einer gleichnamigen Unterkategorie – etwa „COMPLETE“ unter &amp;lt;code&amp;gt;XRECHNUNG_UP&amp;lt;/code&amp;gt; und unter &amp;lt;code&amp;gt;ZUGFERD_UP&amp;lt;/code&amp;gt; – scheiterte daher an einem doppelten Schlüssel, &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; fing den Fehler ab, und der Eintrag fehlte (auf einer BDI-Installation über 1.000 solcher Fehler an einem Tag, dazu „transactionRollback - no transactionhandler found“). Ebenso konnten sich zwei Installationen mit gemeinsamer Datenbank nicht beide als Komponente „Application“ anmelden. Die erste Flyway-Migration des Bundles (&amp;lt;code&amp;gt;V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;, für MySQL/MariaDB, PostgreSQL und Oracle) entfernt diese Indizes; &amp;lt;code&amp;gt;MONITOR_COMPONENTI1&amp;lt;/code&amp;gt; legt die Schemagenerierung danach in der Form des Modells (&amp;lt;code&amp;gt;MCO_NAME, MCO_INSTALLATION&amp;lt;/code&amp;gt;) neu an. Da die Indizes nicht mehr im Modell stehen, hängen ihre Namen vom Generator ab, der die Datenbank angelegt hat; die Skripte finden sie daher an ihrer Struktur (eindeutig, kein Primärschlüssel, genau eine dieser Spalten). Auf einer neuen oder bereits bereinigten Datenbank ändern sie nichts.&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Hinweis für Produkte mit REST-Diensten über ECF: Das Bundle &amp;lt;code&amp;gt;org.eclipse.ecf.osgi.services.remoteserviceadmin.console&amp;lt;/code&amp;gt; (Konsolenbefehle &amp;lt;code&amp;gt;rsa …&amp;lt;/code&amp;gt;) sollte nicht automatisch starten. Seine Komponente &amp;lt;code&amp;gt;RSACommand&amp;lt;/code&amp;gt; benötigt den &amp;lt;code&amp;gt;RemoteServiceAdmin&amp;lt;/code&amp;gt;; während ECF diesen beim Export der Dienste erzeugt, blockieren sich ECF und DS gegenseitig, bis DS nach seiner Wartezeit (&amp;lt;code&amp;gt;-Dequinox.scr.waitTimeOnBlock&amp;lt;/code&amp;gt;, in BDI 20 s) abbricht. In BDI und im CX-Portal ist es auf &amp;lt;code&amp;gt;autoStart=&amp;quot;false&amp;quot;&amp;lt;/code&amp;gt; gesetzt; POS startet es nicht. Zusammen mit der Korrektur oben startet BDI in der IDE ohne Sperrmeldungen (67 s statt 74–101 s). Es verbleibt die Warnung „Enabling components of bundle org.eclipse.osbp.xtext.builder.metadata.services did not complete in 30000 ms“: Das ist das Laden der DSL-Modelle (rund 35 s) auf dem DS-Thread, keine Sperre&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Flyway Integration: org.eclipse.osbp.dependencies-mbp, org.eclipse.osbp.dependencies - Flyway 9 enthält die Unterstützung für MySQL und MariaDB nicht mehr im Kern, sondern im Modul &amp;lt;code&amp;gt;flyway-mysql&amp;lt;/code&amp;gt;, das sich über &amp;lt;code&amp;gt;META-INF/services&amp;lt;/code&amp;gt; registriert und von Flyway mit dessen eigenem Class Loader gesucht wird. Das Modul wird daher als Fragment &amp;lt;code&amp;gt;org.flywaydb.database.mysql&amp;lt;/code&amp;gt; 9.14.0.v20261028 an &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; ausgeliefert (das Manifest des Originals nennt sich selbst &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; und ist so nicht verwendbar) und mit dem Feature &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.feature.flyway&amp;lt;/code&amp;gt; verteilt.&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261012 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** org.eclipse.osbp.dsl (Entity,DTO):&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (1) – &amp;lt;code&amp;gt;AbstractOppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;MappingContext&amp;lt;/code&amp;gt; deklarieren kein &amp;lt;code&amp;gt;finalize()&amp;lt;/code&amp;gt; mehr. Jede &amp;lt;code&amp;gt;OppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OppositeContainmentDtoList&amp;lt;/code&amp;gt; war dadurch finalisierbar, überlebte die Garbage Collection, die sie als unerreichbar erkannt hatte, und hielt bis zur Abarbeitung durch den einzelnen Finalizer-Thread ihren gesamten Objektgraphen am Leben (DTOs, Entitäten, Persistenzkontexte). In einem Kundenabzug waren von 7,56 Mio. Finalizer-Einträgen 7,51 Mio. solche Listen. Die Listener, die der Finalizer abmelden sollte, werden bereits in &amp;lt;code&amp;gt;clear()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;remove()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;resolve()&amp;lt;/code&amp;gt; abgemeldet&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (2) – ein DTO hält für das spätere Nachladen einer Lazy-Referenz nicht mehr die abgelöste Entität fest, sondern nur noch deren Klasse und ID (neue Klasse &amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;org.eclipse.osbp.dsl.dto.lib&amp;lt;/code&amp;gt;). Die Entität hielt über ihre Lazy-Beziehungen den gesamten Persistenzkontext (&amp;lt;code&amp;gt;RepeatableWriteUnitOfWork&amp;lt;/code&amp;gt; samt aller darin geklonten Entitäten), obwohl &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; nur Klasse und ID benötigt. Gemessen an einer Kasse: rund 42 festgehaltene Persistenzkontexte je Verkauf vorher, praktisch keiner danach. Die ID wird erst am Ende des Mappings übernommen, weil der generierte Mapper &amp;lt;code&amp;gt;initialize(entity)&amp;lt;/code&amp;gt; vor &amp;lt;code&amp;gt;setId&amp;lt;/code&amp;gt; aufruft und eine neue Entität bis dahin die zufällige ID ihres Konstruktors trägt; liefert die Datenbank die ID erst später, bleibt es beim bisherigen Verhalten. '''Der Generator (&amp;lt;code&amp;gt;DtoTypesBuilder&amp;lt;/code&amp;gt;) erzeugt den neuen Aufruf; wirksam wird die Änderung erst mit neu generierten DTOs.''' Nicht neu generierte DTOs laufen unverändert weiter; neu generierte DTOs setzen ein &amp;lt;code&amp;gt;dto.lib&amp;lt;/code&amp;gt; ab dem 07.10.2026 voraus&lt;br /&gt;
*** &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; meldet nun, welche Zeile er nicht nachladen konnte. Liefert &amp;lt;code&amp;gt;em.find&amp;lt;/code&amp;gt; kein Ergebnis, wird ein Fehler mit Entitätsklasse, ID, Eigenschaft und DTO-Klasse protokolliert und eine &amp;lt;code&amp;gt;IllegalStateException&amp;lt;/code&amp;gt; geworfen. Bisher erschien an dieser Stelle nur eine &amp;lt;code&amp;gt;NullPointerException&amp;lt;/code&amp;gt; ohne Hinweis auf die Ursache&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;AbstractDTOService.closeEntityManager()&amp;lt;/code&amp;gt; fordert eine offene Transaktion nicht mehr nach jedem Lesezugriff zur Freigabe auf. Das Verhalten ist unverändert, die Warnung &amp;lt;code&amp;gt;dispose() refused&amp;lt;/code&amp;gt; erscheint aber nur noch, wenn tatsächlich jemand eine offene Transaktion abbauen will (zuvor rund zwei Meldungen je Verkauf und etwa 175 je Kassenabschluss)&lt;br /&gt;
*** Fix: Mit &amp;lt;code&amp;gt;-DsendTransactionEventAsync=true&amp;lt;/code&amp;gt; wartete &amp;lt;code&amp;gt;TransactionHandler.dispose()&amp;lt;/code&amp;gt; nach jedem Commit mindestens 800 ms, zuzüglich weiterer 800 ms je Durchlauf mit nicht leerer Ereigniswarteschlange – während &amp;lt;code&amp;gt;SessionManager&amp;lt;/code&amp;gt; die Sperre aller Transaktions-Handler hielt. An einer Kasse waren das mehrere Sekunden je Bon. &amp;lt;code&amp;gt;dispose()&amp;lt;/code&amp;gt; übergibt den Entity Manager nun dem Ereignis-Thread und kehrt sofort zurück; der Thread schließt ihn als letzten Schritt, sobald seine Warteschlange leer ist. Ein Ereignis, das sich nicht versenden lässt, beendet den Thread nicht mehr. Ohne den Schalter ändert sich nicht*s&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;MetadataBuilder&amp;lt;/code&amp;gt; macht beim ersten Scan zunächst alle gestarteten Bundles mit dem Header &amp;lt;code&amp;gt;OSBP-RuntimeBuilder-BundleSpace&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;Factory-Model&amp;lt;/code&amp;gt; im Bundle-Space bekannt und sucht erst danach nach Modellen. Bisher wurde ein Bundle erst beim Erreichen aufgenommen, während ein Participant ein Modell sofort laden kann: Ein ECView aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration&amp;lt;/code&amp;gt; nennt ein DTO aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration.base&amp;lt;/code&amp;gt; mit der höheren Bundle-ID, die Klasse wurde also je nach Reihenfolge beim Start nicht gefunden. In diesem Fall scheiterte &amp;lt;code&amp;gt;activate()&amp;lt;/code&amp;gt;, der DSL-Metadatendienst und damit der Persistenzdienst starteten nie, und die Anwendung blieb auf der Startseite stehen. Eine fehlgeschlagene Aktivierung wird nun zusätzlich als Fehler in das Anwendungslog geschrieben&lt;br /&gt;
** Fix: org.eclipse.osbp.dsl, org.eclipse.osbp.runtime: Vier Fehler in der sitzungsbezogenen Transaktionsverwaltung behoben. (a) &amp;lt;code&amp;gt;SessionManager.removeSession()&amp;lt;/code&amp;gt; gab den Transaktions-Handler unter einem Schlüssel frei, der nie passen konnte (&amp;lt;code&amp;gt;ISession&amp;lt;/code&amp;gt; hat kein &amp;lt;code&amp;gt;toString()&amp;lt;/code&amp;gt;), das Sicherheitsnetz griff also nie. (b) &amp;lt;code&amp;gt;disposeTransactionHandler&amp;lt;/code&amp;gt; entfernte den Eintrag auch dann, wenn die Transaktion noch offen war – der Entity Manager wurde aufgegeben und der Thread, der die Transaktion noch abschließen musste, fand seinen Handler nicht mehr. &amp;lt;code&amp;gt;ITransactionHandler&amp;lt;/code&amp;gt; erhält dafür &amp;lt;code&amp;gt;isDisposable()&amp;lt;/code&amp;gt; als Default-Methode. (c) Die Freigabe nach &amp;lt;code&amp;gt;transactionBegin&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Rollback&amp;lt;/code&amp;gt; steht nun in einem &amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt;; ein &amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt;, insbesondere ein &amp;lt;code&amp;gt;OutOfMemoryError&amp;lt;/code&amp;gt;, ließ den Handler bisher mit Entity Manager in einer statischen Map zurück. (d) &amp;lt;code&amp;gt;txnIsOpen&amp;lt;/code&amp;gt; wird auch bei einem fehlgeschlagenen Commit oder Rollback zurückgesetzt&lt;br /&gt;
** org.eclipse.osbp.persistence: &lt;br /&gt;
*** Der Startstatus nennt nun den Dienst, auf den der Persistenzdienst noch wartet. Die neue Komponente &amp;lt;code&amp;gt;PersistenceStartupStatus&amp;lt;/code&amp;gt; hat keine Pflichtreferenz, ist daher von Beginn an aktiv und setzt den Status auf „persistence service is waiting for the DSL metadata service“ (bzw. „the Mondrian manager“), bis diese gebunden sind. Bisher blieb es unabhängig vom Grund bei „persistenceservice not started yet“, und die wartenden Dienste protokollierten nichts&lt;br /&gt;
*** Beim Einrichten einer Persistence Unit wird jede verwaltete Klasse gemeldet, die nicht statisch gewebt ist, obwohl eine ihrer Oberklassen es ist – in einer ERROR-Zeile mit dem Hinweis, das Projekt vollständig neu zu bauen. Eine solche Klasse wird von EclipseLink instanziiert, aber nie befüllt: Der Dialog bleibt leer, und die nächste Aktualisierung scheitert mit „mapped to a primary key column ... Updates are not allowed“&lt;br /&gt;
** org.eclipse.osbp.ecview.extension: Fix: Das Grid vergisst die Zeilenschlüssel von Einträgen, die den Container als Ganzes verlassen haben. Vaadin gibt die Schlüssel nur über das clientseitige &amp;lt;code&amp;gt;dropRows&amp;lt;/code&amp;gt; frei; nach einem allgemeinen &amp;lt;code&amp;gt;ItemSetChange&amp;lt;/code&amp;gt;, wie ihn &amp;lt;code&amp;gt;removeAllItems()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;addAll()&amp;lt;/code&amp;gt; auslösen, blieben sie im &amp;lt;code&amp;gt;KeyMapper&amp;lt;/code&amp;gt; stehen und hielten jede jemals angezeigte Zeile samt ihrem DTO-Graphen. &amp;lt;code&amp;gt;GridPresentation.CustomGrid&amp;lt;/code&amp;gt; merkt sich die vergebenen Schlüssel und entfernt die nicht mehr enthaltenen&lt;br /&gt;
** org.osbee.datainterchange: Fix: FreeMarkers gemeinsam genutzte &amp;lt;code&amp;gt;InvalidReferenceException&amp;lt;/code&amp;gt; hält nicht mehr den ersten Exportlauf fest. Die statische Instanz übernahm die zum Zeitpunkt ihres Entstehens aktive Umgebung und damit das gesamte Datenmodell des ersten Exports für die Lebensdauer des Prozesses. Der Activator lädt die Klasse nun einmal außerhalb eines Template-Laufs&lt;br /&gt;
** org.eclipse.osbp.display: Fix: Das Display-Servlet wird nicht mehr auf dem Thread registriert, der die Bundles startet. Die Registrierung veröffentlicht einen Dienst, und Declarative Services verarbeitet dieses Ereignis auf dem veröffentlichenden Thread; dort wartete der Start aller nachfolgenden Bundles, in einem Fall über 50 Sekunden („Getting a lock required more than 50000 ms“). Die Registrierung läuft nun auf einem eigenen Thread&lt;br /&gt;
** org.eclipse.osbp.runtime, org.eclipse.osbp.blob, org.eclipse.osbp.autowireHelper, org.eclipse.osbp.ecview.extension, org.eclipse.osbp.ecview.addons, org.eclipse.osbp.infogrid.model: Neue Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; für String-Attribute. Ein Attribut mit &amp;lt;code&amp;gt;key=&amp;quot;barcode&amp;quot; value=&amp;quot;QRCode-128&amp;quot;&amp;lt;/code&amp;gt; wird schreibgeschützt als Barcode-Bild angezeigt, das aus seinem Klartextwert erzeugt wird – im Dialog über &amp;lt;code&amp;gt;BlobComponent&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;BlobUploadComponent&amp;lt;/code&amp;gt; (letztere dann ohne Schaltflächen) und in Grid-Spalten über den Blob-Bildkonverter&lt;br /&gt;
** org.eclipse.osbp.authentication, org.eclipse.osbp.system.configuration, org.eclipse.osbp.blob: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** org.eclipse.osbp.xtext.table, org.eclipse.osbp.xtext.table.common: Für Attribute mit der Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; wird ein Barcode-Lookup generiert; eine String-Zelle wird als Barcode-Bild angezeigt, wenn das Lookup einen Barcode-Typ trägt&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** net.osbee.pos.tse: Aufrufer können die BSI-Zertifizierungs-ID der TSE abfragen. Die SE-API bietet &amp;lt;code&amp;gt;getCertificationId&amp;lt;/code&amp;gt; in beiden API-Versionen, keiner der beiden Adapter reichte den Aufruf bisher durch&lt;br /&gt;
** net.osbee.pos.tse, net.osbee.pos.rksv: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Einführung der http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/restartService Seite. Damit können entweder Sessions gekillt oder der Service der Anwendung neu gestartet werden.&lt;br /&gt;
** Bei Nichterreichbarkeit der Datenbank wird die Anwendung beendet und der Fehlerstatus auf der Statusseite angezeigt.&lt;br /&gt;
** Das eingebettete &amp;lt;code&amp;gt;shiro-all-1.2.3.jar&amp;lt;/code&amp;gt; wurde durch &amp;lt;code&amp;gt;shiro-core&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; in Version 1.13.0 ersetzt. Damit sind CVE-2016-4437 (Remote Code Execution über das RememberMe-Cookie mit festem Schlüssel) und CVE-2019-12422 geschlossen. &amp;lt;code&amp;gt;encoder-1.2.3.jar&amp;lt;/code&amp;gt; kommt hinzu, weil &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; 1.13 &amp;lt;code&amp;gt;org.owasp.encoder&amp;lt;/code&amp;gt; zwingend importiert.&lt;br /&gt;
** Anmeldung: &lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm&amp;lt;/code&amp;gt; löst den Anmeldenamen vor jeder Abfrage in einen Distinguished Name auf. Active Directory akzeptiert für den Bind auch einen User Principal Name, beantwortet Abfragen damit aber mit LDAP-Fehler 34 (&amp;lt;code&amp;gt;invalidDNSyntax&amp;lt;/code&amp;gt;), sodass ein &amp;lt;code&amp;gt;userDnTemplate&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt; zwar anmeldete, dann aber an den Attributen scheiterte. &amp;lt;code&amp;gt;resolveUserDn&amp;lt;/code&amp;gt; sucht nun über &amp;lt;code&amp;gt;userPrincipalName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sAMAccountName&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;mail&amp;lt;/code&amp;gt;; die Suchbasis stammt aus dem RootDSE. Bestehende Vorlagen der Form &amp;lt;code&amp;gt;cn={0},ou=...&amp;lt;/code&amp;gt; verhalten sich unverändert. Zugleich behoben: eine &amp;lt;code&amp;gt;StringIndexOutOfBoundsException&amp;lt;/code&amp;gt; im E-Mail-Zweig und das Einsetzen des Benutzernamens in den Suchfilter per Verkettung (jetzt als &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt;, von JNDI maskiert)&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm.getUserDn&amp;lt;/code&amp;gt; maskierte nur das Komma. &amp;lt;code&amp;gt;escapeDnValue&amp;lt;/code&amp;gt; deckt nun alle Zeichen nach RFC 4514 Abschnitt 2.4 ab, sodass ein Benutzername die Bedeutung des DN nicht mehr verändern kann&lt;br /&gt;
*** Die Funktionalität „Angemeldet bleiben“ arbeitet nun mit einem signierten Token statt mit verschlüsselten Zugangsdaten. Das Cookie ist eine mit HMAC-SHA256 signierte Aussage über Benutzer, Mandant, Geltungsbereich, Ablaufdatum und Version und enthält keine Zugangsdaten. Es ist zustandslos, sodass beliebig viele Geräte und Browser gleichzeitig eines halten können.&lt;br /&gt;
*** Das „Angemeldet bleiben“-Cookie gilt je Anwendungsinstanz und Browser. Der Cookie-Name trägt einen Kurzhash über Schema, Host, Port, erstes Pfadsegment und Portal-ID, sodass zwei Anwendungen auf demselben Host nicht mehr das Cookie der jeweils anderen lesen. Die selbstgebaute Verschlüsselung entfällt vollständig. Das Cookie wird mit expliziter Lebensdauer, &amp;lt;code&amp;gt;SameSite=Lax&amp;lt;/code&amp;gt; und unter https mit &amp;lt;code&amp;gt;Secure&amp;lt;/code&amp;gt; geschrieben. Die Anmeldung aus einem Cookie wartet fünf Sekunden mit einem Hinweis auf der Anmeldemaske und lässt sich in dieser Zeit abbrechen; ein entferntes Häkchen löscht das Cookie nun in jedem Fall. Die Betrugsmeldung samt Kontosperre bei nicht passendem Cookie entfällt&lt;br /&gt;
*** Fix: Kennwörter erscheinen nicht mehr im Log – weder bei der Anmeldung in &amp;lt;code&amp;gt;AuthenticationProvider.check()&amp;lt;/code&amp;gt; (bisher im Klartext auf DEBUG) noch beim Zurücksetzen, wo der Nachrichtentext mit dem neuen Kennwort dreimal geschrieben wurde&lt;br /&gt;
*** Die Anzeige des neuen Kennworts auf der Anmeldemaske, wenn keine E-Mail versendet werden kann, ist nun eine konfigurierte Betriebsart: &amp;lt;code&amp;gt;Userinterface/showResetPasswordOnScreen&amp;lt;/code&amp;gt;, standardmäßig aus, mit Protokollierung auf WARN. '''Installationen ohne Mailserver müssen den Parameter einmalig setzen'''&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;doResetPassword&amp;lt;/code&amp;gt; hebt weder eine Sperre noch die Deaktivierung eines Kontos auf und setzt den Fehlversuchszähler nicht mehr zurück. Das Zurücksetzen kann jeder auslösen, der einen Benutzernamen eingibt; aufgehoben werden Sperre und Deaktivierung nur noch durch einen Administrator über &amp;lt;code&amp;gt;doUnlock&amp;lt;/code&amp;gt;&lt;br /&gt;
** System Configuration: &lt;br /&gt;
*** Parameter &amp;lt;code&amp;gt;RememberMeSecret&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;IConfigurationService&amp;lt;/code&amp;gt; ergänzt (&amp;lt;code&amp;gt;GLOBAL_PARAMETERS/RememberMeSecret&amp;lt;/code&amp;gt;). Der Schlüssel wird je Installation bei der ersten Benutzung der &amp;quot;RememberMe&amp;quot; Funktionalität einmal aus gezogen und von allen Anmeldungen geteilt; das Löschen des Eintrags macht alle „Angemeldet bleiben“-Cookies auf einmal ungültig.&lt;br /&gt;
*** Fix: Die Einstellungen füllten sich mit Platzhaltern „not set“. &amp;lt;code&amp;gt;ConfigurationService.getConfigurationString&amp;lt;/code&amp;gt; speicherte bei leerem Vorgabewert den Platzhalter und lieferte ihn als leere Zeichenkette zurück, sodass &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; stets eine weitere Zeile anhängte. &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; entfernt nun die Platzhalterzeilen des Schlüssels vor dem Schreiben, und ein gespeicherter Platzhalter gilt als „kein Wert“. &amp;lt;code&amp;gt;deleteConfigurations&amp;lt;/code&amp;gt; setzt zusätzlich den Cache zurück; gelöschte Einträge kamen bisher beim nächsten Lesen wieder&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Fix: org.eclipse.osbp.dependencies-mbp: Das Bundle &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.bundle.activemq.all.osgi&amp;lt;/code&amp;gt; enthält kein Log4j und kein eingebettetes slf4j mehr. &amp;lt;code&amp;gt;activemq-all&amp;lt;/code&amp;gt; brachte eine vollständige Kopie von Apache Log4j 1.2.17 mit (359 Klassen, darunter &amp;lt;code&amp;gt;JDBCAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSSink&amp;lt;/code&amp;gt; und chainsaw – betroffen von CVE-2021-4104, CVE-2022-23302, CVE-2022-23305 und CVE-2022-23307) sowie slf4j-api 1.7.13 und &amp;lt;code&amp;gt;slf4j-log4j12&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;Include-Resource&amp;lt;/code&amp;gt; bindet das Hersteller-Jar nun ohne &amp;lt;code&amp;gt;org.apache.log4j&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org.slf4j&amp;lt;/code&amp;gt;, deren Maven-Koordinaten, die &amp;lt;code&amp;gt;log4j.properties&amp;lt;/code&amp;gt; und Springs &amp;lt;code&amp;gt;Log4jConfigurer&amp;lt;/code&amp;gt; ein. ActiveMQ bezieht slf4j stattdessen aus dem Produkt (&amp;lt;code&amp;gt;org.slf4j.api&amp;lt;/code&amp;gt; 1.7.36)&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neue Dienststeuerungsseite unter &amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;. &lt;br /&gt;
*** Ein Bediener kann darüber – autorisiert durch eine reguläre Anwendungsanmeldung – hängende Sitzungen beenden oder den Dienst neu starten, ohne Zugriff auf den Serverrechner zu benötigen. Drei Stufen: Sitzungen des aufrufenden Arbeitsplatzes, alle Sitzungen, Neustart. Die Seite ist am Root-HTTP-Service registriert und bleibt damit erreichbar, wenn der Anwendungskontext selbst gestört ist; Markup, Stil, Skript und Texte (deutsch, englisch, französisch) sind deshalb in der Seite enthalten. Sitzungen werden über das Invalidieren der HTTP-Sitzung beendet. Der Neustart läuft über die Befehlswarteschlange der Anwendung; die Seite fragt anschließend die Anwendung ab und führt den Bediener über die Unterbrechung hinweg&lt;br /&gt;
*** Alle Aktionen der Dienststeuerungsseite werden im &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; unter denselben Koordinaten wie die Anmeldemaske protokolliert (fehlgeschlagene Anmeldung und Neustart als WARNING, gesperrtes Konto als ERROR, beendete Sitzungen als INFO). Eine abgelehnte Anmeldung sperrt das Formular für die Dauer der Wartezeit mit Countdown; der Zähler ist derselbe wie an der Anmeldemaske, sodass sich Fehlversuche auf beiden Wegen zur Kontosperre summieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260907 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Überarbeitung der Codebasis zur Entfernung veralteter und nicht benötigter Bundles&lt;br /&gt;
** Überarbeitung des Loginvorgangs / der Cookiespeicherung bei &amp;quot;remember me&amp;quot;. Es werden keine kritischen Daten mehr im Cookie gespeichert.&lt;br /&gt;
** Verbesserung der Übersetzungen&lt;br /&gt;
** Anpassungen für frz. Fiskalanforderungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Laden der Übersetzungen in die interne Tabelle beim Systemstart deutlich beschleunigt. Dadurch verbessertes Startverhalten der Anwendungen.&lt;br /&gt;
** Verbesserungen bei der frz. Tastaturunterstützung&lt;br /&gt;
** Verbesserungen der Übersetzungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260618 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Blockieren durch das Laden von Diensten während des Starts vermieden, dadurch schnellerer Anwendungsstart. Anderes Verhalten beim Start an der Benutzeroberfläche.&lt;br /&gt;
** Französische Tastaturunterstützung (AZERTY) im Keymapper der Statemachine ergänzt&lt;br /&gt;
** Login bezieht Build-Version und Hersteller nun aus den &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; (einheitliche Quelle)&lt;br /&gt;
** Neue gemeinsame Hilfsmethoden &amp;lt;code&amp;gt;getBuildVersion()&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;getVendor()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; zur Ermittlung der Build-Identität&lt;br /&gt;
** &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; setzt die Zeitstempel von &amp;lt;code&amp;gt;lastError&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;lastWarning&amp;lt;/code&amp;gt; nicht mehr zurück&lt;br /&gt;
** Fix: NPE in &amp;lt;code&amp;gt;org.eclipse.osbp.xtext.dialog.AutowireUiFactory&amp;lt;/code&amp;gt; behoben&lt;br /&gt;
** Version von 5.2.0 auf 5.3.0 angehoben&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-reverify&amp;lt;/code&amp;gt; (16px/32px) für die NF525-Schaltfläche zur erneuten Archivintegritätsprüfung&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-refresh.png&amp;lt;/code&amp;gt; ergänzt&lt;br /&gt;
** Grid – horizontale Bildlaufleiste wiederhergestellt&lt;br /&gt;
** Grid - Flex-Layout für Kassen-/POS-Grids wiederhergestellt (kollabierte Spalten behoben)&lt;br /&gt;
** französische Übersetzungen überarbeitet&lt;br /&gt;
&lt;br /&gt;
* Grammatiken/Generierung:&lt;br /&gt;
** org.eclipse.osbp.dsl: Benutzerdefinierte &amp;lt;code&amp;gt;@PreRemove&amp;lt;/code&amp;gt;-Hooks werden in der generierten &amp;lt;code&amp;gt;preRemove()&amp;lt;/code&amp;gt;-Methode zusammengeführt&lt;br /&gt;
** org.eclipse.osbp.xtext.i18n: i18n-Generator erzeugt nun das byte-genaue Eclipse-Babel-Format&lt;br /&gt;
&lt;br /&gt;
* POS Framework für franz. Fiskalanforderungen eingeführt&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260410 ==&lt;br /&gt;
&lt;br /&gt;
* POS Framework: &lt;br /&gt;
** Performanceverbesserung beim Kassieren&lt;br /&gt;
** Multi-Protokoll Unterstützung für Paymentterminal &lt;br /&gt;
*** frz. Protokolle &amp;quot;Concert&amp;quot;, &amp;quot;Protocol E&amp;quot;&lt;br /&gt;
*** &amp;quot;Mock&amp;quot; für Tests&lt;br /&gt;
*** Statemachine DSL erweitert: protocol Parameter für Paymentterminal&lt;br /&gt;
*** &amp;quot;Shared Payment Terminal&amp;quot;&lt;br /&gt;
**** locking im PaymentTerminalService implementiert&lt;br /&gt;
**** pro Terminal über ConfigService einstellbar&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260402 ==&lt;br /&gt;
&lt;br /&gt;
Die Version verbessert das Startverhalten einer Anwendung und bringt mehr Informationen über den Status des Starts auf den Bildschirm&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Anzeige des Persistenzservice-Status auf dem Login-Bildschirm&lt;br /&gt;
** Information über den Persistenzservice auf der Fehlerseite hinzugefügt&lt;br /&gt;
** Beim Start wird nun überall auf den Persistenzservice statt nur auf den ConfigurationService gewartet&lt;br /&gt;
&lt;br /&gt;
* BPM:&lt;br /&gt;
** Fix: net.osbee.bpm: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** Fix: net.osbee.pos.epay: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260305 ==&lt;br /&gt;
&lt;br /&gt;
=== Report Anzeige ===&lt;br /&gt;
&lt;br /&gt;
Diese Version konzentriert sich auf '''Stabilitätsverbesserungen''' für das Report-Rendering-System, insbesondere auf die Behebung von Race Conditions und Anzeigeproblemen, die bei schnellen Benutzerinteraktionen auftraten.&lt;br /&gt;
&lt;br /&gt;
* Race Condition beim Report-Rendering&lt;br /&gt;
** '''Behoben: Schnelles Auswählen/Abwählen führte dazu, dass Reports mit ungültigen oder fehlenden Filtern gerendert wurden'''&lt;br /&gt;
*** Reports verarbeiten nun korrekt wenn Benutzer schnell Elemente auswählen und wieder abwählen&lt;br /&gt;
*** Filteränderungen werden blockiert, während ein Render-Vorgang läuft&lt;br /&gt;
*** Ausstehende Filteränderungen werden nachverfolgt und nach Abschluss des Renderings erneut ausgewertet&lt;br /&gt;
*** Reports mit &amp;lt;code&amp;gt;selectById&amp;lt;/code&amp;gt; werden nun korrekt ausgeblendet, wenn nichts ausgewählt ist&lt;br /&gt;
&lt;br /&gt;
* PDF-Anzeigeskalierungsproblem &lt;br /&gt;
** '''Behoben: PDF-Skalierungsprobleme durch Neuerstellung des BrowserFrames bei jedem Rendering'''&lt;br /&gt;
&lt;br /&gt;
=== Anmeldebildschirm ===&lt;br /&gt;
&lt;br /&gt;
Der Anmeldebildschirm zeigt nun während der Initialisierung des Persistence-Services einen Statustext an.&lt;br /&gt;
&lt;br /&gt;
* Lauftext-Anzeige (Marquee) mit dem aktuellen Status des Persistence-Services&lt;br /&gt;
* Deaktivierung aller Anmeldesteuerelemente während der Wartezeit&lt;br /&gt;
&lt;br /&gt;
=== Start der Anwendung ===&lt;br /&gt;
&lt;br /&gt;
* Blockierungen der Initialisierungsvorgänge durch Warten auf Serviceregistrierung während des Anwendungsstarts reduziert. &amp;lt;br&amp;gt;Dadurch verändert sich das Startverhalten, insbesondere die Reihenfolge der Anwendung. Insgesamt schnelleres Laden der Bundles.&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4632</id>
		<title>Releasenotes 2026 OS.Softwarefactory</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4632"/>
				<updated>2026-11-09T09:44:06Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261109 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Fix: QR-Codes in Bildfeldern werden jetzt angezeigt, z. B. auf der Kundenanzeige. Bisher blieb das Feld leer. Andere Barcodes und Bilder werden wie bisher angezeigt. Betroffene Komponenten: org.eclipse.osbp.runtime.web/org.eclipse.osbp.runtime.web.ecview.presentation.vaadin&lt;br /&gt;
** Änderung: Die Anwendung ist beim Start schneller bereit. Die Datenbankanbindung wartet nicht mehr, bis alle Modelle vollständig eingelesen sind, sondern startet, sobald die Modelle gefunden sind; das Einlesen läuft parallel weiter. In der Entwicklungsumgebung war die Anwendung dadurch nach etwa 61 statt 111 Sekunden bereit. Betroffene Komponenten: org.eclipse.osbp.ui.api, org.eclipse.osbp.dsl/org.eclipse.osbp.xtext.builder.metadata.services, org.eclipse.osbp.dsl.metadata.service, org.eclipse.osbp.persistence, org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.configuration.service&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** Änderung: Auch die Editoren für Datenschnittstellen (Datainterchange) und Signale arbeiten jetzt wie der Editor der Funktionsbibliothek: Die Vorschläge (Strg+Leertaste) erscheinen auch in großen Dateien ohne spürbare Wartezeit, Gliederung, Einfärben und Ein- und Ausklappen bremsen das Tippen nicht mehr. Fehlermarkierungen und Gliederung erscheinen kurz nach dem Tippen. Betroffene Komponenten: org.eclipse.osbp.xtext.datainterchange/org.eclipse.osbp.xtext.datainterchange.ui, org.eclipse.osbp.xtext.signal/org.eclipse.osbp.xtext.signal.ui&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261106 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Neu: Die Seite &amp;lt;code&amp;gt;/showLog&amp;lt;/code&amp;gt; zeigt im laufenden Betrieb das Ende des Protokolls (die letzten 500 Zeilen), mit Textfilter, Aktualisieren und Herunterladen der aktuellen Datei. Anmelden können sich nur Benutzer mit der Superuser-Eigenschaft, mit derselben Sperre nach Fehlversuchen wie bei der normalen Anmeldung. Jeder Zugriff wird im Monitoring festgehalten. Die Seite ist standardmäßig ausgeschaltet und wird in der Systemkonfiguration mit &amp;lt;code&amp;gt;GLOBAL_PARAMETERS / showLog&amp;lt;/code&amp;gt; eingeschaltet. Da dabei ein Passwort übertragen wird, sollte die Anwendung über HTTPS erreichbar sein. Betroffene Komponenten: org.eclipse.osbp.vaaclipse.addons/org.eclipse.osbp.vaaclipse.addons.app, org.eclipse.osbp.ui.api, org.eclipse.osbp.authentication, org.eclipse.osbp.ecview.addons/org.eclipse.osbp.ecview.jetty.manager&lt;br /&gt;
** Neu: Auf der Seite &amp;lt;code&amp;gt;/showLog&amp;lt;/code&amp;gt; lässt sich die Schrift des Protokolls mit den Schaltflächen A− und A+ verkleinern und vergrößern. Die gewählte Größe bleibt beim Aktualisieren und Filtern erhalten, bis zur nächsten Anmeldung. Betroffene Komponenten: org.eclipse.osbp.vaaclipse.addons/org.eclipse.osbp.vaaclipse.addons.app&lt;br /&gt;
** Änderung: Wird eine falsche Adresse aufgerufen, zeigt die Hinweisseite jetzt alle Einstiegspunkte in einer Tabelle: Anwendung, Kundenanzeige (Display), Protokollseite und Dienststeuerung. Die automatische Weiterleitung zur Anwendung erfolgt nach 5 statt 3 Sekunden. Betroffene Komponenten: org.eclipse.osbp.ecview.addons/org.eclipse.osbp.ecview.jetty.manager&lt;br /&gt;
** Fix: Änderungen in der Systemkonfiguration wirken nach dem Speichern im Dialog wieder sofort. Seit Juni 2025 wurden Aufgaben, die nach dem Speichern im Hintergrund laufen sollen, nicht mehr ausgeführt; Konfigurationsänderungen wurden dadurch erst nach bis zu einer Stunde wirksam, und auch die Nachbearbeitung nach dem Speichern mancher Daten (z. B. für die Suche) unterblieb. Betroffene Komponenten: org.eclipse.osbp.dsl/org.eclipse.osbp.dsl.entity.postpersistservice&lt;br /&gt;
** Fix: Monitoring-Einträge mit dem Status „Info“ werden korrekt gespeichert. Bisher wurden sie als „Unbekannt“ abgelegt, und im Protokoll erschien ein Fehler. Nach dem Update wird die Datenbankstruktur des Monitorings einmalig geprüft. Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring.base&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** Änderung: Die Vorschläge im Editor der Funktionsbibliothek (Strg+Leertaste) erscheinen jetzt auch in großen Dateien ohne spürbare Wartezeit. Bisher wurde bei jedem Aufruf die ganze Datei neu gelesen, was in großen Dateien mehrere Sekunden dauern konnte. Die Gliederung (Outline) wird erst aktualisiert, wenn zwei Sekunden lang nicht getippt wurde, und bremst das Tippen dadurch nicht mehr. Auch das Einfärben und das Ein- und Ausklappen von Abschnitten werden nicht mehr bei jedem Aufruf der Vorschläge für die ganze Datei neu berechnet, sondern nur nach einer Änderung. Ist in der Gliederung „Mit Editor verknüpfen“ eingeschaltet, wartet der Editor nach größeren Änderungen nicht mehr, bis die Datei vollständig geprüft ist. Betroffene Komponenten: org.eclipse.osbp.xtext.functionlibrary/org.eclipse.osbp.xtext.functionlibrarydsl.ui&lt;br /&gt;
** Änderung: Die Editoren für Entitäten, DTOs, Statemachines und Datamarts arbeiten jetzt wie der Editor der Funktionsbibliothek: Die Vorschläge (Strg+Leertaste) erscheinen auch in großen Dateien ohne spürbare Wartezeit, Gliederung, Einfärben und Ein- und Ausklappen bremsen das Tippen nicht mehr. Nur der erste Aufruf der Vorschläge nach dem Start der Entwicklungsumgebung dauert etwas länger. Fehlermarkierungen und Gliederung erscheinen kurz nach dem Tippen. Betroffene Komponenten: org.eclipse.osbp.xtext.oxtype/org.eclipse.osbp.xtext.oxtype.ui, org.eclipse.osbp.dsl/org.eclipse.osbp.dsl.entity.xtext.ui, org.eclipse.osbp.dsl/org.eclipse.osbp.dsl.dto.xtext.ui, org.eclipse.osbp.xtext.statemachine/org.eclipse.osbp.xtext.statemachine.ui, org.eclipse.osbp.xtext.datamart/org.eclipse.osbp.xtext.datamartdsl.ui&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Änderung: Die Entwicklungsumgebung schreibt bei jedem Bauen nicht mehr die Versionsangaben aus Git in die Projekte. Das hat das Bauen in der Entwicklungsumgebung spürbar verlangsamt und oft eine weitere Baurunde ausgelöst. Die Versionsangaben entstehen weiterhin beim Bauen auf dem Build-Server, die ausgelieferten Stände enthalten sie wie bisher. Entwickler führen danach einmal in der Entwicklungsumgebung „Maven &amp;gt; Update Project“ mit „Force Update of Snapshots“ aus (Alt+F5). Betroffene Komponenten: org.eclipse.osbp.releng.maven, org.eclipse.osbp.releng.maven/org.eclipse.osbp.releng.maven.parent.tycho, org.osbee.releng.maven, org.osbee.releng.maven/org.osbee.releng.maven.parent.tycho, net.osbee.releng.maven, net.osbee.releng.maven/net.osbee.releng.maven.parent.tycho, net.osbee.app.releng.maven, net.osbee.app.releng.maven/net.osbee.app.releng.maven.parent.tycho&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261105 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Änderung: Beim Start wird die Datenbankstruktur nur noch geprüft, wenn sich das Datenmodell wirklich geändert hat, auch nach einem Update. Ein neuer Stand der Anwendung ohne Änderung am Datenmodell startet dadurch ohne diese Prüfung. Nach dem Update auf diese Version wird einmalig noch einmal alles geprüft. Bei sehr großen Tabellen kann das viele Minuten dauern. Die Anwendung darf in dieser Zeit nicht beendet werden. Über den echten Update-Fall auf einer Installation ist das noch nicht bestätigt. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Änderung: Der Start wartet jetzt so lange, wie die Prüfung der Datenbankstruktur braucht. Bisher brach er nach 5 Minuten ab, und bei sehr großen Tabellen kam die Anwendung dadurch nicht mehr hoch. Wer weiterhin eine Grenze möchte, setzt &amp;lt;code&amp;gt;-DPersistenceService.startupTimeoutSeconds=&amp;amp;lt;Sekunden&amp;amp;gt;&amp;lt;/code&amp;gt;. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Änderung: Vorhandene Indizes und Fremdschlüssel werden beim Start auf MySQL und MariaDB nicht mehr ein zweites Mal angelegt. Das verkürzt die Prüfung bei großen Tabellen deutlich. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Fix: Liegen auf einem Datenbankserver mehrere Datenbanken mit gleichen Tabellen, legt die Prüfung auf MySQL und MariaDB fehlende Spalten nun zuverlässig an. Bisher galt eine Spalte als vorhanden, wenn es sie in einer anderen Datenbank gab. Später erschien dann die Meldung „Unknown column“, zum Beispiel beim Wiederholdruck einer Rechnung. Im Betrieb ist diese Korrektur noch nicht bestätigt. Ohne Verbindungspool (&amp;lt;code&amp;gt;-DPersistenceService.connectionPool=false&amp;lt;/code&amp;gt;) greift sie nicht. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Neu: Die Startseite zeigt die verstrichene Zeit, damit man sieht, dass der Start noch läuft. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Neu: Die Startseite kann das Ende des Protokolls anzeigen, mit &amp;lt;code&amp;gt;-DStartupStatusPage.showLog=true&amp;lt;/code&amp;gt; in der &amp;lt;code&amp;gt;eclipse.ini&amp;lt;/code&amp;gt;. Die Datei wird automatisch ermittelt, &amp;lt;code&amp;gt;-DStartupStatusPage.logFile=&amp;amp;lt;Pfad&amp;amp;gt;&amp;lt;/code&amp;gt; gibt sie fest vor. Die Anzeige ist standardmäßig aus, denn die Startseite ist ohne Anmeldung erreichbar und das Protokoll kann vertrauliche Angaben enthalten. Auf Kassen beim Kunden sollte sie aus bleiben. Betroffene Komponenten: org.eclipse.osbp.ecview.addons/org.eclipse.osbp.ecview.jetty.manager&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261104 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Neu: Beim Start wird die Datenbankstruktur nur noch dort geprüft, wo sich das Datenmodell geändert hat. Auf einer Testinstallation war die Datenbank beim Start dadurch rund 18 Sekunden früher bereit; insgesamt entfallen dort rund 30 Sekunden Prüfarbeit. Der erste Start nach einem Update prüft noch einmal alles. Die Prüfung ergänzt nur und entfernt nichts aus der Datenbank. Betroffene Komponenten: org.eclipse.osbp.persistence, org.eclipse.osbp.system.configuration.api, org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.configuration.base, org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.configuration.service&lt;br /&gt;
** Neu: Eine neue Ansicht zeigt, wann die Datenbankstruktur zuletzt geprüft wurde. Administratoren können dort für einen Bereich eine neue Prüfung beim nächsten Start auslösen. Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.configuration&lt;br /&gt;
** Änderung: Der Startparameter &amp;lt;code&amp;gt;-DPersistenceService.NoCache&amp;lt;/code&amp;gt; wird nicht mehr gebraucht. Ein vorhandener Eintrag stört nicht. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Fix: Ein Bericht wird nach einem Klick nur noch einmal angezeigt. Seit Version 5.3.0.20261103 konnte er sich mehrfach neu aufbauen. Betroffene Komponenten: org.eclipse.osbp.osgi.hybrid.api, org.eclipse.osbp.xtext.report/org.eclipse.osbp.xtext.report.runtime&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261103 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Neu: Flyway findet Datenbankmigrationen, die Bundles mitbringen. Ein Bundle nennt seinen Migrationsordner im Manifest-Header &amp;lt;code&amp;gt;OSBP-Flyway-Migration: db/migration&amp;lt;/code&amp;gt; und legt die Skripte als &amp;lt;code&amp;gt;&amp;amp;lt;Persistence Unit&amp;amp;gt;/&amp;amp;lt;Hersteller&amp;amp;gt;/V&amp;amp;lt;Version&amp;amp;gt;__&amp;amp;lt;Beschreibung&amp;amp;gt;.sql&amp;lt;/code&amp;gt; ab, z.B. &amp;lt;code&amp;gt;monitoringData/mysql/V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;. Ein Skript läuft auf der Datenquelle, für die seine Persistence Unit konfiguriert ist, und zwar vor dem Anlegen und Erweitern der Tabellen durch EclipseLink. Der Herstellerordner wird aus den JDBC-Metadaten bestimmt: &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt; (auch für MariaDB), &amp;lt;code&amp;gt;postgresql&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oracle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sqlserver&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;derby&amp;lt;/code&amp;gt;. Bisher suchte Flyway über einen Class Loader, der in OSGi einen Ordner wie &amp;lt;code&amp;gt;db/migration&amp;lt;/code&amp;gt; nur im eigenen Bundle sieht – Skripte in anderen Bundles wurden nie gefunden. Die neue Klasse &amp;lt;code&amp;gt;BundleMigrations&amp;lt;/code&amp;gt; sammelt sie und übergibt sie Flyway als Resource Provider; die Skripte im Dateisystemordner der Datenquelle (&amp;lt;code&amp;gt;-DFlyway.&amp;amp;lt;Datenquelle&amp;amp;gt;.DatabaseMigrationSourcePath&amp;lt;/code&amp;gt;) werden wie bisher mitgelesen. '''Die Migrationen laufen weiterhin nur mit &amp;lt;code&amp;gt;-DFlyway.active=true&amp;lt;/code&amp;gt;; keine ausgelieferte Anwendung schaltet sie bisher ein''' Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Neu: HikariCP-Verbindungspool vor der Datenquelle des Treibers. Bisher öffnete jede Abfrage eine neue Verbindung zur Datenbank, etwa 3.000 je stündlichem Lauf des Zeitplaners auf einer ruhenden Kasse. Maximum ist &amp;lt;code&amp;gt;database.connectionpool.max&amp;lt;/code&amp;gt;, 5 Verbindungen bleiben offen, Austausch nach 30 Minuten. &amp;lt;code&amp;gt;-DPersistenceService.connectionPool=false&amp;lt;/code&amp;gt; schaltet den Pool ab; &amp;lt;code&amp;gt;.minIdle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.maxLifetimeMinutes&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;.leakDetectionSeconds&amp;lt;/code&amp;gt; stellen ihn ein. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Neu: Jeder Eintrag der Systemüberwachung enthält die Auslastung des Verbindungspools in Prozent und die Zahl der wartenden Threads. Wartende Threads markieren den Eintrag Memorycheck als Warnung. Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring, org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring.base&lt;br /&gt;
** Änderung: &amp;lt;code&amp;gt;db/README.md&amp;lt;/code&amp;gt; beschreibt Aufbau, Versions- und Historienkonventionen sowie die Regeln für ein Migrationsskript (nie ein ausgeliefertes Skript ändern, sondern eine neue Version schreiben; jeden Datenbankzustand vertragen, weil das Skript vor dem Anlegen der Tabellen läuft; Objekte an ihrer Struktur statt an ihrem Namen finden). Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring.base&lt;br /&gt;
** Änderung: Die Tabelle „Flyway info“ im Log richtet ihre Spaltenbreiten nach dem Inhalt. Bisher schnitten feste Breiten Version und Beschreibung ab (&amp;lt;code&amp;gt;2026.10.28.1&amp;lt;/code&amp;gt; erschien als &amp;lt;code&amp;gt;2026.10.&amp;lt;/code&amp;gt;). Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Änderung: Jedes Bundle mit Migrationen hat eine eigene Historientabelle, &amp;lt;code&amp;gt;flyway_&amp;lt;/code&amp;gt; und der symbolische Name, gekürzt wie ein Logger Klassennamen kürzt (führende Segmente auf ihren Anfangsbuchstaben, bis höchstens 30 Zeichen erreicht sind): &amp;lt;code&amp;gt;org.eclipse.osbp.system.monitoring.base&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;flyway_oeos_monitoring_base&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;net.osbee.app.bdi.ex.model.entity&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;flyway_noa_bdi_ex_model_entity&amp;lt;/code&amp;gt;. Versionen müssen daher nur innerhalb eines Bundles eindeutig sein; zwei Entwickler können in verschiedenen Bundles dieselbe Versionsnummer vergeben. Scheitern die Migrationen eines Bundles, wird das mit „the migrations of &amp;amp;lt;Bundle&amp;amp;gt; were NOT applied“ protokolliert, die übrigen Bundles laufen weiter. Ergäben zwei Bundles denselben gekürzten Namen, werden beide mit einem Fehler abgewiesen, statt sich eine Historie zu teilen. Die Skripte des Dateisystemordners behalten Flyways Standardtabelle &amp;lt;code&amp;gt;flyway_schema_history&amp;lt;/code&amp;gt;; eine Quelle ohne Skripte läuft gar nicht. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Fix: Das Grid fragt nach einem Wechsel des Inhalts nicht mehr für jede bekannte Zeile einzeln beim Container nach. Bei einem lazy ladenden Container war das je Zeile ein &amp;lt;code&amp;gt;SELECT COUNT&amp;lt;/code&amp;gt;: Ein Lauf des Zeitplaners mit offener Perspektive machte 10.468 Abfragen, danach 787. Die Schlüssel von Zeilen, die der Client nicht mehr anzeigt, werden beim nächsten Zurücksetzen freigegeben. Betroffene Komponenten: org.eclipse.osbp.ecview.extension/org.eclipse.osbp.ecview.extension.grid.presentation&lt;br /&gt;
** Fix: Eine Ansicht zeigt nach einer Folge von Änderungen immer den letzten Stand. Bisher wurden Aktualisierungen während des Zeichnens oder innerhalb der Ruhezeit (&amp;lt;code&amp;gt;RefreshTimeout&amp;lt;/code&amp;gt;, Standard 300 ms) verworfen, sodass die letzte Änderung fehlen konnte. Jetzt werden sie zurückgestellt: Die Ansicht zeichnet einmal nach der letzten Anforderung, spätestens 5 Sekunden nach der ersten zurückgestellten. Gilt für alle Ansichten über &amp;lt;code&amp;gt;AbstractHybridVaaclipseView&amp;lt;/code&amp;gt; (Tabellen, Diagramme, Berichte). Die Zahl der Abfragen sinkt dadurch nicht zwingend: gemessen am Überwachungsdiagramm 4 statt 3 bei einem Lauf des Zeitplaners, dafür mit dem letzten Stand. Betroffene Komponenten: org.eclipse.osbp.osgi.hybrid.api&lt;br /&gt;
** Fix: Flyway lief bei jedem Start mit &amp;lt;code&amp;gt;baseline()&amp;lt;/code&amp;gt;. Sobald die Historie Einträge hatte, lehnte Flyway das mit einer Ausnahme ab, die verschluckt wurde – &amp;lt;code&amp;gt;migrate()&amp;lt;/code&amp;gt; lief danach nie. Eine bestehende Datenbank ohne Historie wird nun über &amp;lt;code&amp;gt;baselineOnMigrate&amp;lt;/code&amp;gt; einmalig mit Version 0 versehen. Ebenso entfällt &amp;lt;code&amp;gt;repair()&amp;lt;/code&amp;gt; bei jedem Start: Es schrieb die Historie auf ein nachträglich geändertes oder ersetztes Skript um, das dann nie lief; ein solches Skript scheitert nun an der Prüfsumme. Versionen dürfen außer der Reihe eintreffen (&amp;lt;code&amp;gt;outOfOrder&amp;lt;/code&amp;gt;), ein entferntes, bereits gelaufenes Skript ist kein Fehler mehr. Der Lizenzschlüssel für die kommerzielle Flyway-Edition wird nicht mehr gelesen; die Open-Source-Edition genügt. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Fix: Wartezeit beim Start („Getting a lock required more than 20000 ms“). Jede Persistence Unit las beim Anlegen ihren EclipseLink-Cachetyp und ihre Cachegröße (&amp;lt;code&amp;gt;EclipseLink/&amp;amp;lt;Unit&amp;amp;gt;#cacheTypeDefault&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#cacheSizeDefault&amp;lt;/code&amp;gt;) aus der Konfiguration. Die Units werden parallel in einem Thread-Pool angelegt; das Lesen der Konfiguration holt DTO-Dienste und Mapper über Declarative Services, deren Sperre der Start-Thread während des gesamten Persistenzstarts hält. Jeder Pool-Thread wartete daher, bis DS nach 20 s aufgab. Die Werte werden nun vorher einmal auf dem Start-Thread gelesen, der die Sperre erneut nehmen darf; die Pool-Threads erhalten sie aus dem Zwischenspeicher der Konfiguration. Die Vorgabewerte (&amp;lt;code&amp;gt;Soft&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1000&amp;lt;/code&amp;gt;) sind Konstanten, sodass beide Lesestellen dieselben verwenden. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Fix: Überwachungseinträge gingen auf älteren Datenbanken verloren. Datenbanken, die mit einem früheren Monitoring-Modell angelegt wurden, tragen noch eindeutige Indizes auf einem Namen allein (&amp;lt;code&amp;gt;MONITOR_SUB_CATEGORY.MSC_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_CATEGORY.MCA_NAME&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DK&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_MAIN_CATEGORY.MMCA_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_COMPONENT.MCO_NAME&amp;lt;/code&amp;gt;). Das Modell verlangt einen eindeutigen Namen nur unterhalb des jeweiligen Elternelements; die Schemagenerierung legt Indizes an, entfernt aber nie einen. Eine zweite Kategorie mit einer gleichnamigen Unterkategorie – etwa „COMPLETE“ unter &amp;lt;code&amp;gt;XRECHNUNG_UP&amp;lt;/code&amp;gt; und unter &amp;lt;code&amp;gt;ZUGFERD_UP&amp;lt;/code&amp;gt; – scheiterte daher an einem doppelten Schlüssel, &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; fing den Fehler ab, und der Eintrag fehlte (auf einer BDI-Installation über 1.000 solcher Fehler an einem Tag, dazu „transactionRollback - no transactionhandler found“). Ebenso konnten sich zwei Installationen mit gemeinsamer Datenbank nicht beide als Komponente „Application“ anmelden. Die erste Flyway-Migration des Bundles (&amp;lt;code&amp;gt;V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;, für MySQL/MariaDB, PostgreSQL und Oracle) entfernt diese Indizes; &amp;lt;code&amp;gt;MONITOR_COMPONENTI1&amp;lt;/code&amp;gt; legt die Schemagenerierung danach in der Form des Modells (&amp;lt;code&amp;gt;MCO_NAME, MCO_INSTALLATION&amp;lt;/code&amp;gt;) neu an. Da die Indizes nicht mehr im Modell stehen, hängen ihre Namen vom Generator ab, der die Datenbank angelegt hat; die Skripte finden sie daher an ihrer Struktur (eindeutig, kein Primärschlüssel, genau eine dieser Spalten). Auf einer neuen oder bereits bereinigten Datenbank ändern sie nichts. '''Die PostgreSQL- und Oracle-Skripte sind ungetestet.''' Ohne Flyway lassen sich die Indizes auch von Hand entfernen (auf den lokalen Datenbanken &amp;lt;code&amp;gt;shipment&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;pos&amp;lt;/code&amp;gt; geschehen). Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring.base&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** Fix: Der Diagramm-Generator setzt den Zähler je Datenreihe zurück (ab 500 Zeilen passten Reihen und Beschriftung sonst nicht zusammen), Linien verschwinden beim Überfahren nicht mehr, der Tooltip nennt die Kategorie, und die Animation läuft nur noch beim ersten Zeichnen. Betroffene Komponenten: org.eclipse.osbp.xtext.chart&lt;br /&gt;
** Änderung: Das Speicherdiagramm der Überwachung ist mit dem korrigierten Generator neu erzeugt. Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Fix: Flyway 9 enthält die Unterstützung für MySQL und MariaDB nicht mehr im Kern, sondern im Modul &amp;lt;code&amp;gt;flyway-mysql&amp;lt;/code&amp;gt;, das sich über &amp;lt;code&amp;gt;META-INF/services&amp;lt;/code&amp;gt; registriert und von Flyway mit dessen eigenem Class Loader gesucht wird. Das Modul wird daher als Fragment &amp;lt;code&amp;gt;org.flywaydb.database.mysql&amp;lt;/code&amp;gt; 9.14.0.v20261028 an &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; ausgeliefert (das Manifest des Originals nennt sich selbst &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; und ist so nicht verwendbar) und mit dem Feature &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.feature.flyway&amp;lt;/code&amp;gt; verteilt. Ohne das Fragment endet Flyway auf MariaDB mit „Unsupported Database: MySQL 5.5“ (so meldet der alte MySQL-Treiber eine MariaDB). PostgreSQL und Oracle sind weiterhin im Kern enthalten. '''Das per Maven gebaute Fragment ist noch nicht auf einer Installation geprüft'''; '''Build-Reihenfolge:''' dependencies-mbp, dependencies, persistence, system.configuration. Betroffene Komponenten: org.eclipse.osbp.dependencies-mbp/org.eclipse.osbp.dependencies.bundle.flyway.mysql, org.eclipse.osbp.dependencies/org.eclipse.osbp.dependencies.feature.flyway&lt;br /&gt;
** Neu: HikariCP 4.0.3 wird als Feature mit ausgeliefert. Es ist wie Flyway aus den Quell-Features ausgenommen. Betroffene Komponenten: org.eclipse.osbp.dependencies/org.eclipse.osbp.dependencies.feature.hikaricp, org.eclipse.osbp.dependencies.p2, org.eclipse.osbp.technologystack/org.eclipse.osbp.technologystack.feature, org.eclipse.osbp.technologystack/org.eclipse.osbp.technologystack.target.feature, org.eclipse.osbp.persistence/org.eclipse.osbp.persistence.feature, org.eclipse.osbp.softwarefactory/org.eclipse.osbp.softwarefactory.runtime.feature&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261029 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Fix: org.eclipse.osbp.persistence: Wartezeit beim Start („Getting a lock required more than 20000 ms“). Jede Persistence Unit las beim Anlegen ihren EclipseLink-Cachetyp und ihre Cachegröße (&amp;lt;code&amp;gt;EclipseLink/&amp;amp;lt;Unit&amp;amp;gt;#cacheTypeDefault&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#cacheSizeDefault&amp;lt;/code&amp;gt;) aus der Konfiguration. Das führte zu einer gegenseitigen Blockierung der Initialisierung. Die Werte werden nun einmal auf dem Start-Thread gelesen, damit tritt die Sperre nicht mehr auf.&lt;br /&gt;
** Neu: org.eclipse.osbp.persistence: Flyway findet Datenbankmigrationen, die Bundles mitbringen. Ein Bundle nennt seinen Migrationsordner im Manifest-Header &amp;lt;code&amp;gt;OSBP-Flyway-Migration: db/migration&amp;lt;/code&amp;gt; und legt die Skripte als &amp;lt;code&amp;gt;&amp;amp;lt;Persistence Unit&amp;amp;gt;/&amp;amp;lt;Hersteller&amp;amp;gt;/V&amp;amp;lt;Version&amp;amp;gt;__&amp;amp;lt;Beschreibung&amp;amp;gt;.sql&amp;lt;/code&amp;gt; ab, z.B. &amp;lt;code&amp;gt;monitoringData/mysql/V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;. Ein Skript läuft auf der Datenquelle, für die seine Persistence Unit konfiguriert ist, und zwar vor dem Anlegen und Erweitern der Tabellen durch EclipseLink. Der Herstellerordner wird aus den JDBC-Metadaten bestimmt: &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt; (auch für MariaDB), &amp;lt;code&amp;gt;postgresql&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oracle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sqlserver&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;derby&amp;lt;/code&amp;gt;. Die neue Klasse &amp;lt;code&amp;gt;BundleMigrations&amp;lt;/code&amp;gt; sammelt die Migrationsskripte und übergibt sie Flyway als Resource Provider; die Skripte im Dateisystemordner der Datenquelle (&amp;lt;code&amp;gt;-DFlyway.&amp;amp;lt;Datenquelle&amp;amp;gt;.DatabaseMigrationSourcePath&amp;lt;/code&amp;gt;) werden mitgelesen. '''Die Migrationen laufen nur mit &amp;lt;code&amp;gt;-DFlyway.active=true&amp;lt;/code&amp;gt;;'''&lt;br /&gt;
** org.eclipse.osbp.persistence: Jedes Bundle mit Migrationen hat eine eigene Historientabelle, &amp;lt;code&amp;gt;flyway_&amp;lt;/code&amp;gt; und der symbolische Name, gekürzt wie ein Logger Klassennamen kürzt (führende Segmente auf ihren Anfangsbuchstaben, bis höchstens 30 Zeichen erreicht sind): &amp;lt;code&amp;gt;org.eclipse.osbp.system.monitoring.base&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;flyway_oeos_monitoring_base&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;net.osbee.app.bdi.ex.model.entity&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;flyway_noa_bdi_ex_model_entity&amp;lt;/code&amp;gt;. Versionen müssen innerhalb eines Bundles eindeutig sein. Scheitern die Migrationen eines Bundles, wird das mit „the migrations of &amp;amp;lt;Bundle&amp;amp;gt; were NOT applied“ protokolliert, die übrigen Bundles laufen weiter. Ergäben zwei Bundles denselben gekürzten Namen, werden beide mit einem Fehler abgewiesen, statt sich eine Historie zu teilen. Die Skripte des Dateisystemordners behalten Flyways Standardtabelle &amp;lt;code&amp;gt;flyway_schema_history&amp;lt;/code&amp;gt;; eine Quelle ohne Skripte läuft gar nicht&lt;br /&gt;
** Fix: org.eclipse.osbp.persistence: Flyway lief bei jedem Start mit &amp;lt;code&amp;gt;baseline()&amp;lt;/code&amp;gt;. Sobald die Historie Einträge hatte, lehnte Flyway das mit einer Ausnahme ab, die verschluckt wurde – &amp;lt;code&amp;gt;migrate()&amp;lt;/code&amp;gt; lief danach nie. Eine bestehende Datenbank ohne Historie wird nun über &amp;lt;code&amp;gt;baselineOnMigrate&amp;lt;/code&amp;gt; einmalig mit Version 0 versehen. Ebenso entfällt &amp;lt;code&amp;gt;repair()&amp;lt;/code&amp;gt; bei jedem Start: Es schrieb die Historie auf ein nachträglich geändertes oder ersetztes Skript um, das dann nie lief; ein solches Skript scheitert nun an der Prüfsumme. Versionen dürfen außer der Reihe eintreffen (&amp;lt;code&amp;gt;outOfOrder&amp;lt;/code&amp;gt;), ein entferntes, bereits gelaufenes Skript ist kein Fehler mehr.&lt;br /&gt;
** Fix: org.eclipse.osbp.system.configuration (monitoring.base): Überwachungseinträge gingen auf älteren Datenbanken verloren. Datenbanken, die mit einem früheren Monitoring-Modell angelegt wurden, tragen noch eindeutige Indizes auf einem Namen allein (&amp;lt;code&amp;gt;MONITOR_SUB_CATEGORY.MSC_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_CATEGORY.MCA_NAME&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DK&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_MAIN_CATEGORY.MMCA_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_COMPONENT.MCO_NAME&amp;lt;/code&amp;gt;). Das Modell verlangt einen eindeutigen Namen nur unterhalb des jeweiligen Elternelements; die Schemagenerierung legt Indizes an, entfernt aber nie einen. Eine zweite Kategorie mit einer gleichnamigen Unterkategorie – etwa „COMPLETE“ unter &amp;lt;code&amp;gt;XRECHNUNG_UP&amp;lt;/code&amp;gt; und unter &amp;lt;code&amp;gt;ZUGFERD_UP&amp;lt;/code&amp;gt; – scheiterte daher an einem doppelten Schlüssel, &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; fing den Fehler ab, und der Eintrag fehlte (auf einer BDI-Installation über 1.000 solcher Fehler an einem Tag, dazu „transactionRollback - no transactionhandler found“). Ebenso konnten sich zwei Installationen mit gemeinsamer Datenbank nicht beide als Komponente „Application“ anmelden. Die erste Flyway-Migration des Bundles (&amp;lt;code&amp;gt;V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;, für MySQL/MariaDB, PostgreSQL und Oracle) entfernt diese Indizes; &amp;lt;code&amp;gt;MONITOR_COMPONENTI1&amp;lt;/code&amp;gt; legt die Schemagenerierung danach in der Form des Modells (&amp;lt;code&amp;gt;MCO_NAME, MCO_INSTALLATION&amp;lt;/code&amp;gt;) neu an. Da die Indizes nicht mehr im Modell stehen, hängen ihre Namen vom Generator ab, der die Datenbank angelegt hat; die Skripte finden sie daher an ihrer Struktur (eindeutig, kein Primärschlüssel, genau eine dieser Spalten). Auf einer neuen oder bereits bereinigten Datenbank ändern sie nichts.&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Hinweis für Produkte mit REST-Diensten über ECF: Das Bundle &amp;lt;code&amp;gt;org.eclipse.ecf.osgi.services.remoteserviceadmin.console&amp;lt;/code&amp;gt; (Konsolenbefehle &amp;lt;code&amp;gt;rsa …&amp;lt;/code&amp;gt;) sollte nicht automatisch starten. Seine Komponente &amp;lt;code&amp;gt;RSACommand&amp;lt;/code&amp;gt; benötigt den &amp;lt;code&amp;gt;RemoteServiceAdmin&amp;lt;/code&amp;gt;; während ECF diesen beim Export der Dienste erzeugt, blockieren sich ECF und DS gegenseitig, bis DS nach seiner Wartezeit (&amp;lt;code&amp;gt;-Dequinox.scr.waitTimeOnBlock&amp;lt;/code&amp;gt;, in BDI 20 s) abbricht. In BDI und im CX-Portal ist es auf &amp;lt;code&amp;gt;autoStart=&amp;quot;false&amp;quot;&amp;lt;/code&amp;gt; gesetzt; POS startet es nicht. Zusammen mit der Korrektur oben startet BDI in der IDE ohne Sperrmeldungen (67 s statt 74–101 s). Es verbleibt die Warnung „Enabling components of bundle org.eclipse.osbp.xtext.builder.metadata.services did not complete in 30000 ms“: Das ist das Laden der DSL-Modelle (rund 35 s) auf dem DS-Thread, keine Sperre&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Flyway Integration: org.eclipse.osbp.dependencies-mbp, org.eclipse.osbp.dependencies - Flyway 9 enthält die Unterstützung für MySQL und MariaDB nicht mehr im Kern, sondern im Modul &amp;lt;code&amp;gt;flyway-mysql&amp;lt;/code&amp;gt;, das sich über &amp;lt;code&amp;gt;META-INF/services&amp;lt;/code&amp;gt; registriert und von Flyway mit dessen eigenem Class Loader gesucht wird. Das Modul wird daher als Fragment &amp;lt;code&amp;gt;org.flywaydb.database.mysql&amp;lt;/code&amp;gt; 9.14.0.v20261028 an &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; ausgeliefert (das Manifest des Originals nennt sich selbst &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; und ist so nicht verwendbar) und mit dem Feature &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.feature.flyway&amp;lt;/code&amp;gt; verteilt.&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261012 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** org.eclipse.osbp.dsl (Entity,DTO):&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (1) – &amp;lt;code&amp;gt;AbstractOppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;MappingContext&amp;lt;/code&amp;gt; deklarieren kein &amp;lt;code&amp;gt;finalize()&amp;lt;/code&amp;gt; mehr. Jede &amp;lt;code&amp;gt;OppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OppositeContainmentDtoList&amp;lt;/code&amp;gt; war dadurch finalisierbar, überlebte die Garbage Collection, die sie als unerreichbar erkannt hatte, und hielt bis zur Abarbeitung durch den einzelnen Finalizer-Thread ihren gesamten Objektgraphen am Leben (DTOs, Entitäten, Persistenzkontexte). In einem Kundenabzug waren von 7,56 Mio. Finalizer-Einträgen 7,51 Mio. solche Listen. Die Listener, die der Finalizer abmelden sollte, werden bereits in &amp;lt;code&amp;gt;clear()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;remove()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;resolve()&amp;lt;/code&amp;gt; abgemeldet&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (2) – ein DTO hält für das spätere Nachladen einer Lazy-Referenz nicht mehr die abgelöste Entität fest, sondern nur noch deren Klasse und ID (neue Klasse &amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;org.eclipse.osbp.dsl.dto.lib&amp;lt;/code&amp;gt;). Die Entität hielt über ihre Lazy-Beziehungen den gesamten Persistenzkontext (&amp;lt;code&amp;gt;RepeatableWriteUnitOfWork&amp;lt;/code&amp;gt; samt aller darin geklonten Entitäten), obwohl &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; nur Klasse und ID benötigt. Gemessen an einer Kasse: rund 42 festgehaltene Persistenzkontexte je Verkauf vorher, praktisch keiner danach. Die ID wird erst am Ende des Mappings übernommen, weil der generierte Mapper &amp;lt;code&amp;gt;initialize(entity)&amp;lt;/code&amp;gt; vor &amp;lt;code&amp;gt;setId&amp;lt;/code&amp;gt; aufruft und eine neue Entität bis dahin die zufällige ID ihres Konstruktors trägt; liefert die Datenbank die ID erst später, bleibt es beim bisherigen Verhalten. '''Der Generator (&amp;lt;code&amp;gt;DtoTypesBuilder&amp;lt;/code&amp;gt;) erzeugt den neuen Aufruf; wirksam wird die Änderung erst mit neu generierten DTOs.''' Nicht neu generierte DTOs laufen unverändert weiter; neu generierte DTOs setzen ein &amp;lt;code&amp;gt;dto.lib&amp;lt;/code&amp;gt; ab dem 07.10.2026 voraus&lt;br /&gt;
*** &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; meldet nun, welche Zeile er nicht nachladen konnte. Liefert &amp;lt;code&amp;gt;em.find&amp;lt;/code&amp;gt; kein Ergebnis, wird ein Fehler mit Entitätsklasse, ID, Eigenschaft und DTO-Klasse protokolliert und eine &amp;lt;code&amp;gt;IllegalStateException&amp;lt;/code&amp;gt; geworfen. Bisher erschien an dieser Stelle nur eine &amp;lt;code&amp;gt;NullPointerException&amp;lt;/code&amp;gt; ohne Hinweis auf die Ursache&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;AbstractDTOService.closeEntityManager()&amp;lt;/code&amp;gt; fordert eine offene Transaktion nicht mehr nach jedem Lesezugriff zur Freigabe auf. Das Verhalten ist unverändert, die Warnung &amp;lt;code&amp;gt;dispose() refused&amp;lt;/code&amp;gt; erscheint aber nur noch, wenn tatsächlich jemand eine offene Transaktion abbauen will (zuvor rund zwei Meldungen je Verkauf und etwa 175 je Kassenabschluss)&lt;br /&gt;
*** Fix: Mit &amp;lt;code&amp;gt;-DsendTransactionEventAsync=true&amp;lt;/code&amp;gt; wartete &amp;lt;code&amp;gt;TransactionHandler.dispose()&amp;lt;/code&amp;gt; nach jedem Commit mindestens 800 ms, zuzüglich weiterer 800 ms je Durchlauf mit nicht leerer Ereigniswarteschlange – während &amp;lt;code&amp;gt;SessionManager&amp;lt;/code&amp;gt; die Sperre aller Transaktions-Handler hielt. An einer Kasse waren das mehrere Sekunden je Bon. &amp;lt;code&amp;gt;dispose()&amp;lt;/code&amp;gt; übergibt den Entity Manager nun dem Ereignis-Thread und kehrt sofort zurück; der Thread schließt ihn als letzten Schritt, sobald seine Warteschlange leer ist. Ein Ereignis, das sich nicht versenden lässt, beendet den Thread nicht mehr. Ohne den Schalter ändert sich nicht*s&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;MetadataBuilder&amp;lt;/code&amp;gt; macht beim ersten Scan zunächst alle gestarteten Bundles mit dem Header &amp;lt;code&amp;gt;OSBP-RuntimeBuilder-BundleSpace&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;Factory-Model&amp;lt;/code&amp;gt; im Bundle-Space bekannt und sucht erst danach nach Modellen. Bisher wurde ein Bundle erst beim Erreichen aufgenommen, während ein Participant ein Modell sofort laden kann: Ein ECView aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration&amp;lt;/code&amp;gt; nennt ein DTO aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration.base&amp;lt;/code&amp;gt; mit der höheren Bundle-ID, die Klasse wurde also je nach Reihenfolge beim Start nicht gefunden. In diesem Fall scheiterte &amp;lt;code&amp;gt;activate()&amp;lt;/code&amp;gt;, der DSL-Metadatendienst und damit der Persistenzdienst starteten nie, und die Anwendung blieb auf der Startseite stehen. Eine fehlgeschlagene Aktivierung wird nun zusätzlich als Fehler in das Anwendungslog geschrieben&lt;br /&gt;
** Fix: org.eclipse.osbp.dsl, org.eclipse.osbp.runtime: Vier Fehler in der sitzungsbezogenen Transaktionsverwaltung behoben. (a) &amp;lt;code&amp;gt;SessionManager.removeSession()&amp;lt;/code&amp;gt; gab den Transaktions-Handler unter einem Schlüssel frei, der nie passen konnte (&amp;lt;code&amp;gt;ISession&amp;lt;/code&amp;gt; hat kein &amp;lt;code&amp;gt;toString()&amp;lt;/code&amp;gt;), das Sicherheitsnetz griff also nie. (b) &amp;lt;code&amp;gt;disposeTransactionHandler&amp;lt;/code&amp;gt; entfernte den Eintrag auch dann, wenn die Transaktion noch offen war – der Entity Manager wurde aufgegeben und der Thread, der die Transaktion noch abschließen musste, fand seinen Handler nicht mehr. &amp;lt;code&amp;gt;ITransactionHandler&amp;lt;/code&amp;gt; erhält dafür &amp;lt;code&amp;gt;isDisposable()&amp;lt;/code&amp;gt; als Default-Methode. (c) Die Freigabe nach &amp;lt;code&amp;gt;transactionBegin&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Rollback&amp;lt;/code&amp;gt; steht nun in einem &amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt;; ein &amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt;, insbesondere ein &amp;lt;code&amp;gt;OutOfMemoryError&amp;lt;/code&amp;gt;, ließ den Handler bisher mit Entity Manager in einer statischen Map zurück. (d) &amp;lt;code&amp;gt;txnIsOpen&amp;lt;/code&amp;gt; wird auch bei einem fehlgeschlagenen Commit oder Rollback zurückgesetzt&lt;br /&gt;
** org.eclipse.osbp.persistence: &lt;br /&gt;
*** Der Startstatus nennt nun den Dienst, auf den der Persistenzdienst noch wartet. Die neue Komponente &amp;lt;code&amp;gt;PersistenceStartupStatus&amp;lt;/code&amp;gt; hat keine Pflichtreferenz, ist daher von Beginn an aktiv und setzt den Status auf „persistence service is waiting for the DSL metadata service“ (bzw. „the Mondrian manager“), bis diese gebunden sind. Bisher blieb es unabhängig vom Grund bei „persistenceservice not started yet“, und die wartenden Dienste protokollierten nichts&lt;br /&gt;
*** Beim Einrichten einer Persistence Unit wird jede verwaltete Klasse gemeldet, die nicht statisch gewebt ist, obwohl eine ihrer Oberklassen es ist – in einer ERROR-Zeile mit dem Hinweis, das Projekt vollständig neu zu bauen. Eine solche Klasse wird von EclipseLink instanziiert, aber nie befüllt: Der Dialog bleibt leer, und die nächste Aktualisierung scheitert mit „mapped to a primary key column ... Updates are not allowed“&lt;br /&gt;
** org.eclipse.osbp.ecview.extension: Fix: Das Grid vergisst die Zeilenschlüssel von Einträgen, die den Container als Ganzes verlassen haben. Vaadin gibt die Schlüssel nur über das clientseitige &amp;lt;code&amp;gt;dropRows&amp;lt;/code&amp;gt; frei; nach einem allgemeinen &amp;lt;code&amp;gt;ItemSetChange&amp;lt;/code&amp;gt;, wie ihn &amp;lt;code&amp;gt;removeAllItems()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;addAll()&amp;lt;/code&amp;gt; auslösen, blieben sie im &amp;lt;code&amp;gt;KeyMapper&amp;lt;/code&amp;gt; stehen und hielten jede jemals angezeigte Zeile samt ihrem DTO-Graphen. &amp;lt;code&amp;gt;GridPresentation.CustomGrid&amp;lt;/code&amp;gt; merkt sich die vergebenen Schlüssel und entfernt die nicht mehr enthaltenen&lt;br /&gt;
** org.osbee.datainterchange: Fix: FreeMarkers gemeinsam genutzte &amp;lt;code&amp;gt;InvalidReferenceException&amp;lt;/code&amp;gt; hält nicht mehr den ersten Exportlauf fest. Die statische Instanz übernahm die zum Zeitpunkt ihres Entstehens aktive Umgebung und damit das gesamte Datenmodell des ersten Exports für die Lebensdauer des Prozesses. Der Activator lädt die Klasse nun einmal außerhalb eines Template-Laufs&lt;br /&gt;
** org.eclipse.osbp.display: Fix: Das Display-Servlet wird nicht mehr auf dem Thread registriert, der die Bundles startet. Die Registrierung veröffentlicht einen Dienst, und Declarative Services verarbeitet dieses Ereignis auf dem veröffentlichenden Thread; dort wartete der Start aller nachfolgenden Bundles, in einem Fall über 50 Sekunden („Getting a lock required more than 50000 ms“). Die Registrierung läuft nun auf einem eigenen Thread&lt;br /&gt;
** org.eclipse.osbp.runtime, org.eclipse.osbp.blob, org.eclipse.osbp.autowireHelper, org.eclipse.osbp.ecview.extension, org.eclipse.osbp.ecview.addons, org.eclipse.osbp.infogrid.model: Neue Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; für String-Attribute. Ein Attribut mit &amp;lt;code&amp;gt;key=&amp;quot;barcode&amp;quot; value=&amp;quot;QRCode-128&amp;quot;&amp;lt;/code&amp;gt; wird schreibgeschützt als Barcode-Bild angezeigt, das aus seinem Klartextwert erzeugt wird – im Dialog über &amp;lt;code&amp;gt;BlobComponent&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;BlobUploadComponent&amp;lt;/code&amp;gt; (letztere dann ohne Schaltflächen) und in Grid-Spalten über den Blob-Bildkonverter&lt;br /&gt;
** org.eclipse.osbp.authentication, org.eclipse.osbp.system.configuration, org.eclipse.osbp.blob: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** org.eclipse.osbp.xtext.table, org.eclipse.osbp.xtext.table.common: Für Attribute mit der Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; wird ein Barcode-Lookup generiert; eine String-Zelle wird als Barcode-Bild angezeigt, wenn das Lookup einen Barcode-Typ trägt&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** net.osbee.pos.tse: Aufrufer können die BSI-Zertifizierungs-ID der TSE abfragen. Die SE-API bietet &amp;lt;code&amp;gt;getCertificationId&amp;lt;/code&amp;gt; in beiden API-Versionen, keiner der beiden Adapter reichte den Aufruf bisher durch&lt;br /&gt;
** net.osbee.pos.tse, net.osbee.pos.rksv: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Einführung der http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/restartService Seite. Damit können entweder Sessions gekillt oder der Service der Anwendung neu gestartet werden.&lt;br /&gt;
** Bei Nichterreichbarkeit der Datenbank wird die Anwendung beendet und der Fehlerstatus auf der Statusseite angezeigt.&lt;br /&gt;
** Das eingebettete &amp;lt;code&amp;gt;shiro-all-1.2.3.jar&amp;lt;/code&amp;gt; wurde durch &amp;lt;code&amp;gt;shiro-core&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; in Version 1.13.0 ersetzt. Damit sind CVE-2016-4437 (Remote Code Execution über das RememberMe-Cookie mit festem Schlüssel) und CVE-2019-12422 geschlossen. &amp;lt;code&amp;gt;encoder-1.2.3.jar&amp;lt;/code&amp;gt; kommt hinzu, weil &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; 1.13 &amp;lt;code&amp;gt;org.owasp.encoder&amp;lt;/code&amp;gt; zwingend importiert.&lt;br /&gt;
** Anmeldung: &lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm&amp;lt;/code&amp;gt; löst den Anmeldenamen vor jeder Abfrage in einen Distinguished Name auf. Active Directory akzeptiert für den Bind auch einen User Principal Name, beantwortet Abfragen damit aber mit LDAP-Fehler 34 (&amp;lt;code&amp;gt;invalidDNSyntax&amp;lt;/code&amp;gt;), sodass ein &amp;lt;code&amp;gt;userDnTemplate&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt; zwar anmeldete, dann aber an den Attributen scheiterte. &amp;lt;code&amp;gt;resolveUserDn&amp;lt;/code&amp;gt; sucht nun über &amp;lt;code&amp;gt;userPrincipalName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sAMAccountName&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;mail&amp;lt;/code&amp;gt;; die Suchbasis stammt aus dem RootDSE. Bestehende Vorlagen der Form &amp;lt;code&amp;gt;cn={0},ou=...&amp;lt;/code&amp;gt; verhalten sich unverändert. Zugleich behoben: eine &amp;lt;code&amp;gt;StringIndexOutOfBoundsException&amp;lt;/code&amp;gt; im E-Mail-Zweig und das Einsetzen des Benutzernamens in den Suchfilter per Verkettung (jetzt als &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt;, von JNDI maskiert)&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm.getUserDn&amp;lt;/code&amp;gt; maskierte nur das Komma. &amp;lt;code&amp;gt;escapeDnValue&amp;lt;/code&amp;gt; deckt nun alle Zeichen nach RFC 4514 Abschnitt 2.4 ab, sodass ein Benutzername die Bedeutung des DN nicht mehr verändern kann&lt;br /&gt;
*** Die Funktionalität „Angemeldet bleiben“ arbeitet nun mit einem signierten Token statt mit verschlüsselten Zugangsdaten. Das Cookie ist eine mit HMAC-SHA256 signierte Aussage über Benutzer, Mandant, Geltungsbereich, Ablaufdatum und Version und enthält keine Zugangsdaten. Es ist zustandslos, sodass beliebig viele Geräte und Browser gleichzeitig eines halten können.&lt;br /&gt;
*** Das „Angemeldet bleiben“-Cookie gilt je Anwendungsinstanz und Browser. Der Cookie-Name trägt einen Kurzhash über Schema, Host, Port, erstes Pfadsegment und Portal-ID, sodass zwei Anwendungen auf demselben Host nicht mehr das Cookie der jeweils anderen lesen. Die selbstgebaute Verschlüsselung entfällt vollständig. Das Cookie wird mit expliziter Lebensdauer, &amp;lt;code&amp;gt;SameSite=Lax&amp;lt;/code&amp;gt; und unter https mit &amp;lt;code&amp;gt;Secure&amp;lt;/code&amp;gt; geschrieben. Die Anmeldung aus einem Cookie wartet fünf Sekunden mit einem Hinweis auf der Anmeldemaske und lässt sich in dieser Zeit abbrechen; ein entferntes Häkchen löscht das Cookie nun in jedem Fall. Die Betrugsmeldung samt Kontosperre bei nicht passendem Cookie entfällt&lt;br /&gt;
*** Fix: Kennwörter erscheinen nicht mehr im Log – weder bei der Anmeldung in &amp;lt;code&amp;gt;AuthenticationProvider.check()&amp;lt;/code&amp;gt; (bisher im Klartext auf DEBUG) noch beim Zurücksetzen, wo der Nachrichtentext mit dem neuen Kennwort dreimal geschrieben wurde&lt;br /&gt;
*** Die Anzeige des neuen Kennworts auf der Anmeldemaske, wenn keine E-Mail versendet werden kann, ist nun eine konfigurierte Betriebsart: &amp;lt;code&amp;gt;Userinterface/showResetPasswordOnScreen&amp;lt;/code&amp;gt;, standardmäßig aus, mit Protokollierung auf WARN. '''Installationen ohne Mailserver müssen den Parameter einmalig setzen'''&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;doResetPassword&amp;lt;/code&amp;gt; hebt weder eine Sperre noch die Deaktivierung eines Kontos auf und setzt den Fehlversuchszähler nicht mehr zurück. Das Zurücksetzen kann jeder auslösen, der einen Benutzernamen eingibt; aufgehoben werden Sperre und Deaktivierung nur noch durch einen Administrator über &amp;lt;code&amp;gt;doUnlock&amp;lt;/code&amp;gt;&lt;br /&gt;
** System Configuration: &lt;br /&gt;
*** Parameter &amp;lt;code&amp;gt;RememberMeSecret&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;IConfigurationService&amp;lt;/code&amp;gt; ergänzt (&amp;lt;code&amp;gt;GLOBAL_PARAMETERS/RememberMeSecret&amp;lt;/code&amp;gt;). Der Schlüssel wird je Installation bei der ersten Benutzung der &amp;quot;RememberMe&amp;quot; Funktionalität einmal aus gezogen und von allen Anmeldungen geteilt; das Löschen des Eintrags macht alle „Angemeldet bleiben“-Cookies auf einmal ungültig.&lt;br /&gt;
*** Fix: Die Einstellungen füllten sich mit Platzhaltern „not set“. &amp;lt;code&amp;gt;ConfigurationService.getConfigurationString&amp;lt;/code&amp;gt; speicherte bei leerem Vorgabewert den Platzhalter und lieferte ihn als leere Zeichenkette zurück, sodass &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; stets eine weitere Zeile anhängte. &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; entfernt nun die Platzhalterzeilen des Schlüssels vor dem Schreiben, und ein gespeicherter Platzhalter gilt als „kein Wert“. &amp;lt;code&amp;gt;deleteConfigurations&amp;lt;/code&amp;gt; setzt zusätzlich den Cache zurück; gelöschte Einträge kamen bisher beim nächsten Lesen wieder&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Fix: org.eclipse.osbp.dependencies-mbp: Das Bundle &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.bundle.activemq.all.osgi&amp;lt;/code&amp;gt; enthält kein Log4j und kein eingebettetes slf4j mehr. &amp;lt;code&amp;gt;activemq-all&amp;lt;/code&amp;gt; brachte eine vollständige Kopie von Apache Log4j 1.2.17 mit (359 Klassen, darunter &amp;lt;code&amp;gt;JDBCAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSSink&amp;lt;/code&amp;gt; und chainsaw – betroffen von CVE-2021-4104, CVE-2022-23302, CVE-2022-23305 und CVE-2022-23307) sowie slf4j-api 1.7.13 und &amp;lt;code&amp;gt;slf4j-log4j12&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;Include-Resource&amp;lt;/code&amp;gt; bindet das Hersteller-Jar nun ohne &amp;lt;code&amp;gt;org.apache.log4j&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org.slf4j&amp;lt;/code&amp;gt;, deren Maven-Koordinaten, die &amp;lt;code&amp;gt;log4j.properties&amp;lt;/code&amp;gt; und Springs &amp;lt;code&amp;gt;Log4jConfigurer&amp;lt;/code&amp;gt; ein. ActiveMQ bezieht slf4j stattdessen aus dem Produkt (&amp;lt;code&amp;gt;org.slf4j.api&amp;lt;/code&amp;gt; 1.7.36)&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neue Dienststeuerungsseite unter &amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;. &lt;br /&gt;
*** Ein Bediener kann darüber – autorisiert durch eine reguläre Anwendungsanmeldung – hängende Sitzungen beenden oder den Dienst neu starten, ohne Zugriff auf den Serverrechner zu benötigen. Drei Stufen: Sitzungen des aufrufenden Arbeitsplatzes, alle Sitzungen, Neustart. Die Seite ist am Root-HTTP-Service registriert und bleibt damit erreichbar, wenn der Anwendungskontext selbst gestört ist; Markup, Stil, Skript und Texte (deutsch, englisch, französisch) sind deshalb in der Seite enthalten. Sitzungen werden über das Invalidieren der HTTP-Sitzung beendet. Der Neustart läuft über die Befehlswarteschlange der Anwendung; die Seite fragt anschließend die Anwendung ab und führt den Bediener über die Unterbrechung hinweg&lt;br /&gt;
*** Alle Aktionen der Dienststeuerungsseite werden im &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; unter denselben Koordinaten wie die Anmeldemaske protokolliert (fehlgeschlagene Anmeldung und Neustart als WARNING, gesperrtes Konto als ERROR, beendete Sitzungen als INFO). Eine abgelehnte Anmeldung sperrt das Formular für die Dauer der Wartezeit mit Countdown; der Zähler ist derselbe wie an der Anmeldemaske, sodass sich Fehlversuche auf beiden Wegen zur Kontosperre summieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260907 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Überarbeitung der Codebasis zur Entfernung veralteter und nicht benötigter Bundles&lt;br /&gt;
** Überarbeitung des Loginvorgangs / der Cookiespeicherung bei &amp;quot;remember me&amp;quot;. Es werden keine kritischen Daten mehr im Cookie gespeichert.&lt;br /&gt;
** Verbesserung der Übersetzungen&lt;br /&gt;
** Anpassungen für frz. Fiskalanforderungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Laden der Übersetzungen in die interne Tabelle beim Systemstart deutlich beschleunigt. Dadurch verbessertes Startverhalten der Anwendungen.&lt;br /&gt;
** Verbesserungen bei der frz. Tastaturunterstützung&lt;br /&gt;
** Verbesserungen der Übersetzungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260618 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Blockieren durch das Laden von Diensten während des Starts vermieden, dadurch schnellerer Anwendungsstart. Anderes Verhalten beim Start an der Benutzeroberfläche.&lt;br /&gt;
** Französische Tastaturunterstützung (AZERTY) im Keymapper der Statemachine ergänzt&lt;br /&gt;
** Login bezieht Build-Version und Hersteller nun aus den &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; (einheitliche Quelle)&lt;br /&gt;
** Neue gemeinsame Hilfsmethoden &amp;lt;code&amp;gt;getBuildVersion()&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;getVendor()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; zur Ermittlung der Build-Identität&lt;br /&gt;
** &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; setzt die Zeitstempel von &amp;lt;code&amp;gt;lastError&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;lastWarning&amp;lt;/code&amp;gt; nicht mehr zurück&lt;br /&gt;
** Fix: NPE in &amp;lt;code&amp;gt;org.eclipse.osbp.xtext.dialog.AutowireUiFactory&amp;lt;/code&amp;gt; behoben&lt;br /&gt;
** Version von 5.2.0 auf 5.3.0 angehoben&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-reverify&amp;lt;/code&amp;gt; (16px/32px) für die NF525-Schaltfläche zur erneuten Archivintegritätsprüfung&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-refresh.png&amp;lt;/code&amp;gt; ergänzt&lt;br /&gt;
** Grid – horizontale Bildlaufleiste wiederhergestellt&lt;br /&gt;
** Grid - Flex-Layout für Kassen-/POS-Grids wiederhergestellt (kollabierte Spalten behoben)&lt;br /&gt;
** französische Übersetzungen überarbeitet&lt;br /&gt;
&lt;br /&gt;
* Grammatiken/Generierung:&lt;br /&gt;
** org.eclipse.osbp.dsl: Benutzerdefinierte &amp;lt;code&amp;gt;@PreRemove&amp;lt;/code&amp;gt;-Hooks werden in der generierten &amp;lt;code&amp;gt;preRemove()&amp;lt;/code&amp;gt;-Methode zusammengeführt&lt;br /&gt;
** org.eclipse.osbp.xtext.i18n: i18n-Generator erzeugt nun das byte-genaue Eclipse-Babel-Format&lt;br /&gt;
&lt;br /&gt;
* POS Framework für franz. Fiskalanforderungen eingeführt&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260410 ==&lt;br /&gt;
&lt;br /&gt;
* POS Framework: &lt;br /&gt;
** Performanceverbesserung beim Kassieren&lt;br /&gt;
** Multi-Protokoll Unterstützung für Paymentterminal &lt;br /&gt;
*** frz. Protokolle &amp;quot;Concert&amp;quot;, &amp;quot;Protocol E&amp;quot;&lt;br /&gt;
*** &amp;quot;Mock&amp;quot; für Tests&lt;br /&gt;
*** Statemachine DSL erweitert: protocol Parameter für Paymentterminal&lt;br /&gt;
*** &amp;quot;Shared Payment Terminal&amp;quot;&lt;br /&gt;
**** locking im PaymentTerminalService implementiert&lt;br /&gt;
**** pro Terminal über ConfigService einstellbar&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260402 ==&lt;br /&gt;
&lt;br /&gt;
Die Version verbessert das Startverhalten einer Anwendung und bringt mehr Informationen über den Status des Starts auf den Bildschirm&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Anzeige des Persistenzservice-Status auf dem Login-Bildschirm&lt;br /&gt;
** Information über den Persistenzservice auf der Fehlerseite hinzugefügt&lt;br /&gt;
** Beim Start wird nun überall auf den Persistenzservice statt nur auf den ConfigurationService gewartet&lt;br /&gt;
&lt;br /&gt;
* BPM:&lt;br /&gt;
** Fix: net.osbee.bpm: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** Fix: net.osbee.pos.epay: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260305 ==&lt;br /&gt;
&lt;br /&gt;
=== Report Anzeige ===&lt;br /&gt;
&lt;br /&gt;
Diese Version konzentriert sich auf '''Stabilitätsverbesserungen''' für das Report-Rendering-System, insbesondere auf die Behebung von Race Conditions und Anzeigeproblemen, die bei schnellen Benutzerinteraktionen auftraten.&lt;br /&gt;
&lt;br /&gt;
* Race Condition beim Report-Rendering&lt;br /&gt;
** '''Behoben: Schnelles Auswählen/Abwählen führte dazu, dass Reports mit ungültigen oder fehlenden Filtern gerendert wurden'''&lt;br /&gt;
*** Reports verarbeiten nun korrekt wenn Benutzer schnell Elemente auswählen und wieder abwählen&lt;br /&gt;
*** Filteränderungen werden blockiert, während ein Render-Vorgang läuft&lt;br /&gt;
*** Ausstehende Filteränderungen werden nachverfolgt und nach Abschluss des Renderings erneut ausgewertet&lt;br /&gt;
*** Reports mit &amp;lt;code&amp;gt;selectById&amp;lt;/code&amp;gt; werden nun korrekt ausgeblendet, wenn nichts ausgewählt ist&lt;br /&gt;
&lt;br /&gt;
* PDF-Anzeigeskalierungsproblem &lt;br /&gt;
** '''Behoben: PDF-Skalierungsprobleme durch Neuerstellung des BrowserFrames bei jedem Rendering'''&lt;br /&gt;
&lt;br /&gt;
=== Anmeldebildschirm ===&lt;br /&gt;
&lt;br /&gt;
Der Anmeldebildschirm zeigt nun während der Initialisierung des Persistence-Services einen Statustext an.&lt;br /&gt;
&lt;br /&gt;
* Lauftext-Anzeige (Marquee) mit dem aktuellen Status des Persistence-Services&lt;br /&gt;
* Deaktivierung aller Anmeldesteuerelemente während der Wartezeit&lt;br /&gt;
&lt;br /&gt;
=== Start der Anwendung ===&lt;br /&gt;
&lt;br /&gt;
* Blockierungen der Initialisierungsvorgänge durch Warten auf Serviceregistrierung während des Anwendungsstarts reduziert. &amp;lt;br&amp;gt;Dadurch verändert sich das Startverhalten, insbesondere die Reihenfolge der Anwendung. Insgesamt schnelleres Laden der Bundles.&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4631</id>
		<title>Releasenotes 2026 OS.Softwarefactory</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4631"/>
				<updated>2026-11-06T13:50:22Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261106 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Neu: Die Seite &amp;lt;code&amp;gt;/showLog&amp;lt;/code&amp;gt; zeigt im laufenden Betrieb das Ende des Protokolls (die letzten 500 Zeilen), mit Textfilter, Aktualisieren und Herunterladen der aktuellen Datei. Anmelden können sich nur Benutzer mit der Superuser-Eigenschaft, mit derselben Sperre nach Fehlversuchen wie bei der normalen Anmeldung. Jeder Zugriff wird im Monitoring festgehalten. Die Seite ist standardmäßig ausgeschaltet und wird in der Systemkonfiguration mit &amp;lt;code&amp;gt;GLOBAL_PARAMETERS / showLog&amp;lt;/code&amp;gt; eingeschaltet. Da dabei ein Passwort übertragen wird, sollte die Anwendung über HTTPS erreichbar sein. Betroffene Komponenten: org.eclipse.osbp.vaaclipse.addons/org.eclipse.osbp.vaaclipse.addons.app, org.eclipse.osbp.ui.api, org.eclipse.osbp.authentication, org.eclipse.osbp.ecview.addons/org.eclipse.osbp.ecview.jetty.manager&lt;br /&gt;
** Neu: Auf der Seite &amp;lt;code&amp;gt;/showLog&amp;lt;/code&amp;gt; lässt sich die Schrift des Protokolls mit den Schaltflächen A− und A+ verkleinern und vergrößern. Die gewählte Größe bleibt beim Aktualisieren und Filtern erhalten, bis zur nächsten Anmeldung. Betroffene Komponenten: org.eclipse.osbp.vaaclipse.addons/org.eclipse.osbp.vaaclipse.addons.app&lt;br /&gt;
** Änderung: Wird eine falsche Adresse aufgerufen, zeigt die Hinweisseite jetzt alle Einstiegspunkte in einer Tabelle: Anwendung, Kundenanzeige (Display), Protokollseite und Dienststeuerung. Die automatische Weiterleitung zur Anwendung erfolgt nach 5 statt 3 Sekunden. Betroffene Komponenten: org.eclipse.osbp.ecview.addons/org.eclipse.osbp.ecview.jetty.manager&lt;br /&gt;
** Fix: Änderungen in der Systemkonfiguration wirken nach dem Speichern im Dialog wieder sofort. Seit Juni 2025 wurden Aufgaben, die nach dem Speichern im Hintergrund laufen sollen, nicht mehr ausgeführt; Konfigurationsänderungen wurden dadurch erst nach bis zu einer Stunde wirksam, und auch die Nachbearbeitung nach dem Speichern mancher Daten (z. B. für die Suche) unterblieb. Betroffene Komponenten: org.eclipse.osbp.dsl/org.eclipse.osbp.dsl.entity.postpersistservice&lt;br /&gt;
** Fix: Monitoring-Einträge mit dem Status „Info“ werden korrekt gespeichert. Bisher wurden sie als „Unbekannt“ abgelegt, und im Protokoll erschien ein Fehler. Nach dem Update wird die Datenbankstruktur des Monitorings einmalig geprüft. Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring.base&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** Änderung: Die Vorschläge im Editor der Funktionsbibliothek (Strg+Leertaste) erscheinen jetzt auch in großen Dateien ohne spürbare Wartezeit. Bisher wurde bei jedem Aufruf die ganze Datei neu gelesen, was in großen Dateien mehrere Sekunden dauern konnte. Die Gliederung (Outline) wird erst aktualisiert, wenn zwei Sekunden lang nicht getippt wurde, und bremst das Tippen dadurch nicht mehr. Auch das Einfärben und das Ein- und Ausklappen von Abschnitten werden nicht mehr bei jedem Aufruf der Vorschläge für die ganze Datei neu berechnet, sondern nur nach einer Änderung. Ist in der Gliederung „Mit Editor verknüpfen“ eingeschaltet, wartet der Editor nach größeren Änderungen nicht mehr, bis die Datei vollständig geprüft ist. Betroffene Komponenten: org.eclipse.osbp.xtext.functionlibrary/org.eclipse.osbp.xtext.functionlibrarydsl.ui&lt;br /&gt;
** Änderung: Die Editoren für Entitäten, DTOs, Statemachines und Datamarts arbeiten jetzt wie der Editor der Funktionsbibliothek: Die Vorschläge (Strg+Leertaste) erscheinen auch in großen Dateien ohne spürbare Wartezeit, Gliederung, Einfärben und Ein- und Ausklappen bremsen das Tippen nicht mehr. Nur der erste Aufruf der Vorschläge nach dem Start der Entwicklungsumgebung dauert etwas länger. Fehlermarkierungen und Gliederung erscheinen kurz nach dem Tippen. Betroffene Komponenten: org.eclipse.osbp.xtext.oxtype/org.eclipse.osbp.xtext.oxtype.ui, org.eclipse.osbp.dsl/org.eclipse.osbp.dsl.entity.xtext.ui, org.eclipse.osbp.dsl/org.eclipse.osbp.dsl.dto.xtext.ui, org.eclipse.osbp.xtext.statemachine/org.eclipse.osbp.xtext.statemachine.ui, org.eclipse.osbp.xtext.datamart/org.eclipse.osbp.xtext.datamartdsl.ui&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Änderung: Die Entwicklungsumgebung schreibt bei jedem Bauen nicht mehr die Versionsangaben aus Git in die Projekte. Das hat das Bauen in der Entwicklungsumgebung spürbar verlangsamt und oft eine weitere Baurunde ausgelöst. Die Versionsangaben entstehen weiterhin beim Bauen auf dem Build-Server, die ausgelieferten Stände enthalten sie wie bisher. Entwickler führen danach einmal in der Entwicklungsumgebung „Maven &amp;gt; Update Project“ mit „Force Update of Snapshots“ aus (Alt+F5). Betroffene Komponenten: org.eclipse.osbp.releng.maven, org.eclipse.osbp.releng.maven/org.eclipse.osbp.releng.maven.parent.tycho, org.osbee.releng.maven, org.osbee.releng.maven/org.osbee.releng.maven.parent.tycho, net.osbee.releng.maven, net.osbee.releng.maven/net.osbee.releng.maven.parent.tycho, net.osbee.app.releng.maven, net.osbee.app.releng.maven/net.osbee.app.releng.maven.parent.tycho&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261105 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Änderung: Beim Start wird die Datenbankstruktur nur noch geprüft, wenn sich das Datenmodell wirklich geändert hat, auch nach einem Update. Ein neuer Stand der Anwendung ohne Änderung am Datenmodell startet dadurch ohne diese Prüfung. Nach dem Update auf diese Version wird einmalig noch einmal alles geprüft. Bei sehr großen Tabellen kann das viele Minuten dauern. Die Anwendung darf in dieser Zeit nicht beendet werden. Über den echten Update-Fall auf einer Installation ist das noch nicht bestätigt. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Änderung: Der Start wartet jetzt so lange, wie die Prüfung der Datenbankstruktur braucht. Bisher brach er nach 5 Minuten ab, und bei sehr großen Tabellen kam die Anwendung dadurch nicht mehr hoch. Wer weiterhin eine Grenze möchte, setzt &amp;lt;code&amp;gt;-DPersistenceService.startupTimeoutSeconds=&amp;amp;lt;Sekunden&amp;amp;gt;&amp;lt;/code&amp;gt;. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Änderung: Vorhandene Indizes und Fremdschlüssel werden beim Start auf MySQL und MariaDB nicht mehr ein zweites Mal angelegt. Das verkürzt die Prüfung bei großen Tabellen deutlich. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Fix: Liegen auf einem Datenbankserver mehrere Datenbanken mit gleichen Tabellen, legt die Prüfung auf MySQL und MariaDB fehlende Spalten nun zuverlässig an. Bisher galt eine Spalte als vorhanden, wenn es sie in einer anderen Datenbank gab. Später erschien dann die Meldung „Unknown column“, zum Beispiel beim Wiederholdruck einer Rechnung. Im Betrieb ist diese Korrektur noch nicht bestätigt. Ohne Verbindungspool (&amp;lt;code&amp;gt;-DPersistenceService.connectionPool=false&amp;lt;/code&amp;gt;) greift sie nicht. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Neu: Die Startseite zeigt die verstrichene Zeit, damit man sieht, dass der Start noch läuft. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Neu: Die Startseite kann das Ende des Protokolls anzeigen, mit &amp;lt;code&amp;gt;-DStartupStatusPage.showLog=true&amp;lt;/code&amp;gt; in der &amp;lt;code&amp;gt;eclipse.ini&amp;lt;/code&amp;gt;. Die Datei wird automatisch ermittelt, &amp;lt;code&amp;gt;-DStartupStatusPage.logFile=&amp;amp;lt;Pfad&amp;amp;gt;&amp;lt;/code&amp;gt; gibt sie fest vor. Die Anzeige ist standardmäßig aus, denn die Startseite ist ohne Anmeldung erreichbar und das Protokoll kann vertrauliche Angaben enthalten. Auf Kassen beim Kunden sollte sie aus bleiben. Betroffene Komponenten: org.eclipse.osbp.ecview.addons/org.eclipse.osbp.ecview.jetty.manager&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261104 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Neu: Beim Start wird die Datenbankstruktur nur noch dort geprüft, wo sich das Datenmodell geändert hat. Auf einer Testinstallation war die Datenbank beim Start dadurch rund 18 Sekunden früher bereit; insgesamt entfallen dort rund 30 Sekunden Prüfarbeit. Der erste Start nach einem Update prüft noch einmal alles. Die Prüfung ergänzt nur und entfernt nichts aus der Datenbank. Betroffene Komponenten: org.eclipse.osbp.persistence, org.eclipse.osbp.system.configuration.api, org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.configuration.base, org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.configuration.service&lt;br /&gt;
** Neu: Eine neue Ansicht zeigt, wann die Datenbankstruktur zuletzt geprüft wurde. Administratoren können dort für einen Bereich eine neue Prüfung beim nächsten Start auslösen. Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.configuration&lt;br /&gt;
** Änderung: Der Startparameter &amp;lt;code&amp;gt;-DPersistenceService.NoCache&amp;lt;/code&amp;gt; wird nicht mehr gebraucht. Ein vorhandener Eintrag stört nicht. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Fix: Ein Bericht wird nach einem Klick nur noch einmal angezeigt. Seit Version 5.3.0.20261103 konnte er sich mehrfach neu aufbauen. Betroffene Komponenten: org.eclipse.osbp.osgi.hybrid.api, org.eclipse.osbp.xtext.report/org.eclipse.osbp.xtext.report.runtime&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261103 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Neu: Flyway findet Datenbankmigrationen, die Bundles mitbringen. Ein Bundle nennt seinen Migrationsordner im Manifest-Header &amp;lt;code&amp;gt;OSBP-Flyway-Migration: db/migration&amp;lt;/code&amp;gt; und legt die Skripte als &amp;lt;code&amp;gt;&amp;amp;lt;Persistence Unit&amp;amp;gt;/&amp;amp;lt;Hersteller&amp;amp;gt;/V&amp;amp;lt;Version&amp;amp;gt;__&amp;amp;lt;Beschreibung&amp;amp;gt;.sql&amp;lt;/code&amp;gt; ab, z.B. &amp;lt;code&amp;gt;monitoringData/mysql/V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;. Ein Skript läuft auf der Datenquelle, für die seine Persistence Unit konfiguriert ist, und zwar vor dem Anlegen und Erweitern der Tabellen durch EclipseLink. Der Herstellerordner wird aus den JDBC-Metadaten bestimmt: &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt; (auch für MariaDB), &amp;lt;code&amp;gt;postgresql&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oracle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sqlserver&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;derby&amp;lt;/code&amp;gt;. Bisher suchte Flyway über einen Class Loader, der in OSGi einen Ordner wie &amp;lt;code&amp;gt;db/migration&amp;lt;/code&amp;gt; nur im eigenen Bundle sieht – Skripte in anderen Bundles wurden nie gefunden. Die neue Klasse &amp;lt;code&amp;gt;BundleMigrations&amp;lt;/code&amp;gt; sammelt sie und übergibt sie Flyway als Resource Provider; die Skripte im Dateisystemordner der Datenquelle (&amp;lt;code&amp;gt;-DFlyway.&amp;amp;lt;Datenquelle&amp;amp;gt;.DatabaseMigrationSourcePath&amp;lt;/code&amp;gt;) werden wie bisher mitgelesen. '''Die Migrationen laufen weiterhin nur mit &amp;lt;code&amp;gt;-DFlyway.active=true&amp;lt;/code&amp;gt;; keine ausgelieferte Anwendung schaltet sie bisher ein''' Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Neu: HikariCP-Verbindungspool vor der Datenquelle des Treibers. Bisher öffnete jede Abfrage eine neue Verbindung zur Datenbank, etwa 3.000 je stündlichem Lauf des Zeitplaners auf einer ruhenden Kasse. Maximum ist &amp;lt;code&amp;gt;database.connectionpool.max&amp;lt;/code&amp;gt;, 5 Verbindungen bleiben offen, Austausch nach 30 Minuten. &amp;lt;code&amp;gt;-DPersistenceService.connectionPool=false&amp;lt;/code&amp;gt; schaltet den Pool ab; &amp;lt;code&amp;gt;.minIdle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.maxLifetimeMinutes&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;.leakDetectionSeconds&amp;lt;/code&amp;gt; stellen ihn ein. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Neu: Jeder Eintrag der Systemüberwachung enthält die Auslastung des Verbindungspools in Prozent und die Zahl der wartenden Threads. Wartende Threads markieren den Eintrag Memorycheck als Warnung. Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring, org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring.base&lt;br /&gt;
** Änderung: &amp;lt;code&amp;gt;db/README.md&amp;lt;/code&amp;gt; beschreibt Aufbau, Versions- und Historienkonventionen sowie die Regeln für ein Migrationsskript (nie ein ausgeliefertes Skript ändern, sondern eine neue Version schreiben; jeden Datenbankzustand vertragen, weil das Skript vor dem Anlegen der Tabellen läuft; Objekte an ihrer Struktur statt an ihrem Namen finden). Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring.base&lt;br /&gt;
** Änderung: Die Tabelle „Flyway info“ im Log richtet ihre Spaltenbreiten nach dem Inhalt. Bisher schnitten feste Breiten Version und Beschreibung ab (&amp;lt;code&amp;gt;2026.10.28.1&amp;lt;/code&amp;gt; erschien als &amp;lt;code&amp;gt;2026.10.&amp;lt;/code&amp;gt;). Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Änderung: Jedes Bundle mit Migrationen hat eine eigene Historientabelle, &amp;lt;code&amp;gt;flyway_&amp;lt;/code&amp;gt; und der symbolische Name, gekürzt wie ein Logger Klassennamen kürzt (führende Segmente auf ihren Anfangsbuchstaben, bis höchstens 30 Zeichen erreicht sind): &amp;lt;code&amp;gt;org.eclipse.osbp.system.monitoring.base&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;flyway_oeos_monitoring_base&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;net.osbee.app.bdi.ex.model.entity&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;flyway_noa_bdi_ex_model_entity&amp;lt;/code&amp;gt;. Versionen müssen daher nur innerhalb eines Bundles eindeutig sein; zwei Entwickler können in verschiedenen Bundles dieselbe Versionsnummer vergeben. Scheitern die Migrationen eines Bundles, wird das mit „the migrations of &amp;amp;lt;Bundle&amp;amp;gt; were NOT applied“ protokolliert, die übrigen Bundles laufen weiter. Ergäben zwei Bundles denselben gekürzten Namen, werden beide mit einem Fehler abgewiesen, statt sich eine Historie zu teilen. Die Skripte des Dateisystemordners behalten Flyways Standardtabelle &amp;lt;code&amp;gt;flyway_schema_history&amp;lt;/code&amp;gt;; eine Quelle ohne Skripte läuft gar nicht. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Fix: Das Grid fragt nach einem Wechsel des Inhalts nicht mehr für jede bekannte Zeile einzeln beim Container nach. Bei einem lazy ladenden Container war das je Zeile ein &amp;lt;code&amp;gt;SELECT COUNT&amp;lt;/code&amp;gt;: Ein Lauf des Zeitplaners mit offener Perspektive machte 10.468 Abfragen, danach 787. Die Schlüssel von Zeilen, die der Client nicht mehr anzeigt, werden beim nächsten Zurücksetzen freigegeben. Betroffene Komponenten: org.eclipse.osbp.ecview.extension/org.eclipse.osbp.ecview.extension.grid.presentation&lt;br /&gt;
** Fix: Eine Ansicht zeigt nach einer Folge von Änderungen immer den letzten Stand. Bisher wurden Aktualisierungen während des Zeichnens oder innerhalb der Ruhezeit (&amp;lt;code&amp;gt;RefreshTimeout&amp;lt;/code&amp;gt;, Standard 300 ms) verworfen, sodass die letzte Änderung fehlen konnte. Jetzt werden sie zurückgestellt: Die Ansicht zeichnet einmal nach der letzten Anforderung, spätestens 5 Sekunden nach der ersten zurückgestellten. Gilt für alle Ansichten über &amp;lt;code&amp;gt;AbstractHybridVaaclipseView&amp;lt;/code&amp;gt; (Tabellen, Diagramme, Berichte). Die Zahl der Abfragen sinkt dadurch nicht zwingend: gemessen am Überwachungsdiagramm 4 statt 3 bei einem Lauf des Zeitplaners, dafür mit dem letzten Stand. Betroffene Komponenten: org.eclipse.osbp.osgi.hybrid.api&lt;br /&gt;
** Fix: Flyway lief bei jedem Start mit &amp;lt;code&amp;gt;baseline()&amp;lt;/code&amp;gt;. Sobald die Historie Einträge hatte, lehnte Flyway das mit einer Ausnahme ab, die verschluckt wurde – &amp;lt;code&amp;gt;migrate()&amp;lt;/code&amp;gt; lief danach nie. Eine bestehende Datenbank ohne Historie wird nun über &amp;lt;code&amp;gt;baselineOnMigrate&amp;lt;/code&amp;gt; einmalig mit Version 0 versehen. Ebenso entfällt &amp;lt;code&amp;gt;repair()&amp;lt;/code&amp;gt; bei jedem Start: Es schrieb die Historie auf ein nachträglich geändertes oder ersetztes Skript um, das dann nie lief; ein solches Skript scheitert nun an der Prüfsumme. Versionen dürfen außer der Reihe eintreffen (&amp;lt;code&amp;gt;outOfOrder&amp;lt;/code&amp;gt;), ein entferntes, bereits gelaufenes Skript ist kein Fehler mehr. Der Lizenzschlüssel für die kommerzielle Flyway-Edition wird nicht mehr gelesen; die Open-Source-Edition genügt. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Fix: Wartezeit beim Start („Getting a lock required more than 20000 ms“). Jede Persistence Unit las beim Anlegen ihren EclipseLink-Cachetyp und ihre Cachegröße (&amp;lt;code&amp;gt;EclipseLink/&amp;amp;lt;Unit&amp;amp;gt;#cacheTypeDefault&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#cacheSizeDefault&amp;lt;/code&amp;gt;) aus der Konfiguration. Die Units werden parallel in einem Thread-Pool angelegt; das Lesen der Konfiguration holt DTO-Dienste und Mapper über Declarative Services, deren Sperre der Start-Thread während des gesamten Persistenzstarts hält. Jeder Pool-Thread wartete daher, bis DS nach 20 s aufgab. Die Werte werden nun vorher einmal auf dem Start-Thread gelesen, der die Sperre erneut nehmen darf; die Pool-Threads erhalten sie aus dem Zwischenspeicher der Konfiguration. Die Vorgabewerte (&amp;lt;code&amp;gt;Soft&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1000&amp;lt;/code&amp;gt;) sind Konstanten, sodass beide Lesestellen dieselben verwenden. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Fix: Überwachungseinträge gingen auf älteren Datenbanken verloren. Datenbanken, die mit einem früheren Monitoring-Modell angelegt wurden, tragen noch eindeutige Indizes auf einem Namen allein (&amp;lt;code&amp;gt;MONITOR_SUB_CATEGORY.MSC_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_CATEGORY.MCA_NAME&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DK&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_MAIN_CATEGORY.MMCA_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_COMPONENT.MCO_NAME&amp;lt;/code&amp;gt;). Das Modell verlangt einen eindeutigen Namen nur unterhalb des jeweiligen Elternelements; die Schemagenerierung legt Indizes an, entfernt aber nie einen. Eine zweite Kategorie mit einer gleichnamigen Unterkategorie – etwa „COMPLETE“ unter &amp;lt;code&amp;gt;XRECHNUNG_UP&amp;lt;/code&amp;gt; und unter &amp;lt;code&amp;gt;ZUGFERD_UP&amp;lt;/code&amp;gt; – scheiterte daher an einem doppelten Schlüssel, &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; fing den Fehler ab, und der Eintrag fehlte (auf einer BDI-Installation über 1.000 solcher Fehler an einem Tag, dazu „transactionRollback - no transactionhandler found“). Ebenso konnten sich zwei Installationen mit gemeinsamer Datenbank nicht beide als Komponente „Application“ anmelden. Die erste Flyway-Migration des Bundles (&amp;lt;code&amp;gt;V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;, für MySQL/MariaDB, PostgreSQL und Oracle) entfernt diese Indizes; &amp;lt;code&amp;gt;MONITOR_COMPONENTI1&amp;lt;/code&amp;gt; legt die Schemagenerierung danach in der Form des Modells (&amp;lt;code&amp;gt;MCO_NAME, MCO_INSTALLATION&amp;lt;/code&amp;gt;) neu an. Da die Indizes nicht mehr im Modell stehen, hängen ihre Namen vom Generator ab, der die Datenbank angelegt hat; die Skripte finden sie daher an ihrer Struktur (eindeutig, kein Primärschlüssel, genau eine dieser Spalten). Auf einer neuen oder bereits bereinigten Datenbank ändern sie nichts. '''Die PostgreSQL- und Oracle-Skripte sind ungetestet.''' Ohne Flyway lassen sich die Indizes auch von Hand entfernen (auf den lokalen Datenbanken &amp;lt;code&amp;gt;shipment&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;pos&amp;lt;/code&amp;gt; geschehen). Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring.base&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** Fix: Der Diagramm-Generator setzt den Zähler je Datenreihe zurück (ab 500 Zeilen passten Reihen und Beschriftung sonst nicht zusammen), Linien verschwinden beim Überfahren nicht mehr, der Tooltip nennt die Kategorie, und die Animation läuft nur noch beim ersten Zeichnen. Betroffene Komponenten: org.eclipse.osbp.xtext.chart&lt;br /&gt;
** Änderung: Das Speicherdiagramm der Überwachung ist mit dem korrigierten Generator neu erzeugt. Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Fix: Flyway 9 enthält die Unterstützung für MySQL und MariaDB nicht mehr im Kern, sondern im Modul &amp;lt;code&amp;gt;flyway-mysql&amp;lt;/code&amp;gt;, das sich über &amp;lt;code&amp;gt;META-INF/services&amp;lt;/code&amp;gt; registriert und von Flyway mit dessen eigenem Class Loader gesucht wird. Das Modul wird daher als Fragment &amp;lt;code&amp;gt;org.flywaydb.database.mysql&amp;lt;/code&amp;gt; 9.14.0.v20261028 an &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; ausgeliefert (das Manifest des Originals nennt sich selbst &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; und ist so nicht verwendbar) und mit dem Feature &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.feature.flyway&amp;lt;/code&amp;gt; verteilt. Ohne das Fragment endet Flyway auf MariaDB mit „Unsupported Database: MySQL 5.5“ (so meldet der alte MySQL-Treiber eine MariaDB). PostgreSQL und Oracle sind weiterhin im Kern enthalten. '''Das per Maven gebaute Fragment ist noch nicht auf einer Installation geprüft'''; '''Build-Reihenfolge:''' dependencies-mbp, dependencies, persistence, system.configuration. Betroffene Komponenten: org.eclipse.osbp.dependencies-mbp/org.eclipse.osbp.dependencies.bundle.flyway.mysql, org.eclipse.osbp.dependencies/org.eclipse.osbp.dependencies.feature.flyway&lt;br /&gt;
** Neu: HikariCP 4.0.3 wird als Feature mit ausgeliefert. Es ist wie Flyway aus den Quell-Features ausgenommen. Betroffene Komponenten: org.eclipse.osbp.dependencies/org.eclipse.osbp.dependencies.feature.hikaricp, org.eclipse.osbp.dependencies.p2, org.eclipse.osbp.technologystack/org.eclipse.osbp.technologystack.feature, org.eclipse.osbp.technologystack/org.eclipse.osbp.technologystack.target.feature, org.eclipse.osbp.persistence/org.eclipse.osbp.persistence.feature, org.eclipse.osbp.softwarefactory/org.eclipse.osbp.softwarefactory.runtime.feature&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261029 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Fix: org.eclipse.osbp.persistence: Wartezeit beim Start („Getting a lock required more than 20000 ms“). Jede Persistence Unit las beim Anlegen ihren EclipseLink-Cachetyp und ihre Cachegröße (&amp;lt;code&amp;gt;EclipseLink/&amp;amp;lt;Unit&amp;amp;gt;#cacheTypeDefault&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#cacheSizeDefault&amp;lt;/code&amp;gt;) aus der Konfiguration. Das führte zu einer gegenseitigen Blockierung der Initialisierung. Die Werte werden nun einmal auf dem Start-Thread gelesen, damit tritt die Sperre nicht mehr auf.&lt;br /&gt;
** Neu: org.eclipse.osbp.persistence: Flyway findet Datenbankmigrationen, die Bundles mitbringen. Ein Bundle nennt seinen Migrationsordner im Manifest-Header &amp;lt;code&amp;gt;OSBP-Flyway-Migration: db/migration&amp;lt;/code&amp;gt; und legt die Skripte als &amp;lt;code&amp;gt;&amp;amp;lt;Persistence Unit&amp;amp;gt;/&amp;amp;lt;Hersteller&amp;amp;gt;/V&amp;amp;lt;Version&amp;amp;gt;__&amp;amp;lt;Beschreibung&amp;amp;gt;.sql&amp;lt;/code&amp;gt; ab, z.B. &amp;lt;code&amp;gt;monitoringData/mysql/V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;. Ein Skript läuft auf der Datenquelle, für die seine Persistence Unit konfiguriert ist, und zwar vor dem Anlegen und Erweitern der Tabellen durch EclipseLink. Der Herstellerordner wird aus den JDBC-Metadaten bestimmt: &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt; (auch für MariaDB), &amp;lt;code&amp;gt;postgresql&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oracle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sqlserver&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;derby&amp;lt;/code&amp;gt;. Die neue Klasse &amp;lt;code&amp;gt;BundleMigrations&amp;lt;/code&amp;gt; sammelt die Migrationsskripte und übergibt sie Flyway als Resource Provider; die Skripte im Dateisystemordner der Datenquelle (&amp;lt;code&amp;gt;-DFlyway.&amp;amp;lt;Datenquelle&amp;amp;gt;.DatabaseMigrationSourcePath&amp;lt;/code&amp;gt;) werden mitgelesen. '''Die Migrationen laufen nur mit &amp;lt;code&amp;gt;-DFlyway.active=true&amp;lt;/code&amp;gt;;'''&lt;br /&gt;
** org.eclipse.osbp.persistence: Jedes Bundle mit Migrationen hat eine eigene Historientabelle, &amp;lt;code&amp;gt;flyway_&amp;lt;/code&amp;gt; und der symbolische Name, gekürzt wie ein Logger Klassennamen kürzt (führende Segmente auf ihren Anfangsbuchstaben, bis höchstens 30 Zeichen erreicht sind): &amp;lt;code&amp;gt;org.eclipse.osbp.system.monitoring.base&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;flyway_oeos_monitoring_base&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;net.osbee.app.bdi.ex.model.entity&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;flyway_noa_bdi_ex_model_entity&amp;lt;/code&amp;gt;. Versionen müssen innerhalb eines Bundles eindeutig sein. Scheitern die Migrationen eines Bundles, wird das mit „the migrations of &amp;amp;lt;Bundle&amp;amp;gt; were NOT applied“ protokolliert, die übrigen Bundles laufen weiter. Ergäben zwei Bundles denselben gekürzten Namen, werden beide mit einem Fehler abgewiesen, statt sich eine Historie zu teilen. Die Skripte des Dateisystemordners behalten Flyways Standardtabelle &amp;lt;code&amp;gt;flyway_schema_history&amp;lt;/code&amp;gt;; eine Quelle ohne Skripte läuft gar nicht&lt;br /&gt;
** Fix: org.eclipse.osbp.persistence: Flyway lief bei jedem Start mit &amp;lt;code&amp;gt;baseline()&amp;lt;/code&amp;gt;. Sobald die Historie Einträge hatte, lehnte Flyway das mit einer Ausnahme ab, die verschluckt wurde – &amp;lt;code&amp;gt;migrate()&amp;lt;/code&amp;gt; lief danach nie. Eine bestehende Datenbank ohne Historie wird nun über &amp;lt;code&amp;gt;baselineOnMigrate&amp;lt;/code&amp;gt; einmalig mit Version 0 versehen. Ebenso entfällt &amp;lt;code&amp;gt;repair()&amp;lt;/code&amp;gt; bei jedem Start: Es schrieb die Historie auf ein nachträglich geändertes oder ersetztes Skript um, das dann nie lief; ein solches Skript scheitert nun an der Prüfsumme. Versionen dürfen außer der Reihe eintreffen (&amp;lt;code&amp;gt;outOfOrder&amp;lt;/code&amp;gt;), ein entferntes, bereits gelaufenes Skript ist kein Fehler mehr.&lt;br /&gt;
** Fix: org.eclipse.osbp.system.configuration (monitoring.base): Überwachungseinträge gingen auf älteren Datenbanken verloren. Datenbanken, die mit einem früheren Monitoring-Modell angelegt wurden, tragen noch eindeutige Indizes auf einem Namen allein (&amp;lt;code&amp;gt;MONITOR_SUB_CATEGORY.MSC_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_CATEGORY.MCA_NAME&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DK&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_MAIN_CATEGORY.MMCA_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_COMPONENT.MCO_NAME&amp;lt;/code&amp;gt;). Das Modell verlangt einen eindeutigen Namen nur unterhalb des jeweiligen Elternelements; die Schemagenerierung legt Indizes an, entfernt aber nie einen. Eine zweite Kategorie mit einer gleichnamigen Unterkategorie – etwa „COMPLETE“ unter &amp;lt;code&amp;gt;XRECHNUNG_UP&amp;lt;/code&amp;gt; und unter &amp;lt;code&amp;gt;ZUGFERD_UP&amp;lt;/code&amp;gt; – scheiterte daher an einem doppelten Schlüssel, &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; fing den Fehler ab, und der Eintrag fehlte (auf einer BDI-Installation über 1.000 solcher Fehler an einem Tag, dazu „transactionRollback - no transactionhandler found“). Ebenso konnten sich zwei Installationen mit gemeinsamer Datenbank nicht beide als Komponente „Application“ anmelden. Die erste Flyway-Migration des Bundles (&amp;lt;code&amp;gt;V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;, für MySQL/MariaDB, PostgreSQL und Oracle) entfernt diese Indizes; &amp;lt;code&amp;gt;MONITOR_COMPONENTI1&amp;lt;/code&amp;gt; legt die Schemagenerierung danach in der Form des Modells (&amp;lt;code&amp;gt;MCO_NAME, MCO_INSTALLATION&amp;lt;/code&amp;gt;) neu an. Da die Indizes nicht mehr im Modell stehen, hängen ihre Namen vom Generator ab, der die Datenbank angelegt hat; die Skripte finden sie daher an ihrer Struktur (eindeutig, kein Primärschlüssel, genau eine dieser Spalten). Auf einer neuen oder bereits bereinigten Datenbank ändern sie nichts.&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Hinweis für Produkte mit REST-Diensten über ECF: Das Bundle &amp;lt;code&amp;gt;org.eclipse.ecf.osgi.services.remoteserviceadmin.console&amp;lt;/code&amp;gt; (Konsolenbefehle &amp;lt;code&amp;gt;rsa …&amp;lt;/code&amp;gt;) sollte nicht automatisch starten. Seine Komponente &amp;lt;code&amp;gt;RSACommand&amp;lt;/code&amp;gt; benötigt den &amp;lt;code&amp;gt;RemoteServiceAdmin&amp;lt;/code&amp;gt;; während ECF diesen beim Export der Dienste erzeugt, blockieren sich ECF und DS gegenseitig, bis DS nach seiner Wartezeit (&amp;lt;code&amp;gt;-Dequinox.scr.waitTimeOnBlock&amp;lt;/code&amp;gt;, in BDI 20 s) abbricht. In BDI und im CX-Portal ist es auf &amp;lt;code&amp;gt;autoStart=&amp;quot;false&amp;quot;&amp;lt;/code&amp;gt; gesetzt; POS startet es nicht. Zusammen mit der Korrektur oben startet BDI in der IDE ohne Sperrmeldungen (67 s statt 74–101 s). Es verbleibt die Warnung „Enabling components of bundle org.eclipse.osbp.xtext.builder.metadata.services did not complete in 30000 ms“: Das ist das Laden der DSL-Modelle (rund 35 s) auf dem DS-Thread, keine Sperre&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Flyway Integration: org.eclipse.osbp.dependencies-mbp, org.eclipse.osbp.dependencies - Flyway 9 enthält die Unterstützung für MySQL und MariaDB nicht mehr im Kern, sondern im Modul &amp;lt;code&amp;gt;flyway-mysql&amp;lt;/code&amp;gt;, das sich über &amp;lt;code&amp;gt;META-INF/services&amp;lt;/code&amp;gt; registriert und von Flyway mit dessen eigenem Class Loader gesucht wird. Das Modul wird daher als Fragment &amp;lt;code&amp;gt;org.flywaydb.database.mysql&amp;lt;/code&amp;gt; 9.14.0.v20261028 an &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; ausgeliefert (das Manifest des Originals nennt sich selbst &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; und ist so nicht verwendbar) und mit dem Feature &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.feature.flyway&amp;lt;/code&amp;gt; verteilt.&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261012 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** org.eclipse.osbp.dsl (Entity,DTO):&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (1) – &amp;lt;code&amp;gt;AbstractOppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;MappingContext&amp;lt;/code&amp;gt; deklarieren kein &amp;lt;code&amp;gt;finalize()&amp;lt;/code&amp;gt; mehr. Jede &amp;lt;code&amp;gt;OppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OppositeContainmentDtoList&amp;lt;/code&amp;gt; war dadurch finalisierbar, überlebte die Garbage Collection, die sie als unerreichbar erkannt hatte, und hielt bis zur Abarbeitung durch den einzelnen Finalizer-Thread ihren gesamten Objektgraphen am Leben (DTOs, Entitäten, Persistenzkontexte). In einem Kundenabzug waren von 7,56 Mio. Finalizer-Einträgen 7,51 Mio. solche Listen. Die Listener, die der Finalizer abmelden sollte, werden bereits in &amp;lt;code&amp;gt;clear()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;remove()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;resolve()&amp;lt;/code&amp;gt; abgemeldet&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (2) – ein DTO hält für das spätere Nachladen einer Lazy-Referenz nicht mehr die abgelöste Entität fest, sondern nur noch deren Klasse und ID (neue Klasse &amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;org.eclipse.osbp.dsl.dto.lib&amp;lt;/code&amp;gt;). Die Entität hielt über ihre Lazy-Beziehungen den gesamten Persistenzkontext (&amp;lt;code&amp;gt;RepeatableWriteUnitOfWork&amp;lt;/code&amp;gt; samt aller darin geklonten Entitäten), obwohl &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; nur Klasse und ID benötigt. Gemessen an einer Kasse: rund 42 festgehaltene Persistenzkontexte je Verkauf vorher, praktisch keiner danach. Die ID wird erst am Ende des Mappings übernommen, weil der generierte Mapper &amp;lt;code&amp;gt;initialize(entity)&amp;lt;/code&amp;gt; vor &amp;lt;code&amp;gt;setId&amp;lt;/code&amp;gt; aufruft und eine neue Entität bis dahin die zufällige ID ihres Konstruktors trägt; liefert die Datenbank die ID erst später, bleibt es beim bisherigen Verhalten. '''Der Generator (&amp;lt;code&amp;gt;DtoTypesBuilder&amp;lt;/code&amp;gt;) erzeugt den neuen Aufruf; wirksam wird die Änderung erst mit neu generierten DTOs.''' Nicht neu generierte DTOs laufen unverändert weiter; neu generierte DTOs setzen ein &amp;lt;code&amp;gt;dto.lib&amp;lt;/code&amp;gt; ab dem 07.10.2026 voraus&lt;br /&gt;
*** &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; meldet nun, welche Zeile er nicht nachladen konnte. Liefert &amp;lt;code&amp;gt;em.find&amp;lt;/code&amp;gt; kein Ergebnis, wird ein Fehler mit Entitätsklasse, ID, Eigenschaft und DTO-Klasse protokolliert und eine &amp;lt;code&amp;gt;IllegalStateException&amp;lt;/code&amp;gt; geworfen. Bisher erschien an dieser Stelle nur eine &amp;lt;code&amp;gt;NullPointerException&amp;lt;/code&amp;gt; ohne Hinweis auf die Ursache&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;AbstractDTOService.closeEntityManager()&amp;lt;/code&amp;gt; fordert eine offene Transaktion nicht mehr nach jedem Lesezugriff zur Freigabe auf. Das Verhalten ist unverändert, die Warnung &amp;lt;code&amp;gt;dispose() refused&amp;lt;/code&amp;gt; erscheint aber nur noch, wenn tatsächlich jemand eine offene Transaktion abbauen will (zuvor rund zwei Meldungen je Verkauf und etwa 175 je Kassenabschluss)&lt;br /&gt;
*** Fix: Mit &amp;lt;code&amp;gt;-DsendTransactionEventAsync=true&amp;lt;/code&amp;gt; wartete &amp;lt;code&amp;gt;TransactionHandler.dispose()&amp;lt;/code&amp;gt; nach jedem Commit mindestens 800 ms, zuzüglich weiterer 800 ms je Durchlauf mit nicht leerer Ereigniswarteschlange – während &amp;lt;code&amp;gt;SessionManager&amp;lt;/code&amp;gt; die Sperre aller Transaktions-Handler hielt. An einer Kasse waren das mehrere Sekunden je Bon. &amp;lt;code&amp;gt;dispose()&amp;lt;/code&amp;gt; übergibt den Entity Manager nun dem Ereignis-Thread und kehrt sofort zurück; der Thread schließt ihn als letzten Schritt, sobald seine Warteschlange leer ist. Ein Ereignis, das sich nicht versenden lässt, beendet den Thread nicht mehr. Ohne den Schalter ändert sich nicht*s&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;MetadataBuilder&amp;lt;/code&amp;gt; macht beim ersten Scan zunächst alle gestarteten Bundles mit dem Header &amp;lt;code&amp;gt;OSBP-RuntimeBuilder-BundleSpace&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;Factory-Model&amp;lt;/code&amp;gt; im Bundle-Space bekannt und sucht erst danach nach Modellen. Bisher wurde ein Bundle erst beim Erreichen aufgenommen, während ein Participant ein Modell sofort laden kann: Ein ECView aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration&amp;lt;/code&amp;gt; nennt ein DTO aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration.base&amp;lt;/code&amp;gt; mit der höheren Bundle-ID, die Klasse wurde also je nach Reihenfolge beim Start nicht gefunden. In diesem Fall scheiterte &amp;lt;code&amp;gt;activate()&amp;lt;/code&amp;gt;, der DSL-Metadatendienst und damit der Persistenzdienst starteten nie, und die Anwendung blieb auf der Startseite stehen. Eine fehlgeschlagene Aktivierung wird nun zusätzlich als Fehler in das Anwendungslog geschrieben&lt;br /&gt;
** Fix: org.eclipse.osbp.dsl, org.eclipse.osbp.runtime: Vier Fehler in der sitzungsbezogenen Transaktionsverwaltung behoben. (a) &amp;lt;code&amp;gt;SessionManager.removeSession()&amp;lt;/code&amp;gt; gab den Transaktions-Handler unter einem Schlüssel frei, der nie passen konnte (&amp;lt;code&amp;gt;ISession&amp;lt;/code&amp;gt; hat kein &amp;lt;code&amp;gt;toString()&amp;lt;/code&amp;gt;), das Sicherheitsnetz griff also nie. (b) &amp;lt;code&amp;gt;disposeTransactionHandler&amp;lt;/code&amp;gt; entfernte den Eintrag auch dann, wenn die Transaktion noch offen war – der Entity Manager wurde aufgegeben und der Thread, der die Transaktion noch abschließen musste, fand seinen Handler nicht mehr. &amp;lt;code&amp;gt;ITransactionHandler&amp;lt;/code&amp;gt; erhält dafür &amp;lt;code&amp;gt;isDisposable()&amp;lt;/code&amp;gt; als Default-Methode. (c) Die Freigabe nach &amp;lt;code&amp;gt;transactionBegin&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Rollback&amp;lt;/code&amp;gt; steht nun in einem &amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt;; ein &amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt;, insbesondere ein &amp;lt;code&amp;gt;OutOfMemoryError&amp;lt;/code&amp;gt;, ließ den Handler bisher mit Entity Manager in einer statischen Map zurück. (d) &amp;lt;code&amp;gt;txnIsOpen&amp;lt;/code&amp;gt; wird auch bei einem fehlgeschlagenen Commit oder Rollback zurückgesetzt&lt;br /&gt;
** org.eclipse.osbp.persistence: &lt;br /&gt;
*** Der Startstatus nennt nun den Dienst, auf den der Persistenzdienst noch wartet. Die neue Komponente &amp;lt;code&amp;gt;PersistenceStartupStatus&amp;lt;/code&amp;gt; hat keine Pflichtreferenz, ist daher von Beginn an aktiv und setzt den Status auf „persistence service is waiting for the DSL metadata service“ (bzw. „the Mondrian manager“), bis diese gebunden sind. Bisher blieb es unabhängig vom Grund bei „persistenceservice not started yet“, und die wartenden Dienste protokollierten nichts&lt;br /&gt;
*** Beim Einrichten einer Persistence Unit wird jede verwaltete Klasse gemeldet, die nicht statisch gewebt ist, obwohl eine ihrer Oberklassen es ist – in einer ERROR-Zeile mit dem Hinweis, das Projekt vollständig neu zu bauen. Eine solche Klasse wird von EclipseLink instanziiert, aber nie befüllt: Der Dialog bleibt leer, und die nächste Aktualisierung scheitert mit „mapped to a primary key column ... Updates are not allowed“&lt;br /&gt;
** org.eclipse.osbp.ecview.extension: Fix: Das Grid vergisst die Zeilenschlüssel von Einträgen, die den Container als Ganzes verlassen haben. Vaadin gibt die Schlüssel nur über das clientseitige &amp;lt;code&amp;gt;dropRows&amp;lt;/code&amp;gt; frei; nach einem allgemeinen &amp;lt;code&amp;gt;ItemSetChange&amp;lt;/code&amp;gt;, wie ihn &amp;lt;code&amp;gt;removeAllItems()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;addAll()&amp;lt;/code&amp;gt; auslösen, blieben sie im &amp;lt;code&amp;gt;KeyMapper&amp;lt;/code&amp;gt; stehen und hielten jede jemals angezeigte Zeile samt ihrem DTO-Graphen. &amp;lt;code&amp;gt;GridPresentation.CustomGrid&amp;lt;/code&amp;gt; merkt sich die vergebenen Schlüssel und entfernt die nicht mehr enthaltenen&lt;br /&gt;
** org.osbee.datainterchange: Fix: FreeMarkers gemeinsam genutzte &amp;lt;code&amp;gt;InvalidReferenceException&amp;lt;/code&amp;gt; hält nicht mehr den ersten Exportlauf fest. Die statische Instanz übernahm die zum Zeitpunkt ihres Entstehens aktive Umgebung und damit das gesamte Datenmodell des ersten Exports für die Lebensdauer des Prozesses. Der Activator lädt die Klasse nun einmal außerhalb eines Template-Laufs&lt;br /&gt;
** org.eclipse.osbp.display: Fix: Das Display-Servlet wird nicht mehr auf dem Thread registriert, der die Bundles startet. Die Registrierung veröffentlicht einen Dienst, und Declarative Services verarbeitet dieses Ereignis auf dem veröffentlichenden Thread; dort wartete der Start aller nachfolgenden Bundles, in einem Fall über 50 Sekunden („Getting a lock required more than 50000 ms“). Die Registrierung läuft nun auf einem eigenen Thread&lt;br /&gt;
** org.eclipse.osbp.runtime, org.eclipse.osbp.blob, org.eclipse.osbp.autowireHelper, org.eclipse.osbp.ecview.extension, org.eclipse.osbp.ecview.addons, org.eclipse.osbp.infogrid.model: Neue Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; für String-Attribute. Ein Attribut mit &amp;lt;code&amp;gt;key=&amp;quot;barcode&amp;quot; value=&amp;quot;QRCode-128&amp;quot;&amp;lt;/code&amp;gt; wird schreibgeschützt als Barcode-Bild angezeigt, das aus seinem Klartextwert erzeugt wird – im Dialog über &amp;lt;code&amp;gt;BlobComponent&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;BlobUploadComponent&amp;lt;/code&amp;gt; (letztere dann ohne Schaltflächen) und in Grid-Spalten über den Blob-Bildkonverter&lt;br /&gt;
** org.eclipse.osbp.authentication, org.eclipse.osbp.system.configuration, org.eclipse.osbp.blob: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** org.eclipse.osbp.xtext.table, org.eclipse.osbp.xtext.table.common: Für Attribute mit der Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; wird ein Barcode-Lookup generiert; eine String-Zelle wird als Barcode-Bild angezeigt, wenn das Lookup einen Barcode-Typ trägt&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** net.osbee.pos.tse: Aufrufer können die BSI-Zertifizierungs-ID der TSE abfragen. Die SE-API bietet &amp;lt;code&amp;gt;getCertificationId&amp;lt;/code&amp;gt; in beiden API-Versionen, keiner der beiden Adapter reichte den Aufruf bisher durch&lt;br /&gt;
** net.osbee.pos.tse, net.osbee.pos.rksv: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Einführung der http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/restartService Seite. Damit können entweder Sessions gekillt oder der Service der Anwendung neu gestartet werden.&lt;br /&gt;
** Bei Nichterreichbarkeit der Datenbank wird die Anwendung beendet und der Fehlerstatus auf der Statusseite angezeigt.&lt;br /&gt;
** Das eingebettete &amp;lt;code&amp;gt;shiro-all-1.2.3.jar&amp;lt;/code&amp;gt; wurde durch &amp;lt;code&amp;gt;shiro-core&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; in Version 1.13.0 ersetzt. Damit sind CVE-2016-4437 (Remote Code Execution über das RememberMe-Cookie mit festem Schlüssel) und CVE-2019-12422 geschlossen. &amp;lt;code&amp;gt;encoder-1.2.3.jar&amp;lt;/code&amp;gt; kommt hinzu, weil &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; 1.13 &amp;lt;code&amp;gt;org.owasp.encoder&amp;lt;/code&amp;gt; zwingend importiert.&lt;br /&gt;
** Anmeldung: &lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm&amp;lt;/code&amp;gt; löst den Anmeldenamen vor jeder Abfrage in einen Distinguished Name auf. Active Directory akzeptiert für den Bind auch einen User Principal Name, beantwortet Abfragen damit aber mit LDAP-Fehler 34 (&amp;lt;code&amp;gt;invalidDNSyntax&amp;lt;/code&amp;gt;), sodass ein &amp;lt;code&amp;gt;userDnTemplate&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt; zwar anmeldete, dann aber an den Attributen scheiterte. &amp;lt;code&amp;gt;resolveUserDn&amp;lt;/code&amp;gt; sucht nun über &amp;lt;code&amp;gt;userPrincipalName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sAMAccountName&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;mail&amp;lt;/code&amp;gt;; die Suchbasis stammt aus dem RootDSE. Bestehende Vorlagen der Form &amp;lt;code&amp;gt;cn={0},ou=...&amp;lt;/code&amp;gt; verhalten sich unverändert. Zugleich behoben: eine &amp;lt;code&amp;gt;StringIndexOutOfBoundsException&amp;lt;/code&amp;gt; im E-Mail-Zweig und das Einsetzen des Benutzernamens in den Suchfilter per Verkettung (jetzt als &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt;, von JNDI maskiert)&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm.getUserDn&amp;lt;/code&amp;gt; maskierte nur das Komma. &amp;lt;code&amp;gt;escapeDnValue&amp;lt;/code&amp;gt; deckt nun alle Zeichen nach RFC 4514 Abschnitt 2.4 ab, sodass ein Benutzername die Bedeutung des DN nicht mehr verändern kann&lt;br /&gt;
*** Die Funktionalität „Angemeldet bleiben“ arbeitet nun mit einem signierten Token statt mit verschlüsselten Zugangsdaten. Das Cookie ist eine mit HMAC-SHA256 signierte Aussage über Benutzer, Mandant, Geltungsbereich, Ablaufdatum und Version und enthält keine Zugangsdaten. Es ist zustandslos, sodass beliebig viele Geräte und Browser gleichzeitig eines halten können.&lt;br /&gt;
*** Das „Angemeldet bleiben“-Cookie gilt je Anwendungsinstanz und Browser. Der Cookie-Name trägt einen Kurzhash über Schema, Host, Port, erstes Pfadsegment und Portal-ID, sodass zwei Anwendungen auf demselben Host nicht mehr das Cookie der jeweils anderen lesen. Die selbstgebaute Verschlüsselung entfällt vollständig. Das Cookie wird mit expliziter Lebensdauer, &amp;lt;code&amp;gt;SameSite=Lax&amp;lt;/code&amp;gt; und unter https mit &amp;lt;code&amp;gt;Secure&amp;lt;/code&amp;gt; geschrieben. Die Anmeldung aus einem Cookie wartet fünf Sekunden mit einem Hinweis auf der Anmeldemaske und lässt sich in dieser Zeit abbrechen; ein entferntes Häkchen löscht das Cookie nun in jedem Fall. Die Betrugsmeldung samt Kontosperre bei nicht passendem Cookie entfällt&lt;br /&gt;
*** Fix: Kennwörter erscheinen nicht mehr im Log – weder bei der Anmeldung in &amp;lt;code&amp;gt;AuthenticationProvider.check()&amp;lt;/code&amp;gt; (bisher im Klartext auf DEBUG) noch beim Zurücksetzen, wo der Nachrichtentext mit dem neuen Kennwort dreimal geschrieben wurde&lt;br /&gt;
*** Die Anzeige des neuen Kennworts auf der Anmeldemaske, wenn keine E-Mail versendet werden kann, ist nun eine konfigurierte Betriebsart: &amp;lt;code&amp;gt;Userinterface/showResetPasswordOnScreen&amp;lt;/code&amp;gt;, standardmäßig aus, mit Protokollierung auf WARN. '''Installationen ohne Mailserver müssen den Parameter einmalig setzen'''&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;doResetPassword&amp;lt;/code&amp;gt; hebt weder eine Sperre noch die Deaktivierung eines Kontos auf und setzt den Fehlversuchszähler nicht mehr zurück. Das Zurücksetzen kann jeder auslösen, der einen Benutzernamen eingibt; aufgehoben werden Sperre und Deaktivierung nur noch durch einen Administrator über &amp;lt;code&amp;gt;doUnlock&amp;lt;/code&amp;gt;&lt;br /&gt;
** System Configuration: &lt;br /&gt;
*** Parameter &amp;lt;code&amp;gt;RememberMeSecret&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;IConfigurationService&amp;lt;/code&amp;gt; ergänzt (&amp;lt;code&amp;gt;GLOBAL_PARAMETERS/RememberMeSecret&amp;lt;/code&amp;gt;). Der Schlüssel wird je Installation bei der ersten Benutzung der &amp;quot;RememberMe&amp;quot; Funktionalität einmal aus gezogen und von allen Anmeldungen geteilt; das Löschen des Eintrags macht alle „Angemeldet bleiben“-Cookies auf einmal ungültig.&lt;br /&gt;
*** Fix: Die Einstellungen füllten sich mit Platzhaltern „not set“. &amp;lt;code&amp;gt;ConfigurationService.getConfigurationString&amp;lt;/code&amp;gt; speicherte bei leerem Vorgabewert den Platzhalter und lieferte ihn als leere Zeichenkette zurück, sodass &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; stets eine weitere Zeile anhängte. &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; entfernt nun die Platzhalterzeilen des Schlüssels vor dem Schreiben, und ein gespeicherter Platzhalter gilt als „kein Wert“. &amp;lt;code&amp;gt;deleteConfigurations&amp;lt;/code&amp;gt; setzt zusätzlich den Cache zurück; gelöschte Einträge kamen bisher beim nächsten Lesen wieder&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Fix: org.eclipse.osbp.dependencies-mbp: Das Bundle &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.bundle.activemq.all.osgi&amp;lt;/code&amp;gt; enthält kein Log4j und kein eingebettetes slf4j mehr. &amp;lt;code&amp;gt;activemq-all&amp;lt;/code&amp;gt; brachte eine vollständige Kopie von Apache Log4j 1.2.17 mit (359 Klassen, darunter &amp;lt;code&amp;gt;JDBCAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSSink&amp;lt;/code&amp;gt; und chainsaw – betroffen von CVE-2021-4104, CVE-2022-23302, CVE-2022-23305 und CVE-2022-23307) sowie slf4j-api 1.7.13 und &amp;lt;code&amp;gt;slf4j-log4j12&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;Include-Resource&amp;lt;/code&amp;gt; bindet das Hersteller-Jar nun ohne &amp;lt;code&amp;gt;org.apache.log4j&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org.slf4j&amp;lt;/code&amp;gt;, deren Maven-Koordinaten, die &amp;lt;code&amp;gt;log4j.properties&amp;lt;/code&amp;gt; und Springs &amp;lt;code&amp;gt;Log4jConfigurer&amp;lt;/code&amp;gt; ein. ActiveMQ bezieht slf4j stattdessen aus dem Produkt (&amp;lt;code&amp;gt;org.slf4j.api&amp;lt;/code&amp;gt; 1.7.36)&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neue Dienststeuerungsseite unter &amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;. &lt;br /&gt;
*** Ein Bediener kann darüber – autorisiert durch eine reguläre Anwendungsanmeldung – hängende Sitzungen beenden oder den Dienst neu starten, ohne Zugriff auf den Serverrechner zu benötigen. Drei Stufen: Sitzungen des aufrufenden Arbeitsplatzes, alle Sitzungen, Neustart. Die Seite ist am Root-HTTP-Service registriert und bleibt damit erreichbar, wenn der Anwendungskontext selbst gestört ist; Markup, Stil, Skript und Texte (deutsch, englisch, französisch) sind deshalb in der Seite enthalten. Sitzungen werden über das Invalidieren der HTTP-Sitzung beendet. Der Neustart läuft über die Befehlswarteschlange der Anwendung; die Seite fragt anschließend die Anwendung ab und führt den Bediener über die Unterbrechung hinweg&lt;br /&gt;
*** Alle Aktionen der Dienststeuerungsseite werden im &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; unter denselben Koordinaten wie die Anmeldemaske protokolliert (fehlgeschlagene Anmeldung und Neustart als WARNING, gesperrtes Konto als ERROR, beendete Sitzungen als INFO). Eine abgelehnte Anmeldung sperrt das Formular für die Dauer der Wartezeit mit Countdown; der Zähler ist derselbe wie an der Anmeldemaske, sodass sich Fehlversuche auf beiden Wegen zur Kontosperre summieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260907 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Überarbeitung der Codebasis zur Entfernung veralteter und nicht benötigter Bundles&lt;br /&gt;
** Überarbeitung des Loginvorgangs / der Cookiespeicherung bei &amp;quot;remember me&amp;quot;. Es werden keine kritischen Daten mehr im Cookie gespeichert.&lt;br /&gt;
** Verbesserung der Übersetzungen&lt;br /&gt;
** Anpassungen für frz. Fiskalanforderungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Laden der Übersetzungen in die interne Tabelle beim Systemstart deutlich beschleunigt. Dadurch verbessertes Startverhalten der Anwendungen.&lt;br /&gt;
** Verbesserungen bei der frz. Tastaturunterstützung&lt;br /&gt;
** Verbesserungen der Übersetzungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260618 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Blockieren durch das Laden von Diensten während des Starts vermieden, dadurch schnellerer Anwendungsstart. Anderes Verhalten beim Start an der Benutzeroberfläche.&lt;br /&gt;
** Französische Tastaturunterstützung (AZERTY) im Keymapper der Statemachine ergänzt&lt;br /&gt;
** Login bezieht Build-Version und Hersteller nun aus den &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; (einheitliche Quelle)&lt;br /&gt;
** Neue gemeinsame Hilfsmethoden &amp;lt;code&amp;gt;getBuildVersion()&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;getVendor()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; zur Ermittlung der Build-Identität&lt;br /&gt;
** &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; setzt die Zeitstempel von &amp;lt;code&amp;gt;lastError&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;lastWarning&amp;lt;/code&amp;gt; nicht mehr zurück&lt;br /&gt;
** Fix: NPE in &amp;lt;code&amp;gt;org.eclipse.osbp.xtext.dialog.AutowireUiFactory&amp;lt;/code&amp;gt; behoben&lt;br /&gt;
** Version von 5.2.0 auf 5.3.0 angehoben&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-reverify&amp;lt;/code&amp;gt; (16px/32px) für die NF525-Schaltfläche zur erneuten Archivintegritätsprüfung&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-refresh.png&amp;lt;/code&amp;gt; ergänzt&lt;br /&gt;
** Grid – horizontale Bildlaufleiste wiederhergestellt&lt;br /&gt;
** Grid - Flex-Layout für Kassen-/POS-Grids wiederhergestellt (kollabierte Spalten behoben)&lt;br /&gt;
** französische Übersetzungen überarbeitet&lt;br /&gt;
&lt;br /&gt;
* Grammatiken/Generierung:&lt;br /&gt;
** org.eclipse.osbp.dsl: Benutzerdefinierte &amp;lt;code&amp;gt;@PreRemove&amp;lt;/code&amp;gt;-Hooks werden in der generierten &amp;lt;code&amp;gt;preRemove()&amp;lt;/code&amp;gt;-Methode zusammengeführt&lt;br /&gt;
** org.eclipse.osbp.xtext.i18n: i18n-Generator erzeugt nun das byte-genaue Eclipse-Babel-Format&lt;br /&gt;
&lt;br /&gt;
* POS Framework für franz. Fiskalanforderungen eingeführt&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260410 ==&lt;br /&gt;
&lt;br /&gt;
* POS Framework: &lt;br /&gt;
** Performanceverbesserung beim Kassieren&lt;br /&gt;
** Multi-Protokoll Unterstützung für Paymentterminal &lt;br /&gt;
*** frz. Protokolle &amp;quot;Concert&amp;quot;, &amp;quot;Protocol E&amp;quot;&lt;br /&gt;
*** &amp;quot;Mock&amp;quot; für Tests&lt;br /&gt;
*** Statemachine DSL erweitert: protocol Parameter für Paymentterminal&lt;br /&gt;
*** &amp;quot;Shared Payment Terminal&amp;quot;&lt;br /&gt;
**** locking im PaymentTerminalService implementiert&lt;br /&gt;
**** pro Terminal über ConfigService einstellbar&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260402 ==&lt;br /&gt;
&lt;br /&gt;
Die Version verbessert das Startverhalten einer Anwendung und bringt mehr Informationen über den Status des Starts auf den Bildschirm&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Anzeige des Persistenzservice-Status auf dem Login-Bildschirm&lt;br /&gt;
** Information über den Persistenzservice auf der Fehlerseite hinzugefügt&lt;br /&gt;
** Beim Start wird nun überall auf den Persistenzservice statt nur auf den ConfigurationService gewartet&lt;br /&gt;
&lt;br /&gt;
* BPM:&lt;br /&gt;
** Fix: net.osbee.bpm: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** Fix: net.osbee.pos.epay: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260305 ==&lt;br /&gt;
&lt;br /&gt;
=== Report Anzeige ===&lt;br /&gt;
&lt;br /&gt;
Diese Version konzentriert sich auf '''Stabilitätsverbesserungen''' für das Report-Rendering-System, insbesondere auf die Behebung von Race Conditions und Anzeigeproblemen, die bei schnellen Benutzerinteraktionen auftraten.&lt;br /&gt;
&lt;br /&gt;
* Race Condition beim Report-Rendering&lt;br /&gt;
** '''Behoben: Schnelles Auswählen/Abwählen führte dazu, dass Reports mit ungültigen oder fehlenden Filtern gerendert wurden'''&lt;br /&gt;
*** Reports verarbeiten nun korrekt wenn Benutzer schnell Elemente auswählen und wieder abwählen&lt;br /&gt;
*** Filteränderungen werden blockiert, während ein Render-Vorgang läuft&lt;br /&gt;
*** Ausstehende Filteränderungen werden nachverfolgt und nach Abschluss des Renderings erneut ausgewertet&lt;br /&gt;
*** Reports mit &amp;lt;code&amp;gt;selectById&amp;lt;/code&amp;gt; werden nun korrekt ausgeblendet, wenn nichts ausgewählt ist&lt;br /&gt;
&lt;br /&gt;
* PDF-Anzeigeskalierungsproblem &lt;br /&gt;
** '''Behoben: PDF-Skalierungsprobleme durch Neuerstellung des BrowserFrames bei jedem Rendering'''&lt;br /&gt;
&lt;br /&gt;
=== Anmeldebildschirm ===&lt;br /&gt;
&lt;br /&gt;
Der Anmeldebildschirm zeigt nun während der Initialisierung des Persistence-Services einen Statustext an.&lt;br /&gt;
&lt;br /&gt;
* Lauftext-Anzeige (Marquee) mit dem aktuellen Status des Persistence-Services&lt;br /&gt;
* Deaktivierung aller Anmeldesteuerelemente während der Wartezeit&lt;br /&gt;
&lt;br /&gt;
=== Start der Anwendung ===&lt;br /&gt;
&lt;br /&gt;
* Blockierungen der Initialisierungsvorgänge durch Warten auf Serviceregistrierung während des Anwendungsstarts reduziert. &amp;lt;br&amp;gt;Dadurch verändert sich das Startverhalten, insbesondere die Reihenfolge der Anwendung. Insgesamt schnelleres Laden der Bundles.&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4630</id>
		<title>Releasenotes 2026 OS.Softwarefactory</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4630"/>
				<updated>2026-11-04T12:11:55Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261103 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Neu: Flyway findet Datenbankmigrationen, die Bundles mitbringen. Ein Bundle nennt seinen Migrationsordner im Manifest-Header &amp;lt;code&amp;gt;OSBP-Flyway-Migration: db/migration&amp;lt;/code&amp;gt; und legt die Skripte als &amp;lt;code&amp;gt;&amp;amp;lt;Persistence Unit&amp;amp;gt;/&amp;amp;lt;Hersteller&amp;amp;gt;/V&amp;amp;lt;Version&amp;amp;gt;__&amp;amp;lt;Beschreibung&amp;amp;gt;.sql&amp;lt;/code&amp;gt; ab, z.B. &amp;lt;code&amp;gt;monitoringData/mysql/V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;. Ein Skript läuft auf der Datenquelle, für die seine Persistence Unit konfiguriert ist, und zwar vor dem Anlegen und Erweitern der Tabellen durch EclipseLink. Der Herstellerordner wird aus den JDBC-Metadaten bestimmt: &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt; (auch für MariaDB), &amp;lt;code&amp;gt;postgresql&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oracle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sqlserver&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;derby&amp;lt;/code&amp;gt;. Bisher suchte Flyway über einen Class Loader, der in OSGi einen Ordner wie &amp;lt;code&amp;gt;db/migration&amp;lt;/code&amp;gt; nur im eigenen Bundle sieht – Skripte in anderen Bundles wurden nie gefunden. Die neue Klasse &amp;lt;code&amp;gt;BundleMigrations&amp;lt;/code&amp;gt; sammelt sie und übergibt sie Flyway als Resource Provider; die Skripte im Dateisystemordner der Datenquelle (&amp;lt;code&amp;gt;-DFlyway.&amp;amp;lt;Datenquelle&amp;amp;gt;.DatabaseMigrationSourcePath&amp;lt;/code&amp;gt;) werden wie bisher mitgelesen. '''Die Migrationen laufen weiterhin nur mit &amp;lt;code&amp;gt;-DFlyway.active=true&amp;lt;/code&amp;gt;; keine ausgelieferte Anwendung schaltet sie bisher ein''' Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Neu: HikariCP-Verbindungspool vor der Datenquelle des Treibers. Bisher öffnete jede Abfrage eine neue Verbindung zur Datenbank, etwa 3.000 je stündlichem Lauf des Zeitplaners auf einer ruhenden Kasse. Maximum ist &amp;lt;code&amp;gt;database.connectionpool.max&amp;lt;/code&amp;gt;, 5 Verbindungen bleiben offen, Austausch nach 30 Minuten. &amp;lt;code&amp;gt;-DPersistenceService.connectionPool=false&amp;lt;/code&amp;gt; schaltet den Pool ab; &amp;lt;code&amp;gt;.minIdle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.maxLifetimeMinutes&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;.leakDetectionSeconds&amp;lt;/code&amp;gt; stellen ihn ein. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Neu: Jeder Eintrag der Systemüberwachung enthält die Auslastung des Verbindungspools in Prozent und die Zahl der wartenden Threads. Wartende Threads markieren den Eintrag Memorycheck als Warnung. Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring, org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring.base&lt;br /&gt;
** Änderung: &amp;lt;code&amp;gt;db/README.md&amp;lt;/code&amp;gt; beschreibt Aufbau, Versions- und Historienkonventionen sowie die Regeln für ein Migrationsskript (nie ein ausgeliefertes Skript ändern, sondern eine neue Version schreiben; jeden Datenbankzustand vertragen, weil das Skript vor dem Anlegen der Tabellen läuft; Objekte an ihrer Struktur statt an ihrem Namen finden). Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring.base&lt;br /&gt;
** Änderung: Die Tabelle „Flyway info“ im Log richtet ihre Spaltenbreiten nach dem Inhalt. Bisher schnitten feste Breiten Version und Beschreibung ab (&amp;lt;code&amp;gt;2026.10.28.1&amp;lt;/code&amp;gt; erschien als &amp;lt;code&amp;gt;2026.10.&amp;lt;/code&amp;gt;). Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Änderung: Jedes Bundle mit Migrationen hat eine eigene Historientabelle, &amp;lt;code&amp;gt;flyway_&amp;lt;/code&amp;gt; und der symbolische Name, gekürzt wie ein Logger Klassennamen kürzt (führende Segmente auf ihren Anfangsbuchstaben, bis höchstens 30 Zeichen erreicht sind): &amp;lt;code&amp;gt;org.eclipse.osbp.system.monitoring.base&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;flyway_oeos_monitoring_base&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;net.osbee.app.bdi.ex.model.entity&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;flyway_noa_bdi_ex_model_entity&amp;lt;/code&amp;gt;. Versionen müssen daher nur innerhalb eines Bundles eindeutig sein; zwei Entwickler können in verschiedenen Bundles dieselbe Versionsnummer vergeben. Scheitern die Migrationen eines Bundles, wird das mit „the migrations of &amp;amp;lt;Bundle&amp;amp;gt; were NOT applied“ protokolliert, die übrigen Bundles laufen weiter. Ergäben zwei Bundles denselben gekürzten Namen, werden beide mit einem Fehler abgewiesen, statt sich eine Historie zu teilen. Die Skripte des Dateisystemordners behalten Flyways Standardtabelle &amp;lt;code&amp;gt;flyway_schema_history&amp;lt;/code&amp;gt;; eine Quelle ohne Skripte läuft gar nicht. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Fix: Das Grid fragt nach einem Wechsel des Inhalts nicht mehr für jede bekannte Zeile einzeln beim Container nach. Bei einem lazy ladenden Container war das je Zeile ein &amp;lt;code&amp;gt;SELECT COUNT&amp;lt;/code&amp;gt;: Ein Lauf des Zeitplaners mit offener Perspektive machte 10.468 Abfragen, danach 787. Die Schlüssel von Zeilen, die der Client nicht mehr anzeigt, werden beim nächsten Zurücksetzen freigegeben. Betroffene Komponenten: org.eclipse.osbp.ecview.extension/org.eclipse.osbp.ecview.extension.grid.presentation&lt;br /&gt;
** Fix: Eine Ansicht zeigt nach einer Folge von Änderungen immer den letzten Stand. Bisher wurden Aktualisierungen während des Zeichnens oder innerhalb der Ruhezeit (&amp;lt;code&amp;gt;RefreshTimeout&amp;lt;/code&amp;gt;, Standard 300 ms) verworfen, sodass die letzte Änderung fehlen konnte. Jetzt werden sie zurückgestellt: Die Ansicht zeichnet einmal nach der letzten Anforderung, spätestens 5 Sekunden nach der ersten zurückgestellten. Gilt für alle Ansichten über &amp;lt;code&amp;gt;AbstractHybridVaaclipseView&amp;lt;/code&amp;gt; (Tabellen, Diagramme, Berichte). Die Zahl der Abfragen sinkt dadurch nicht zwingend: gemessen am Überwachungsdiagramm 4 statt 3 bei einem Lauf des Zeitplaners, dafür mit dem letzten Stand. Betroffene Komponenten: org.eclipse.osbp.osgi.hybrid.api&lt;br /&gt;
** Fix: Flyway lief bei jedem Start mit &amp;lt;code&amp;gt;baseline()&amp;lt;/code&amp;gt;. Sobald die Historie Einträge hatte, lehnte Flyway das mit einer Ausnahme ab, die verschluckt wurde – &amp;lt;code&amp;gt;migrate()&amp;lt;/code&amp;gt; lief danach nie. Eine bestehende Datenbank ohne Historie wird nun über &amp;lt;code&amp;gt;baselineOnMigrate&amp;lt;/code&amp;gt; einmalig mit Version 0 versehen. Ebenso entfällt &amp;lt;code&amp;gt;repair()&amp;lt;/code&amp;gt; bei jedem Start: Es schrieb die Historie auf ein nachträglich geändertes oder ersetztes Skript um, das dann nie lief; ein solches Skript scheitert nun an der Prüfsumme. Versionen dürfen außer der Reihe eintreffen (&amp;lt;code&amp;gt;outOfOrder&amp;lt;/code&amp;gt;), ein entferntes, bereits gelaufenes Skript ist kein Fehler mehr. Der Lizenzschlüssel für die kommerzielle Flyway-Edition wird nicht mehr gelesen; die Open-Source-Edition genügt. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Fix: Wartezeit beim Start („Getting a lock required more than 20000 ms“). Jede Persistence Unit las beim Anlegen ihren EclipseLink-Cachetyp und ihre Cachegröße (&amp;lt;code&amp;gt;EclipseLink/&amp;amp;lt;Unit&amp;amp;gt;#cacheTypeDefault&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#cacheSizeDefault&amp;lt;/code&amp;gt;) aus der Konfiguration. Die Units werden parallel in einem Thread-Pool angelegt; das Lesen der Konfiguration holt DTO-Dienste und Mapper über Declarative Services, deren Sperre der Start-Thread während des gesamten Persistenzstarts hält. Jeder Pool-Thread wartete daher, bis DS nach 20 s aufgab. Die Werte werden nun vorher einmal auf dem Start-Thread gelesen, der die Sperre erneut nehmen darf; die Pool-Threads erhalten sie aus dem Zwischenspeicher der Konfiguration. Die Vorgabewerte (&amp;lt;code&amp;gt;Soft&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1000&amp;lt;/code&amp;gt;) sind Konstanten, sodass beide Lesestellen dieselben verwenden. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Fix: Überwachungseinträge gingen auf älteren Datenbanken verloren. Datenbanken, die mit einem früheren Monitoring-Modell angelegt wurden, tragen noch eindeutige Indizes auf einem Namen allein (&amp;lt;code&amp;gt;MONITOR_SUB_CATEGORY.MSC_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_CATEGORY.MCA_NAME&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DK&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_MAIN_CATEGORY.MMCA_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_COMPONENT.MCO_NAME&amp;lt;/code&amp;gt;). Das Modell verlangt einen eindeutigen Namen nur unterhalb des jeweiligen Elternelements; die Schemagenerierung legt Indizes an, entfernt aber nie einen. Eine zweite Kategorie mit einer gleichnamigen Unterkategorie – etwa „COMPLETE“ unter &amp;lt;code&amp;gt;XRECHNUNG_UP&amp;lt;/code&amp;gt; und unter &amp;lt;code&amp;gt;ZUGFERD_UP&amp;lt;/code&amp;gt; – scheiterte daher an einem doppelten Schlüssel, &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; fing den Fehler ab, und der Eintrag fehlte (auf einer BDI-Installation über 1.000 solcher Fehler an einem Tag, dazu „transactionRollback - no transactionhandler found“). Ebenso konnten sich zwei Installationen mit gemeinsamer Datenbank nicht beide als Komponente „Application“ anmelden. Die erste Flyway-Migration des Bundles (&amp;lt;code&amp;gt;V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;, für MySQL/MariaDB, PostgreSQL und Oracle) entfernt diese Indizes; &amp;lt;code&amp;gt;MONITOR_COMPONENTI1&amp;lt;/code&amp;gt; legt die Schemagenerierung danach in der Form des Modells (&amp;lt;code&amp;gt;MCO_NAME, MCO_INSTALLATION&amp;lt;/code&amp;gt;) neu an. Da die Indizes nicht mehr im Modell stehen, hängen ihre Namen vom Generator ab, der die Datenbank angelegt hat; die Skripte finden sie daher an ihrer Struktur (eindeutig, kein Primärschlüssel, genau eine dieser Spalten). Auf einer neuen oder bereits bereinigten Datenbank ändern sie nichts. '''Die PostgreSQL- und Oracle-Skripte sind ungetestet.''' Ohne Flyway lassen sich die Indizes auch von Hand entfernen (auf den lokalen Datenbanken &amp;lt;code&amp;gt;shipment&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;pos&amp;lt;/code&amp;gt; geschehen). Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring.base&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** Fix: Der Diagramm-Generator setzt den Zähler je Datenreihe zurück (ab 500 Zeilen passten Reihen und Beschriftung sonst nicht zusammen), Linien verschwinden beim Überfahren nicht mehr, der Tooltip nennt die Kategorie, und die Animation läuft nur noch beim ersten Zeichnen. Betroffene Komponenten: org.eclipse.osbp.xtext.chart&lt;br /&gt;
** Änderung: Das Speicherdiagramm der Überwachung ist mit dem korrigierten Generator neu erzeugt. Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Fix: Flyway 9 enthält die Unterstützung für MySQL und MariaDB nicht mehr im Kern, sondern im Modul &amp;lt;code&amp;gt;flyway-mysql&amp;lt;/code&amp;gt;, das sich über &amp;lt;code&amp;gt;META-INF/services&amp;lt;/code&amp;gt; registriert und von Flyway mit dessen eigenem Class Loader gesucht wird. Das Modul wird daher als Fragment &amp;lt;code&amp;gt;org.flywaydb.database.mysql&amp;lt;/code&amp;gt; 9.14.0.v20261028 an &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; ausgeliefert (das Manifest des Originals nennt sich selbst &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; und ist so nicht verwendbar) und mit dem Feature &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.feature.flyway&amp;lt;/code&amp;gt; verteilt. Ohne das Fragment endet Flyway auf MariaDB mit „Unsupported Database: MySQL 5.5“ (so meldet der alte MySQL-Treiber eine MariaDB). PostgreSQL und Oracle sind weiterhin im Kern enthalten. '''Das per Maven gebaute Fragment ist noch nicht auf einer Installation geprüft'''; '''Build-Reihenfolge:''' dependencies-mbp, dependencies, persistence, system.configuration. Betroffene Komponenten: org.eclipse.osbp.dependencies-mbp/org.eclipse.osbp.dependencies.bundle.flyway.mysql, org.eclipse.osbp.dependencies/org.eclipse.osbp.dependencies.feature.flyway&lt;br /&gt;
** Neu: HikariCP 4.0.3 wird als Feature mit ausgeliefert. Es ist wie Flyway aus den Quell-Features ausgenommen. Betroffene Komponenten: org.eclipse.osbp.dependencies/org.eclipse.osbp.dependencies.feature.hikaricp, org.eclipse.osbp.dependencies.p2, org.eclipse.osbp.technologystack/org.eclipse.osbp.technologystack.feature, org.eclipse.osbp.technologystack/org.eclipse.osbp.technologystack.target.feature, org.eclipse.osbp.persistence/org.eclipse.osbp.persistence.feature, org.eclipse.osbp.softwarefactory/org.eclipse.osbp.softwarefactory.runtime.feature&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261029 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Fix: org.eclipse.osbp.persistence: Wartezeit beim Start („Getting a lock required more than 20000 ms“). Jede Persistence Unit las beim Anlegen ihren EclipseLink-Cachetyp und ihre Cachegröße (&amp;lt;code&amp;gt;EclipseLink/&amp;amp;lt;Unit&amp;amp;gt;#cacheTypeDefault&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#cacheSizeDefault&amp;lt;/code&amp;gt;) aus der Konfiguration. Das führte zu einer gegenseitigen Blockierung der Initialisierung. Die Werte werden nun einmal auf dem Start-Thread gelesen, damit tritt die Sperre nicht mehr auf.&lt;br /&gt;
** Neu: org.eclipse.osbp.persistence: Flyway findet Datenbankmigrationen, die Bundles mitbringen. Ein Bundle nennt seinen Migrationsordner im Manifest-Header &amp;lt;code&amp;gt;OSBP-Flyway-Migration: db/migration&amp;lt;/code&amp;gt; und legt die Skripte als &amp;lt;code&amp;gt;&amp;amp;lt;Persistence Unit&amp;amp;gt;/&amp;amp;lt;Hersteller&amp;amp;gt;/V&amp;amp;lt;Version&amp;amp;gt;__&amp;amp;lt;Beschreibung&amp;amp;gt;.sql&amp;lt;/code&amp;gt; ab, z.B. &amp;lt;code&amp;gt;monitoringData/mysql/V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;. Ein Skript läuft auf der Datenquelle, für die seine Persistence Unit konfiguriert ist, und zwar vor dem Anlegen und Erweitern der Tabellen durch EclipseLink. Der Herstellerordner wird aus den JDBC-Metadaten bestimmt: &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt; (auch für MariaDB), &amp;lt;code&amp;gt;postgresql&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oracle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sqlserver&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;derby&amp;lt;/code&amp;gt;. Die neue Klasse &amp;lt;code&amp;gt;BundleMigrations&amp;lt;/code&amp;gt; sammelt die Migrationsskripte und übergibt sie Flyway als Resource Provider; die Skripte im Dateisystemordner der Datenquelle (&amp;lt;code&amp;gt;-DFlyway.&amp;amp;lt;Datenquelle&amp;amp;gt;.DatabaseMigrationSourcePath&amp;lt;/code&amp;gt;) werden mitgelesen. '''Die Migrationen laufen nur mit &amp;lt;code&amp;gt;-DFlyway.active=true&amp;lt;/code&amp;gt;;'''&lt;br /&gt;
** org.eclipse.osbp.persistence: Jedes Bundle mit Migrationen hat eine eigene Historientabelle, &amp;lt;code&amp;gt;flyway_&amp;lt;/code&amp;gt; und der symbolische Name, gekürzt wie ein Logger Klassennamen kürzt (führende Segmente auf ihren Anfangsbuchstaben, bis höchstens 30 Zeichen erreicht sind): &amp;lt;code&amp;gt;org.eclipse.osbp.system.monitoring.base&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;flyway_oeos_monitoring_base&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;net.osbee.app.bdi.ex.model.entity&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;flyway_noa_bdi_ex_model_entity&amp;lt;/code&amp;gt;. Versionen müssen innerhalb eines Bundles eindeutig sein. Scheitern die Migrationen eines Bundles, wird das mit „the migrations of &amp;amp;lt;Bundle&amp;amp;gt; were NOT applied“ protokolliert, die übrigen Bundles laufen weiter. Ergäben zwei Bundles denselben gekürzten Namen, werden beide mit einem Fehler abgewiesen, statt sich eine Historie zu teilen. Die Skripte des Dateisystemordners behalten Flyways Standardtabelle &amp;lt;code&amp;gt;flyway_schema_history&amp;lt;/code&amp;gt;; eine Quelle ohne Skripte läuft gar nicht&lt;br /&gt;
** Fix: org.eclipse.osbp.persistence: Flyway lief bei jedem Start mit &amp;lt;code&amp;gt;baseline()&amp;lt;/code&amp;gt;. Sobald die Historie Einträge hatte, lehnte Flyway das mit einer Ausnahme ab, die verschluckt wurde – &amp;lt;code&amp;gt;migrate()&amp;lt;/code&amp;gt; lief danach nie. Eine bestehende Datenbank ohne Historie wird nun über &amp;lt;code&amp;gt;baselineOnMigrate&amp;lt;/code&amp;gt; einmalig mit Version 0 versehen. Ebenso entfällt &amp;lt;code&amp;gt;repair()&amp;lt;/code&amp;gt; bei jedem Start: Es schrieb die Historie auf ein nachträglich geändertes oder ersetztes Skript um, das dann nie lief; ein solches Skript scheitert nun an der Prüfsumme. Versionen dürfen außer der Reihe eintreffen (&amp;lt;code&amp;gt;outOfOrder&amp;lt;/code&amp;gt;), ein entferntes, bereits gelaufenes Skript ist kein Fehler mehr.&lt;br /&gt;
** Fix: org.eclipse.osbp.system.configuration (monitoring.base): Überwachungseinträge gingen auf älteren Datenbanken verloren. Datenbanken, die mit einem früheren Monitoring-Modell angelegt wurden, tragen noch eindeutige Indizes auf einem Namen allein (&amp;lt;code&amp;gt;MONITOR_SUB_CATEGORY.MSC_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_CATEGORY.MCA_NAME&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DK&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_MAIN_CATEGORY.MMCA_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_COMPONENT.MCO_NAME&amp;lt;/code&amp;gt;). Das Modell verlangt einen eindeutigen Namen nur unterhalb des jeweiligen Elternelements; die Schemagenerierung legt Indizes an, entfernt aber nie einen. Eine zweite Kategorie mit einer gleichnamigen Unterkategorie – etwa „COMPLETE“ unter &amp;lt;code&amp;gt;XRECHNUNG_UP&amp;lt;/code&amp;gt; und unter &amp;lt;code&amp;gt;ZUGFERD_UP&amp;lt;/code&amp;gt; – scheiterte daher an einem doppelten Schlüssel, &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; fing den Fehler ab, und der Eintrag fehlte (auf einer BDI-Installation über 1.000 solcher Fehler an einem Tag, dazu „transactionRollback - no transactionhandler found“). Ebenso konnten sich zwei Installationen mit gemeinsamer Datenbank nicht beide als Komponente „Application“ anmelden. Die erste Flyway-Migration des Bundles (&amp;lt;code&amp;gt;V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;, für MySQL/MariaDB, PostgreSQL und Oracle) entfernt diese Indizes; &amp;lt;code&amp;gt;MONITOR_COMPONENTI1&amp;lt;/code&amp;gt; legt die Schemagenerierung danach in der Form des Modells (&amp;lt;code&amp;gt;MCO_NAME, MCO_INSTALLATION&amp;lt;/code&amp;gt;) neu an. Da die Indizes nicht mehr im Modell stehen, hängen ihre Namen vom Generator ab, der die Datenbank angelegt hat; die Skripte finden sie daher an ihrer Struktur (eindeutig, kein Primärschlüssel, genau eine dieser Spalten). Auf einer neuen oder bereits bereinigten Datenbank ändern sie nichts.&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Hinweis für Produkte mit REST-Diensten über ECF: Das Bundle &amp;lt;code&amp;gt;org.eclipse.ecf.osgi.services.remoteserviceadmin.console&amp;lt;/code&amp;gt; (Konsolenbefehle &amp;lt;code&amp;gt;rsa …&amp;lt;/code&amp;gt;) sollte nicht automatisch starten. Seine Komponente &amp;lt;code&amp;gt;RSACommand&amp;lt;/code&amp;gt; benötigt den &amp;lt;code&amp;gt;RemoteServiceAdmin&amp;lt;/code&amp;gt;; während ECF diesen beim Export der Dienste erzeugt, blockieren sich ECF und DS gegenseitig, bis DS nach seiner Wartezeit (&amp;lt;code&amp;gt;-Dequinox.scr.waitTimeOnBlock&amp;lt;/code&amp;gt;, in BDI 20 s) abbricht. In BDI und im CX-Portal ist es auf &amp;lt;code&amp;gt;autoStart=&amp;quot;false&amp;quot;&amp;lt;/code&amp;gt; gesetzt; POS startet es nicht. Zusammen mit der Korrektur oben startet BDI in der IDE ohne Sperrmeldungen (67 s statt 74–101 s). Es verbleibt die Warnung „Enabling components of bundle org.eclipse.osbp.xtext.builder.metadata.services did not complete in 30000 ms“: Das ist das Laden der DSL-Modelle (rund 35 s) auf dem DS-Thread, keine Sperre&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Flyway Integration: org.eclipse.osbp.dependencies-mbp, org.eclipse.osbp.dependencies - Flyway 9 enthält die Unterstützung für MySQL und MariaDB nicht mehr im Kern, sondern im Modul &amp;lt;code&amp;gt;flyway-mysql&amp;lt;/code&amp;gt;, das sich über &amp;lt;code&amp;gt;META-INF/services&amp;lt;/code&amp;gt; registriert und von Flyway mit dessen eigenem Class Loader gesucht wird. Das Modul wird daher als Fragment &amp;lt;code&amp;gt;org.flywaydb.database.mysql&amp;lt;/code&amp;gt; 9.14.0.v20261028 an &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; ausgeliefert (das Manifest des Originals nennt sich selbst &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; und ist so nicht verwendbar) und mit dem Feature &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.feature.flyway&amp;lt;/code&amp;gt; verteilt.&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261012 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** org.eclipse.osbp.dsl (Entity,DTO):&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (1) – &amp;lt;code&amp;gt;AbstractOppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;MappingContext&amp;lt;/code&amp;gt; deklarieren kein &amp;lt;code&amp;gt;finalize()&amp;lt;/code&amp;gt; mehr. Jede &amp;lt;code&amp;gt;OppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OppositeContainmentDtoList&amp;lt;/code&amp;gt; war dadurch finalisierbar, überlebte die Garbage Collection, die sie als unerreichbar erkannt hatte, und hielt bis zur Abarbeitung durch den einzelnen Finalizer-Thread ihren gesamten Objektgraphen am Leben (DTOs, Entitäten, Persistenzkontexte). In einem Kundenabzug waren von 7,56 Mio. Finalizer-Einträgen 7,51 Mio. solche Listen. Die Listener, die der Finalizer abmelden sollte, werden bereits in &amp;lt;code&amp;gt;clear()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;remove()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;resolve()&amp;lt;/code&amp;gt; abgemeldet&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (2) – ein DTO hält für das spätere Nachladen einer Lazy-Referenz nicht mehr die abgelöste Entität fest, sondern nur noch deren Klasse und ID (neue Klasse &amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;org.eclipse.osbp.dsl.dto.lib&amp;lt;/code&amp;gt;). Die Entität hielt über ihre Lazy-Beziehungen den gesamten Persistenzkontext (&amp;lt;code&amp;gt;RepeatableWriteUnitOfWork&amp;lt;/code&amp;gt; samt aller darin geklonten Entitäten), obwohl &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; nur Klasse und ID benötigt. Gemessen an einer Kasse: rund 42 festgehaltene Persistenzkontexte je Verkauf vorher, praktisch keiner danach. Die ID wird erst am Ende des Mappings übernommen, weil der generierte Mapper &amp;lt;code&amp;gt;initialize(entity)&amp;lt;/code&amp;gt; vor &amp;lt;code&amp;gt;setId&amp;lt;/code&amp;gt; aufruft und eine neue Entität bis dahin die zufällige ID ihres Konstruktors trägt; liefert die Datenbank die ID erst später, bleibt es beim bisherigen Verhalten. '''Der Generator (&amp;lt;code&amp;gt;DtoTypesBuilder&amp;lt;/code&amp;gt;) erzeugt den neuen Aufruf; wirksam wird die Änderung erst mit neu generierten DTOs.''' Nicht neu generierte DTOs laufen unverändert weiter; neu generierte DTOs setzen ein &amp;lt;code&amp;gt;dto.lib&amp;lt;/code&amp;gt; ab dem 07.10.2026 voraus&lt;br /&gt;
*** &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; meldet nun, welche Zeile er nicht nachladen konnte. Liefert &amp;lt;code&amp;gt;em.find&amp;lt;/code&amp;gt; kein Ergebnis, wird ein Fehler mit Entitätsklasse, ID, Eigenschaft und DTO-Klasse protokolliert und eine &amp;lt;code&amp;gt;IllegalStateException&amp;lt;/code&amp;gt; geworfen. Bisher erschien an dieser Stelle nur eine &amp;lt;code&amp;gt;NullPointerException&amp;lt;/code&amp;gt; ohne Hinweis auf die Ursache&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;AbstractDTOService.closeEntityManager()&amp;lt;/code&amp;gt; fordert eine offene Transaktion nicht mehr nach jedem Lesezugriff zur Freigabe auf. Das Verhalten ist unverändert, die Warnung &amp;lt;code&amp;gt;dispose() refused&amp;lt;/code&amp;gt; erscheint aber nur noch, wenn tatsächlich jemand eine offene Transaktion abbauen will (zuvor rund zwei Meldungen je Verkauf und etwa 175 je Kassenabschluss)&lt;br /&gt;
*** Fix: Mit &amp;lt;code&amp;gt;-DsendTransactionEventAsync=true&amp;lt;/code&amp;gt; wartete &amp;lt;code&amp;gt;TransactionHandler.dispose()&amp;lt;/code&amp;gt; nach jedem Commit mindestens 800 ms, zuzüglich weiterer 800 ms je Durchlauf mit nicht leerer Ereigniswarteschlange – während &amp;lt;code&amp;gt;SessionManager&amp;lt;/code&amp;gt; die Sperre aller Transaktions-Handler hielt. An einer Kasse waren das mehrere Sekunden je Bon. &amp;lt;code&amp;gt;dispose()&amp;lt;/code&amp;gt; übergibt den Entity Manager nun dem Ereignis-Thread und kehrt sofort zurück; der Thread schließt ihn als letzten Schritt, sobald seine Warteschlange leer ist. Ein Ereignis, das sich nicht versenden lässt, beendet den Thread nicht mehr. Ohne den Schalter ändert sich nicht*s&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;MetadataBuilder&amp;lt;/code&amp;gt; macht beim ersten Scan zunächst alle gestarteten Bundles mit dem Header &amp;lt;code&amp;gt;OSBP-RuntimeBuilder-BundleSpace&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;Factory-Model&amp;lt;/code&amp;gt; im Bundle-Space bekannt und sucht erst danach nach Modellen. Bisher wurde ein Bundle erst beim Erreichen aufgenommen, während ein Participant ein Modell sofort laden kann: Ein ECView aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration&amp;lt;/code&amp;gt; nennt ein DTO aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration.base&amp;lt;/code&amp;gt; mit der höheren Bundle-ID, die Klasse wurde also je nach Reihenfolge beim Start nicht gefunden. In diesem Fall scheiterte &amp;lt;code&amp;gt;activate()&amp;lt;/code&amp;gt;, der DSL-Metadatendienst und damit der Persistenzdienst starteten nie, und die Anwendung blieb auf der Startseite stehen. Eine fehlgeschlagene Aktivierung wird nun zusätzlich als Fehler in das Anwendungslog geschrieben&lt;br /&gt;
** Fix: org.eclipse.osbp.dsl, org.eclipse.osbp.runtime: Vier Fehler in der sitzungsbezogenen Transaktionsverwaltung behoben. (a) &amp;lt;code&amp;gt;SessionManager.removeSession()&amp;lt;/code&amp;gt; gab den Transaktions-Handler unter einem Schlüssel frei, der nie passen konnte (&amp;lt;code&amp;gt;ISession&amp;lt;/code&amp;gt; hat kein &amp;lt;code&amp;gt;toString()&amp;lt;/code&amp;gt;), das Sicherheitsnetz griff also nie. (b) &amp;lt;code&amp;gt;disposeTransactionHandler&amp;lt;/code&amp;gt; entfernte den Eintrag auch dann, wenn die Transaktion noch offen war – der Entity Manager wurde aufgegeben und der Thread, der die Transaktion noch abschließen musste, fand seinen Handler nicht mehr. &amp;lt;code&amp;gt;ITransactionHandler&amp;lt;/code&amp;gt; erhält dafür &amp;lt;code&amp;gt;isDisposable()&amp;lt;/code&amp;gt; als Default-Methode. (c) Die Freigabe nach &amp;lt;code&amp;gt;transactionBegin&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Rollback&amp;lt;/code&amp;gt; steht nun in einem &amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt;; ein &amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt;, insbesondere ein &amp;lt;code&amp;gt;OutOfMemoryError&amp;lt;/code&amp;gt;, ließ den Handler bisher mit Entity Manager in einer statischen Map zurück. (d) &amp;lt;code&amp;gt;txnIsOpen&amp;lt;/code&amp;gt; wird auch bei einem fehlgeschlagenen Commit oder Rollback zurückgesetzt&lt;br /&gt;
** org.eclipse.osbp.persistence: &lt;br /&gt;
*** Der Startstatus nennt nun den Dienst, auf den der Persistenzdienst noch wartet. Die neue Komponente &amp;lt;code&amp;gt;PersistenceStartupStatus&amp;lt;/code&amp;gt; hat keine Pflichtreferenz, ist daher von Beginn an aktiv und setzt den Status auf „persistence service is waiting for the DSL metadata service“ (bzw. „the Mondrian manager“), bis diese gebunden sind. Bisher blieb es unabhängig vom Grund bei „persistenceservice not started yet“, und die wartenden Dienste protokollierten nichts&lt;br /&gt;
*** Beim Einrichten einer Persistence Unit wird jede verwaltete Klasse gemeldet, die nicht statisch gewebt ist, obwohl eine ihrer Oberklassen es ist – in einer ERROR-Zeile mit dem Hinweis, das Projekt vollständig neu zu bauen. Eine solche Klasse wird von EclipseLink instanziiert, aber nie befüllt: Der Dialog bleibt leer, und die nächste Aktualisierung scheitert mit „mapped to a primary key column ... Updates are not allowed“&lt;br /&gt;
** org.eclipse.osbp.ecview.extension: Fix: Das Grid vergisst die Zeilenschlüssel von Einträgen, die den Container als Ganzes verlassen haben. Vaadin gibt die Schlüssel nur über das clientseitige &amp;lt;code&amp;gt;dropRows&amp;lt;/code&amp;gt; frei; nach einem allgemeinen &amp;lt;code&amp;gt;ItemSetChange&amp;lt;/code&amp;gt;, wie ihn &amp;lt;code&amp;gt;removeAllItems()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;addAll()&amp;lt;/code&amp;gt; auslösen, blieben sie im &amp;lt;code&amp;gt;KeyMapper&amp;lt;/code&amp;gt; stehen und hielten jede jemals angezeigte Zeile samt ihrem DTO-Graphen. &amp;lt;code&amp;gt;GridPresentation.CustomGrid&amp;lt;/code&amp;gt; merkt sich die vergebenen Schlüssel und entfernt die nicht mehr enthaltenen&lt;br /&gt;
** org.osbee.datainterchange: Fix: FreeMarkers gemeinsam genutzte &amp;lt;code&amp;gt;InvalidReferenceException&amp;lt;/code&amp;gt; hält nicht mehr den ersten Exportlauf fest. Die statische Instanz übernahm die zum Zeitpunkt ihres Entstehens aktive Umgebung und damit das gesamte Datenmodell des ersten Exports für die Lebensdauer des Prozesses. Der Activator lädt die Klasse nun einmal außerhalb eines Template-Laufs&lt;br /&gt;
** org.eclipse.osbp.display: Fix: Das Display-Servlet wird nicht mehr auf dem Thread registriert, der die Bundles startet. Die Registrierung veröffentlicht einen Dienst, und Declarative Services verarbeitet dieses Ereignis auf dem veröffentlichenden Thread; dort wartete der Start aller nachfolgenden Bundles, in einem Fall über 50 Sekunden („Getting a lock required more than 50000 ms“). Die Registrierung läuft nun auf einem eigenen Thread&lt;br /&gt;
** org.eclipse.osbp.runtime, org.eclipse.osbp.blob, org.eclipse.osbp.autowireHelper, org.eclipse.osbp.ecview.extension, org.eclipse.osbp.ecview.addons, org.eclipse.osbp.infogrid.model: Neue Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; für String-Attribute. Ein Attribut mit &amp;lt;code&amp;gt;key=&amp;quot;barcode&amp;quot; value=&amp;quot;QRCode-128&amp;quot;&amp;lt;/code&amp;gt; wird schreibgeschützt als Barcode-Bild angezeigt, das aus seinem Klartextwert erzeugt wird – im Dialog über &amp;lt;code&amp;gt;BlobComponent&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;BlobUploadComponent&amp;lt;/code&amp;gt; (letztere dann ohne Schaltflächen) und in Grid-Spalten über den Blob-Bildkonverter&lt;br /&gt;
** org.eclipse.osbp.authentication, org.eclipse.osbp.system.configuration, org.eclipse.osbp.blob: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** org.eclipse.osbp.xtext.table, org.eclipse.osbp.xtext.table.common: Für Attribute mit der Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; wird ein Barcode-Lookup generiert; eine String-Zelle wird als Barcode-Bild angezeigt, wenn das Lookup einen Barcode-Typ trägt&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** net.osbee.pos.tse: Aufrufer können die BSI-Zertifizierungs-ID der TSE abfragen. Die SE-API bietet &amp;lt;code&amp;gt;getCertificationId&amp;lt;/code&amp;gt; in beiden API-Versionen, keiner der beiden Adapter reichte den Aufruf bisher durch&lt;br /&gt;
** net.osbee.pos.tse, net.osbee.pos.rksv: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Einführung der http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/restartService Seite. Damit können entweder Sessions gekillt oder der Service der Anwendung neu gestartet werden.&lt;br /&gt;
** Bei Nichterreichbarkeit der Datenbank wird die Anwendung beendet und der Fehlerstatus auf der Statusseite angezeigt.&lt;br /&gt;
** Das eingebettete &amp;lt;code&amp;gt;shiro-all-1.2.3.jar&amp;lt;/code&amp;gt; wurde durch &amp;lt;code&amp;gt;shiro-core&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; in Version 1.13.0 ersetzt. Damit sind CVE-2016-4437 (Remote Code Execution über das RememberMe-Cookie mit festem Schlüssel) und CVE-2019-12422 geschlossen. &amp;lt;code&amp;gt;encoder-1.2.3.jar&amp;lt;/code&amp;gt; kommt hinzu, weil &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; 1.13 &amp;lt;code&amp;gt;org.owasp.encoder&amp;lt;/code&amp;gt; zwingend importiert.&lt;br /&gt;
** Anmeldung: &lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm&amp;lt;/code&amp;gt; löst den Anmeldenamen vor jeder Abfrage in einen Distinguished Name auf. Active Directory akzeptiert für den Bind auch einen User Principal Name, beantwortet Abfragen damit aber mit LDAP-Fehler 34 (&amp;lt;code&amp;gt;invalidDNSyntax&amp;lt;/code&amp;gt;), sodass ein &amp;lt;code&amp;gt;userDnTemplate&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt; zwar anmeldete, dann aber an den Attributen scheiterte. &amp;lt;code&amp;gt;resolveUserDn&amp;lt;/code&amp;gt; sucht nun über &amp;lt;code&amp;gt;userPrincipalName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sAMAccountName&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;mail&amp;lt;/code&amp;gt;; die Suchbasis stammt aus dem RootDSE. Bestehende Vorlagen der Form &amp;lt;code&amp;gt;cn={0},ou=...&amp;lt;/code&amp;gt; verhalten sich unverändert. Zugleich behoben: eine &amp;lt;code&amp;gt;StringIndexOutOfBoundsException&amp;lt;/code&amp;gt; im E-Mail-Zweig und das Einsetzen des Benutzernamens in den Suchfilter per Verkettung (jetzt als &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt;, von JNDI maskiert)&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm.getUserDn&amp;lt;/code&amp;gt; maskierte nur das Komma. &amp;lt;code&amp;gt;escapeDnValue&amp;lt;/code&amp;gt; deckt nun alle Zeichen nach RFC 4514 Abschnitt 2.4 ab, sodass ein Benutzername die Bedeutung des DN nicht mehr verändern kann&lt;br /&gt;
*** Die Funktionalität „Angemeldet bleiben“ arbeitet nun mit einem signierten Token statt mit verschlüsselten Zugangsdaten. Das Cookie ist eine mit HMAC-SHA256 signierte Aussage über Benutzer, Mandant, Geltungsbereich, Ablaufdatum und Version und enthält keine Zugangsdaten. Es ist zustandslos, sodass beliebig viele Geräte und Browser gleichzeitig eines halten können.&lt;br /&gt;
*** Das „Angemeldet bleiben“-Cookie gilt je Anwendungsinstanz und Browser. Der Cookie-Name trägt einen Kurzhash über Schema, Host, Port, erstes Pfadsegment und Portal-ID, sodass zwei Anwendungen auf demselben Host nicht mehr das Cookie der jeweils anderen lesen. Die selbstgebaute Verschlüsselung entfällt vollständig. Das Cookie wird mit expliziter Lebensdauer, &amp;lt;code&amp;gt;SameSite=Lax&amp;lt;/code&amp;gt; und unter https mit &amp;lt;code&amp;gt;Secure&amp;lt;/code&amp;gt; geschrieben. Die Anmeldung aus einem Cookie wartet fünf Sekunden mit einem Hinweis auf der Anmeldemaske und lässt sich in dieser Zeit abbrechen; ein entferntes Häkchen löscht das Cookie nun in jedem Fall. Die Betrugsmeldung samt Kontosperre bei nicht passendem Cookie entfällt&lt;br /&gt;
*** Fix: Kennwörter erscheinen nicht mehr im Log – weder bei der Anmeldung in &amp;lt;code&amp;gt;AuthenticationProvider.check()&amp;lt;/code&amp;gt; (bisher im Klartext auf DEBUG) noch beim Zurücksetzen, wo der Nachrichtentext mit dem neuen Kennwort dreimal geschrieben wurde&lt;br /&gt;
*** Die Anzeige des neuen Kennworts auf der Anmeldemaske, wenn keine E-Mail versendet werden kann, ist nun eine konfigurierte Betriebsart: &amp;lt;code&amp;gt;Userinterface/showResetPasswordOnScreen&amp;lt;/code&amp;gt;, standardmäßig aus, mit Protokollierung auf WARN. '''Installationen ohne Mailserver müssen den Parameter einmalig setzen'''&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;doResetPassword&amp;lt;/code&amp;gt; hebt weder eine Sperre noch die Deaktivierung eines Kontos auf und setzt den Fehlversuchszähler nicht mehr zurück. Das Zurücksetzen kann jeder auslösen, der einen Benutzernamen eingibt; aufgehoben werden Sperre und Deaktivierung nur noch durch einen Administrator über &amp;lt;code&amp;gt;doUnlock&amp;lt;/code&amp;gt;&lt;br /&gt;
** System Configuration: &lt;br /&gt;
*** Parameter &amp;lt;code&amp;gt;RememberMeSecret&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;IConfigurationService&amp;lt;/code&amp;gt; ergänzt (&amp;lt;code&amp;gt;GLOBAL_PARAMETERS/RememberMeSecret&amp;lt;/code&amp;gt;). Der Schlüssel wird je Installation bei der ersten Benutzung der &amp;quot;RememberMe&amp;quot; Funktionalität einmal aus gezogen und von allen Anmeldungen geteilt; das Löschen des Eintrags macht alle „Angemeldet bleiben“-Cookies auf einmal ungültig.&lt;br /&gt;
*** Fix: Die Einstellungen füllten sich mit Platzhaltern „not set“. &amp;lt;code&amp;gt;ConfigurationService.getConfigurationString&amp;lt;/code&amp;gt; speicherte bei leerem Vorgabewert den Platzhalter und lieferte ihn als leere Zeichenkette zurück, sodass &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; stets eine weitere Zeile anhängte. &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; entfernt nun die Platzhalterzeilen des Schlüssels vor dem Schreiben, und ein gespeicherter Platzhalter gilt als „kein Wert“. &amp;lt;code&amp;gt;deleteConfigurations&amp;lt;/code&amp;gt; setzt zusätzlich den Cache zurück; gelöschte Einträge kamen bisher beim nächsten Lesen wieder&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Fix: org.eclipse.osbp.dependencies-mbp: Das Bundle &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.bundle.activemq.all.osgi&amp;lt;/code&amp;gt; enthält kein Log4j und kein eingebettetes slf4j mehr. &amp;lt;code&amp;gt;activemq-all&amp;lt;/code&amp;gt; brachte eine vollständige Kopie von Apache Log4j 1.2.17 mit (359 Klassen, darunter &amp;lt;code&amp;gt;JDBCAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSSink&amp;lt;/code&amp;gt; und chainsaw – betroffen von CVE-2021-4104, CVE-2022-23302, CVE-2022-23305 und CVE-2022-23307) sowie slf4j-api 1.7.13 und &amp;lt;code&amp;gt;slf4j-log4j12&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;Include-Resource&amp;lt;/code&amp;gt; bindet das Hersteller-Jar nun ohne &amp;lt;code&amp;gt;org.apache.log4j&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org.slf4j&amp;lt;/code&amp;gt;, deren Maven-Koordinaten, die &amp;lt;code&amp;gt;log4j.properties&amp;lt;/code&amp;gt; und Springs &amp;lt;code&amp;gt;Log4jConfigurer&amp;lt;/code&amp;gt; ein. ActiveMQ bezieht slf4j stattdessen aus dem Produkt (&amp;lt;code&amp;gt;org.slf4j.api&amp;lt;/code&amp;gt; 1.7.36)&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neue Dienststeuerungsseite unter &amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;. &lt;br /&gt;
*** Ein Bediener kann darüber – autorisiert durch eine reguläre Anwendungsanmeldung – hängende Sitzungen beenden oder den Dienst neu starten, ohne Zugriff auf den Serverrechner zu benötigen. Drei Stufen: Sitzungen des aufrufenden Arbeitsplatzes, alle Sitzungen, Neustart. Die Seite ist am Root-HTTP-Service registriert und bleibt damit erreichbar, wenn der Anwendungskontext selbst gestört ist; Markup, Stil, Skript und Texte (deutsch, englisch, französisch) sind deshalb in der Seite enthalten. Sitzungen werden über das Invalidieren der HTTP-Sitzung beendet. Der Neustart läuft über die Befehlswarteschlange der Anwendung; die Seite fragt anschließend die Anwendung ab und führt den Bediener über die Unterbrechung hinweg&lt;br /&gt;
*** Alle Aktionen der Dienststeuerungsseite werden im &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; unter denselben Koordinaten wie die Anmeldemaske protokolliert (fehlgeschlagene Anmeldung und Neustart als WARNING, gesperrtes Konto als ERROR, beendete Sitzungen als INFO). Eine abgelehnte Anmeldung sperrt das Formular für die Dauer der Wartezeit mit Countdown; der Zähler ist derselbe wie an der Anmeldemaske, sodass sich Fehlversuche auf beiden Wegen zur Kontosperre summieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260907 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Überarbeitung der Codebasis zur Entfernung veralteter und nicht benötigter Bundles&lt;br /&gt;
** Überarbeitung des Loginvorgangs / der Cookiespeicherung bei &amp;quot;remember me&amp;quot;. Es werden keine kritischen Daten mehr im Cookie gespeichert.&lt;br /&gt;
** Verbesserung der Übersetzungen&lt;br /&gt;
** Anpassungen für frz. Fiskalanforderungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Laden der Übersetzungen in die interne Tabelle beim Systemstart deutlich beschleunigt. Dadurch verbessertes Startverhalten der Anwendungen.&lt;br /&gt;
** Verbesserungen bei der frz. Tastaturunterstützung&lt;br /&gt;
** Verbesserungen der Übersetzungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260618 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Blockieren durch das Laden von Diensten während des Starts vermieden, dadurch schnellerer Anwendungsstart. Anderes Verhalten beim Start an der Benutzeroberfläche.&lt;br /&gt;
** Französische Tastaturunterstützung (AZERTY) im Keymapper der Statemachine ergänzt&lt;br /&gt;
** Login bezieht Build-Version und Hersteller nun aus den &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; (einheitliche Quelle)&lt;br /&gt;
** Neue gemeinsame Hilfsmethoden &amp;lt;code&amp;gt;getBuildVersion()&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;getVendor()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; zur Ermittlung der Build-Identität&lt;br /&gt;
** &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; setzt die Zeitstempel von &amp;lt;code&amp;gt;lastError&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;lastWarning&amp;lt;/code&amp;gt; nicht mehr zurück&lt;br /&gt;
** Fix: NPE in &amp;lt;code&amp;gt;org.eclipse.osbp.xtext.dialog.AutowireUiFactory&amp;lt;/code&amp;gt; behoben&lt;br /&gt;
** Version von 5.2.0 auf 5.3.0 angehoben&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-reverify&amp;lt;/code&amp;gt; (16px/32px) für die NF525-Schaltfläche zur erneuten Archivintegritätsprüfung&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-refresh.png&amp;lt;/code&amp;gt; ergänzt&lt;br /&gt;
** Grid – horizontale Bildlaufleiste wiederhergestellt&lt;br /&gt;
** Grid - Flex-Layout für Kassen-/POS-Grids wiederhergestellt (kollabierte Spalten behoben)&lt;br /&gt;
** französische Übersetzungen überarbeitet&lt;br /&gt;
&lt;br /&gt;
* Grammatiken/Generierung:&lt;br /&gt;
** org.eclipse.osbp.dsl: Benutzerdefinierte &amp;lt;code&amp;gt;@PreRemove&amp;lt;/code&amp;gt;-Hooks werden in der generierten &amp;lt;code&amp;gt;preRemove()&amp;lt;/code&amp;gt;-Methode zusammengeführt&lt;br /&gt;
** org.eclipse.osbp.xtext.i18n: i18n-Generator erzeugt nun das byte-genaue Eclipse-Babel-Format&lt;br /&gt;
&lt;br /&gt;
* POS Framework für franz. Fiskalanforderungen eingeführt&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260410 ==&lt;br /&gt;
&lt;br /&gt;
* POS Framework: &lt;br /&gt;
** Performanceverbesserung beim Kassieren&lt;br /&gt;
** Multi-Protokoll Unterstützung für Paymentterminal &lt;br /&gt;
*** frz. Protokolle &amp;quot;Concert&amp;quot;, &amp;quot;Protocol E&amp;quot;&lt;br /&gt;
*** &amp;quot;Mock&amp;quot; für Tests&lt;br /&gt;
*** Statemachine DSL erweitert: protocol Parameter für Paymentterminal&lt;br /&gt;
*** &amp;quot;Shared Payment Terminal&amp;quot;&lt;br /&gt;
**** locking im PaymentTerminalService implementiert&lt;br /&gt;
**** pro Terminal über ConfigService einstellbar&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260402 ==&lt;br /&gt;
&lt;br /&gt;
Die Version verbessert das Startverhalten einer Anwendung und bringt mehr Informationen über den Status des Starts auf den Bildschirm&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Anzeige des Persistenzservice-Status auf dem Login-Bildschirm&lt;br /&gt;
** Information über den Persistenzservice auf der Fehlerseite hinzugefügt&lt;br /&gt;
** Beim Start wird nun überall auf den Persistenzservice statt nur auf den ConfigurationService gewartet&lt;br /&gt;
&lt;br /&gt;
* BPM:&lt;br /&gt;
** Fix: net.osbee.bpm: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** Fix: net.osbee.pos.epay: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260305 ==&lt;br /&gt;
&lt;br /&gt;
=== Report Anzeige ===&lt;br /&gt;
&lt;br /&gt;
Diese Version konzentriert sich auf '''Stabilitätsverbesserungen''' für das Report-Rendering-System, insbesondere auf die Behebung von Race Conditions und Anzeigeproblemen, die bei schnellen Benutzerinteraktionen auftraten.&lt;br /&gt;
&lt;br /&gt;
* Race Condition beim Report-Rendering&lt;br /&gt;
** '''Behoben: Schnelles Auswählen/Abwählen führte dazu, dass Reports mit ungültigen oder fehlenden Filtern gerendert wurden'''&lt;br /&gt;
*** Reports verarbeiten nun korrekt wenn Benutzer schnell Elemente auswählen und wieder abwählen&lt;br /&gt;
*** Filteränderungen werden blockiert, während ein Render-Vorgang läuft&lt;br /&gt;
*** Ausstehende Filteränderungen werden nachverfolgt und nach Abschluss des Renderings erneut ausgewertet&lt;br /&gt;
*** Reports mit &amp;lt;code&amp;gt;selectById&amp;lt;/code&amp;gt; werden nun korrekt ausgeblendet, wenn nichts ausgewählt ist&lt;br /&gt;
&lt;br /&gt;
* PDF-Anzeigeskalierungsproblem &lt;br /&gt;
** '''Behoben: PDF-Skalierungsprobleme durch Neuerstellung des BrowserFrames bei jedem Rendering'''&lt;br /&gt;
&lt;br /&gt;
=== Anmeldebildschirm ===&lt;br /&gt;
&lt;br /&gt;
Der Anmeldebildschirm zeigt nun während der Initialisierung des Persistence-Services einen Statustext an.&lt;br /&gt;
&lt;br /&gt;
* Lauftext-Anzeige (Marquee) mit dem aktuellen Status des Persistence-Services&lt;br /&gt;
* Deaktivierung aller Anmeldesteuerelemente während der Wartezeit&lt;br /&gt;
&lt;br /&gt;
=== Start der Anwendung ===&lt;br /&gt;
&lt;br /&gt;
* Blockierungen der Initialisierungsvorgänge durch Warten auf Serviceregistrierung während des Anwendungsstarts reduziert. &amp;lt;br&amp;gt;Dadurch verändert sich das Startverhalten, insbesondere die Reihenfolge der Anwendung. Insgesamt schnelleres Laden der Bundles.&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4629</id>
		<title>Releasenotes 2026 OS.Softwarefactory</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4629"/>
				<updated>2026-11-04T12:05:53Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261103 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Fix: Das Grid fragt nach einem Wechsel des Inhalts nicht mehr für jede bekannte Zeile einzeln beim Container nach. Bei einem lazy ladenden Container war das je Zeile ein &amp;lt;code&amp;gt;SELECT COUNT&amp;lt;/code&amp;gt;: Ein Lauf des Zeitplaners mit offener Perspektive machte 10.468 Abfragen, danach 787. Die Schlüssel von Zeilen, die der Client nicht mehr anzeigt, werden beim nächsten Zurücksetzen freigegeben. Betroffene Komponenten: org.eclipse.osbp.ecview.extension/org.eclipse.osbp.ecview.extension.grid.presentation&lt;br /&gt;
** Fix: Eine Ansicht zeigt nach einer Folge von Änderungen immer den letzten Stand. Bisher wurden Aktualisierungen während des Zeichnens oder innerhalb der Ruhezeit (&amp;lt;code&amp;gt;RefreshTimeout&amp;lt;/code&amp;gt;, Standard 300 ms) verworfen, sodass die letzte Änderung fehlen konnte. Jetzt werden sie zurückgestellt: Die Ansicht zeichnet einmal nach der letzten Anforderung, spätestens 5 Sekunden nach der ersten zurückgestellten. Gilt für alle Ansichten über &amp;lt;code&amp;gt;AbstractHybridVaaclipseView&amp;lt;/code&amp;gt; (Tabellen, Diagramme, Berichte). Die Zahl der Abfragen sinkt dadurch nicht zwingend: gemessen am Überwachungsdiagramm 4 statt 3 bei einem Lauf des Zeitplaners, dafür mit dem letzten Stand. Betroffene Komponenten: org.eclipse.osbp.osgi.hybrid.api&lt;br /&gt;
** Fix: Flyway lief bei jedem Start mit &amp;lt;code&amp;gt;baseline()&amp;lt;/code&amp;gt;. Sobald die Historie Einträge hatte, lehnte Flyway das mit einer Ausnahme ab, die verschluckt wurde – &amp;lt;code&amp;gt;migrate()&amp;lt;/code&amp;gt; lief danach nie. Eine bestehende Datenbank ohne Historie wird nun über &amp;lt;code&amp;gt;baselineOnMigrate&amp;lt;/code&amp;gt; einmalig mit Version 0 versehen. Ebenso entfällt &amp;lt;code&amp;gt;repair()&amp;lt;/code&amp;gt; bei jedem Start: Es schrieb die Historie auf ein nachträglich geändertes oder ersetztes Skript um, das dann nie lief; ein solches Skript scheitert nun an der Prüfsumme. Versionen dürfen außer der Reihe eintreffen (&amp;lt;code&amp;gt;outOfOrder&amp;lt;/code&amp;gt;), ein entferntes, bereits gelaufenes Skript ist kein Fehler mehr. Der Lizenzschlüssel für die kommerzielle Flyway-Edition wird nicht mehr gelesen; die Open-Source-Edition genügt. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Fix: Wartezeit beim Start („Getting a lock required more than 20000 ms“). Jede Persistence Unit las beim Anlegen ihren EclipseLink-Cachetyp und ihre Cachegröße (&amp;lt;code&amp;gt;EclipseLink/&amp;amp;lt;Unit&amp;amp;gt;#cacheTypeDefault&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#cacheSizeDefault&amp;lt;/code&amp;gt;) aus der Konfiguration. Die Units werden parallel in einem Thread-Pool angelegt; das Lesen der Konfiguration holt DTO-Dienste und Mapper über Declarative Services, deren Sperre der Start-Thread während des gesamten Persistenzstarts hält. Jeder Pool-Thread wartete daher, bis DS nach 20 s aufgab. Die Werte werden nun vorher einmal auf dem Start-Thread gelesen, der die Sperre erneut nehmen darf; die Pool-Threads erhalten sie aus dem Zwischenspeicher der Konfiguration. Die Vorgabewerte (&amp;lt;code&amp;gt;Soft&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1000&amp;lt;/code&amp;gt;) sind Konstanten, sodass beide Lesestellen dieselben verwenden. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Fix: Überwachungseinträge gingen auf älteren Datenbanken verloren. Datenbanken, die mit einem früheren Monitoring-Modell angelegt wurden, tragen noch eindeutige Indizes auf einem Namen allein (&amp;lt;code&amp;gt;MONITOR_SUB_CATEGORY.MSC_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_CATEGORY.MCA_NAME&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DK&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_MAIN_CATEGORY.MMCA_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_COMPONENT.MCO_NAME&amp;lt;/code&amp;gt;). Das Modell verlangt einen eindeutigen Namen nur unterhalb des jeweiligen Elternelements; die Schemagenerierung legt Indizes an, entfernt aber nie einen. Eine zweite Kategorie mit einer gleichnamigen Unterkategorie – etwa „COMPLETE“ unter &amp;lt;code&amp;gt;XRECHNUNG_UP&amp;lt;/code&amp;gt; und unter &amp;lt;code&amp;gt;ZUGFERD_UP&amp;lt;/code&amp;gt; – scheiterte daher an einem doppelten Schlüssel, &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; fing den Fehler ab, und der Eintrag fehlte (auf einer BDI-Installation über 1.000 solcher Fehler an einem Tag, dazu „transactionRollback - no transactionhandler found“). Ebenso konnten sich zwei Installationen mit gemeinsamer Datenbank nicht beide als Komponente „Application“ anmelden. Die erste Flyway-Migration des Bundles (&amp;lt;code&amp;gt;V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;, für MySQL/MariaDB, PostgreSQL und Oracle) entfernt diese Indizes; &amp;lt;code&amp;gt;MONITOR_COMPONENTI1&amp;lt;/code&amp;gt; legt die Schemagenerierung danach in der Form des Modells (&amp;lt;code&amp;gt;MCO_NAME, MCO_INSTALLATION&amp;lt;/code&amp;gt;) neu an. Da die Indizes nicht mehr im Modell stehen, hängen ihre Namen vom Generator ab, der die Datenbank angelegt hat; die Skripte finden sie daher an ihrer Struktur (eindeutig, kein Primärschlüssel, genau eine dieser Spalten). Auf einer neuen oder bereits bereinigten Datenbank ändern sie nichts. '''Die PostgreSQL- und Oracle-Skripte sind ungetestet.''' Ohne Flyway lassen sich die Indizes auch von Hand entfernen (auf den lokalen Datenbanken &amp;lt;code&amp;gt;shipment&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;pos&amp;lt;/code&amp;gt; geschehen). Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring.base&lt;br /&gt;
** Neu: Die Pools sind über JMX sichtbar. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Neu: Flyway findet Datenbankmigrationen, die Bundles mitbringen. Ein Bundle nennt seinen Migrationsordner im Manifest-Header &amp;lt;code&amp;gt;OSBP-Flyway-Migration: db/migration&amp;lt;/code&amp;gt; und legt die Skripte als &amp;lt;code&amp;gt;&amp;amp;lt;Persistence Unit&amp;amp;gt;/&amp;amp;lt;Hersteller&amp;amp;gt;/V&amp;amp;lt;Version&amp;amp;gt;__&amp;amp;lt;Beschreibung&amp;amp;gt;.sql&amp;lt;/code&amp;gt; ab, z.B. &amp;lt;code&amp;gt;monitoringData/mysql/V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;. Ein Skript läuft auf der Datenquelle, für die seine Persistence Unit konfiguriert ist, und zwar vor dem Anlegen und Erweitern der Tabellen durch EclipseLink. Der Herstellerordner wird aus den JDBC-Metadaten bestimmt: &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt; (auch für MariaDB), &amp;lt;code&amp;gt;postgresql&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oracle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sqlserver&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;derby&amp;lt;/code&amp;gt;. Bisher suchte Flyway über einen Class Loader, der in OSGi einen Ordner wie &amp;lt;code&amp;gt;db/migration&amp;lt;/code&amp;gt; nur im eigenen Bundle sieht – Skripte in anderen Bundles wurden nie gefunden. Die neue Klasse &amp;lt;code&amp;gt;BundleMigrations&amp;lt;/code&amp;gt; sammelt sie und übergibt sie Flyway als Resource Provider; die Skripte im Dateisystemordner der Datenquelle (&amp;lt;code&amp;gt;-DFlyway.&amp;amp;lt;Datenquelle&amp;amp;gt;.DatabaseMigrationSourcePath&amp;lt;/code&amp;gt;) werden wie bisher mitgelesen. '''Die Migrationen laufen weiterhin nur mit &amp;lt;code&amp;gt;-DFlyway.active=true&amp;lt;/code&amp;gt;; keine ausgelieferte Anwendung schaltet sie bisher ein''' Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Neu: HikariCP-Verbindungspool vor der Datenquelle des Treibers. Bisher öffnete jede Abfrage eine neue Verbindung zur Datenbank, etwa 3.000 je stündlichem Lauf des Zeitplaners auf einer ruhenden Kasse. Maximum ist &amp;lt;code&amp;gt;database.connectionpool.max&amp;lt;/code&amp;gt;, 5 Verbindungen bleiben offen, Austausch nach 30 Minuten. &amp;lt;code&amp;gt;-DPersistenceService.connectionPool=false&amp;lt;/code&amp;gt; schaltet den Pool ab; &amp;lt;code&amp;gt;.minIdle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.maxLifetimeMinutes&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;.leakDetectionSeconds&amp;lt;/code&amp;gt; stellen ihn ein. Flyway verwendet weiter die Datenquelle des Treibers. In der Entwicklungsumgebung gemessen: keine neuen Verbindungen im Ruhezustand, beim stündlichen Lauf und bei Verkäufen. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Neu: Jeder Eintrag der Systemüberwachung enthält die Auslastung des Verbindungspools in Prozent und die Zahl der wartenden Threads. Wartende Threads markieren den Eintrag Memorycheck als Warnung. Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring, org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring.base&lt;br /&gt;
** Änderung: &amp;lt;code&amp;gt;db/README.md&amp;lt;/code&amp;gt; beschreibt Aufbau, Versions- und Historienkonventionen sowie die Regeln für ein Migrationsskript (nie ein ausgeliefertes Skript ändern, sondern eine neue Version schreiben; jeden Datenbankzustand vertragen, weil das Skript vor dem Anlegen der Tabellen läuft; Objekte an ihrer Struktur statt an ihrem Namen finden). Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring.base&lt;br /&gt;
** Änderung: Die Tabelle „Flyway info“ im Log richtet ihre Spaltenbreiten nach dem Inhalt. Bisher schnitten feste Breiten Version und Beschreibung ab (&amp;lt;code&amp;gt;2026.10.28.1&amp;lt;/code&amp;gt; erschien als &amp;lt;code&amp;gt;2026.10.&amp;lt;/code&amp;gt;). Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
** Änderung: Jedes Bundle mit Migrationen hat eine eigene Historientabelle, &amp;lt;code&amp;gt;flyway_&amp;lt;/code&amp;gt; und der symbolische Name, gekürzt wie ein Logger Klassennamen kürzt (führende Segmente auf ihren Anfangsbuchstaben, bis höchstens 30 Zeichen erreicht sind): &amp;lt;code&amp;gt;org.eclipse.osbp.system.monitoring.base&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;flyway_oeos_monitoring_base&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;net.osbee.app.bdi.ex.model.entity&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;flyway_noa_bdi_ex_model_entity&amp;lt;/code&amp;gt;. Versionen müssen daher nur innerhalb eines Bundles eindeutig sein; zwei Entwickler können in verschiedenen Bundles dieselbe Versionsnummer vergeben. Scheitern die Migrationen eines Bundles, wird das mit „the migrations of &amp;amp;lt;Bundle&amp;amp;gt; were NOT applied“ protokolliert, die übrigen Bundles laufen weiter. Ergäben zwei Bundles denselben gekürzten Namen, werden beide mit einem Fehler abgewiesen, statt sich eine Historie zu teilen. Die Skripte des Dateisystemordners behalten Flyways Standardtabelle &amp;lt;code&amp;gt;flyway_schema_history&amp;lt;/code&amp;gt;; eine Quelle ohne Skripte läuft gar nicht. Betroffene Komponenten: org.eclipse.osbp.persistence&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** Fix: Der Diagramm-Generator setzt den Zähler je Datenreihe zurück (ab 500 Zeilen passten Reihen und Beschriftung sonst nicht zusammen), Linien verschwinden beim Überfahren nicht mehr, der Tooltip nennt die Kategorie, und die Animation läuft nur noch beim ersten Zeichnen. Betroffene Komponenten: org.eclipse.osbp.xtext.chart&lt;br /&gt;
** Änderung: Das Speicherdiagramm der Überwachung ist mit dem korrigierten Generator neu erzeugt. Betroffene Komponenten: org.eclipse.osbp.system.configuration/org.eclipse.osbp.system.monitoring&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Fix: Flyway 9 enthält die Unterstützung für MySQL und MariaDB nicht mehr im Kern, sondern im Modul &amp;lt;code&amp;gt;flyway-mysql&amp;lt;/code&amp;gt;, das sich über &amp;lt;code&amp;gt;META-INF/services&amp;lt;/code&amp;gt; registriert und von Flyway mit dessen eigenem Class Loader gesucht wird. Das Modul wird daher als Fragment &amp;lt;code&amp;gt;org.flywaydb.database.mysql&amp;lt;/code&amp;gt; 9.14.0.v20261028 an &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; ausgeliefert (das Manifest des Originals nennt sich selbst &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; und ist so nicht verwendbar) und mit dem Feature &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.feature.flyway&amp;lt;/code&amp;gt; verteilt. Ohne das Fragment endet Flyway auf MariaDB mit „Unsupported Database: MySQL 5.5“ (so meldet der alte MySQL-Treiber eine MariaDB). PostgreSQL und Oracle sind weiterhin im Kern enthalten. '''Das per Maven gebaute Fragment ist noch nicht auf einer Installation geprüft'''; '''Build-Reihenfolge:''' dependencies-mbp, dependencies, persistence, system.configuration. Betroffene Komponenten: org.eclipse.osbp.dependencies-mbp/org.eclipse.osbp.dependencies.bundle.flyway.mysql, org.eclipse.osbp.dependencies/org.eclipse.osbp.dependencies.feature.flyway&lt;br /&gt;
** Neu: HikariCP 4.0.3 wird als Feature mit ausgeliefert. Es ist wie Flyway aus den Quell-Features ausgenommen. Betroffene Komponenten: org.eclipse.osbp.dependencies/org.eclipse.osbp.dependencies.feature.hikaricp, org.eclipse.osbp.dependencies.p2, org.eclipse.osbp.technologystack/org.eclipse.osbp.technologystack.feature, org.eclipse.osbp.technologystack/org.eclipse.osbp.technologystack.target.feature, org.eclipse.osbp.persistence/org.eclipse.osbp.persistence.feature, org.eclipse.osbp.softwarefactory/org.eclipse.osbp.softwarefactory.runtime.feature&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261029 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Fix: org.eclipse.osbp.persistence: Wartezeit beim Start („Getting a lock required more than 20000 ms“). Jede Persistence Unit las beim Anlegen ihren EclipseLink-Cachetyp und ihre Cachegröße (&amp;lt;code&amp;gt;EclipseLink/&amp;amp;lt;Unit&amp;amp;gt;#cacheTypeDefault&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#cacheSizeDefault&amp;lt;/code&amp;gt;) aus der Konfiguration. Das führte zu einer gegenseitigen Blockierung der Initialisierung. Die Werte werden nun einmal auf dem Start-Thread gelesen, damit tritt die Sperre nicht mehr auf.&lt;br /&gt;
** Neu: org.eclipse.osbp.persistence: Flyway findet Datenbankmigrationen, die Bundles mitbringen. Ein Bundle nennt seinen Migrationsordner im Manifest-Header &amp;lt;code&amp;gt;OSBP-Flyway-Migration: db/migration&amp;lt;/code&amp;gt; und legt die Skripte als &amp;lt;code&amp;gt;&amp;amp;lt;Persistence Unit&amp;amp;gt;/&amp;amp;lt;Hersteller&amp;amp;gt;/V&amp;amp;lt;Version&amp;amp;gt;__&amp;amp;lt;Beschreibung&amp;amp;gt;.sql&amp;lt;/code&amp;gt; ab, z.B. &amp;lt;code&amp;gt;monitoringData/mysql/V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;. Ein Skript läuft auf der Datenquelle, für die seine Persistence Unit konfiguriert ist, und zwar vor dem Anlegen und Erweitern der Tabellen durch EclipseLink. Der Herstellerordner wird aus den JDBC-Metadaten bestimmt: &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt; (auch für MariaDB), &amp;lt;code&amp;gt;postgresql&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oracle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sqlserver&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;derby&amp;lt;/code&amp;gt;. Die neue Klasse &amp;lt;code&amp;gt;BundleMigrations&amp;lt;/code&amp;gt; sammelt die Migrationsskripte und übergibt sie Flyway als Resource Provider; die Skripte im Dateisystemordner der Datenquelle (&amp;lt;code&amp;gt;-DFlyway.&amp;amp;lt;Datenquelle&amp;amp;gt;.DatabaseMigrationSourcePath&amp;lt;/code&amp;gt;) werden mitgelesen. '''Die Migrationen laufen nur mit &amp;lt;code&amp;gt;-DFlyway.active=true&amp;lt;/code&amp;gt;;'''&lt;br /&gt;
** org.eclipse.osbp.persistence: Jedes Bundle mit Migrationen hat eine eigene Historientabelle, &amp;lt;code&amp;gt;flyway_&amp;lt;/code&amp;gt; und der symbolische Name, gekürzt wie ein Logger Klassennamen kürzt (führende Segmente auf ihren Anfangsbuchstaben, bis höchstens 30 Zeichen erreicht sind): &amp;lt;code&amp;gt;org.eclipse.osbp.system.monitoring.base&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;flyway_oeos_monitoring_base&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;net.osbee.app.bdi.ex.model.entity&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;flyway_noa_bdi_ex_model_entity&amp;lt;/code&amp;gt;. Versionen müssen innerhalb eines Bundles eindeutig sein. Scheitern die Migrationen eines Bundles, wird das mit „the migrations of &amp;amp;lt;Bundle&amp;amp;gt; were NOT applied“ protokolliert, die übrigen Bundles laufen weiter. Ergäben zwei Bundles denselben gekürzten Namen, werden beide mit einem Fehler abgewiesen, statt sich eine Historie zu teilen. Die Skripte des Dateisystemordners behalten Flyways Standardtabelle &amp;lt;code&amp;gt;flyway_schema_history&amp;lt;/code&amp;gt;; eine Quelle ohne Skripte läuft gar nicht&lt;br /&gt;
** Fix: org.eclipse.osbp.persistence: Flyway lief bei jedem Start mit &amp;lt;code&amp;gt;baseline()&amp;lt;/code&amp;gt;. Sobald die Historie Einträge hatte, lehnte Flyway das mit einer Ausnahme ab, die verschluckt wurde – &amp;lt;code&amp;gt;migrate()&amp;lt;/code&amp;gt; lief danach nie. Eine bestehende Datenbank ohne Historie wird nun über &amp;lt;code&amp;gt;baselineOnMigrate&amp;lt;/code&amp;gt; einmalig mit Version 0 versehen. Ebenso entfällt &amp;lt;code&amp;gt;repair()&amp;lt;/code&amp;gt; bei jedem Start: Es schrieb die Historie auf ein nachträglich geändertes oder ersetztes Skript um, das dann nie lief; ein solches Skript scheitert nun an der Prüfsumme. Versionen dürfen außer der Reihe eintreffen (&amp;lt;code&amp;gt;outOfOrder&amp;lt;/code&amp;gt;), ein entferntes, bereits gelaufenes Skript ist kein Fehler mehr.&lt;br /&gt;
** Fix: org.eclipse.osbp.system.configuration (monitoring.base): Überwachungseinträge gingen auf älteren Datenbanken verloren. Datenbanken, die mit einem früheren Monitoring-Modell angelegt wurden, tragen noch eindeutige Indizes auf einem Namen allein (&amp;lt;code&amp;gt;MONITOR_SUB_CATEGORY.MSC_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_CATEGORY.MCA_NAME&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DK&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_MAIN_CATEGORY.MMCA_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_COMPONENT.MCO_NAME&amp;lt;/code&amp;gt;). Das Modell verlangt einen eindeutigen Namen nur unterhalb des jeweiligen Elternelements; die Schemagenerierung legt Indizes an, entfernt aber nie einen. Eine zweite Kategorie mit einer gleichnamigen Unterkategorie – etwa „COMPLETE“ unter &amp;lt;code&amp;gt;XRECHNUNG_UP&amp;lt;/code&amp;gt; und unter &amp;lt;code&amp;gt;ZUGFERD_UP&amp;lt;/code&amp;gt; – scheiterte daher an einem doppelten Schlüssel, &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; fing den Fehler ab, und der Eintrag fehlte (auf einer BDI-Installation über 1.000 solcher Fehler an einem Tag, dazu „transactionRollback - no transactionhandler found“). Ebenso konnten sich zwei Installationen mit gemeinsamer Datenbank nicht beide als Komponente „Application“ anmelden. Die erste Flyway-Migration des Bundles (&amp;lt;code&amp;gt;V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;, für MySQL/MariaDB, PostgreSQL und Oracle) entfernt diese Indizes; &amp;lt;code&amp;gt;MONITOR_COMPONENTI1&amp;lt;/code&amp;gt; legt die Schemagenerierung danach in der Form des Modells (&amp;lt;code&amp;gt;MCO_NAME, MCO_INSTALLATION&amp;lt;/code&amp;gt;) neu an. Da die Indizes nicht mehr im Modell stehen, hängen ihre Namen vom Generator ab, der die Datenbank angelegt hat; die Skripte finden sie daher an ihrer Struktur (eindeutig, kein Primärschlüssel, genau eine dieser Spalten). Auf einer neuen oder bereits bereinigten Datenbank ändern sie nichts.&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Hinweis für Produkte mit REST-Diensten über ECF: Das Bundle &amp;lt;code&amp;gt;org.eclipse.ecf.osgi.services.remoteserviceadmin.console&amp;lt;/code&amp;gt; (Konsolenbefehle &amp;lt;code&amp;gt;rsa …&amp;lt;/code&amp;gt;) sollte nicht automatisch starten. Seine Komponente &amp;lt;code&amp;gt;RSACommand&amp;lt;/code&amp;gt; benötigt den &amp;lt;code&amp;gt;RemoteServiceAdmin&amp;lt;/code&amp;gt;; während ECF diesen beim Export der Dienste erzeugt, blockieren sich ECF und DS gegenseitig, bis DS nach seiner Wartezeit (&amp;lt;code&amp;gt;-Dequinox.scr.waitTimeOnBlock&amp;lt;/code&amp;gt;, in BDI 20 s) abbricht. In BDI und im CX-Portal ist es auf &amp;lt;code&amp;gt;autoStart=&amp;quot;false&amp;quot;&amp;lt;/code&amp;gt; gesetzt; POS startet es nicht. Zusammen mit der Korrektur oben startet BDI in der IDE ohne Sperrmeldungen (67 s statt 74–101 s). Es verbleibt die Warnung „Enabling components of bundle org.eclipse.osbp.xtext.builder.metadata.services did not complete in 30000 ms“: Das ist das Laden der DSL-Modelle (rund 35 s) auf dem DS-Thread, keine Sperre&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Flyway Integration: org.eclipse.osbp.dependencies-mbp, org.eclipse.osbp.dependencies - Flyway 9 enthält die Unterstützung für MySQL und MariaDB nicht mehr im Kern, sondern im Modul &amp;lt;code&amp;gt;flyway-mysql&amp;lt;/code&amp;gt;, das sich über &amp;lt;code&amp;gt;META-INF/services&amp;lt;/code&amp;gt; registriert und von Flyway mit dessen eigenem Class Loader gesucht wird. Das Modul wird daher als Fragment &amp;lt;code&amp;gt;org.flywaydb.database.mysql&amp;lt;/code&amp;gt; 9.14.0.v20261028 an &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; ausgeliefert (das Manifest des Originals nennt sich selbst &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; und ist so nicht verwendbar) und mit dem Feature &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.feature.flyway&amp;lt;/code&amp;gt; verteilt.&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261012 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** org.eclipse.osbp.dsl (Entity,DTO):&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (1) – &amp;lt;code&amp;gt;AbstractOppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;MappingContext&amp;lt;/code&amp;gt; deklarieren kein &amp;lt;code&amp;gt;finalize()&amp;lt;/code&amp;gt; mehr. Jede &amp;lt;code&amp;gt;OppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OppositeContainmentDtoList&amp;lt;/code&amp;gt; war dadurch finalisierbar, überlebte die Garbage Collection, die sie als unerreichbar erkannt hatte, und hielt bis zur Abarbeitung durch den einzelnen Finalizer-Thread ihren gesamten Objektgraphen am Leben (DTOs, Entitäten, Persistenzkontexte). In einem Kundenabzug waren von 7,56 Mio. Finalizer-Einträgen 7,51 Mio. solche Listen. Die Listener, die der Finalizer abmelden sollte, werden bereits in &amp;lt;code&amp;gt;clear()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;remove()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;resolve()&amp;lt;/code&amp;gt; abgemeldet&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (2) – ein DTO hält für das spätere Nachladen einer Lazy-Referenz nicht mehr die abgelöste Entität fest, sondern nur noch deren Klasse und ID (neue Klasse &amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;org.eclipse.osbp.dsl.dto.lib&amp;lt;/code&amp;gt;). Die Entität hielt über ihre Lazy-Beziehungen den gesamten Persistenzkontext (&amp;lt;code&amp;gt;RepeatableWriteUnitOfWork&amp;lt;/code&amp;gt; samt aller darin geklonten Entitäten), obwohl &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; nur Klasse und ID benötigt. Gemessen an einer Kasse: rund 42 festgehaltene Persistenzkontexte je Verkauf vorher, praktisch keiner danach. Die ID wird erst am Ende des Mappings übernommen, weil der generierte Mapper &amp;lt;code&amp;gt;initialize(entity)&amp;lt;/code&amp;gt; vor &amp;lt;code&amp;gt;setId&amp;lt;/code&amp;gt; aufruft und eine neue Entität bis dahin die zufällige ID ihres Konstruktors trägt; liefert die Datenbank die ID erst später, bleibt es beim bisherigen Verhalten. '''Der Generator (&amp;lt;code&amp;gt;DtoTypesBuilder&amp;lt;/code&amp;gt;) erzeugt den neuen Aufruf; wirksam wird die Änderung erst mit neu generierten DTOs.''' Nicht neu generierte DTOs laufen unverändert weiter; neu generierte DTOs setzen ein &amp;lt;code&amp;gt;dto.lib&amp;lt;/code&amp;gt; ab dem 07.10.2026 voraus&lt;br /&gt;
*** &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; meldet nun, welche Zeile er nicht nachladen konnte. Liefert &amp;lt;code&amp;gt;em.find&amp;lt;/code&amp;gt; kein Ergebnis, wird ein Fehler mit Entitätsklasse, ID, Eigenschaft und DTO-Klasse protokolliert und eine &amp;lt;code&amp;gt;IllegalStateException&amp;lt;/code&amp;gt; geworfen. Bisher erschien an dieser Stelle nur eine &amp;lt;code&amp;gt;NullPointerException&amp;lt;/code&amp;gt; ohne Hinweis auf die Ursache&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;AbstractDTOService.closeEntityManager()&amp;lt;/code&amp;gt; fordert eine offene Transaktion nicht mehr nach jedem Lesezugriff zur Freigabe auf. Das Verhalten ist unverändert, die Warnung &amp;lt;code&amp;gt;dispose() refused&amp;lt;/code&amp;gt; erscheint aber nur noch, wenn tatsächlich jemand eine offene Transaktion abbauen will (zuvor rund zwei Meldungen je Verkauf und etwa 175 je Kassenabschluss)&lt;br /&gt;
*** Fix: Mit &amp;lt;code&amp;gt;-DsendTransactionEventAsync=true&amp;lt;/code&amp;gt; wartete &amp;lt;code&amp;gt;TransactionHandler.dispose()&amp;lt;/code&amp;gt; nach jedem Commit mindestens 800 ms, zuzüglich weiterer 800 ms je Durchlauf mit nicht leerer Ereigniswarteschlange – während &amp;lt;code&amp;gt;SessionManager&amp;lt;/code&amp;gt; die Sperre aller Transaktions-Handler hielt. An einer Kasse waren das mehrere Sekunden je Bon. &amp;lt;code&amp;gt;dispose()&amp;lt;/code&amp;gt; übergibt den Entity Manager nun dem Ereignis-Thread und kehrt sofort zurück; der Thread schließt ihn als letzten Schritt, sobald seine Warteschlange leer ist. Ein Ereignis, das sich nicht versenden lässt, beendet den Thread nicht mehr. Ohne den Schalter ändert sich nicht*s&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;MetadataBuilder&amp;lt;/code&amp;gt; macht beim ersten Scan zunächst alle gestarteten Bundles mit dem Header &amp;lt;code&amp;gt;OSBP-RuntimeBuilder-BundleSpace&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;Factory-Model&amp;lt;/code&amp;gt; im Bundle-Space bekannt und sucht erst danach nach Modellen. Bisher wurde ein Bundle erst beim Erreichen aufgenommen, während ein Participant ein Modell sofort laden kann: Ein ECView aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration&amp;lt;/code&amp;gt; nennt ein DTO aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration.base&amp;lt;/code&amp;gt; mit der höheren Bundle-ID, die Klasse wurde also je nach Reihenfolge beim Start nicht gefunden. In diesem Fall scheiterte &amp;lt;code&amp;gt;activate()&amp;lt;/code&amp;gt;, der DSL-Metadatendienst und damit der Persistenzdienst starteten nie, und die Anwendung blieb auf der Startseite stehen. Eine fehlgeschlagene Aktivierung wird nun zusätzlich als Fehler in das Anwendungslog geschrieben&lt;br /&gt;
** Fix: org.eclipse.osbp.dsl, org.eclipse.osbp.runtime: Vier Fehler in der sitzungsbezogenen Transaktionsverwaltung behoben. (a) &amp;lt;code&amp;gt;SessionManager.removeSession()&amp;lt;/code&amp;gt; gab den Transaktions-Handler unter einem Schlüssel frei, der nie passen konnte (&amp;lt;code&amp;gt;ISession&amp;lt;/code&amp;gt; hat kein &amp;lt;code&amp;gt;toString()&amp;lt;/code&amp;gt;), das Sicherheitsnetz griff also nie. (b) &amp;lt;code&amp;gt;disposeTransactionHandler&amp;lt;/code&amp;gt; entfernte den Eintrag auch dann, wenn die Transaktion noch offen war – der Entity Manager wurde aufgegeben und der Thread, der die Transaktion noch abschließen musste, fand seinen Handler nicht mehr. &amp;lt;code&amp;gt;ITransactionHandler&amp;lt;/code&amp;gt; erhält dafür &amp;lt;code&amp;gt;isDisposable()&amp;lt;/code&amp;gt; als Default-Methode. (c) Die Freigabe nach &amp;lt;code&amp;gt;transactionBegin&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Rollback&amp;lt;/code&amp;gt; steht nun in einem &amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt;; ein &amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt;, insbesondere ein &amp;lt;code&amp;gt;OutOfMemoryError&amp;lt;/code&amp;gt;, ließ den Handler bisher mit Entity Manager in einer statischen Map zurück. (d) &amp;lt;code&amp;gt;txnIsOpen&amp;lt;/code&amp;gt; wird auch bei einem fehlgeschlagenen Commit oder Rollback zurückgesetzt&lt;br /&gt;
** org.eclipse.osbp.persistence: &lt;br /&gt;
*** Der Startstatus nennt nun den Dienst, auf den der Persistenzdienst noch wartet. Die neue Komponente &amp;lt;code&amp;gt;PersistenceStartupStatus&amp;lt;/code&amp;gt; hat keine Pflichtreferenz, ist daher von Beginn an aktiv und setzt den Status auf „persistence service is waiting for the DSL metadata service“ (bzw. „the Mondrian manager“), bis diese gebunden sind. Bisher blieb es unabhängig vom Grund bei „persistenceservice not started yet“, und die wartenden Dienste protokollierten nichts&lt;br /&gt;
*** Beim Einrichten einer Persistence Unit wird jede verwaltete Klasse gemeldet, die nicht statisch gewebt ist, obwohl eine ihrer Oberklassen es ist – in einer ERROR-Zeile mit dem Hinweis, das Projekt vollständig neu zu bauen. Eine solche Klasse wird von EclipseLink instanziiert, aber nie befüllt: Der Dialog bleibt leer, und die nächste Aktualisierung scheitert mit „mapped to a primary key column ... Updates are not allowed“&lt;br /&gt;
** org.eclipse.osbp.ecview.extension: Fix: Das Grid vergisst die Zeilenschlüssel von Einträgen, die den Container als Ganzes verlassen haben. Vaadin gibt die Schlüssel nur über das clientseitige &amp;lt;code&amp;gt;dropRows&amp;lt;/code&amp;gt; frei; nach einem allgemeinen &amp;lt;code&amp;gt;ItemSetChange&amp;lt;/code&amp;gt;, wie ihn &amp;lt;code&amp;gt;removeAllItems()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;addAll()&amp;lt;/code&amp;gt; auslösen, blieben sie im &amp;lt;code&amp;gt;KeyMapper&amp;lt;/code&amp;gt; stehen und hielten jede jemals angezeigte Zeile samt ihrem DTO-Graphen. &amp;lt;code&amp;gt;GridPresentation.CustomGrid&amp;lt;/code&amp;gt; merkt sich die vergebenen Schlüssel und entfernt die nicht mehr enthaltenen&lt;br /&gt;
** org.osbee.datainterchange: Fix: FreeMarkers gemeinsam genutzte &amp;lt;code&amp;gt;InvalidReferenceException&amp;lt;/code&amp;gt; hält nicht mehr den ersten Exportlauf fest. Die statische Instanz übernahm die zum Zeitpunkt ihres Entstehens aktive Umgebung und damit das gesamte Datenmodell des ersten Exports für die Lebensdauer des Prozesses. Der Activator lädt die Klasse nun einmal außerhalb eines Template-Laufs&lt;br /&gt;
** org.eclipse.osbp.display: Fix: Das Display-Servlet wird nicht mehr auf dem Thread registriert, der die Bundles startet. Die Registrierung veröffentlicht einen Dienst, und Declarative Services verarbeitet dieses Ereignis auf dem veröffentlichenden Thread; dort wartete der Start aller nachfolgenden Bundles, in einem Fall über 50 Sekunden („Getting a lock required more than 50000 ms“). Die Registrierung läuft nun auf einem eigenen Thread&lt;br /&gt;
** org.eclipse.osbp.runtime, org.eclipse.osbp.blob, org.eclipse.osbp.autowireHelper, org.eclipse.osbp.ecview.extension, org.eclipse.osbp.ecview.addons, org.eclipse.osbp.infogrid.model: Neue Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; für String-Attribute. Ein Attribut mit &amp;lt;code&amp;gt;key=&amp;quot;barcode&amp;quot; value=&amp;quot;QRCode-128&amp;quot;&amp;lt;/code&amp;gt; wird schreibgeschützt als Barcode-Bild angezeigt, das aus seinem Klartextwert erzeugt wird – im Dialog über &amp;lt;code&amp;gt;BlobComponent&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;BlobUploadComponent&amp;lt;/code&amp;gt; (letztere dann ohne Schaltflächen) und in Grid-Spalten über den Blob-Bildkonverter&lt;br /&gt;
** org.eclipse.osbp.authentication, org.eclipse.osbp.system.configuration, org.eclipse.osbp.blob: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** org.eclipse.osbp.xtext.table, org.eclipse.osbp.xtext.table.common: Für Attribute mit der Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; wird ein Barcode-Lookup generiert; eine String-Zelle wird als Barcode-Bild angezeigt, wenn das Lookup einen Barcode-Typ trägt&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** net.osbee.pos.tse: Aufrufer können die BSI-Zertifizierungs-ID der TSE abfragen. Die SE-API bietet &amp;lt;code&amp;gt;getCertificationId&amp;lt;/code&amp;gt; in beiden API-Versionen, keiner der beiden Adapter reichte den Aufruf bisher durch&lt;br /&gt;
** net.osbee.pos.tse, net.osbee.pos.rksv: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Einführung der http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/restartService Seite. Damit können entweder Sessions gekillt oder der Service der Anwendung neu gestartet werden.&lt;br /&gt;
** Bei Nichterreichbarkeit der Datenbank wird die Anwendung beendet und der Fehlerstatus auf der Statusseite angezeigt.&lt;br /&gt;
** Das eingebettete &amp;lt;code&amp;gt;shiro-all-1.2.3.jar&amp;lt;/code&amp;gt; wurde durch &amp;lt;code&amp;gt;shiro-core&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; in Version 1.13.0 ersetzt. Damit sind CVE-2016-4437 (Remote Code Execution über das RememberMe-Cookie mit festem Schlüssel) und CVE-2019-12422 geschlossen. &amp;lt;code&amp;gt;encoder-1.2.3.jar&amp;lt;/code&amp;gt; kommt hinzu, weil &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; 1.13 &amp;lt;code&amp;gt;org.owasp.encoder&amp;lt;/code&amp;gt; zwingend importiert.&lt;br /&gt;
** Anmeldung: &lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm&amp;lt;/code&amp;gt; löst den Anmeldenamen vor jeder Abfrage in einen Distinguished Name auf. Active Directory akzeptiert für den Bind auch einen User Principal Name, beantwortet Abfragen damit aber mit LDAP-Fehler 34 (&amp;lt;code&amp;gt;invalidDNSyntax&amp;lt;/code&amp;gt;), sodass ein &amp;lt;code&amp;gt;userDnTemplate&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt; zwar anmeldete, dann aber an den Attributen scheiterte. &amp;lt;code&amp;gt;resolveUserDn&amp;lt;/code&amp;gt; sucht nun über &amp;lt;code&amp;gt;userPrincipalName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sAMAccountName&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;mail&amp;lt;/code&amp;gt;; die Suchbasis stammt aus dem RootDSE. Bestehende Vorlagen der Form &amp;lt;code&amp;gt;cn={0},ou=...&amp;lt;/code&amp;gt; verhalten sich unverändert. Zugleich behoben: eine &amp;lt;code&amp;gt;StringIndexOutOfBoundsException&amp;lt;/code&amp;gt; im E-Mail-Zweig und das Einsetzen des Benutzernamens in den Suchfilter per Verkettung (jetzt als &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt;, von JNDI maskiert)&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm.getUserDn&amp;lt;/code&amp;gt; maskierte nur das Komma. &amp;lt;code&amp;gt;escapeDnValue&amp;lt;/code&amp;gt; deckt nun alle Zeichen nach RFC 4514 Abschnitt 2.4 ab, sodass ein Benutzername die Bedeutung des DN nicht mehr verändern kann&lt;br /&gt;
*** Die Funktionalität „Angemeldet bleiben“ arbeitet nun mit einem signierten Token statt mit verschlüsselten Zugangsdaten. Das Cookie ist eine mit HMAC-SHA256 signierte Aussage über Benutzer, Mandant, Geltungsbereich, Ablaufdatum und Version und enthält keine Zugangsdaten. Es ist zustandslos, sodass beliebig viele Geräte und Browser gleichzeitig eines halten können.&lt;br /&gt;
*** Das „Angemeldet bleiben“-Cookie gilt je Anwendungsinstanz und Browser. Der Cookie-Name trägt einen Kurzhash über Schema, Host, Port, erstes Pfadsegment und Portal-ID, sodass zwei Anwendungen auf demselben Host nicht mehr das Cookie der jeweils anderen lesen. Die selbstgebaute Verschlüsselung entfällt vollständig. Das Cookie wird mit expliziter Lebensdauer, &amp;lt;code&amp;gt;SameSite=Lax&amp;lt;/code&amp;gt; und unter https mit &amp;lt;code&amp;gt;Secure&amp;lt;/code&amp;gt; geschrieben. Die Anmeldung aus einem Cookie wartet fünf Sekunden mit einem Hinweis auf der Anmeldemaske und lässt sich in dieser Zeit abbrechen; ein entferntes Häkchen löscht das Cookie nun in jedem Fall. Die Betrugsmeldung samt Kontosperre bei nicht passendem Cookie entfällt&lt;br /&gt;
*** Fix: Kennwörter erscheinen nicht mehr im Log – weder bei der Anmeldung in &amp;lt;code&amp;gt;AuthenticationProvider.check()&amp;lt;/code&amp;gt; (bisher im Klartext auf DEBUG) noch beim Zurücksetzen, wo der Nachrichtentext mit dem neuen Kennwort dreimal geschrieben wurde&lt;br /&gt;
*** Die Anzeige des neuen Kennworts auf der Anmeldemaske, wenn keine E-Mail versendet werden kann, ist nun eine konfigurierte Betriebsart: &amp;lt;code&amp;gt;Userinterface/showResetPasswordOnScreen&amp;lt;/code&amp;gt;, standardmäßig aus, mit Protokollierung auf WARN. '''Installationen ohne Mailserver müssen den Parameter einmalig setzen'''&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;doResetPassword&amp;lt;/code&amp;gt; hebt weder eine Sperre noch die Deaktivierung eines Kontos auf und setzt den Fehlversuchszähler nicht mehr zurück. Das Zurücksetzen kann jeder auslösen, der einen Benutzernamen eingibt; aufgehoben werden Sperre und Deaktivierung nur noch durch einen Administrator über &amp;lt;code&amp;gt;doUnlock&amp;lt;/code&amp;gt;&lt;br /&gt;
** System Configuration: &lt;br /&gt;
*** Parameter &amp;lt;code&amp;gt;RememberMeSecret&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;IConfigurationService&amp;lt;/code&amp;gt; ergänzt (&amp;lt;code&amp;gt;GLOBAL_PARAMETERS/RememberMeSecret&amp;lt;/code&amp;gt;). Der Schlüssel wird je Installation bei der ersten Benutzung der &amp;quot;RememberMe&amp;quot; Funktionalität einmal aus gezogen und von allen Anmeldungen geteilt; das Löschen des Eintrags macht alle „Angemeldet bleiben“-Cookies auf einmal ungültig.&lt;br /&gt;
*** Fix: Die Einstellungen füllten sich mit Platzhaltern „not set“. &amp;lt;code&amp;gt;ConfigurationService.getConfigurationString&amp;lt;/code&amp;gt; speicherte bei leerem Vorgabewert den Platzhalter und lieferte ihn als leere Zeichenkette zurück, sodass &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; stets eine weitere Zeile anhängte. &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; entfernt nun die Platzhalterzeilen des Schlüssels vor dem Schreiben, und ein gespeicherter Platzhalter gilt als „kein Wert“. &amp;lt;code&amp;gt;deleteConfigurations&amp;lt;/code&amp;gt; setzt zusätzlich den Cache zurück; gelöschte Einträge kamen bisher beim nächsten Lesen wieder&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Fix: org.eclipse.osbp.dependencies-mbp: Das Bundle &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.bundle.activemq.all.osgi&amp;lt;/code&amp;gt; enthält kein Log4j und kein eingebettetes slf4j mehr. &amp;lt;code&amp;gt;activemq-all&amp;lt;/code&amp;gt; brachte eine vollständige Kopie von Apache Log4j 1.2.17 mit (359 Klassen, darunter &amp;lt;code&amp;gt;JDBCAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSSink&amp;lt;/code&amp;gt; und chainsaw – betroffen von CVE-2021-4104, CVE-2022-23302, CVE-2022-23305 und CVE-2022-23307) sowie slf4j-api 1.7.13 und &amp;lt;code&amp;gt;slf4j-log4j12&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;Include-Resource&amp;lt;/code&amp;gt; bindet das Hersteller-Jar nun ohne &amp;lt;code&amp;gt;org.apache.log4j&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org.slf4j&amp;lt;/code&amp;gt;, deren Maven-Koordinaten, die &amp;lt;code&amp;gt;log4j.properties&amp;lt;/code&amp;gt; und Springs &amp;lt;code&amp;gt;Log4jConfigurer&amp;lt;/code&amp;gt; ein. ActiveMQ bezieht slf4j stattdessen aus dem Produkt (&amp;lt;code&amp;gt;org.slf4j.api&amp;lt;/code&amp;gt; 1.7.36)&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neue Dienststeuerungsseite unter &amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;. &lt;br /&gt;
*** Ein Bediener kann darüber – autorisiert durch eine reguläre Anwendungsanmeldung – hängende Sitzungen beenden oder den Dienst neu starten, ohne Zugriff auf den Serverrechner zu benötigen. Drei Stufen: Sitzungen des aufrufenden Arbeitsplatzes, alle Sitzungen, Neustart. Die Seite ist am Root-HTTP-Service registriert und bleibt damit erreichbar, wenn der Anwendungskontext selbst gestört ist; Markup, Stil, Skript und Texte (deutsch, englisch, französisch) sind deshalb in der Seite enthalten. Sitzungen werden über das Invalidieren der HTTP-Sitzung beendet. Der Neustart läuft über die Befehlswarteschlange der Anwendung; die Seite fragt anschließend die Anwendung ab und führt den Bediener über die Unterbrechung hinweg&lt;br /&gt;
*** Alle Aktionen der Dienststeuerungsseite werden im &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; unter denselben Koordinaten wie die Anmeldemaske protokolliert (fehlgeschlagene Anmeldung und Neustart als WARNING, gesperrtes Konto als ERROR, beendete Sitzungen als INFO). Eine abgelehnte Anmeldung sperrt das Formular für die Dauer der Wartezeit mit Countdown; der Zähler ist derselbe wie an der Anmeldemaske, sodass sich Fehlversuche auf beiden Wegen zur Kontosperre summieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260907 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Überarbeitung der Codebasis zur Entfernung veralteter und nicht benötigter Bundles&lt;br /&gt;
** Überarbeitung des Loginvorgangs / der Cookiespeicherung bei &amp;quot;remember me&amp;quot;. Es werden keine kritischen Daten mehr im Cookie gespeichert.&lt;br /&gt;
** Verbesserung der Übersetzungen&lt;br /&gt;
** Anpassungen für frz. Fiskalanforderungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Laden der Übersetzungen in die interne Tabelle beim Systemstart deutlich beschleunigt. Dadurch verbessertes Startverhalten der Anwendungen.&lt;br /&gt;
** Verbesserungen bei der frz. Tastaturunterstützung&lt;br /&gt;
** Verbesserungen der Übersetzungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260618 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Blockieren durch das Laden von Diensten während des Starts vermieden, dadurch schnellerer Anwendungsstart. Anderes Verhalten beim Start an der Benutzeroberfläche.&lt;br /&gt;
** Französische Tastaturunterstützung (AZERTY) im Keymapper der Statemachine ergänzt&lt;br /&gt;
** Login bezieht Build-Version und Hersteller nun aus den &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; (einheitliche Quelle)&lt;br /&gt;
** Neue gemeinsame Hilfsmethoden &amp;lt;code&amp;gt;getBuildVersion()&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;getVendor()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; zur Ermittlung der Build-Identität&lt;br /&gt;
** &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; setzt die Zeitstempel von &amp;lt;code&amp;gt;lastError&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;lastWarning&amp;lt;/code&amp;gt; nicht mehr zurück&lt;br /&gt;
** Fix: NPE in &amp;lt;code&amp;gt;org.eclipse.osbp.xtext.dialog.AutowireUiFactory&amp;lt;/code&amp;gt; behoben&lt;br /&gt;
** Version von 5.2.0 auf 5.3.0 angehoben&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-reverify&amp;lt;/code&amp;gt; (16px/32px) für die NF525-Schaltfläche zur erneuten Archivintegritätsprüfung&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-refresh.png&amp;lt;/code&amp;gt; ergänzt&lt;br /&gt;
** Grid – horizontale Bildlaufleiste wiederhergestellt&lt;br /&gt;
** Grid - Flex-Layout für Kassen-/POS-Grids wiederhergestellt (kollabierte Spalten behoben)&lt;br /&gt;
** französische Übersetzungen überarbeitet&lt;br /&gt;
&lt;br /&gt;
* Grammatiken/Generierung:&lt;br /&gt;
** org.eclipse.osbp.dsl: Benutzerdefinierte &amp;lt;code&amp;gt;@PreRemove&amp;lt;/code&amp;gt;-Hooks werden in der generierten &amp;lt;code&amp;gt;preRemove()&amp;lt;/code&amp;gt;-Methode zusammengeführt&lt;br /&gt;
** org.eclipse.osbp.xtext.i18n: i18n-Generator erzeugt nun das byte-genaue Eclipse-Babel-Format&lt;br /&gt;
&lt;br /&gt;
* POS Framework für franz. Fiskalanforderungen eingeführt&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260410 ==&lt;br /&gt;
&lt;br /&gt;
* POS Framework: &lt;br /&gt;
** Performanceverbesserung beim Kassieren&lt;br /&gt;
** Multi-Protokoll Unterstützung für Paymentterminal &lt;br /&gt;
*** frz. Protokolle &amp;quot;Concert&amp;quot;, &amp;quot;Protocol E&amp;quot;&lt;br /&gt;
*** &amp;quot;Mock&amp;quot; für Tests&lt;br /&gt;
*** Statemachine DSL erweitert: protocol Parameter für Paymentterminal&lt;br /&gt;
*** &amp;quot;Shared Payment Terminal&amp;quot;&lt;br /&gt;
**** locking im PaymentTerminalService implementiert&lt;br /&gt;
**** pro Terminal über ConfigService einstellbar&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260402 ==&lt;br /&gt;
&lt;br /&gt;
Die Version verbessert das Startverhalten einer Anwendung und bringt mehr Informationen über den Status des Starts auf den Bildschirm&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Anzeige des Persistenzservice-Status auf dem Login-Bildschirm&lt;br /&gt;
** Information über den Persistenzservice auf der Fehlerseite hinzugefügt&lt;br /&gt;
** Beim Start wird nun überall auf den Persistenzservice statt nur auf den ConfigurationService gewartet&lt;br /&gt;
&lt;br /&gt;
* BPM:&lt;br /&gt;
** Fix: net.osbee.bpm: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** Fix: net.osbee.pos.epay: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260305 ==&lt;br /&gt;
&lt;br /&gt;
=== Report Anzeige ===&lt;br /&gt;
&lt;br /&gt;
Diese Version konzentriert sich auf '''Stabilitätsverbesserungen''' für das Report-Rendering-System, insbesondere auf die Behebung von Race Conditions und Anzeigeproblemen, die bei schnellen Benutzerinteraktionen auftraten.&lt;br /&gt;
&lt;br /&gt;
* Race Condition beim Report-Rendering&lt;br /&gt;
** '''Behoben: Schnelles Auswählen/Abwählen führte dazu, dass Reports mit ungültigen oder fehlenden Filtern gerendert wurden'''&lt;br /&gt;
*** Reports verarbeiten nun korrekt wenn Benutzer schnell Elemente auswählen und wieder abwählen&lt;br /&gt;
*** Filteränderungen werden blockiert, während ein Render-Vorgang läuft&lt;br /&gt;
*** Ausstehende Filteränderungen werden nachverfolgt und nach Abschluss des Renderings erneut ausgewertet&lt;br /&gt;
*** Reports mit &amp;lt;code&amp;gt;selectById&amp;lt;/code&amp;gt; werden nun korrekt ausgeblendet, wenn nichts ausgewählt ist&lt;br /&gt;
&lt;br /&gt;
* PDF-Anzeigeskalierungsproblem &lt;br /&gt;
** '''Behoben: PDF-Skalierungsprobleme durch Neuerstellung des BrowserFrames bei jedem Rendering'''&lt;br /&gt;
&lt;br /&gt;
=== Anmeldebildschirm ===&lt;br /&gt;
&lt;br /&gt;
Der Anmeldebildschirm zeigt nun während der Initialisierung des Persistence-Services einen Statustext an.&lt;br /&gt;
&lt;br /&gt;
* Lauftext-Anzeige (Marquee) mit dem aktuellen Status des Persistence-Services&lt;br /&gt;
* Deaktivierung aller Anmeldesteuerelemente während der Wartezeit&lt;br /&gt;
&lt;br /&gt;
=== Start der Anwendung ===&lt;br /&gt;
&lt;br /&gt;
* Blockierungen der Initialisierungsvorgänge durch Warten auf Serviceregistrierung während des Anwendungsstarts reduziert. &amp;lt;br&amp;gt;Dadurch verändert sich das Startverhalten, insbesondere die Reihenfolge der Anwendung. Insgesamt schnelleres Laden der Bundles.&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4628</id>
		<title>Releasenotes 2026 OS.pos</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4628"/>
				<updated>2026-11-04T10:47:29Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Version 4.5.7-V20261103 (OS) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20261103 (OS) ==&lt;br /&gt;
&lt;br /&gt;
Schwerpunkt dieses Zeitraums ist das '''Speicherwachstum des Kassendienstes''' über einen Verkaufstag: Ursachen gefunden, behoben und an einer Kasse nachgemessen.&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261104|Softwarefactory 20261104]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261012 ==&lt;br /&gt;
&lt;br /&gt;
Schwerpunkt dieses Zeitraums ist das '''Speicherwachstum des Kassendienstes''' über einen Verkaufstag: Ursachen gefunden, behoben und an einer Kasse nachgemessen. Daneben wurde die Verfügbarkeitsprüfung der Webservices auf eine Implementierung zusammengeführt und ein Datumsfehler darin behoben.&lt;br /&gt;
&lt;br /&gt;
=== Neue Funktionen ===&lt;br /&gt;
* '''NF 525 – Neustart durch den Bediener im Ereignisjournal:''' Ein über die Dienststeuerungsseite (&amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;) ausgelöster Neustart wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben, mit dem auslösenden Bediener. Bisher zeigte das Journal nur „System gestoppt“ und „System gestartet“, nicht aber, wer den Neustart veranlasst hat.&lt;br /&gt;
&lt;br /&gt;
=== Fehlerbehebungen ===&lt;br /&gt;
* '''Speicherwachstum je Verkauf:''' Die DTOs von &amp;lt;code&amp;gt;net.osbee.app.pos.common&amp;lt;/code&amp;gt; wurden neu generiert und halten nur noch Klasse und ID ihrer Entität statt der Entität selbst. Zusammen mit den Korrekturen im Framework (siehe Releasenotes der Softwarefactory, Version 5.3.0.20261012) hält eine Kasse je Verkauf praktisch keinen Persistenzkontext mehr fest; vorher waren es rund 42 je Verkauf, etwa 1 MB.&lt;br /&gt;
* '''Kassenabschluss gibt seine Daten wieder frei:''' Nach dem Speichern eines Kassenabschlusses werden die dafür im Zustandsautomaten abgelegten Daten entfernt. Sie hielten über ihre Mapping-Kontexte alle Bons und Zahlungen der abgeschlossenen Periode bis zum nächsten Abschluss fest.&lt;br /&gt;
* '''NF 525 – Ereignisjournal:''' Beim Anhängen eines Eintrags wird nicht mehr das gesamte Journal gelesen, um dessen letzten Eintrag zu finden. Der Aufwand je Eintrag wuchs bisher mit der Länge des Journals.&lt;br /&gt;
* '''Webservice-Verfügbarkeitsprüfung über Mitternacht:''' Ein als nicht erreichbar vermerkter Webservice wurde nach Mitternacht zu spät oder gar nicht mehr erneut geprüft, weil der Zeitstempel als Millisekunden des Tages abgelegt war. Ein Ausfall um 20:00 Uhr hielt den Webservice bis 21:00 Uhr des Folgetags abgeschaltet, ein Ausfall ab 23:00 Uhr dauerhaft. Der Zeitstempel ist nun fortlaufend.&lt;br /&gt;
&lt;br /&gt;
=== Aktualisierungen ===&lt;br /&gt;
* '''Webservice-Verfügbarkeitsprüfung zusammengeführt:''' Die Prüfung existierte viermal (zweimal in &amp;lt;code&amp;gt;net.osbee.app.pos.common&amp;lt;/code&amp;gt;, zweimal in &amp;lt;code&amp;gt;net.osbee.sample.pos&amp;lt;/code&amp;gt;). Einzige Implementierung ist nun &amp;lt;code&amp;gt;WebService.check(sm, ws)&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;posbase&amp;lt;/code&amp;gt;; die übrigen delegieren dorthin. Der Zustand wird je Webservice in &amp;lt;code&amp;gt;ws.accesible&amp;lt;/code&amp;gt; geführt, der gemeinsame Speicherschlüssel entfällt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261012|Softwarefactory 20261012]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261006 ==&lt;br /&gt;
&lt;br /&gt;
* Ergänzung bei Kundenkartenverarbeitung&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260907 ==&lt;br /&gt;
&lt;br /&gt;
* Schwerpunkt dieses Zeitraums ist die französische Fiskalkonformität '''NF 525''' (WORM-Sicherungseinrichtung, Write-once-Nachweis, Geräte-Lebenszyklus) sowie die Auslagerung des '''DSFinV-K'''-Datenmodells. &lt;br /&gt;
&lt;br /&gt;
=== Änderungen / Neue Funktionen ===&lt;br /&gt;
&lt;br /&gt;
* '''Ausgeschlossene Zahlarten:''' Die Perspektive für ausgeschlossene Zahlungsarten wurde zur Kundenpflege verschoben.&lt;br /&gt;
* '''Benutzerverwaltung:''' Die automatische Synchronisierung der einzelnen views in der Benutzerverwaltungsperspektive wurde abgeschaltet.&lt;br /&gt;
* '''Authentifizierung:''' Die Authentifizierungs-Logger wurden zusammengefasst und schreiben wieder in eine Datei.&lt;br /&gt;
* '''remember me Anmeldefunktion:''' überarbeitet, Cookieverwendung sicherer gemacht.&lt;br /&gt;
* '''Kennwort vergessen?:''' Zurücksetzen des Kennworts löst eine Benutzersperre nicht mehr automatisch auf. Dies muss aktiv durch den Administrator geschehen.&lt;br /&gt;
* '''showResetPasswordOnScreen:''' neuer Konfigurationsschlüssel. Default: false. Bei true wird das neue Passwort im Log angezeigt, falls lein Mailserver kongiguriert ist.&lt;br /&gt;
&lt;br /&gt;
* '''NF 525 – WORM Write-once-Nachweis:''' Ein zertifiziertes WORM-Gerät darf Fiskalverkäufe erst nach einem signierten &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;-Verdikt tragen. Ein asynchroner Probe-Lauf weist die Write-once-Eigenschaft nach (das Medium nimmt eine Teständerung zurück); der Verdikt wird signiert und ist „sticky&amp;quot;. ''(cache-defeat probe, verbreiterte Signaturspalte)''&lt;br /&gt;
* '''NF 525 – Zertifizierungs-Gate:''' Auf einem zertifizierten Gerät führen Struktur-/Integritätsfehler zu einem harten Verkaufsstopp (STOP_SALES); auf einem nicht-zertifizierten Gerät wird die Anomalie nur als Warnung protokolliert (warn-only) und dem Kassierer als Hinweis am Verkauf angezeigt.&lt;br /&gt;
* '''NF 525 – Reaktivierung der Write-once-Bestätigung:''' Der zuvor pausierte Bestätigungs-Block wurde wieder aktiviert; der Scheduler führt ein zertifiziertes Gerät nun wieder von &amp;lt;code&amp;gt;PENDING&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''NF 525 – Schutz gegen Zertifizierungs-Downgrade:''' Eine bereits fiskalisch aktive, zertifizierte Kasse kann nicht mehr auf ein nicht-zertifiziertes oder entferntes Sicherungsgerät umgestellt werden (Geräte-Tausch), und ein zertifiziertes Gerät kann nicht mehr in-place ent-zertifiziert werden. Beide Wege werden abgewiesen (Umgehung der zertifizierten Durchsetzung verhindert).&lt;br /&gt;
* '''NF 525 – Auditierung von Geräte-Konfigurationsänderungen:''' Eine Änderung an der zertifizierungsrelevanten WORM-Konfiguration wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben.&lt;br /&gt;
* '''NF 525 – Retention/Archivierung beim Geräte-Tausch:''' Perioden ohne Fiskaldatensätze werden nicht mehr als leeres ZIP archiviert, sondern als schlanker „abgedeckt&amp;quot;-Marker vermerkt (kein Medium-Scan) – die „Gespeichert&amp;quot;-Rückmeldung nach einem Geräte-Tausch kommt dadurch deutlich schneller. Zum Abschluss wird eine Zusammenfassung protokolliert.&lt;br /&gt;
* '''NF 525 – Write-once-Probe:''' Die Anwesenheit der Probe-Datei wird nun über eine frische Verzeichnis-Enumeration gelesen (behebt eine Fehlerkennung durch veraltete Verzeichnis-Zwischenstände).&lt;br /&gt;
* '''Internationalisierung:''' Neue NF-525-WORM-Schlüssel (Write-once, worm_protection, warn-only) in das zentrale Übersetzungsbündel gespiegelt; allgemeine Vokabular-Erweiterungen.&lt;br /&gt;
* '''Rechnungsdruck (Invoice2p):''' NF-525-Daten in der Rechnungsvorlage berücksichtigt.&lt;br /&gt;
* '''Bondruck:''' NF-525-Daten ergänzt&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260907|Softwarefactory 5.2.0.20260907]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260707 ==&lt;br /&gt;
&lt;br /&gt;
Diese Ausgabe bringt vor allem die Unterstützung französischer Kassen voran: eine&lt;br /&gt;
vollständige AZERTY-Tastaturunterstützung (physisch und als Bildschirmtastatur), das&lt;br /&gt;
französische Zahlungsterminal-Protokoll CAISSE-AP inklusive Simulator sowie virtuelle&lt;br /&gt;
Peripheriegeräte für Test und Diagnose. Ergänzt wird dies durch NF525-Härtungen,&lt;br /&gt;
Fehlerbehebungen bei Kartenzahlungen und eine durchgängige Vereinheitlichung der&lt;br /&gt;
Übersetzungsdateien.&lt;br /&gt;
&lt;br /&gt;
* Die '''physische französische AZERTY-Tastatur''' wird nun vollständig unterstützt. Der komplette Zeichensatz wurde auf realer Hardware getestet; die zuvor fehlende '''ù-Taste''' wurde ergänzt.&lt;br /&gt;
* Die '''Bildschirmtastatur''' (On-Screen-Keypad) &lt;br /&gt;
** bildet nun eine echte französische AZERTY-Belegung über alle drei Ebenen ab (Grundebene, Umschalt, AltGr) inklusive Akzentkomposition über die Tottasten ^ und ¨.&lt;br /&gt;
** folgt jetzt '''einheitlich der Oberflächensprache''': Französisch → AZERTY, Englisch → englische Belegung, alle übrigen Sprachen → deutsches QWERTZ. Die Belegung wird beim Öffnen des Dialogs in der aktiven Sprache neu aufgebaut.&lt;br /&gt;
* Neue Konfiguration '''Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry''' zur Auswahl der physischen Tastaturbelegung je Kasse.&lt;br /&gt;
&lt;br /&gt;
* '''CAISSE-AP – französisches Zahlungsterminal'''&lt;br /&gt;
** Unterstützung des '''Tagesabschlusses (télécollecte)''' für Concert/CAISSE-AP-Terminals; die obligatorischen Felder CB und CE werden nun sowohl in der Abschluss- als auch in der Abbruch-Anfrage übertragen.&lt;br /&gt;
&lt;br /&gt;
* NF525 / Fiskalkonformität&lt;br /&gt;
** Die '''Persistierung des Grand-Totals''' ist nun zwingende Vorbedingung für die Signatur eines Belegs – verhindert eine Signatur bei unvollständig gespeichertem Umsatzzähler. ''(net.osbee.app.pos.common d5a4578ec)''&lt;br /&gt;
&lt;br /&gt;
* Kartenzahlung&lt;br /&gt;
** Eine Kartenzahlung kann nun korrekt '''storniert''' werden: das Belegfeld (receipt) wird aus dem CJ-Feld der Concert-Antwort befüllt.&lt;br /&gt;
** Das '''Löschen einer nicht stornierbaren Terminal-Zahlung''' wird blockiert, um inkonsistente Zustände zu vermeiden. &lt;br /&gt;
** setPaymentTerminalReversal stürzt bei einer fehlerhaften Anfrage nicht mehr ab. &lt;br /&gt;
&lt;br /&gt;
* Oberfläche / Internationalisierung ===&lt;br /&gt;
** Die '''Laufzeit-Sprachumschaltung''' funktioniert nun in der Kassierperspektive&lt;br /&gt;
** Zentrale Übersetzungen aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Systemvoraussetzungen ===&lt;br /&gt;
** Für den französischen Markt: Zahlungsterminal mit CAISSE-AP-/Concert-Protokoll (CB-Port 8888, konfigurierbae), physische AZERTY-Tastatur optional&lt;br /&gt;
** Konfiguration je Kasse über Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry und Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardLayout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260707|Softwarefactory 5.2.0.20260707]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260618 ==&lt;br /&gt;
&lt;br /&gt;
* Version von 5.2 auf 5.3&lt;br /&gt;
* frz. Fiskalanforderungen: erste Implementierung&lt;br /&gt;
* frz. Übersetzungen aktualisiert&lt;br /&gt;
* Verwendung frz. Tastatur in Kassiersicht&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260618|Softwarefactory 5.3.0.20260618]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260410 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Fix Performanceproblem ( eingeführt mit 4.5.7-V20260402 (OS) ), dbcaching Einstellungen&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260410|Softwarefactory 5.2.0.20260410]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260402 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Automatischer Wechsel zum Status &amp;lt;code&amp;gt;PAYMENTTERMINAL_REPEATRECEIPT&amp;lt;/code&amp;gt; im Modus 'store' (statt 'print') bei leeren Bonzeilen&lt;br /&gt;
** Neue Funktion &amp;lt;code&amp;gt;attachRemarks&amp;lt;/code&amp;gt; zum Zeichnen von Bonbemerkungen und deren Verknüpfung mit dem Kassenbon&lt;br /&gt;
** Möglichkeit zur Eingabe von freien Bemerkungen zum Kassenbon&lt;br /&gt;
** Bonbemerkungen: &amp;lt;code&amp;gt;observeFocus&amp;lt;/code&amp;gt; von remark1/2 an Events gebunden&lt;br /&gt;
&lt;br /&gt;
* Kassenkonfiguration:&lt;br /&gt;
** Menüeintrag für Stammdaten der Bonbemerkungen hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Neue Entitäten für Bonbemerkungen (SlipRemarks)&lt;br /&gt;
** Neue Spalten &amp;lt;code&amp;gt;remark_1&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;remark_2&amp;lt;/code&amp;gt; für CashSlip-Entität&lt;br /&gt;
** Dialoge, Tabellen und Perspektive für Bonbemerkungen implementiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7.20260305 (OS) ==&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260305|Softwarefactory 5.2.0.20260305]]&lt;br /&gt;
&lt;br /&gt;
* Berichtanzeige&lt;br /&gt;
** Fix: Probleme bei der Berichtsanzeige mit schneller Klickfolge in Auswahltabelle behoben.&lt;br /&gt;
&lt;br /&gt;
* Kassenschluss:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;determineCloseExpectation&amp;lt;/code&amp;gt; - Sortierung von CashPaymentTermData nach traceNumber absteigend, um den letzten Eintrag zu erhalten&lt;br /&gt;
&lt;br /&gt;
* Kassenentsorgung:&lt;br /&gt;
** Neues Systemprodukt &amp;quot;fee&amp;quot; aktiviert&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Einige Entitäten auf &amp;lt;code&amp;gt;cacheable=false&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
** Entitäten mit escaped Spaltennamen aktualisiert&lt;br /&gt;
** Generierte Entitäten und DTOs aktualisiert&lt;br /&gt;
** Entitäten mit neuem Service Framework aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;canUnparkSelected&amp;lt;/code&amp;gt; - Ablehnung eines Slips mit Zahlungen an einer SiS-Kasse&lt;br /&gt;
** Fix: PRINT_SLIP - &amp;lt;code&amp;gt;onOK&amp;lt;/code&amp;gt; verlässt nicht, wenn Slip änderbar ist&lt;br /&gt;
** Neue Eingabeaktion für MODIFY_FLD, setzt &amp;lt;code&amp;gt;cashposiupdate&amp;lt;/code&amp;gt; auf ausgewählte Position&lt;br /&gt;
&lt;br /&gt;
* Archivierung:&lt;br /&gt;
** &amp;lt;code&amp;gt;archivDescription xml-os&amp;lt;/code&amp;gt; für XML-Format der Beschreibungsdatei für Archiv hinzugefügt&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4627</id>
		<title>Releasenotes 2026 OS.Softwarefactory</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4627"/>
				<updated>2026-11-04T10:46:39Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261104 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261029 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Fix: org.eclipse.osbp.persistence: Wartezeit beim Start („Getting a lock required more than 20000 ms“). Jede Persistence Unit las beim Anlegen ihren EclipseLink-Cachetyp und ihre Cachegröße (&amp;lt;code&amp;gt;EclipseLink/&amp;amp;lt;Unit&amp;amp;gt;#cacheTypeDefault&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#cacheSizeDefault&amp;lt;/code&amp;gt;) aus der Konfiguration. Das führte zu einer gegenseitigen Blockierung der Initialisierung. Die Werte werden nun einmal auf dem Start-Thread gelesen, damit tritt die Sperre nicht mehr auf.&lt;br /&gt;
** Neu: org.eclipse.osbp.persistence: Flyway findet Datenbankmigrationen, die Bundles mitbringen. Ein Bundle nennt seinen Migrationsordner im Manifest-Header &amp;lt;code&amp;gt;OSBP-Flyway-Migration: db/migration&amp;lt;/code&amp;gt; und legt die Skripte als &amp;lt;code&amp;gt;&amp;amp;lt;Persistence Unit&amp;amp;gt;/&amp;amp;lt;Hersteller&amp;amp;gt;/V&amp;amp;lt;Version&amp;amp;gt;__&amp;amp;lt;Beschreibung&amp;amp;gt;.sql&amp;lt;/code&amp;gt; ab, z.B. &amp;lt;code&amp;gt;monitoringData/mysql/V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;. Ein Skript läuft auf der Datenquelle, für die seine Persistence Unit konfiguriert ist, und zwar vor dem Anlegen und Erweitern der Tabellen durch EclipseLink. Der Herstellerordner wird aus den JDBC-Metadaten bestimmt: &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt; (auch für MariaDB), &amp;lt;code&amp;gt;postgresql&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oracle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sqlserver&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;derby&amp;lt;/code&amp;gt;. Die neue Klasse &amp;lt;code&amp;gt;BundleMigrations&amp;lt;/code&amp;gt; sammelt die Migrationsskripte und übergibt sie Flyway als Resource Provider; die Skripte im Dateisystemordner der Datenquelle (&amp;lt;code&amp;gt;-DFlyway.&amp;amp;lt;Datenquelle&amp;amp;gt;.DatabaseMigrationSourcePath&amp;lt;/code&amp;gt;) werden mitgelesen. '''Die Migrationen laufen nur mit &amp;lt;code&amp;gt;-DFlyway.active=true&amp;lt;/code&amp;gt;;'''&lt;br /&gt;
** org.eclipse.osbp.persistence: Jedes Bundle mit Migrationen hat eine eigene Historientabelle, &amp;lt;code&amp;gt;flyway_&amp;lt;/code&amp;gt; und der symbolische Name, gekürzt wie ein Logger Klassennamen kürzt (führende Segmente auf ihren Anfangsbuchstaben, bis höchstens 30 Zeichen erreicht sind): &amp;lt;code&amp;gt;org.eclipse.osbp.system.monitoring.base&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;flyway_oeos_monitoring_base&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;net.osbee.app.bdi.ex.model.entity&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;flyway_noa_bdi_ex_model_entity&amp;lt;/code&amp;gt;. Versionen müssen innerhalb eines Bundles eindeutig sein. Scheitern die Migrationen eines Bundles, wird das mit „the migrations of &amp;amp;lt;Bundle&amp;amp;gt; were NOT applied“ protokolliert, die übrigen Bundles laufen weiter. Ergäben zwei Bundles denselben gekürzten Namen, werden beide mit einem Fehler abgewiesen, statt sich eine Historie zu teilen. Die Skripte des Dateisystemordners behalten Flyways Standardtabelle &amp;lt;code&amp;gt;flyway_schema_history&amp;lt;/code&amp;gt;; eine Quelle ohne Skripte läuft gar nicht&lt;br /&gt;
** Fix: org.eclipse.osbp.persistence: Flyway lief bei jedem Start mit &amp;lt;code&amp;gt;baseline()&amp;lt;/code&amp;gt;. Sobald die Historie Einträge hatte, lehnte Flyway das mit einer Ausnahme ab, die verschluckt wurde – &amp;lt;code&amp;gt;migrate()&amp;lt;/code&amp;gt; lief danach nie. Eine bestehende Datenbank ohne Historie wird nun über &amp;lt;code&amp;gt;baselineOnMigrate&amp;lt;/code&amp;gt; einmalig mit Version 0 versehen. Ebenso entfällt &amp;lt;code&amp;gt;repair()&amp;lt;/code&amp;gt; bei jedem Start: Es schrieb die Historie auf ein nachträglich geändertes oder ersetztes Skript um, das dann nie lief; ein solches Skript scheitert nun an der Prüfsumme. Versionen dürfen außer der Reihe eintreffen (&amp;lt;code&amp;gt;outOfOrder&amp;lt;/code&amp;gt;), ein entferntes, bereits gelaufenes Skript ist kein Fehler mehr.&lt;br /&gt;
** Fix: org.eclipse.osbp.system.configuration (monitoring.base): Überwachungseinträge gingen auf älteren Datenbanken verloren. Datenbanken, die mit einem früheren Monitoring-Modell angelegt wurden, tragen noch eindeutige Indizes auf einem Namen allein (&amp;lt;code&amp;gt;MONITOR_SUB_CATEGORY.MSC_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_CATEGORY.MCA_NAME&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DK&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_MAIN_CATEGORY.MMCA_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_COMPONENT.MCO_NAME&amp;lt;/code&amp;gt;). Das Modell verlangt einen eindeutigen Namen nur unterhalb des jeweiligen Elternelements; die Schemagenerierung legt Indizes an, entfernt aber nie einen. Eine zweite Kategorie mit einer gleichnamigen Unterkategorie – etwa „COMPLETE“ unter &amp;lt;code&amp;gt;XRECHNUNG_UP&amp;lt;/code&amp;gt; und unter &amp;lt;code&amp;gt;ZUGFERD_UP&amp;lt;/code&amp;gt; – scheiterte daher an einem doppelten Schlüssel, &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; fing den Fehler ab, und der Eintrag fehlte (auf einer BDI-Installation über 1.000 solcher Fehler an einem Tag, dazu „transactionRollback - no transactionhandler found“). Ebenso konnten sich zwei Installationen mit gemeinsamer Datenbank nicht beide als Komponente „Application“ anmelden. Die erste Flyway-Migration des Bundles (&amp;lt;code&amp;gt;V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;, für MySQL/MariaDB, PostgreSQL und Oracle) entfernt diese Indizes; &amp;lt;code&amp;gt;MONITOR_COMPONENTI1&amp;lt;/code&amp;gt; legt die Schemagenerierung danach in der Form des Modells (&amp;lt;code&amp;gt;MCO_NAME, MCO_INSTALLATION&amp;lt;/code&amp;gt;) neu an. Da die Indizes nicht mehr im Modell stehen, hängen ihre Namen vom Generator ab, der die Datenbank angelegt hat; die Skripte finden sie daher an ihrer Struktur (eindeutig, kein Primärschlüssel, genau eine dieser Spalten). Auf einer neuen oder bereits bereinigten Datenbank ändern sie nichts.&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Hinweis für Produkte mit REST-Diensten über ECF: Das Bundle &amp;lt;code&amp;gt;org.eclipse.ecf.osgi.services.remoteserviceadmin.console&amp;lt;/code&amp;gt; (Konsolenbefehle &amp;lt;code&amp;gt;rsa …&amp;lt;/code&amp;gt;) sollte nicht automatisch starten. Seine Komponente &amp;lt;code&amp;gt;RSACommand&amp;lt;/code&amp;gt; benötigt den &amp;lt;code&amp;gt;RemoteServiceAdmin&amp;lt;/code&amp;gt;; während ECF diesen beim Export der Dienste erzeugt, blockieren sich ECF und DS gegenseitig, bis DS nach seiner Wartezeit (&amp;lt;code&amp;gt;-Dequinox.scr.waitTimeOnBlock&amp;lt;/code&amp;gt;, in BDI 20 s) abbricht. In BDI und im CX-Portal ist es auf &amp;lt;code&amp;gt;autoStart=&amp;quot;false&amp;quot;&amp;lt;/code&amp;gt; gesetzt; POS startet es nicht. Zusammen mit der Korrektur oben startet BDI in der IDE ohne Sperrmeldungen (67 s statt 74–101 s). Es verbleibt die Warnung „Enabling components of bundle org.eclipse.osbp.xtext.builder.metadata.services did not complete in 30000 ms“: Das ist das Laden der DSL-Modelle (rund 35 s) auf dem DS-Thread, keine Sperre&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Flyway Integration: org.eclipse.osbp.dependencies-mbp, org.eclipse.osbp.dependencies - Flyway 9 enthält die Unterstützung für MySQL und MariaDB nicht mehr im Kern, sondern im Modul &amp;lt;code&amp;gt;flyway-mysql&amp;lt;/code&amp;gt;, das sich über &amp;lt;code&amp;gt;META-INF/services&amp;lt;/code&amp;gt; registriert und von Flyway mit dessen eigenem Class Loader gesucht wird. Das Modul wird daher als Fragment &amp;lt;code&amp;gt;org.flywaydb.database.mysql&amp;lt;/code&amp;gt; 9.14.0.v20261028 an &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; ausgeliefert (das Manifest des Originals nennt sich selbst &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; und ist so nicht verwendbar) und mit dem Feature &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.feature.flyway&amp;lt;/code&amp;gt; verteilt.&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261012 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** org.eclipse.osbp.dsl (Entity,DTO):&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (1) – &amp;lt;code&amp;gt;AbstractOppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;MappingContext&amp;lt;/code&amp;gt; deklarieren kein &amp;lt;code&amp;gt;finalize()&amp;lt;/code&amp;gt; mehr. Jede &amp;lt;code&amp;gt;OppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OppositeContainmentDtoList&amp;lt;/code&amp;gt; war dadurch finalisierbar, überlebte die Garbage Collection, die sie als unerreichbar erkannt hatte, und hielt bis zur Abarbeitung durch den einzelnen Finalizer-Thread ihren gesamten Objektgraphen am Leben (DTOs, Entitäten, Persistenzkontexte). In einem Kundenabzug waren von 7,56 Mio. Finalizer-Einträgen 7,51 Mio. solche Listen. Die Listener, die der Finalizer abmelden sollte, werden bereits in &amp;lt;code&amp;gt;clear()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;remove()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;resolve()&amp;lt;/code&amp;gt; abgemeldet&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (2) – ein DTO hält für das spätere Nachladen einer Lazy-Referenz nicht mehr die abgelöste Entität fest, sondern nur noch deren Klasse und ID (neue Klasse &amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;org.eclipse.osbp.dsl.dto.lib&amp;lt;/code&amp;gt;). Die Entität hielt über ihre Lazy-Beziehungen den gesamten Persistenzkontext (&amp;lt;code&amp;gt;RepeatableWriteUnitOfWork&amp;lt;/code&amp;gt; samt aller darin geklonten Entitäten), obwohl &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; nur Klasse und ID benötigt. Gemessen an einer Kasse: rund 42 festgehaltene Persistenzkontexte je Verkauf vorher, praktisch keiner danach. Die ID wird erst am Ende des Mappings übernommen, weil der generierte Mapper &amp;lt;code&amp;gt;initialize(entity)&amp;lt;/code&amp;gt; vor &amp;lt;code&amp;gt;setId&amp;lt;/code&amp;gt; aufruft und eine neue Entität bis dahin die zufällige ID ihres Konstruktors trägt; liefert die Datenbank die ID erst später, bleibt es beim bisherigen Verhalten. '''Der Generator (&amp;lt;code&amp;gt;DtoTypesBuilder&amp;lt;/code&amp;gt;) erzeugt den neuen Aufruf; wirksam wird die Änderung erst mit neu generierten DTOs.''' Nicht neu generierte DTOs laufen unverändert weiter; neu generierte DTOs setzen ein &amp;lt;code&amp;gt;dto.lib&amp;lt;/code&amp;gt; ab dem 07.10.2026 voraus&lt;br /&gt;
*** &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; meldet nun, welche Zeile er nicht nachladen konnte. Liefert &amp;lt;code&amp;gt;em.find&amp;lt;/code&amp;gt; kein Ergebnis, wird ein Fehler mit Entitätsklasse, ID, Eigenschaft und DTO-Klasse protokolliert und eine &amp;lt;code&amp;gt;IllegalStateException&amp;lt;/code&amp;gt; geworfen. Bisher erschien an dieser Stelle nur eine &amp;lt;code&amp;gt;NullPointerException&amp;lt;/code&amp;gt; ohne Hinweis auf die Ursache&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;AbstractDTOService.closeEntityManager()&amp;lt;/code&amp;gt; fordert eine offene Transaktion nicht mehr nach jedem Lesezugriff zur Freigabe auf. Das Verhalten ist unverändert, die Warnung &amp;lt;code&amp;gt;dispose() refused&amp;lt;/code&amp;gt; erscheint aber nur noch, wenn tatsächlich jemand eine offene Transaktion abbauen will (zuvor rund zwei Meldungen je Verkauf und etwa 175 je Kassenabschluss)&lt;br /&gt;
*** Fix: Mit &amp;lt;code&amp;gt;-DsendTransactionEventAsync=true&amp;lt;/code&amp;gt; wartete &amp;lt;code&amp;gt;TransactionHandler.dispose()&amp;lt;/code&amp;gt; nach jedem Commit mindestens 800 ms, zuzüglich weiterer 800 ms je Durchlauf mit nicht leerer Ereigniswarteschlange – während &amp;lt;code&amp;gt;SessionManager&amp;lt;/code&amp;gt; die Sperre aller Transaktions-Handler hielt. An einer Kasse waren das mehrere Sekunden je Bon. &amp;lt;code&amp;gt;dispose()&amp;lt;/code&amp;gt; übergibt den Entity Manager nun dem Ereignis-Thread und kehrt sofort zurück; der Thread schließt ihn als letzten Schritt, sobald seine Warteschlange leer ist. Ein Ereignis, das sich nicht versenden lässt, beendet den Thread nicht mehr. Ohne den Schalter ändert sich nicht*s&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;MetadataBuilder&amp;lt;/code&amp;gt; macht beim ersten Scan zunächst alle gestarteten Bundles mit dem Header &amp;lt;code&amp;gt;OSBP-RuntimeBuilder-BundleSpace&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;Factory-Model&amp;lt;/code&amp;gt; im Bundle-Space bekannt und sucht erst danach nach Modellen. Bisher wurde ein Bundle erst beim Erreichen aufgenommen, während ein Participant ein Modell sofort laden kann: Ein ECView aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration&amp;lt;/code&amp;gt; nennt ein DTO aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration.base&amp;lt;/code&amp;gt; mit der höheren Bundle-ID, die Klasse wurde also je nach Reihenfolge beim Start nicht gefunden. In diesem Fall scheiterte &amp;lt;code&amp;gt;activate()&amp;lt;/code&amp;gt;, der DSL-Metadatendienst und damit der Persistenzdienst starteten nie, und die Anwendung blieb auf der Startseite stehen. Eine fehlgeschlagene Aktivierung wird nun zusätzlich als Fehler in das Anwendungslog geschrieben&lt;br /&gt;
** Fix: org.eclipse.osbp.dsl, org.eclipse.osbp.runtime: Vier Fehler in der sitzungsbezogenen Transaktionsverwaltung behoben. (a) &amp;lt;code&amp;gt;SessionManager.removeSession()&amp;lt;/code&amp;gt; gab den Transaktions-Handler unter einem Schlüssel frei, der nie passen konnte (&amp;lt;code&amp;gt;ISession&amp;lt;/code&amp;gt; hat kein &amp;lt;code&amp;gt;toString()&amp;lt;/code&amp;gt;), das Sicherheitsnetz griff also nie. (b) &amp;lt;code&amp;gt;disposeTransactionHandler&amp;lt;/code&amp;gt; entfernte den Eintrag auch dann, wenn die Transaktion noch offen war – der Entity Manager wurde aufgegeben und der Thread, der die Transaktion noch abschließen musste, fand seinen Handler nicht mehr. &amp;lt;code&amp;gt;ITransactionHandler&amp;lt;/code&amp;gt; erhält dafür &amp;lt;code&amp;gt;isDisposable()&amp;lt;/code&amp;gt; als Default-Methode. (c) Die Freigabe nach &amp;lt;code&amp;gt;transactionBegin&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Rollback&amp;lt;/code&amp;gt; steht nun in einem &amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt;; ein &amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt;, insbesondere ein &amp;lt;code&amp;gt;OutOfMemoryError&amp;lt;/code&amp;gt;, ließ den Handler bisher mit Entity Manager in einer statischen Map zurück. (d) &amp;lt;code&amp;gt;txnIsOpen&amp;lt;/code&amp;gt; wird auch bei einem fehlgeschlagenen Commit oder Rollback zurückgesetzt&lt;br /&gt;
** org.eclipse.osbp.persistence: &lt;br /&gt;
*** Der Startstatus nennt nun den Dienst, auf den der Persistenzdienst noch wartet. Die neue Komponente &amp;lt;code&amp;gt;PersistenceStartupStatus&amp;lt;/code&amp;gt; hat keine Pflichtreferenz, ist daher von Beginn an aktiv und setzt den Status auf „persistence service is waiting for the DSL metadata service“ (bzw. „the Mondrian manager“), bis diese gebunden sind. Bisher blieb es unabhängig vom Grund bei „persistenceservice not started yet“, und die wartenden Dienste protokollierten nichts&lt;br /&gt;
*** Beim Einrichten einer Persistence Unit wird jede verwaltete Klasse gemeldet, die nicht statisch gewebt ist, obwohl eine ihrer Oberklassen es ist – in einer ERROR-Zeile mit dem Hinweis, das Projekt vollständig neu zu bauen. Eine solche Klasse wird von EclipseLink instanziiert, aber nie befüllt: Der Dialog bleibt leer, und die nächste Aktualisierung scheitert mit „mapped to a primary key column ... Updates are not allowed“&lt;br /&gt;
** org.eclipse.osbp.ecview.extension: Fix: Das Grid vergisst die Zeilenschlüssel von Einträgen, die den Container als Ganzes verlassen haben. Vaadin gibt die Schlüssel nur über das clientseitige &amp;lt;code&amp;gt;dropRows&amp;lt;/code&amp;gt; frei; nach einem allgemeinen &amp;lt;code&amp;gt;ItemSetChange&amp;lt;/code&amp;gt;, wie ihn &amp;lt;code&amp;gt;removeAllItems()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;addAll()&amp;lt;/code&amp;gt; auslösen, blieben sie im &amp;lt;code&amp;gt;KeyMapper&amp;lt;/code&amp;gt; stehen und hielten jede jemals angezeigte Zeile samt ihrem DTO-Graphen. &amp;lt;code&amp;gt;GridPresentation.CustomGrid&amp;lt;/code&amp;gt; merkt sich die vergebenen Schlüssel und entfernt die nicht mehr enthaltenen&lt;br /&gt;
** org.osbee.datainterchange: Fix: FreeMarkers gemeinsam genutzte &amp;lt;code&amp;gt;InvalidReferenceException&amp;lt;/code&amp;gt; hält nicht mehr den ersten Exportlauf fest. Die statische Instanz übernahm die zum Zeitpunkt ihres Entstehens aktive Umgebung und damit das gesamte Datenmodell des ersten Exports für die Lebensdauer des Prozesses. Der Activator lädt die Klasse nun einmal außerhalb eines Template-Laufs&lt;br /&gt;
** org.eclipse.osbp.display: Fix: Das Display-Servlet wird nicht mehr auf dem Thread registriert, der die Bundles startet. Die Registrierung veröffentlicht einen Dienst, und Declarative Services verarbeitet dieses Ereignis auf dem veröffentlichenden Thread; dort wartete der Start aller nachfolgenden Bundles, in einem Fall über 50 Sekunden („Getting a lock required more than 50000 ms“). Die Registrierung läuft nun auf einem eigenen Thread&lt;br /&gt;
** org.eclipse.osbp.runtime, org.eclipse.osbp.blob, org.eclipse.osbp.autowireHelper, org.eclipse.osbp.ecview.extension, org.eclipse.osbp.ecview.addons, org.eclipse.osbp.infogrid.model: Neue Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; für String-Attribute. Ein Attribut mit &amp;lt;code&amp;gt;key=&amp;quot;barcode&amp;quot; value=&amp;quot;QRCode-128&amp;quot;&amp;lt;/code&amp;gt; wird schreibgeschützt als Barcode-Bild angezeigt, das aus seinem Klartextwert erzeugt wird – im Dialog über &amp;lt;code&amp;gt;BlobComponent&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;BlobUploadComponent&amp;lt;/code&amp;gt; (letztere dann ohne Schaltflächen) und in Grid-Spalten über den Blob-Bildkonverter&lt;br /&gt;
** org.eclipse.osbp.authentication, org.eclipse.osbp.system.configuration, org.eclipse.osbp.blob: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** org.eclipse.osbp.xtext.table, org.eclipse.osbp.xtext.table.common: Für Attribute mit der Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; wird ein Barcode-Lookup generiert; eine String-Zelle wird als Barcode-Bild angezeigt, wenn das Lookup einen Barcode-Typ trägt&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** net.osbee.pos.tse: Aufrufer können die BSI-Zertifizierungs-ID der TSE abfragen. Die SE-API bietet &amp;lt;code&amp;gt;getCertificationId&amp;lt;/code&amp;gt; in beiden API-Versionen, keiner der beiden Adapter reichte den Aufruf bisher durch&lt;br /&gt;
** net.osbee.pos.tse, net.osbee.pos.rksv: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Einführung der http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/restartService Seite. Damit können entweder Sessions gekillt oder der Service der Anwendung neu gestartet werden.&lt;br /&gt;
** Bei Nichterreichbarkeit der Datenbank wird die Anwendung beendet und der Fehlerstatus auf der Statusseite angezeigt.&lt;br /&gt;
** Das eingebettete &amp;lt;code&amp;gt;shiro-all-1.2.3.jar&amp;lt;/code&amp;gt; wurde durch &amp;lt;code&amp;gt;shiro-core&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; in Version 1.13.0 ersetzt. Damit sind CVE-2016-4437 (Remote Code Execution über das RememberMe-Cookie mit festem Schlüssel) und CVE-2019-12422 geschlossen. &amp;lt;code&amp;gt;encoder-1.2.3.jar&amp;lt;/code&amp;gt; kommt hinzu, weil &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; 1.13 &amp;lt;code&amp;gt;org.owasp.encoder&amp;lt;/code&amp;gt; zwingend importiert.&lt;br /&gt;
** Anmeldung: &lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm&amp;lt;/code&amp;gt; löst den Anmeldenamen vor jeder Abfrage in einen Distinguished Name auf. Active Directory akzeptiert für den Bind auch einen User Principal Name, beantwortet Abfragen damit aber mit LDAP-Fehler 34 (&amp;lt;code&amp;gt;invalidDNSyntax&amp;lt;/code&amp;gt;), sodass ein &amp;lt;code&amp;gt;userDnTemplate&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt; zwar anmeldete, dann aber an den Attributen scheiterte. &amp;lt;code&amp;gt;resolveUserDn&amp;lt;/code&amp;gt; sucht nun über &amp;lt;code&amp;gt;userPrincipalName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sAMAccountName&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;mail&amp;lt;/code&amp;gt;; die Suchbasis stammt aus dem RootDSE. Bestehende Vorlagen der Form &amp;lt;code&amp;gt;cn={0},ou=...&amp;lt;/code&amp;gt; verhalten sich unverändert. Zugleich behoben: eine &amp;lt;code&amp;gt;StringIndexOutOfBoundsException&amp;lt;/code&amp;gt; im E-Mail-Zweig und das Einsetzen des Benutzernamens in den Suchfilter per Verkettung (jetzt als &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt;, von JNDI maskiert)&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm.getUserDn&amp;lt;/code&amp;gt; maskierte nur das Komma. &amp;lt;code&amp;gt;escapeDnValue&amp;lt;/code&amp;gt; deckt nun alle Zeichen nach RFC 4514 Abschnitt 2.4 ab, sodass ein Benutzername die Bedeutung des DN nicht mehr verändern kann&lt;br /&gt;
*** Die Funktionalität „Angemeldet bleiben“ arbeitet nun mit einem signierten Token statt mit verschlüsselten Zugangsdaten. Das Cookie ist eine mit HMAC-SHA256 signierte Aussage über Benutzer, Mandant, Geltungsbereich, Ablaufdatum und Version und enthält keine Zugangsdaten. Es ist zustandslos, sodass beliebig viele Geräte und Browser gleichzeitig eines halten können.&lt;br /&gt;
*** Das „Angemeldet bleiben“-Cookie gilt je Anwendungsinstanz und Browser. Der Cookie-Name trägt einen Kurzhash über Schema, Host, Port, erstes Pfadsegment und Portal-ID, sodass zwei Anwendungen auf demselben Host nicht mehr das Cookie der jeweils anderen lesen. Die selbstgebaute Verschlüsselung entfällt vollständig. Das Cookie wird mit expliziter Lebensdauer, &amp;lt;code&amp;gt;SameSite=Lax&amp;lt;/code&amp;gt; und unter https mit &amp;lt;code&amp;gt;Secure&amp;lt;/code&amp;gt; geschrieben. Die Anmeldung aus einem Cookie wartet fünf Sekunden mit einem Hinweis auf der Anmeldemaske und lässt sich in dieser Zeit abbrechen; ein entferntes Häkchen löscht das Cookie nun in jedem Fall. Die Betrugsmeldung samt Kontosperre bei nicht passendem Cookie entfällt&lt;br /&gt;
*** Fix: Kennwörter erscheinen nicht mehr im Log – weder bei der Anmeldung in &amp;lt;code&amp;gt;AuthenticationProvider.check()&amp;lt;/code&amp;gt; (bisher im Klartext auf DEBUG) noch beim Zurücksetzen, wo der Nachrichtentext mit dem neuen Kennwort dreimal geschrieben wurde&lt;br /&gt;
*** Die Anzeige des neuen Kennworts auf der Anmeldemaske, wenn keine E-Mail versendet werden kann, ist nun eine konfigurierte Betriebsart: &amp;lt;code&amp;gt;Userinterface/showResetPasswordOnScreen&amp;lt;/code&amp;gt;, standardmäßig aus, mit Protokollierung auf WARN. '''Installationen ohne Mailserver müssen den Parameter einmalig setzen'''&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;doResetPassword&amp;lt;/code&amp;gt; hebt weder eine Sperre noch die Deaktivierung eines Kontos auf und setzt den Fehlversuchszähler nicht mehr zurück. Das Zurücksetzen kann jeder auslösen, der einen Benutzernamen eingibt; aufgehoben werden Sperre und Deaktivierung nur noch durch einen Administrator über &amp;lt;code&amp;gt;doUnlock&amp;lt;/code&amp;gt;&lt;br /&gt;
** System Configuration: &lt;br /&gt;
*** Parameter &amp;lt;code&amp;gt;RememberMeSecret&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;IConfigurationService&amp;lt;/code&amp;gt; ergänzt (&amp;lt;code&amp;gt;GLOBAL_PARAMETERS/RememberMeSecret&amp;lt;/code&amp;gt;). Der Schlüssel wird je Installation bei der ersten Benutzung der &amp;quot;RememberMe&amp;quot; Funktionalität einmal aus gezogen und von allen Anmeldungen geteilt; das Löschen des Eintrags macht alle „Angemeldet bleiben“-Cookies auf einmal ungültig.&lt;br /&gt;
*** Fix: Die Einstellungen füllten sich mit Platzhaltern „not set“. &amp;lt;code&amp;gt;ConfigurationService.getConfigurationString&amp;lt;/code&amp;gt; speicherte bei leerem Vorgabewert den Platzhalter und lieferte ihn als leere Zeichenkette zurück, sodass &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; stets eine weitere Zeile anhängte. &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; entfernt nun die Platzhalterzeilen des Schlüssels vor dem Schreiben, und ein gespeicherter Platzhalter gilt als „kein Wert“. &amp;lt;code&amp;gt;deleteConfigurations&amp;lt;/code&amp;gt; setzt zusätzlich den Cache zurück; gelöschte Einträge kamen bisher beim nächsten Lesen wieder&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Fix: org.eclipse.osbp.dependencies-mbp: Das Bundle &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.bundle.activemq.all.osgi&amp;lt;/code&amp;gt; enthält kein Log4j und kein eingebettetes slf4j mehr. &amp;lt;code&amp;gt;activemq-all&amp;lt;/code&amp;gt; brachte eine vollständige Kopie von Apache Log4j 1.2.17 mit (359 Klassen, darunter &amp;lt;code&amp;gt;JDBCAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSSink&amp;lt;/code&amp;gt; und chainsaw – betroffen von CVE-2021-4104, CVE-2022-23302, CVE-2022-23305 und CVE-2022-23307) sowie slf4j-api 1.7.13 und &amp;lt;code&amp;gt;slf4j-log4j12&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;Include-Resource&amp;lt;/code&amp;gt; bindet das Hersteller-Jar nun ohne &amp;lt;code&amp;gt;org.apache.log4j&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org.slf4j&amp;lt;/code&amp;gt;, deren Maven-Koordinaten, die &amp;lt;code&amp;gt;log4j.properties&amp;lt;/code&amp;gt; und Springs &amp;lt;code&amp;gt;Log4jConfigurer&amp;lt;/code&amp;gt; ein. ActiveMQ bezieht slf4j stattdessen aus dem Produkt (&amp;lt;code&amp;gt;org.slf4j.api&amp;lt;/code&amp;gt; 1.7.36)&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neue Dienststeuerungsseite unter &amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;. &lt;br /&gt;
*** Ein Bediener kann darüber – autorisiert durch eine reguläre Anwendungsanmeldung – hängende Sitzungen beenden oder den Dienst neu starten, ohne Zugriff auf den Serverrechner zu benötigen. Drei Stufen: Sitzungen des aufrufenden Arbeitsplatzes, alle Sitzungen, Neustart. Die Seite ist am Root-HTTP-Service registriert und bleibt damit erreichbar, wenn der Anwendungskontext selbst gestört ist; Markup, Stil, Skript und Texte (deutsch, englisch, französisch) sind deshalb in der Seite enthalten. Sitzungen werden über das Invalidieren der HTTP-Sitzung beendet. Der Neustart läuft über die Befehlswarteschlange der Anwendung; die Seite fragt anschließend die Anwendung ab und führt den Bediener über die Unterbrechung hinweg&lt;br /&gt;
*** Alle Aktionen der Dienststeuerungsseite werden im &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; unter denselben Koordinaten wie die Anmeldemaske protokolliert (fehlgeschlagene Anmeldung und Neustart als WARNING, gesperrtes Konto als ERROR, beendete Sitzungen als INFO). Eine abgelehnte Anmeldung sperrt das Formular für die Dauer der Wartezeit mit Countdown; der Zähler ist derselbe wie an der Anmeldemaske, sodass sich Fehlversuche auf beiden Wegen zur Kontosperre summieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260907 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Überarbeitung der Codebasis zur Entfernung veralteter und nicht benötigter Bundles&lt;br /&gt;
** Überarbeitung des Loginvorgangs / der Cookiespeicherung bei &amp;quot;remember me&amp;quot;. Es werden keine kritischen Daten mehr im Cookie gespeichert.&lt;br /&gt;
** Verbesserung der Übersetzungen&lt;br /&gt;
** Anpassungen für frz. Fiskalanforderungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Laden der Übersetzungen in die interne Tabelle beim Systemstart deutlich beschleunigt. Dadurch verbessertes Startverhalten der Anwendungen.&lt;br /&gt;
** Verbesserungen bei der frz. Tastaturunterstützung&lt;br /&gt;
** Verbesserungen der Übersetzungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260618 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Blockieren durch das Laden von Diensten während des Starts vermieden, dadurch schnellerer Anwendungsstart. Anderes Verhalten beim Start an der Benutzeroberfläche.&lt;br /&gt;
** Französische Tastaturunterstützung (AZERTY) im Keymapper der Statemachine ergänzt&lt;br /&gt;
** Login bezieht Build-Version und Hersteller nun aus den &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; (einheitliche Quelle)&lt;br /&gt;
** Neue gemeinsame Hilfsmethoden &amp;lt;code&amp;gt;getBuildVersion()&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;getVendor()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; zur Ermittlung der Build-Identität&lt;br /&gt;
** &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; setzt die Zeitstempel von &amp;lt;code&amp;gt;lastError&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;lastWarning&amp;lt;/code&amp;gt; nicht mehr zurück&lt;br /&gt;
** Fix: NPE in &amp;lt;code&amp;gt;org.eclipse.osbp.xtext.dialog.AutowireUiFactory&amp;lt;/code&amp;gt; behoben&lt;br /&gt;
** Version von 5.2.0 auf 5.3.0 angehoben&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-reverify&amp;lt;/code&amp;gt; (16px/32px) für die NF525-Schaltfläche zur erneuten Archivintegritätsprüfung&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-refresh.png&amp;lt;/code&amp;gt; ergänzt&lt;br /&gt;
** Grid – horizontale Bildlaufleiste wiederhergestellt&lt;br /&gt;
** Grid - Flex-Layout für Kassen-/POS-Grids wiederhergestellt (kollabierte Spalten behoben)&lt;br /&gt;
** französische Übersetzungen überarbeitet&lt;br /&gt;
&lt;br /&gt;
* Grammatiken/Generierung:&lt;br /&gt;
** org.eclipse.osbp.dsl: Benutzerdefinierte &amp;lt;code&amp;gt;@PreRemove&amp;lt;/code&amp;gt;-Hooks werden in der generierten &amp;lt;code&amp;gt;preRemove()&amp;lt;/code&amp;gt;-Methode zusammengeführt&lt;br /&gt;
** org.eclipse.osbp.xtext.i18n: i18n-Generator erzeugt nun das byte-genaue Eclipse-Babel-Format&lt;br /&gt;
&lt;br /&gt;
* POS Framework für franz. Fiskalanforderungen eingeführt&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260410 ==&lt;br /&gt;
&lt;br /&gt;
* POS Framework: &lt;br /&gt;
** Performanceverbesserung beim Kassieren&lt;br /&gt;
** Multi-Protokoll Unterstützung für Paymentterminal &lt;br /&gt;
*** frz. Protokolle &amp;quot;Concert&amp;quot;, &amp;quot;Protocol E&amp;quot;&lt;br /&gt;
*** &amp;quot;Mock&amp;quot; für Tests&lt;br /&gt;
*** Statemachine DSL erweitert: protocol Parameter für Paymentterminal&lt;br /&gt;
*** &amp;quot;Shared Payment Terminal&amp;quot;&lt;br /&gt;
**** locking im PaymentTerminalService implementiert&lt;br /&gt;
**** pro Terminal über ConfigService einstellbar&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260402 ==&lt;br /&gt;
&lt;br /&gt;
Die Version verbessert das Startverhalten einer Anwendung und bringt mehr Informationen über den Status des Starts auf den Bildschirm&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Anzeige des Persistenzservice-Status auf dem Login-Bildschirm&lt;br /&gt;
** Information über den Persistenzservice auf der Fehlerseite hinzugefügt&lt;br /&gt;
** Beim Start wird nun überall auf den Persistenzservice statt nur auf den ConfigurationService gewartet&lt;br /&gt;
&lt;br /&gt;
* BPM:&lt;br /&gt;
** Fix: net.osbee.bpm: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** Fix: net.osbee.pos.epay: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260305 ==&lt;br /&gt;
&lt;br /&gt;
=== Report Anzeige ===&lt;br /&gt;
&lt;br /&gt;
Diese Version konzentriert sich auf '''Stabilitätsverbesserungen''' für das Report-Rendering-System, insbesondere auf die Behebung von Race Conditions und Anzeigeproblemen, die bei schnellen Benutzerinteraktionen auftraten.&lt;br /&gt;
&lt;br /&gt;
* Race Condition beim Report-Rendering&lt;br /&gt;
** '''Behoben: Schnelles Auswählen/Abwählen führte dazu, dass Reports mit ungültigen oder fehlenden Filtern gerendert wurden'''&lt;br /&gt;
*** Reports verarbeiten nun korrekt wenn Benutzer schnell Elemente auswählen und wieder abwählen&lt;br /&gt;
*** Filteränderungen werden blockiert, während ein Render-Vorgang läuft&lt;br /&gt;
*** Ausstehende Filteränderungen werden nachverfolgt und nach Abschluss des Renderings erneut ausgewertet&lt;br /&gt;
*** Reports mit &amp;lt;code&amp;gt;selectById&amp;lt;/code&amp;gt; werden nun korrekt ausgeblendet, wenn nichts ausgewählt ist&lt;br /&gt;
&lt;br /&gt;
* PDF-Anzeigeskalierungsproblem &lt;br /&gt;
** '''Behoben: PDF-Skalierungsprobleme durch Neuerstellung des BrowserFrames bei jedem Rendering'''&lt;br /&gt;
&lt;br /&gt;
=== Anmeldebildschirm ===&lt;br /&gt;
&lt;br /&gt;
Der Anmeldebildschirm zeigt nun während der Initialisierung des Persistence-Services einen Statustext an.&lt;br /&gt;
&lt;br /&gt;
* Lauftext-Anzeige (Marquee) mit dem aktuellen Status des Persistence-Services&lt;br /&gt;
* Deaktivierung aller Anmeldesteuerelemente während der Wartezeit&lt;br /&gt;
&lt;br /&gt;
=== Start der Anwendung ===&lt;br /&gt;
&lt;br /&gt;
* Blockierungen der Initialisierungsvorgänge durch Warten auf Serviceregistrierung während des Anwendungsstarts reduziert. &amp;lt;br&amp;gt;Dadurch verändert sich das Startverhalten, insbesondere die Reihenfolge der Anwendung. Insgesamt schnelleres Laden der Bundles.&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4626</id>
		<title>Releasenotes 2026 OS.pos</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4626"/>
				<updated>2026-11-04T10:46:13Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20261103 (OS) ==&lt;br /&gt;
&lt;br /&gt;
Schwerpunkt dieses Zeitraums ist das '''Speicherwachstum des Kassendienstes''' über einen Verkaufstag: Ursachen gefunden, behoben und an einer Kasse nachgemessen.&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261012|Softwarefactory 20261012]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261012 ==&lt;br /&gt;
&lt;br /&gt;
Schwerpunkt dieses Zeitraums ist das '''Speicherwachstum des Kassendienstes''' über einen Verkaufstag: Ursachen gefunden, behoben und an einer Kasse nachgemessen. Daneben wurde die Verfügbarkeitsprüfung der Webservices auf eine Implementierung zusammengeführt und ein Datumsfehler darin behoben.&lt;br /&gt;
&lt;br /&gt;
=== Neue Funktionen ===&lt;br /&gt;
* '''NF 525 – Neustart durch den Bediener im Ereignisjournal:''' Ein über die Dienststeuerungsseite (&amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;) ausgelöster Neustart wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben, mit dem auslösenden Bediener. Bisher zeigte das Journal nur „System gestoppt“ und „System gestartet“, nicht aber, wer den Neustart veranlasst hat.&lt;br /&gt;
&lt;br /&gt;
=== Fehlerbehebungen ===&lt;br /&gt;
* '''Speicherwachstum je Verkauf:''' Die DTOs von &amp;lt;code&amp;gt;net.osbee.app.pos.common&amp;lt;/code&amp;gt; wurden neu generiert und halten nur noch Klasse und ID ihrer Entität statt der Entität selbst. Zusammen mit den Korrekturen im Framework (siehe Releasenotes der Softwarefactory, Version 5.3.0.20261012) hält eine Kasse je Verkauf praktisch keinen Persistenzkontext mehr fest; vorher waren es rund 42 je Verkauf, etwa 1 MB.&lt;br /&gt;
* '''Kassenabschluss gibt seine Daten wieder frei:''' Nach dem Speichern eines Kassenabschlusses werden die dafür im Zustandsautomaten abgelegten Daten entfernt. Sie hielten über ihre Mapping-Kontexte alle Bons und Zahlungen der abgeschlossenen Periode bis zum nächsten Abschluss fest.&lt;br /&gt;
* '''NF 525 – Ereignisjournal:''' Beim Anhängen eines Eintrags wird nicht mehr das gesamte Journal gelesen, um dessen letzten Eintrag zu finden. Der Aufwand je Eintrag wuchs bisher mit der Länge des Journals.&lt;br /&gt;
* '''Webservice-Verfügbarkeitsprüfung über Mitternacht:''' Ein als nicht erreichbar vermerkter Webservice wurde nach Mitternacht zu spät oder gar nicht mehr erneut geprüft, weil der Zeitstempel als Millisekunden des Tages abgelegt war. Ein Ausfall um 20:00 Uhr hielt den Webservice bis 21:00 Uhr des Folgetags abgeschaltet, ein Ausfall ab 23:00 Uhr dauerhaft. Der Zeitstempel ist nun fortlaufend.&lt;br /&gt;
&lt;br /&gt;
=== Aktualisierungen ===&lt;br /&gt;
* '''Webservice-Verfügbarkeitsprüfung zusammengeführt:''' Die Prüfung existierte viermal (zweimal in &amp;lt;code&amp;gt;net.osbee.app.pos.common&amp;lt;/code&amp;gt;, zweimal in &amp;lt;code&amp;gt;net.osbee.sample.pos&amp;lt;/code&amp;gt;). Einzige Implementierung ist nun &amp;lt;code&amp;gt;WebService.check(sm, ws)&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;posbase&amp;lt;/code&amp;gt;; die übrigen delegieren dorthin. Der Zustand wird je Webservice in &amp;lt;code&amp;gt;ws.accesible&amp;lt;/code&amp;gt; geführt, der gemeinsame Speicherschlüssel entfällt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261012|Softwarefactory 20261012]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261006 ==&lt;br /&gt;
&lt;br /&gt;
* Ergänzung bei Kundenkartenverarbeitung&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260907 ==&lt;br /&gt;
&lt;br /&gt;
* Schwerpunkt dieses Zeitraums ist die französische Fiskalkonformität '''NF 525''' (WORM-Sicherungseinrichtung, Write-once-Nachweis, Geräte-Lebenszyklus) sowie die Auslagerung des '''DSFinV-K'''-Datenmodells. &lt;br /&gt;
&lt;br /&gt;
=== Änderungen / Neue Funktionen ===&lt;br /&gt;
&lt;br /&gt;
* '''Ausgeschlossene Zahlarten:''' Die Perspektive für ausgeschlossene Zahlungsarten wurde zur Kundenpflege verschoben.&lt;br /&gt;
* '''Benutzerverwaltung:''' Die automatische Synchronisierung der einzelnen views in der Benutzerverwaltungsperspektive wurde abgeschaltet.&lt;br /&gt;
* '''Authentifizierung:''' Die Authentifizierungs-Logger wurden zusammengefasst und schreiben wieder in eine Datei.&lt;br /&gt;
* '''remember me Anmeldefunktion:''' überarbeitet, Cookieverwendung sicherer gemacht.&lt;br /&gt;
* '''Kennwort vergessen?:''' Zurücksetzen des Kennworts löst eine Benutzersperre nicht mehr automatisch auf. Dies muss aktiv durch den Administrator geschehen.&lt;br /&gt;
* '''showResetPasswordOnScreen:''' neuer Konfigurationsschlüssel. Default: false. Bei true wird das neue Passwort im Log angezeigt, falls lein Mailserver kongiguriert ist.&lt;br /&gt;
&lt;br /&gt;
* '''NF 525 – WORM Write-once-Nachweis:''' Ein zertifiziertes WORM-Gerät darf Fiskalverkäufe erst nach einem signierten &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;-Verdikt tragen. Ein asynchroner Probe-Lauf weist die Write-once-Eigenschaft nach (das Medium nimmt eine Teständerung zurück); der Verdikt wird signiert und ist „sticky&amp;quot;. ''(cache-defeat probe, verbreiterte Signaturspalte)''&lt;br /&gt;
* '''NF 525 – Zertifizierungs-Gate:''' Auf einem zertifizierten Gerät führen Struktur-/Integritätsfehler zu einem harten Verkaufsstopp (STOP_SALES); auf einem nicht-zertifizierten Gerät wird die Anomalie nur als Warnung protokolliert (warn-only) und dem Kassierer als Hinweis am Verkauf angezeigt.&lt;br /&gt;
* '''NF 525 – Reaktivierung der Write-once-Bestätigung:''' Der zuvor pausierte Bestätigungs-Block wurde wieder aktiviert; der Scheduler führt ein zertifiziertes Gerät nun wieder von &amp;lt;code&amp;gt;PENDING&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''NF 525 – Schutz gegen Zertifizierungs-Downgrade:''' Eine bereits fiskalisch aktive, zertifizierte Kasse kann nicht mehr auf ein nicht-zertifiziertes oder entferntes Sicherungsgerät umgestellt werden (Geräte-Tausch), und ein zertifiziertes Gerät kann nicht mehr in-place ent-zertifiziert werden. Beide Wege werden abgewiesen (Umgehung der zertifizierten Durchsetzung verhindert).&lt;br /&gt;
* '''NF 525 – Auditierung von Geräte-Konfigurationsänderungen:''' Eine Änderung an der zertifizierungsrelevanten WORM-Konfiguration wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben.&lt;br /&gt;
* '''NF 525 – Retention/Archivierung beim Geräte-Tausch:''' Perioden ohne Fiskaldatensätze werden nicht mehr als leeres ZIP archiviert, sondern als schlanker „abgedeckt&amp;quot;-Marker vermerkt (kein Medium-Scan) – die „Gespeichert&amp;quot;-Rückmeldung nach einem Geräte-Tausch kommt dadurch deutlich schneller. Zum Abschluss wird eine Zusammenfassung protokolliert.&lt;br /&gt;
* '''NF 525 – Write-once-Probe:''' Die Anwesenheit der Probe-Datei wird nun über eine frische Verzeichnis-Enumeration gelesen (behebt eine Fehlerkennung durch veraltete Verzeichnis-Zwischenstände).&lt;br /&gt;
* '''Internationalisierung:''' Neue NF-525-WORM-Schlüssel (Write-once, worm_protection, warn-only) in das zentrale Übersetzungsbündel gespiegelt; allgemeine Vokabular-Erweiterungen.&lt;br /&gt;
* '''Rechnungsdruck (Invoice2p):''' NF-525-Daten in der Rechnungsvorlage berücksichtigt.&lt;br /&gt;
* '''Bondruck:''' NF-525-Daten ergänzt&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260907|Softwarefactory 5.2.0.20260907]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260707 ==&lt;br /&gt;
&lt;br /&gt;
Diese Ausgabe bringt vor allem die Unterstützung französischer Kassen voran: eine&lt;br /&gt;
vollständige AZERTY-Tastaturunterstützung (physisch und als Bildschirmtastatur), das&lt;br /&gt;
französische Zahlungsterminal-Protokoll CAISSE-AP inklusive Simulator sowie virtuelle&lt;br /&gt;
Peripheriegeräte für Test und Diagnose. Ergänzt wird dies durch NF525-Härtungen,&lt;br /&gt;
Fehlerbehebungen bei Kartenzahlungen und eine durchgängige Vereinheitlichung der&lt;br /&gt;
Übersetzungsdateien.&lt;br /&gt;
&lt;br /&gt;
* Die '''physische französische AZERTY-Tastatur''' wird nun vollständig unterstützt. Der komplette Zeichensatz wurde auf realer Hardware getestet; die zuvor fehlende '''ù-Taste''' wurde ergänzt.&lt;br /&gt;
* Die '''Bildschirmtastatur''' (On-Screen-Keypad) &lt;br /&gt;
** bildet nun eine echte französische AZERTY-Belegung über alle drei Ebenen ab (Grundebene, Umschalt, AltGr) inklusive Akzentkomposition über die Tottasten ^ und ¨.&lt;br /&gt;
** folgt jetzt '''einheitlich der Oberflächensprache''': Französisch → AZERTY, Englisch → englische Belegung, alle übrigen Sprachen → deutsches QWERTZ. Die Belegung wird beim Öffnen des Dialogs in der aktiven Sprache neu aufgebaut.&lt;br /&gt;
* Neue Konfiguration '''Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry''' zur Auswahl der physischen Tastaturbelegung je Kasse.&lt;br /&gt;
&lt;br /&gt;
* '''CAISSE-AP – französisches Zahlungsterminal'''&lt;br /&gt;
** Unterstützung des '''Tagesabschlusses (télécollecte)''' für Concert/CAISSE-AP-Terminals; die obligatorischen Felder CB und CE werden nun sowohl in der Abschluss- als auch in der Abbruch-Anfrage übertragen.&lt;br /&gt;
&lt;br /&gt;
* NF525 / Fiskalkonformität&lt;br /&gt;
** Die '''Persistierung des Grand-Totals''' ist nun zwingende Vorbedingung für die Signatur eines Belegs – verhindert eine Signatur bei unvollständig gespeichertem Umsatzzähler. ''(net.osbee.app.pos.common d5a4578ec)''&lt;br /&gt;
&lt;br /&gt;
* Kartenzahlung&lt;br /&gt;
** Eine Kartenzahlung kann nun korrekt '''storniert''' werden: das Belegfeld (receipt) wird aus dem CJ-Feld der Concert-Antwort befüllt.&lt;br /&gt;
** Das '''Löschen einer nicht stornierbaren Terminal-Zahlung''' wird blockiert, um inkonsistente Zustände zu vermeiden. &lt;br /&gt;
** setPaymentTerminalReversal stürzt bei einer fehlerhaften Anfrage nicht mehr ab. &lt;br /&gt;
&lt;br /&gt;
* Oberfläche / Internationalisierung ===&lt;br /&gt;
** Die '''Laufzeit-Sprachumschaltung''' funktioniert nun in der Kassierperspektive&lt;br /&gt;
** Zentrale Übersetzungen aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Systemvoraussetzungen ===&lt;br /&gt;
** Für den französischen Markt: Zahlungsterminal mit CAISSE-AP-/Concert-Protokoll (CB-Port 8888, konfigurierbae), physische AZERTY-Tastatur optional&lt;br /&gt;
** Konfiguration je Kasse über Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry und Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardLayout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260707|Softwarefactory 5.2.0.20260707]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260618 ==&lt;br /&gt;
&lt;br /&gt;
* Version von 5.2 auf 5.3&lt;br /&gt;
* frz. Fiskalanforderungen: erste Implementierung&lt;br /&gt;
* frz. Übersetzungen aktualisiert&lt;br /&gt;
* Verwendung frz. Tastatur in Kassiersicht&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260618|Softwarefactory 5.3.0.20260618]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260410 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Fix Performanceproblem ( eingeführt mit 4.5.7-V20260402 (OS) ), dbcaching Einstellungen&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260410|Softwarefactory 5.2.0.20260410]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260402 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Automatischer Wechsel zum Status &amp;lt;code&amp;gt;PAYMENTTERMINAL_REPEATRECEIPT&amp;lt;/code&amp;gt; im Modus 'store' (statt 'print') bei leeren Bonzeilen&lt;br /&gt;
** Neue Funktion &amp;lt;code&amp;gt;attachRemarks&amp;lt;/code&amp;gt; zum Zeichnen von Bonbemerkungen und deren Verknüpfung mit dem Kassenbon&lt;br /&gt;
** Möglichkeit zur Eingabe von freien Bemerkungen zum Kassenbon&lt;br /&gt;
** Bonbemerkungen: &amp;lt;code&amp;gt;observeFocus&amp;lt;/code&amp;gt; von remark1/2 an Events gebunden&lt;br /&gt;
&lt;br /&gt;
* Kassenkonfiguration:&lt;br /&gt;
** Menüeintrag für Stammdaten der Bonbemerkungen hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Neue Entitäten für Bonbemerkungen (SlipRemarks)&lt;br /&gt;
** Neue Spalten &amp;lt;code&amp;gt;remark_1&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;remark_2&amp;lt;/code&amp;gt; für CashSlip-Entität&lt;br /&gt;
** Dialoge, Tabellen und Perspektive für Bonbemerkungen implementiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7.20260305 (OS) ==&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260305|Softwarefactory 5.2.0.20260305]]&lt;br /&gt;
&lt;br /&gt;
* Berichtanzeige&lt;br /&gt;
** Fix: Probleme bei der Berichtsanzeige mit schneller Klickfolge in Auswahltabelle behoben.&lt;br /&gt;
&lt;br /&gt;
* Kassenschluss:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;determineCloseExpectation&amp;lt;/code&amp;gt; - Sortierung von CashPaymentTermData nach traceNumber absteigend, um den letzten Eintrag zu erhalten&lt;br /&gt;
&lt;br /&gt;
* Kassenentsorgung:&lt;br /&gt;
** Neues Systemprodukt &amp;quot;fee&amp;quot; aktiviert&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Einige Entitäten auf &amp;lt;code&amp;gt;cacheable=false&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
** Entitäten mit escaped Spaltennamen aktualisiert&lt;br /&gt;
** Generierte Entitäten und DTOs aktualisiert&lt;br /&gt;
** Entitäten mit neuem Service Framework aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;canUnparkSelected&amp;lt;/code&amp;gt; - Ablehnung eines Slips mit Zahlungen an einer SiS-Kasse&lt;br /&gt;
** Fix: PRINT_SLIP - &amp;lt;code&amp;gt;onOK&amp;lt;/code&amp;gt; verlässt nicht, wenn Slip änderbar ist&lt;br /&gt;
** Neue Eingabeaktion für MODIFY_FLD, setzt &amp;lt;code&amp;gt;cashposiupdate&amp;lt;/code&amp;gt; auf ausgewählte Position&lt;br /&gt;
&lt;br /&gt;
* Archivierung:&lt;br /&gt;
** &amp;lt;code&amp;gt;archivDescription xml-os&amp;lt;/code&amp;gt; für XML-Format der Beschreibungsdatei für Archiv hinzugefügt&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4625</id>
		<title>Releasenotes 2026 OS.Softwarefactory</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4625"/>
				<updated>2026-10-29T10:41:17Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Version 5.3.0.20261029 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261029 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Fix: org.eclipse.osbp.persistence: Wartezeit beim Start („Getting a lock required more than 20000 ms“). Jede Persistence Unit las beim Anlegen ihren EclipseLink-Cachetyp und ihre Cachegröße (&amp;lt;code&amp;gt;EclipseLink/&amp;amp;lt;Unit&amp;amp;gt;#cacheTypeDefault&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#cacheSizeDefault&amp;lt;/code&amp;gt;) aus der Konfiguration. Das führte zu einer gegenseitigen Blockierung der Initialisierung. Die Werte werden nun einmal auf dem Start-Thread gelesen, damit tritt die Sperre nicht mehr auf.&lt;br /&gt;
** Neu: org.eclipse.osbp.persistence: Flyway findet Datenbankmigrationen, die Bundles mitbringen. Ein Bundle nennt seinen Migrationsordner im Manifest-Header &amp;lt;code&amp;gt;OSBP-Flyway-Migration: db/migration&amp;lt;/code&amp;gt; und legt die Skripte als &amp;lt;code&amp;gt;&amp;amp;lt;Persistence Unit&amp;amp;gt;/&amp;amp;lt;Hersteller&amp;amp;gt;/V&amp;amp;lt;Version&amp;amp;gt;__&amp;amp;lt;Beschreibung&amp;amp;gt;.sql&amp;lt;/code&amp;gt; ab, z.B. &amp;lt;code&amp;gt;monitoringData/mysql/V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;. Ein Skript läuft auf der Datenquelle, für die seine Persistence Unit konfiguriert ist, und zwar vor dem Anlegen und Erweitern der Tabellen durch EclipseLink. Der Herstellerordner wird aus den JDBC-Metadaten bestimmt: &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt; (auch für MariaDB), &amp;lt;code&amp;gt;postgresql&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oracle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sqlserver&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;derby&amp;lt;/code&amp;gt;. Die neue Klasse &amp;lt;code&amp;gt;BundleMigrations&amp;lt;/code&amp;gt; sammelt die Migrationsskripte und übergibt sie Flyway als Resource Provider; die Skripte im Dateisystemordner der Datenquelle (&amp;lt;code&amp;gt;-DFlyway.&amp;amp;lt;Datenquelle&amp;amp;gt;.DatabaseMigrationSourcePath&amp;lt;/code&amp;gt;) werden mitgelesen. '''Die Migrationen laufen nur mit &amp;lt;code&amp;gt;-DFlyway.active=true&amp;lt;/code&amp;gt;;'''&lt;br /&gt;
** org.eclipse.osbp.persistence: Jedes Bundle mit Migrationen hat eine eigene Historientabelle, &amp;lt;code&amp;gt;flyway_&amp;lt;/code&amp;gt; und der symbolische Name, gekürzt wie ein Logger Klassennamen kürzt (führende Segmente auf ihren Anfangsbuchstaben, bis höchstens 30 Zeichen erreicht sind): &amp;lt;code&amp;gt;org.eclipse.osbp.system.monitoring.base&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;flyway_oeos_monitoring_base&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;net.osbee.app.bdi.ex.model.entity&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;flyway_noa_bdi_ex_model_entity&amp;lt;/code&amp;gt;. Versionen müssen innerhalb eines Bundles eindeutig sein. Scheitern die Migrationen eines Bundles, wird das mit „the migrations of &amp;amp;lt;Bundle&amp;amp;gt; were NOT applied“ protokolliert, die übrigen Bundles laufen weiter. Ergäben zwei Bundles denselben gekürzten Namen, werden beide mit einem Fehler abgewiesen, statt sich eine Historie zu teilen. Die Skripte des Dateisystemordners behalten Flyways Standardtabelle &amp;lt;code&amp;gt;flyway_schema_history&amp;lt;/code&amp;gt;; eine Quelle ohne Skripte läuft gar nicht&lt;br /&gt;
** Fix: org.eclipse.osbp.persistence: Flyway lief bei jedem Start mit &amp;lt;code&amp;gt;baseline()&amp;lt;/code&amp;gt;. Sobald die Historie Einträge hatte, lehnte Flyway das mit einer Ausnahme ab, die verschluckt wurde – &amp;lt;code&amp;gt;migrate()&amp;lt;/code&amp;gt; lief danach nie. Eine bestehende Datenbank ohne Historie wird nun über &amp;lt;code&amp;gt;baselineOnMigrate&amp;lt;/code&amp;gt; einmalig mit Version 0 versehen. Ebenso entfällt &amp;lt;code&amp;gt;repair()&amp;lt;/code&amp;gt; bei jedem Start: Es schrieb die Historie auf ein nachträglich geändertes oder ersetztes Skript um, das dann nie lief; ein solches Skript scheitert nun an der Prüfsumme. Versionen dürfen außer der Reihe eintreffen (&amp;lt;code&amp;gt;outOfOrder&amp;lt;/code&amp;gt;), ein entferntes, bereits gelaufenes Skript ist kein Fehler mehr.&lt;br /&gt;
** Fix: org.eclipse.osbp.system.configuration (monitoring.base): Überwachungseinträge gingen auf älteren Datenbanken verloren. Datenbanken, die mit einem früheren Monitoring-Modell angelegt wurden, tragen noch eindeutige Indizes auf einem Namen allein (&amp;lt;code&amp;gt;MONITOR_SUB_CATEGORY.MSC_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_CATEGORY.MCA_NAME&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DK&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_MAIN_CATEGORY.MMCA_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_COMPONENT.MCO_NAME&amp;lt;/code&amp;gt;). Das Modell verlangt einen eindeutigen Namen nur unterhalb des jeweiligen Elternelements; die Schemagenerierung legt Indizes an, entfernt aber nie einen. Eine zweite Kategorie mit einer gleichnamigen Unterkategorie – etwa „COMPLETE“ unter &amp;lt;code&amp;gt;XRECHNUNG_UP&amp;lt;/code&amp;gt; und unter &amp;lt;code&amp;gt;ZUGFERD_UP&amp;lt;/code&amp;gt; – scheiterte daher an einem doppelten Schlüssel, &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; fing den Fehler ab, und der Eintrag fehlte (auf einer BDI-Installation über 1.000 solcher Fehler an einem Tag, dazu „transactionRollback - no transactionhandler found“). Ebenso konnten sich zwei Installationen mit gemeinsamer Datenbank nicht beide als Komponente „Application“ anmelden. Die erste Flyway-Migration des Bundles (&amp;lt;code&amp;gt;V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;, für MySQL/MariaDB, PostgreSQL und Oracle) entfernt diese Indizes; &amp;lt;code&amp;gt;MONITOR_COMPONENTI1&amp;lt;/code&amp;gt; legt die Schemagenerierung danach in der Form des Modells (&amp;lt;code&amp;gt;MCO_NAME, MCO_INSTALLATION&amp;lt;/code&amp;gt;) neu an. Da die Indizes nicht mehr im Modell stehen, hängen ihre Namen vom Generator ab, der die Datenbank angelegt hat; die Skripte finden sie daher an ihrer Struktur (eindeutig, kein Primärschlüssel, genau eine dieser Spalten). Auf einer neuen oder bereits bereinigten Datenbank ändern sie nichts.&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Hinweis für Produkte mit REST-Diensten über ECF: Das Bundle &amp;lt;code&amp;gt;org.eclipse.ecf.osgi.services.remoteserviceadmin.console&amp;lt;/code&amp;gt; (Konsolenbefehle &amp;lt;code&amp;gt;rsa …&amp;lt;/code&amp;gt;) sollte nicht automatisch starten. Seine Komponente &amp;lt;code&amp;gt;RSACommand&amp;lt;/code&amp;gt; benötigt den &amp;lt;code&amp;gt;RemoteServiceAdmin&amp;lt;/code&amp;gt;; während ECF diesen beim Export der Dienste erzeugt, blockieren sich ECF und DS gegenseitig, bis DS nach seiner Wartezeit (&amp;lt;code&amp;gt;-Dequinox.scr.waitTimeOnBlock&amp;lt;/code&amp;gt;, in BDI 20 s) abbricht. In BDI und im CX-Portal ist es auf &amp;lt;code&amp;gt;autoStart=&amp;quot;false&amp;quot;&amp;lt;/code&amp;gt; gesetzt; POS startet es nicht. Zusammen mit der Korrektur oben startet BDI in der IDE ohne Sperrmeldungen (67 s statt 74–101 s). Es verbleibt die Warnung „Enabling components of bundle org.eclipse.osbp.xtext.builder.metadata.services did not complete in 30000 ms“: Das ist das Laden der DSL-Modelle (rund 35 s) auf dem DS-Thread, keine Sperre&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Flyway Integration: org.eclipse.osbp.dependencies-mbp, org.eclipse.osbp.dependencies - Flyway 9 enthält die Unterstützung für MySQL und MariaDB nicht mehr im Kern, sondern im Modul &amp;lt;code&amp;gt;flyway-mysql&amp;lt;/code&amp;gt;, das sich über &amp;lt;code&amp;gt;META-INF/services&amp;lt;/code&amp;gt; registriert und von Flyway mit dessen eigenem Class Loader gesucht wird. Das Modul wird daher als Fragment &amp;lt;code&amp;gt;org.flywaydb.database.mysql&amp;lt;/code&amp;gt; 9.14.0.v20261028 an &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; ausgeliefert (das Manifest des Originals nennt sich selbst &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; und ist so nicht verwendbar) und mit dem Feature &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.feature.flyway&amp;lt;/code&amp;gt; verteilt.&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261012 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** org.eclipse.osbp.dsl (Entity,DTO):&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (1) – &amp;lt;code&amp;gt;AbstractOppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;MappingContext&amp;lt;/code&amp;gt; deklarieren kein &amp;lt;code&amp;gt;finalize()&amp;lt;/code&amp;gt; mehr. Jede &amp;lt;code&amp;gt;OppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OppositeContainmentDtoList&amp;lt;/code&amp;gt; war dadurch finalisierbar, überlebte die Garbage Collection, die sie als unerreichbar erkannt hatte, und hielt bis zur Abarbeitung durch den einzelnen Finalizer-Thread ihren gesamten Objektgraphen am Leben (DTOs, Entitäten, Persistenzkontexte). In einem Kundenabzug waren von 7,56 Mio. Finalizer-Einträgen 7,51 Mio. solche Listen. Die Listener, die der Finalizer abmelden sollte, werden bereits in &amp;lt;code&amp;gt;clear()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;remove()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;resolve()&amp;lt;/code&amp;gt; abgemeldet&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (2) – ein DTO hält für das spätere Nachladen einer Lazy-Referenz nicht mehr die abgelöste Entität fest, sondern nur noch deren Klasse und ID (neue Klasse &amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;org.eclipse.osbp.dsl.dto.lib&amp;lt;/code&amp;gt;). Die Entität hielt über ihre Lazy-Beziehungen den gesamten Persistenzkontext (&amp;lt;code&amp;gt;RepeatableWriteUnitOfWork&amp;lt;/code&amp;gt; samt aller darin geklonten Entitäten), obwohl &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; nur Klasse und ID benötigt. Gemessen an einer Kasse: rund 42 festgehaltene Persistenzkontexte je Verkauf vorher, praktisch keiner danach. Die ID wird erst am Ende des Mappings übernommen, weil der generierte Mapper &amp;lt;code&amp;gt;initialize(entity)&amp;lt;/code&amp;gt; vor &amp;lt;code&amp;gt;setId&amp;lt;/code&amp;gt; aufruft und eine neue Entität bis dahin die zufällige ID ihres Konstruktors trägt; liefert die Datenbank die ID erst später, bleibt es beim bisherigen Verhalten. '''Der Generator (&amp;lt;code&amp;gt;DtoTypesBuilder&amp;lt;/code&amp;gt;) erzeugt den neuen Aufruf; wirksam wird die Änderung erst mit neu generierten DTOs.''' Nicht neu generierte DTOs laufen unverändert weiter; neu generierte DTOs setzen ein &amp;lt;code&amp;gt;dto.lib&amp;lt;/code&amp;gt; ab dem 07.10.2026 voraus&lt;br /&gt;
*** &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; meldet nun, welche Zeile er nicht nachladen konnte. Liefert &amp;lt;code&amp;gt;em.find&amp;lt;/code&amp;gt; kein Ergebnis, wird ein Fehler mit Entitätsklasse, ID, Eigenschaft und DTO-Klasse protokolliert und eine &amp;lt;code&amp;gt;IllegalStateException&amp;lt;/code&amp;gt; geworfen. Bisher erschien an dieser Stelle nur eine &amp;lt;code&amp;gt;NullPointerException&amp;lt;/code&amp;gt; ohne Hinweis auf die Ursache&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;AbstractDTOService.closeEntityManager()&amp;lt;/code&amp;gt; fordert eine offene Transaktion nicht mehr nach jedem Lesezugriff zur Freigabe auf. Das Verhalten ist unverändert, die Warnung &amp;lt;code&amp;gt;dispose() refused&amp;lt;/code&amp;gt; erscheint aber nur noch, wenn tatsächlich jemand eine offene Transaktion abbauen will (zuvor rund zwei Meldungen je Verkauf und etwa 175 je Kassenabschluss)&lt;br /&gt;
*** Fix: Mit &amp;lt;code&amp;gt;-DsendTransactionEventAsync=true&amp;lt;/code&amp;gt; wartete &amp;lt;code&amp;gt;TransactionHandler.dispose()&amp;lt;/code&amp;gt; nach jedem Commit mindestens 800 ms, zuzüglich weiterer 800 ms je Durchlauf mit nicht leerer Ereigniswarteschlange – während &amp;lt;code&amp;gt;SessionManager&amp;lt;/code&amp;gt; die Sperre aller Transaktions-Handler hielt. An einer Kasse waren das mehrere Sekunden je Bon. &amp;lt;code&amp;gt;dispose()&amp;lt;/code&amp;gt; übergibt den Entity Manager nun dem Ereignis-Thread und kehrt sofort zurück; der Thread schließt ihn als letzten Schritt, sobald seine Warteschlange leer ist. Ein Ereignis, das sich nicht versenden lässt, beendet den Thread nicht mehr. Ohne den Schalter ändert sich nicht*s&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;MetadataBuilder&amp;lt;/code&amp;gt; macht beim ersten Scan zunächst alle gestarteten Bundles mit dem Header &amp;lt;code&amp;gt;OSBP-RuntimeBuilder-BundleSpace&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;Factory-Model&amp;lt;/code&amp;gt; im Bundle-Space bekannt und sucht erst danach nach Modellen. Bisher wurde ein Bundle erst beim Erreichen aufgenommen, während ein Participant ein Modell sofort laden kann: Ein ECView aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration&amp;lt;/code&amp;gt; nennt ein DTO aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration.base&amp;lt;/code&amp;gt; mit der höheren Bundle-ID, die Klasse wurde also je nach Reihenfolge beim Start nicht gefunden. In diesem Fall scheiterte &amp;lt;code&amp;gt;activate()&amp;lt;/code&amp;gt;, der DSL-Metadatendienst und damit der Persistenzdienst starteten nie, und die Anwendung blieb auf der Startseite stehen. Eine fehlgeschlagene Aktivierung wird nun zusätzlich als Fehler in das Anwendungslog geschrieben&lt;br /&gt;
** Fix: org.eclipse.osbp.dsl, org.eclipse.osbp.runtime: Vier Fehler in der sitzungsbezogenen Transaktionsverwaltung behoben. (a) &amp;lt;code&amp;gt;SessionManager.removeSession()&amp;lt;/code&amp;gt; gab den Transaktions-Handler unter einem Schlüssel frei, der nie passen konnte (&amp;lt;code&amp;gt;ISession&amp;lt;/code&amp;gt; hat kein &amp;lt;code&amp;gt;toString()&amp;lt;/code&amp;gt;), das Sicherheitsnetz griff also nie. (b) &amp;lt;code&amp;gt;disposeTransactionHandler&amp;lt;/code&amp;gt; entfernte den Eintrag auch dann, wenn die Transaktion noch offen war – der Entity Manager wurde aufgegeben und der Thread, der die Transaktion noch abschließen musste, fand seinen Handler nicht mehr. &amp;lt;code&amp;gt;ITransactionHandler&amp;lt;/code&amp;gt; erhält dafür &amp;lt;code&amp;gt;isDisposable()&amp;lt;/code&amp;gt; als Default-Methode. (c) Die Freigabe nach &amp;lt;code&amp;gt;transactionBegin&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Rollback&amp;lt;/code&amp;gt; steht nun in einem &amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt;; ein &amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt;, insbesondere ein &amp;lt;code&amp;gt;OutOfMemoryError&amp;lt;/code&amp;gt;, ließ den Handler bisher mit Entity Manager in einer statischen Map zurück. (d) &amp;lt;code&amp;gt;txnIsOpen&amp;lt;/code&amp;gt; wird auch bei einem fehlgeschlagenen Commit oder Rollback zurückgesetzt&lt;br /&gt;
** org.eclipse.osbp.persistence: &lt;br /&gt;
*** Der Startstatus nennt nun den Dienst, auf den der Persistenzdienst noch wartet. Die neue Komponente &amp;lt;code&amp;gt;PersistenceStartupStatus&amp;lt;/code&amp;gt; hat keine Pflichtreferenz, ist daher von Beginn an aktiv und setzt den Status auf „persistence service is waiting for the DSL metadata service“ (bzw. „the Mondrian manager“), bis diese gebunden sind. Bisher blieb es unabhängig vom Grund bei „persistenceservice not started yet“, und die wartenden Dienste protokollierten nichts&lt;br /&gt;
*** Beim Einrichten einer Persistence Unit wird jede verwaltete Klasse gemeldet, die nicht statisch gewebt ist, obwohl eine ihrer Oberklassen es ist – in einer ERROR-Zeile mit dem Hinweis, das Projekt vollständig neu zu bauen. Eine solche Klasse wird von EclipseLink instanziiert, aber nie befüllt: Der Dialog bleibt leer, und die nächste Aktualisierung scheitert mit „mapped to a primary key column ... Updates are not allowed“&lt;br /&gt;
** org.eclipse.osbp.ecview.extension: Fix: Das Grid vergisst die Zeilenschlüssel von Einträgen, die den Container als Ganzes verlassen haben. Vaadin gibt die Schlüssel nur über das clientseitige &amp;lt;code&amp;gt;dropRows&amp;lt;/code&amp;gt; frei; nach einem allgemeinen &amp;lt;code&amp;gt;ItemSetChange&amp;lt;/code&amp;gt;, wie ihn &amp;lt;code&amp;gt;removeAllItems()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;addAll()&amp;lt;/code&amp;gt; auslösen, blieben sie im &amp;lt;code&amp;gt;KeyMapper&amp;lt;/code&amp;gt; stehen und hielten jede jemals angezeigte Zeile samt ihrem DTO-Graphen. &amp;lt;code&amp;gt;GridPresentation.CustomGrid&amp;lt;/code&amp;gt; merkt sich die vergebenen Schlüssel und entfernt die nicht mehr enthaltenen&lt;br /&gt;
** org.osbee.datainterchange: Fix: FreeMarkers gemeinsam genutzte &amp;lt;code&amp;gt;InvalidReferenceException&amp;lt;/code&amp;gt; hält nicht mehr den ersten Exportlauf fest. Die statische Instanz übernahm die zum Zeitpunkt ihres Entstehens aktive Umgebung und damit das gesamte Datenmodell des ersten Exports für die Lebensdauer des Prozesses. Der Activator lädt die Klasse nun einmal außerhalb eines Template-Laufs&lt;br /&gt;
** org.eclipse.osbp.display: Fix: Das Display-Servlet wird nicht mehr auf dem Thread registriert, der die Bundles startet. Die Registrierung veröffentlicht einen Dienst, und Declarative Services verarbeitet dieses Ereignis auf dem veröffentlichenden Thread; dort wartete der Start aller nachfolgenden Bundles, in einem Fall über 50 Sekunden („Getting a lock required more than 50000 ms“). Die Registrierung läuft nun auf einem eigenen Thread&lt;br /&gt;
** org.eclipse.osbp.runtime, org.eclipse.osbp.blob, org.eclipse.osbp.autowireHelper, org.eclipse.osbp.ecview.extension, org.eclipse.osbp.ecview.addons, org.eclipse.osbp.infogrid.model: Neue Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; für String-Attribute. Ein Attribut mit &amp;lt;code&amp;gt;key=&amp;quot;barcode&amp;quot; value=&amp;quot;QRCode-128&amp;quot;&amp;lt;/code&amp;gt; wird schreibgeschützt als Barcode-Bild angezeigt, das aus seinem Klartextwert erzeugt wird – im Dialog über &amp;lt;code&amp;gt;BlobComponent&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;BlobUploadComponent&amp;lt;/code&amp;gt; (letztere dann ohne Schaltflächen) und in Grid-Spalten über den Blob-Bildkonverter&lt;br /&gt;
** org.eclipse.osbp.authentication, org.eclipse.osbp.system.configuration, org.eclipse.osbp.blob: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** org.eclipse.osbp.xtext.table, org.eclipse.osbp.xtext.table.common: Für Attribute mit der Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; wird ein Barcode-Lookup generiert; eine String-Zelle wird als Barcode-Bild angezeigt, wenn das Lookup einen Barcode-Typ trägt&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** net.osbee.pos.tse: Aufrufer können die BSI-Zertifizierungs-ID der TSE abfragen. Die SE-API bietet &amp;lt;code&amp;gt;getCertificationId&amp;lt;/code&amp;gt; in beiden API-Versionen, keiner der beiden Adapter reichte den Aufruf bisher durch&lt;br /&gt;
** net.osbee.pos.tse, net.osbee.pos.rksv: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Einführung der http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/restartService Seite. Damit können entweder Sessions gekillt oder der Service der Anwendung neu gestartet werden.&lt;br /&gt;
** Bei Nichterreichbarkeit der Datenbank wird die Anwendung beendet und der Fehlerstatus auf der Statusseite angezeigt.&lt;br /&gt;
** Das eingebettete &amp;lt;code&amp;gt;shiro-all-1.2.3.jar&amp;lt;/code&amp;gt; wurde durch &amp;lt;code&amp;gt;shiro-core&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; in Version 1.13.0 ersetzt. Damit sind CVE-2016-4437 (Remote Code Execution über das RememberMe-Cookie mit festem Schlüssel) und CVE-2019-12422 geschlossen. &amp;lt;code&amp;gt;encoder-1.2.3.jar&amp;lt;/code&amp;gt; kommt hinzu, weil &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; 1.13 &amp;lt;code&amp;gt;org.owasp.encoder&amp;lt;/code&amp;gt; zwingend importiert.&lt;br /&gt;
** Anmeldung: &lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm&amp;lt;/code&amp;gt; löst den Anmeldenamen vor jeder Abfrage in einen Distinguished Name auf. Active Directory akzeptiert für den Bind auch einen User Principal Name, beantwortet Abfragen damit aber mit LDAP-Fehler 34 (&amp;lt;code&amp;gt;invalidDNSyntax&amp;lt;/code&amp;gt;), sodass ein &amp;lt;code&amp;gt;userDnTemplate&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt; zwar anmeldete, dann aber an den Attributen scheiterte. &amp;lt;code&amp;gt;resolveUserDn&amp;lt;/code&amp;gt; sucht nun über &amp;lt;code&amp;gt;userPrincipalName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sAMAccountName&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;mail&amp;lt;/code&amp;gt;; die Suchbasis stammt aus dem RootDSE. Bestehende Vorlagen der Form &amp;lt;code&amp;gt;cn={0},ou=...&amp;lt;/code&amp;gt; verhalten sich unverändert. Zugleich behoben: eine &amp;lt;code&amp;gt;StringIndexOutOfBoundsException&amp;lt;/code&amp;gt; im E-Mail-Zweig und das Einsetzen des Benutzernamens in den Suchfilter per Verkettung (jetzt als &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt;, von JNDI maskiert)&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm.getUserDn&amp;lt;/code&amp;gt; maskierte nur das Komma. &amp;lt;code&amp;gt;escapeDnValue&amp;lt;/code&amp;gt; deckt nun alle Zeichen nach RFC 4514 Abschnitt 2.4 ab, sodass ein Benutzername die Bedeutung des DN nicht mehr verändern kann&lt;br /&gt;
*** Die Funktionalität „Angemeldet bleiben“ arbeitet nun mit einem signierten Token statt mit verschlüsselten Zugangsdaten. Das Cookie ist eine mit HMAC-SHA256 signierte Aussage über Benutzer, Mandant, Geltungsbereich, Ablaufdatum und Version und enthält keine Zugangsdaten. Es ist zustandslos, sodass beliebig viele Geräte und Browser gleichzeitig eines halten können.&lt;br /&gt;
*** Das „Angemeldet bleiben“-Cookie gilt je Anwendungsinstanz und Browser. Der Cookie-Name trägt einen Kurzhash über Schema, Host, Port, erstes Pfadsegment und Portal-ID, sodass zwei Anwendungen auf demselben Host nicht mehr das Cookie der jeweils anderen lesen. Die selbstgebaute Verschlüsselung entfällt vollständig. Das Cookie wird mit expliziter Lebensdauer, &amp;lt;code&amp;gt;SameSite=Lax&amp;lt;/code&amp;gt; und unter https mit &amp;lt;code&amp;gt;Secure&amp;lt;/code&amp;gt; geschrieben. Die Anmeldung aus einem Cookie wartet fünf Sekunden mit einem Hinweis auf der Anmeldemaske und lässt sich in dieser Zeit abbrechen; ein entferntes Häkchen löscht das Cookie nun in jedem Fall. Die Betrugsmeldung samt Kontosperre bei nicht passendem Cookie entfällt&lt;br /&gt;
*** Fix: Kennwörter erscheinen nicht mehr im Log – weder bei der Anmeldung in &amp;lt;code&amp;gt;AuthenticationProvider.check()&amp;lt;/code&amp;gt; (bisher im Klartext auf DEBUG) noch beim Zurücksetzen, wo der Nachrichtentext mit dem neuen Kennwort dreimal geschrieben wurde&lt;br /&gt;
*** Die Anzeige des neuen Kennworts auf der Anmeldemaske, wenn keine E-Mail versendet werden kann, ist nun eine konfigurierte Betriebsart: &amp;lt;code&amp;gt;Userinterface/showResetPasswordOnScreen&amp;lt;/code&amp;gt;, standardmäßig aus, mit Protokollierung auf WARN. '''Installationen ohne Mailserver müssen den Parameter einmalig setzen'''&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;doResetPassword&amp;lt;/code&amp;gt; hebt weder eine Sperre noch die Deaktivierung eines Kontos auf und setzt den Fehlversuchszähler nicht mehr zurück. Das Zurücksetzen kann jeder auslösen, der einen Benutzernamen eingibt; aufgehoben werden Sperre und Deaktivierung nur noch durch einen Administrator über &amp;lt;code&amp;gt;doUnlock&amp;lt;/code&amp;gt;&lt;br /&gt;
** System Configuration: &lt;br /&gt;
*** Parameter &amp;lt;code&amp;gt;RememberMeSecret&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;IConfigurationService&amp;lt;/code&amp;gt; ergänzt (&amp;lt;code&amp;gt;GLOBAL_PARAMETERS/RememberMeSecret&amp;lt;/code&amp;gt;). Der Schlüssel wird je Installation bei der ersten Benutzung der &amp;quot;RememberMe&amp;quot; Funktionalität einmal aus gezogen und von allen Anmeldungen geteilt; das Löschen des Eintrags macht alle „Angemeldet bleiben“-Cookies auf einmal ungültig.&lt;br /&gt;
*** Fix: Die Einstellungen füllten sich mit Platzhaltern „not set“. &amp;lt;code&amp;gt;ConfigurationService.getConfigurationString&amp;lt;/code&amp;gt; speicherte bei leerem Vorgabewert den Platzhalter und lieferte ihn als leere Zeichenkette zurück, sodass &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; stets eine weitere Zeile anhängte. &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; entfernt nun die Platzhalterzeilen des Schlüssels vor dem Schreiben, und ein gespeicherter Platzhalter gilt als „kein Wert“. &amp;lt;code&amp;gt;deleteConfigurations&amp;lt;/code&amp;gt; setzt zusätzlich den Cache zurück; gelöschte Einträge kamen bisher beim nächsten Lesen wieder&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Fix: org.eclipse.osbp.dependencies-mbp: Das Bundle &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.bundle.activemq.all.osgi&amp;lt;/code&amp;gt; enthält kein Log4j und kein eingebettetes slf4j mehr. &amp;lt;code&amp;gt;activemq-all&amp;lt;/code&amp;gt; brachte eine vollständige Kopie von Apache Log4j 1.2.17 mit (359 Klassen, darunter &amp;lt;code&amp;gt;JDBCAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSSink&amp;lt;/code&amp;gt; und chainsaw – betroffen von CVE-2021-4104, CVE-2022-23302, CVE-2022-23305 und CVE-2022-23307) sowie slf4j-api 1.7.13 und &amp;lt;code&amp;gt;slf4j-log4j12&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;Include-Resource&amp;lt;/code&amp;gt; bindet das Hersteller-Jar nun ohne &amp;lt;code&amp;gt;org.apache.log4j&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org.slf4j&amp;lt;/code&amp;gt;, deren Maven-Koordinaten, die &amp;lt;code&amp;gt;log4j.properties&amp;lt;/code&amp;gt; und Springs &amp;lt;code&amp;gt;Log4jConfigurer&amp;lt;/code&amp;gt; ein. ActiveMQ bezieht slf4j stattdessen aus dem Produkt (&amp;lt;code&amp;gt;org.slf4j.api&amp;lt;/code&amp;gt; 1.7.36)&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neue Dienststeuerungsseite unter &amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;. &lt;br /&gt;
*** Ein Bediener kann darüber – autorisiert durch eine reguläre Anwendungsanmeldung – hängende Sitzungen beenden oder den Dienst neu starten, ohne Zugriff auf den Serverrechner zu benötigen. Drei Stufen: Sitzungen des aufrufenden Arbeitsplatzes, alle Sitzungen, Neustart. Die Seite ist am Root-HTTP-Service registriert und bleibt damit erreichbar, wenn der Anwendungskontext selbst gestört ist; Markup, Stil, Skript und Texte (deutsch, englisch, französisch) sind deshalb in der Seite enthalten. Sitzungen werden über das Invalidieren der HTTP-Sitzung beendet. Der Neustart läuft über die Befehlswarteschlange der Anwendung; die Seite fragt anschließend die Anwendung ab und führt den Bediener über die Unterbrechung hinweg&lt;br /&gt;
*** Alle Aktionen der Dienststeuerungsseite werden im &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; unter denselben Koordinaten wie die Anmeldemaske protokolliert (fehlgeschlagene Anmeldung und Neustart als WARNING, gesperrtes Konto als ERROR, beendete Sitzungen als INFO). Eine abgelehnte Anmeldung sperrt das Formular für die Dauer der Wartezeit mit Countdown; der Zähler ist derselbe wie an der Anmeldemaske, sodass sich Fehlversuche auf beiden Wegen zur Kontosperre summieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260907 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Überarbeitung der Codebasis zur Entfernung veralteter und nicht benötigter Bundles&lt;br /&gt;
** Überarbeitung des Loginvorgangs / der Cookiespeicherung bei &amp;quot;remember me&amp;quot;. Es werden keine kritischen Daten mehr im Cookie gespeichert.&lt;br /&gt;
** Verbesserung der Übersetzungen&lt;br /&gt;
** Anpassungen für frz. Fiskalanforderungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Laden der Übersetzungen in die interne Tabelle beim Systemstart deutlich beschleunigt. Dadurch verbessertes Startverhalten der Anwendungen.&lt;br /&gt;
** Verbesserungen bei der frz. Tastaturunterstützung&lt;br /&gt;
** Verbesserungen der Übersetzungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260618 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Blockieren durch das Laden von Diensten während des Starts vermieden, dadurch schnellerer Anwendungsstart. Anderes Verhalten beim Start an der Benutzeroberfläche.&lt;br /&gt;
** Französische Tastaturunterstützung (AZERTY) im Keymapper der Statemachine ergänzt&lt;br /&gt;
** Login bezieht Build-Version und Hersteller nun aus den &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; (einheitliche Quelle)&lt;br /&gt;
** Neue gemeinsame Hilfsmethoden &amp;lt;code&amp;gt;getBuildVersion()&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;getVendor()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; zur Ermittlung der Build-Identität&lt;br /&gt;
** &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; setzt die Zeitstempel von &amp;lt;code&amp;gt;lastError&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;lastWarning&amp;lt;/code&amp;gt; nicht mehr zurück&lt;br /&gt;
** Fix: NPE in &amp;lt;code&amp;gt;org.eclipse.osbp.xtext.dialog.AutowireUiFactory&amp;lt;/code&amp;gt; behoben&lt;br /&gt;
** Version von 5.2.0 auf 5.3.0 angehoben&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-reverify&amp;lt;/code&amp;gt; (16px/32px) für die NF525-Schaltfläche zur erneuten Archivintegritätsprüfung&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-refresh.png&amp;lt;/code&amp;gt; ergänzt&lt;br /&gt;
** Grid – horizontale Bildlaufleiste wiederhergestellt&lt;br /&gt;
** Grid - Flex-Layout für Kassen-/POS-Grids wiederhergestellt (kollabierte Spalten behoben)&lt;br /&gt;
** französische Übersetzungen überarbeitet&lt;br /&gt;
&lt;br /&gt;
* Grammatiken/Generierung:&lt;br /&gt;
** org.eclipse.osbp.dsl: Benutzerdefinierte &amp;lt;code&amp;gt;@PreRemove&amp;lt;/code&amp;gt;-Hooks werden in der generierten &amp;lt;code&amp;gt;preRemove()&amp;lt;/code&amp;gt;-Methode zusammengeführt&lt;br /&gt;
** org.eclipse.osbp.xtext.i18n: i18n-Generator erzeugt nun das byte-genaue Eclipse-Babel-Format&lt;br /&gt;
&lt;br /&gt;
* POS Framework für franz. Fiskalanforderungen eingeführt&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260410 ==&lt;br /&gt;
&lt;br /&gt;
* POS Framework: &lt;br /&gt;
** Performanceverbesserung beim Kassieren&lt;br /&gt;
** Multi-Protokoll Unterstützung für Paymentterminal &lt;br /&gt;
*** frz. Protokolle &amp;quot;Concert&amp;quot;, &amp;quot;Protocol E&amp;quot;&lt;br /&gt;
*** &amp;quot;Mock&amp;quot; für Tests&lt;br /&gt;
*** Statemachine DSL erweitert: protocol Parameter für Paymentterminal&lt;br /&gt;
*** &amp;quot;Shared Payment Terminal&amp;quot;&lt;br /&gt;
**** locking im PaymentTerminalService implementiert&lt;br /&gt;
**** pro Terminal über ConfigService einstellbar&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260402 ==&lt;br /&gt;
&lt;br /&gt;
Die Version verbessert das Startverhalten einer Anwendung und bringt mehr Informationen über den Status des Starts auf den Bildschirm&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Anzeige des Persistenzservice-Status auf dem Login-Bildschirm&lt;br /&gt;
** Information über den Persistenzservice auf der Fehlerseite hinzugefügt&lt;br /&gt;
** Beim Start wird nun überall auf den Persistenzservice statt nur auf den ConfigurationService gewartet&lt;br /&gt;
&lt;br /&gt;
* BPM:&lt;br /&gt;
** Fix: net.osbee.bpm: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** Fix: net.osbee.pos.epay: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260305 ==&lt;br /&gt;
&lt;br /&gt;
=== Report Anzeige ===&lt;br /&gt;
&lt;br /&gt;
Diese Version konzentriert sich auf '''Stabilitätsverbesserungen''' für das Report-Rendering-System, insbesondere auf die Behebung von Race Conditions und Anzeigeproblemen, die bei schnellen Benutzerinteraktionen auftraten.&lt;br /&gt;
&lt;br /&gt;
* Race Condition beim Report-Rendering&lt;br /&gt;
** '''Behoben: Schnelles Auswählen/Abwählen führte dazu, dass Reports mit ungültigen oder fehlenden Filtern gerendert wurden'''&lt;br /&gt;
*** Reports verarbeiten nun korrekt wenn Benutzer schnell Elemente auswählen und wieder abwählen&lt;br /&gt;
*** Filteränderungen werden blockiert, während ein Render-Vorgang läuft&lt;br /&gt;
*** Ausstehende Filteränderungen werden nachverfolgt und nach Abschluss des Renderings erneut ausgewertet&lt;br /&gt;
*** Reports mit &amp;lt;code&amp;gt;selectById&amp;lt;/code&amp;gt; werden nun korrekt ausgeblendet, wenn nichts ausgewählt ist&lt;br /&gt;
&lt;br /&gt;
* PDF-Anzeigeskalierungsproblem &lt;br /&gt;
** '''Behoben: PDF-Skalierungsprobleme durch Neuerstellung des BrowserFrames bei jedem Rendering'''&lt;br /&gt;
&lt;br /&gt;
=== Anmeldebildschirm ===&lt;br /&gt;
&lt;br /&gt;
Der Anmeldebildschirm zeigt nun während der Initialisierung des Persistence-Services einen Statustext an.&lt;br /&gt;
&lt;br /&gt;
* Lauftext-Anzeige (Marquee) mit dem aktuellen Status des Persistence-Services&lt;br /&gt;
* Deaktivierung aller Anmeldesteuerelemente während der Wartezeit&lt;br /&gt;
&lt;br /&gt;
=== Start der Anwendung ===&lt;br /&gt;
&lt;br /&gt;
* Blockierungen der Initialisierungsvorgänge durch Warten auf Serviceregistrierung während des Anwendungsstarts reduziert. &amp;lt;br&amp;gt;Dadurch verändert sich das Startverhalten, insbesondere die Reihenfolge der Anwendung. Insgesamt schnelleres Laden der Bundles.&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4624</id>
		<title>Releasenotes 2026 OS.Softwarefactory</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4624"/>
				<updated>2026-10-29T10:39:59Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Version 5.3.0.20261029 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261029 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Fix: org.eclipse.osbp.persistence: Wartezeit beim Start („Getting a lock required more than 20000 ms“). Jede Persistence Unit las beim Anlegen ihren EclipseLink-Cachetyp und ihre Cachegröße (&amp;lt;code&amp;gt;EclipseLink/&amp;amp;lt;Unit&amp;amp;gt;#cacheTypeDefault&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#cacheSizeDefault&amp;lt;/code&amp;gt;) aus der Konfiguration. Das führte zu einer gegenseitigen Blockierung der Initialisierung. Die Werte werden nun einmal auf dem Start-Thread gelesen, damit tritt die Sperre nicht mehr auf.&lt;br /&gt;
** Neu: org.eclipse.osbp.persistence: Flyway findet Datenbankmigrationen, die Bundles mitbringen. Ein Bundle nennt seinen Migrationsordner im Manifest-Header &amp;lt;code&amp;gt;OSBP-Flyway-Migration: db/migration&amp;lt;/code&amp;gt; und legt die Skripte als &amp;lt;code&amp;gt;&amp;amp;lt;Persistence Unit&amp;amp;gt;/&amp;amp;lt;Hersteller&amp;amp;gt;/V&amp;amp;lt;Version&amp;amp;gt;__&amp;amp;lt;Beschreibung&amp;amp;gt;.sql&amp;lt;/code&amp;gt; ab, z.B. &amp;lt;code&amp;gt;monitoringData/mysql/V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;. Ein Skript läuft auf der Datenquelle, für die seine Persistence Unit konfiguriert ist, und zwar vor dem Anlegen und Erweitern der Tabellen durch EclipseLink. Der Herstellerordner wird aus den JDBC-Metadaten bestimmt: &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt; (auch für MariaDB), &amp;lt;code&amp;gt;postgresql&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oracle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sqlserver&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;derby&amp;lt;/code&amp;gt;. Die neue Klasse &amp;lt;code&amp;gt;BundleMigrations&amp;lt;/code&amp;gt; sammelt die Migrationsskripte und übergibt sie Flyway als Resource Provider; die Skripte im Dateisystemordner der Datenquelle (&amp;lt;code&amp;gt;-DFlyway.&amp;amp;lt;Datenquelle&amp;amp;gt;.DatabaseMigrationSourcePath&amp;lt;/code&amp;gt;) werden mitgelesen. '''Die Migrationen laufen weiterhin nur mit &amp;lt;code&amp;gt;-DFlyway.active=true&amp;lt;/code&amp;gt;;'''&lt;br /&gt;
** org.eclipse.osbp.persistence: Jedes Bundle mit Migrationen hat eine eigene Historientabelle, &amp;lt;code&amp;gt;flyway_&amp;lt;/code&amp;gt; und der symbolische Name, gekürzt wie ein Logger Klassennamen kürzt (führende Segmente auf ihren Anfangsbuchstaben, bis höchstens 30 Zeichen erreicht sind): &amp;lt;code&amp;gt;org.eclipse.osbp.system.monitoring.base&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;flyway_oeos_monitoring_base&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;net.osbee.app.bdi.ex.model.entity&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;flyway_noa_bdi_ex_model_entity&amp;lt;/code&amp;gt;. Versionen müssen innerhalb eines Bundles eindeutig sein. Scheitern die Migrationen eines Bundles, wird das mit „the migrations of &amp;amp;lt;Bundle&amp;amp;gt; were NOT applied“ protokolliert, die übrigen Bundles laufen weiter. Ergäben zwei Bundles denselben gekürzten Namen, werden beide mit einem Fehler abgewiesen, statt sich eine Historie zu teilen. Die Skripte des Dateisystemordners behalten Flyways Standardtabelle &amp;lt;code&amp;gt;flyway_schema_history&amp;lt;/code&amp;gt;; eine Quelle ohne Skripte läuft gar nicht&lt;br /&gt;
** Fix: org.eclipse.osbp.persistence: Flyway lief bei jedem Start mit &amp;lt;code&amp;gt;baseline()&amp;lt;/code&amp;gt;. Sobald die Historie Einträge hatte, lehnte Flyway das mit einer Ausnahme ab, die verschluckt wurde – &amp;lt;code&amp;gt;migrate()&amp;lt;/code&amp;gt; lief danach nie. Eine bestehende Datenbank ohne Historie wird nun über &amp;lt;code&amp;gt;baselineOnMigrate&amp;lt;/code&amp;gt; einmalig mit Version 0 versehen. Ebenso entfällt &amp;lt;code&amp;gt;repair()&amp;lt;/code&amp;gt; bei jedem Start: Es schrieb die Historie auf ein nachträglich geändertes oder ersetztes Skript um, das dann nie lief; ein solches Skript scheitert nun an der Prüfsumme. Versionen dürfen außer der Reihe eintreffen (&amp;lt;code&amp;gt;outOfOrder&amp;lt;/code&amp;gt;), ein entferntes, bereits gelaufenes Skript ist kein Fehler mehr.&lt;br /&gt;
** Fix: org.eclipse.osbp.system.configuration (monitoring.base): Überwachungseinträge gingen auf älteren Datenbanken verloren. Datenbanken, die mit einem früheren Monitoring-Modell angelegt wurden, tragen noch eindeutige Indizes auf einem Namen allein (&amp;lt;code&amp;gt;MONITOR_SUB_CATEGORY.MSC_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_CATEGORY.MCA_NAME&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DK&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_MAIN_CATEGORY.MMCA_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_COMPONENT.MCO_NAME&amp;lt;/code&amp;gt;). Das Modell verlangt einen eindeutigen Namen nur unterhalb des jeweiligen Elternelements; die Schemagenerierung legt Indizes an, entfernt aber nie einen. Eine zweite Kategorie mit einer gleichnamigen Unterkategorie – etwa „COMPLETE“ unter &amp;lt;code&amp;gt;XRECHNUNG_UP&amp;lt;/code&amp;gt; und unter &amp;lt;code&amp;gt;ZUGFERD_UP&amp;lt;/code&amp;gt; – scheiterte daher an einem doppelten Schlüssel, &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; fing den Fehler ab, und der Eintrag fehlte (auf einer BDI-Installation über 1.000 solcher Fehler an einem Tag, dazu „transactionRollback - no transactionhandler found“). Ebenso konnten sich zwei Installationen mit gemeinsamer Datenbank nicht beide als Komponente „Application“ anmelden. Die erste Flyway-Migration des Bundles (&amp;lt;code&amp;gt;V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;, für MySQL/MariaDB, PostgreSQL und Oracle) entfernt diese Indizes; &amp;lt;code&amp;gt;MONITOR_COMPONENTI1&amp;lt;/code&amp;gt; legt die Schemagenerierung danach in der Form des Modells (&amp;lt;code&amp;gt;MCO_NAME, MCO_INSTALLATION&amp;lt;/code&amp;gt;) neu an. Da die Indizes nicht mehr im Modell stehen, hängen ihre Namen vom Generator ab, der die Datenbank angelegt hat; die Skripte finden sie daher an ihrer Struktur (eindeutig, kein Primärschlüssel, genau eine dieser Spalten). Auf einer neuen oder bereits bereinigten Datenbank ändern sie nichts. '''Die PostgreSQL- und Oracle-Skripte sind ungetestet.''' Ohne Flyway lassen sich die Indizes auch von Hand entfernen (auf den lokalen Datenbanken &amp;lt;code&amp;gt;shipment&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;pos&amp;lt;/code&amp;gt; geschehen)&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Hinweis für Produkte mit REST-Diensten über ECF: Das Bundle &amp;lt;code&amp;gt;org.eclipse.ecf.osgi.services.remoteserviceadmin.console&amp;lt;/code&amp;gt; (Konsolenbefehle &amp;lt;code&amp;gt;rsa …&amp;lt;/code&amp;gt;) sollte nicht automatisch starten. Seine Komponente &amp;lt;code&amp;gt;RSACommand&amp;lt;/code&amp;gt; benötigt den &amp;lt;code&amp;gt;RemoteServiceAdmin&amp;lt;/code&amp;gt;; während ECF diesen beim Export der Dienste erzeugt, blockieren sich ECF und DS gegenseitig, bis DS nach seiner Wartezeit (&amp;lt;code&amp;gt;-Dequinox.scr.waitTimeOnBlock&amp;lt;/code&amp;gt;, in BDI 20 s) abbricht. In BDI und im CX-Portal ist es auf &amp;lt;code&amp;gt;autoStart=&amp;quot;false&amp;quot;&amp;lt;/code&amp;gt; gesetzt; POS startet es nicht. Zusammen mit der Korrektur oben startet BDI in der IDE ohne Sperrmeldungen (67 s statt 74–101 s). Es verbleibt die Warnung „Enabling components of bundle org.eclipse.osbp.xtext.builder.metadata.services did not complete in 30000 ms“: Das ist das Laden der DSL-Modelle (rund 35 s) auf dem DS-Thread, keine Sperre&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Flyway Integration: org.eclipse.osbp.dependencies-mbp, org.eclipse.osbp.dependencies - Flyway 9 enthält die Unterstützung für MySQL und MariaDB nicht mehr im Kern, sondern im Modul &amp;lt;code&amp;gt;flyway-mysql&amp;lt;/code&amp;gt;, das sich über &amp;lt;code&amp;gt;META-INF/services&amp;lt;/code&amp;gt; registriert und von Flyway mit dessen eigenem Class Loader gesucht wird. Das Modul wird daher als Fragment &amp;lt;code&amp;gt;org.flywaydb.database.mysql&amp;lt;/code&amp;gt; 9.14.0.v20261028 an &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; ausgeliefert (das Manifest des Originals nennt sich selbst &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; und ist so nicht verwendbar) und mit dem Feature &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.feature.flyway&amp;lt;/code&amp;gt; verteilt.&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261012 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** org.eclipse.osbp.dsl (Entity,DTO):&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (1) – &amp;lt;code&amp;gt;AbstractOppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;MappingContext&amp;lt;/code&amp;gt; deklarieren kein &amp;lt;code&amp;gt;finalize()&amp;lt;/code&amp;gt; mehr. Jede &amp;lt;code&amp;gt;OppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OppositeContainmentDtoList&amp;lt;/code&amp;gt; war dadurch finalisierbar, überlebte die Garbage Collection, die sie als unerreichbar erkannt hatte, und hielt bis zur Abarbeitung durch den einzelnen Finalizer-Thread ihren gesamten Objektgraphen am Leben (DTOs, Entitäten, Persistenzkontexte). In einem Kundenabzug waren von 7,56 Mio. Finalizer-Einträgen 7,51 Mio. solche Listen. Die Listener, die der Finalizer abmelden sollte, werden bereits in &amp;lt;code&amp;gt;clear()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;remove()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;resolve()&amp;lt;/code&amp;gt; abgemeldet&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (2) – ein DTO hält für das spätere Nachladen einer Lazy-Referenz nicht mehr die abgelöste Entität fest, sondern nur noch deren Klasse und ID (neue Klasse &amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;org.eclipse.osbp.dsl.dto.lib&amp;lt;/code&amp;gt;). Die Entität hielt über ihre Lazy-Beziehungen den gesamten Persistenzkontext (&amp;lt;code&amp;gt;RepeatableWriteUnitOfWork&amp;lt;/code&amp;gt; samt aller darin geklonten Entitäten), obwohl &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; nur Klasse und ID benötigt. Gemessen an einer Kasse: rund 42 festgehaltene Persistenzkontexte je Verkauf vorher, praktisch keiner danach. Die ID wird erst am Ende des Mappings übernommen, weil der generierte Mapper &amp;lt;code&amp;gt;initialize(entity)&amp;lt;/code&amp;gt; vor &amp;lt;code&amp;gt;setId&amp;lt;/code&amp;gt; aufruft und eine neue Entität bis dahin die zufällige ID ihres Konstruktors trägt; liefert die Datenbank die ID erst später, bleibt es beim bisherigen Verhalten. '''Der Generator (&amp;lt;code&amp;gt;DtoTypesBuilder&amp;lt;/code&amp;gt;) erzeugt den neuen Aufruf; wirksam wird die Änderung erst mit neu generierten DTOs.''' Nicht neu generierte DTOs laufen unverändert weiter; neu generierte DTOs setzen ein &amp;lt;code&amp;gt;dto.lib&amp;lt;/code&amp;gt; ab dem 07.10.2026 voraus&lt;br /&gt;
*** &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; meldet nun, welche Zeile er nicht nachladen konnte. Liefert &amp;lt;code&amp;gt;em.find&amp;lt;/code&amp;gt; kein Ergebnis, wird ein Fehler mit Entitätsklasse, ID, Eigenschaft und DTO-Klasse protokolliert und eine &amp;lt;code&amp;gt;IllegalStateException&amp;lt;/code&amp;gt; geworfen. Bisher erschien an dieser Stelle nur eine &amp;lt;code&amp;gt;NullPointerException&amp;lt;/code&amp;gt; ohne Hinweis auf die Ursache&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;AbstractDTOService.closeEntityManager()&amp;lt;/code&amp;gt; fordert eine offene Transaktion nicht mehr nach jedem Lesezugriff zur Freigabe auf. Das Verhalten ist unverändert, die Warnung &amp;lt;code&amp;gt;dispose() refused&amp;lt;/code&amp;gt; erscheint aber nur noch, wenn tatsächlich jemand eine offene Transaktion abbauen will (zuvor rund zwei Meldungen je Verkauf und etwa 175 je Kassenabschluss)&lt;br /&gt;
*** Fix: Mit &amp;lt;code&amp;gt;-DsendTransactionEventAsync=true&amp;lt;/code&amp;gt; wartete &amp;lt;code&amp;gt;TransactionHandler.dispose()&amp;lt;/code&amp;gt; nach jedem Commit mindestens 800 ms, zuzüglich weiterer 800 ms je Durchlauf mit nicht leerer Ereigniswarteschlange – während &amp;lt;code&amp;gt;SessionManager&amp;lt;/code&amp;gt; die Sperre aller Transaktions-Handler hielt. An einer Kasse waren das mehrere Sekunden je Bon. &amp;lt;code&amp;gt;dispose()&amp;lt;/code&amp;gt; übergibt den Entity Manager nun dem Ereignis-Thread und kehrt sofort zurück; der Thread schließt ihn als letzten Schritt, sobald seine Warteschlange leer ist. Ein Ereignis, das sich nicht versenden lässt, beendet den Thread nicht mehr. Ohne den Schalter ändert sich nicht*s&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;MetadataBuilder&amp;lt;/code&amp;gt; macht beim ersten Scan zunächst alle gestarteten Bundles mit dem Header &amp;lt;code&amp;gt;OSBP-RuntimeBuilder-BundleSpace&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;Factory-Model&amp;lt;/code&amp;gt; im Bundle-Space bekannt und sucht erst danach nach Modellen. Bisher wurde ein Bundle erst beim Erreichen aufgenommen, während ein Participant ein Modell sofort laden kann: Ein ECView aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration&amp;lt;/code&amp;gt; nennt ein DTO aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration.base&amp;lt;/code&amp;gt; mit der höheren Bundle-ID, die Klasse wurde also je nach Reihenfolge beim Start nicht gefunden. In diesem Fall scheiterte &amp;lt;code&amp;gt;activate()&amp;lt;/code&amp;gt;, der DSL-Metadatendienst und damit der Persistenzdienst starteten nie, und die Anwendung blieb auf der Startseite stehen. Eine fehlgeschlagene Aktivierung wird nun zusätzlich als Fehler in das Anwendungslog geschrieben&lt;br /&gt;
** Fix: org.eclipse.osbp.dsl, org.eclipse.osbp.runtime: Vier Fehler in der sitzungsbezogenen Transaktionsverwaltung behoben. (a) &amp;lt;code&amp;gt;SessionManager.removeSession()&amp;lt;/code&amp;gt; gab den Transaktions-Handler unter einem Schlüssel frei, der nie passen konnte (&amp;lt;code&amp;gt;ISession&amp;lt;/code&amp;gt; hat kein &amp;lt;code&amp;gt;toString()&amp;lt;/code&amp;gt;), das Sicherheitsnetz griff also nie. (b) &amp;lt;code&amp;gt;disposeTransactionHandler&amp;lt;/code&amp;gt; entfernte den Eintrag auch dann, wenn die Transaktion noch offen war – der Entity Manager wurde aufgegeben und der Thread, der die Transaktion noch abschließen musste, fand seinen Handler nicht mehr. &amp;lt;code&amp;gt;ITransactionHandler&amp;lt;/code&amp;gt; erhält dafür &amp;lt;code&amp;gt;isDisposable()&amp;lt;/code&amp;gt; als Default-Methode. (c) Die Freigabe nach &amp;lt;code&amp;gt;transactionBegin&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Rollback&amp;lt;/code&amp;gt; steht nun in einem &amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt;; ein &amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt;, insbesondere ein &amp;lt;code&amp;gt;OutOfMemoryError&amp;lt;/code&amp;gt;, ließ den Handler bisher mit Entity Manager in einer statischen Map zurück. (d) &amp;lt;code&amp;gt;txnIsOpen&amp;lt;/code&amp;gt; wird auch bei einem fehlgeschlagenen Commit oder Rollback zurückgesetzt&lt;br /&gt;
** org.eclipse.osbp.persistence: &lt;br /&gt;
*** Der Startstatus nennt nun den Dienst, auf den der Persistenzdienst noch wartet. Die neue Komponente &amp;lt;code&amp;gt;PersistenceStartupStatus&amp;lt;/code&amp;gt; hat keine Pflichtreferenz, ist daher von Beginn an aktiv und setzt den Status auf „persistence service is waiting for the DSL metadata service“ (bzw. „the Mondrian manager“), bis diese gebunden sind. Bisher blieb es unabhängig vom Grund bei „persistenceservice not started yet“, und die wartenden Dienste protokollierten nichts&lt;br /&gt;
*** Beim Einrichten einer Persistence Unit wird jede verwaltete Klasse gemeldet, die nicht statisch gewebt ist, obwohl eine ihrer Oberklassen es ist – in einer ERROR-Zeile mit dem Hinweis, das Projekt vollständig neu zu bauen. Eine solche Klasse wird von EclipseLink instanziiert, aber nie befüllt: Der Dialog bleibt leer, und die nächste Aktualisierung scheitert mit „mapped to a primary key column ... Updates are not allowed“&lt;br /&gt;
** org.eclipse.osbp.ecview.extension: Fix: Das Grid vergisst die Zeilenschlüssel von Einträgen, die den Container als Ganzes verlassen haben. Vaadin gibt die Schlüssel nur über das clientseitige &amp;lt;code&amp;gt;dropRows&amp;lt;/code&amp;gt; frei; nach einem allgemeinen &amp;lt;code&amp;gt;ItemSetChange&amp;lt;/code&amp;gt;, wie ihn &amp;lt;code&amp;gt;removeAllItems()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;addAll()&amp;lt;/code&amp;gt; auslösen, blieben sie im &amp;lt;code&amp;gt;KeyMapper&amp;lt;/code&amp;gt; stehen und hielten jede jemals angezeigte Zeile samt ihrem DTO-Graphen. &amp;lt;code&amp;gt;GridPresentation.CustomGrid&amp;lt;/code&amp;gt; merkt sich die vergebenen Schlüssel und entfernt die nicht mehr enthaltenen&lt;br /&gt;
** org.osbee.datainterchange: Fix: FreeMarkers gemeinsam genutzte &amp;lt;code&amp;gt;InvalidReferenceException&amp;lt;/code&amp;gt; hält nicht mehr den ersten Exportlauf fest. Die statische Instanz übernahm die zum Zeitpunkt ihres Entstehens aktive Umgebung und damit das gesamte Datenmodell des ersten Exports für die Lebensdauer des Prozesses. Der Activator lädt die Klasse nun einmal außerhalb eines Template-Laufs&lt;br /&gt;
** org.eclipse.osbp.display: Fix: Das Display-Servlet wird nicht mehr auf dem Thread registriert, der die Bundles startet. Die Registrierung veröffentlicht einen Dienst, und Declarative Services verarbeitet dieses Ereignis auf dem veröffentlichenden Thread; dort wartete der Start aller nachfolgenden Bundles, in einem Fall über 50 Sekunden („Getting a lock required more than 50000 ms“). Die Registrierung läuft nun auf einem eigenen Thread&lt;br /&gt;
** org.eclipse.osbp.runtime, org.eclipse.osbp.blob, org.eclipse.osbp.autowireHelper, org.eclipse.osbp.ecview.extension, org.eclipse.osbp.ecview.addons, org.eclipse.osbp.infogrid.model: Neue Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; für String-Attribute. Ein Attribut mit &amp;lt;code&amp;gt;key=&amp;quot;barcode&amp;quot; value=&amp;quot;QRCode-128&amp;quot;&amp;lt;/code&amp;gt; wird schreibgeschützt als Barcode-Bild angezeigt, das aus seinem Klartextwert erzeugt wird – im Dialog über &amp;lt;code&amp;gt;BlobComponent&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;BlobUploadComponent&amp;lt;/code&amp;gt; (letztere dann ohne Schaltflächen) und in Grid-Spalten über den Blob-Bildkonverter&lt;br /&gt;
** org.eclipse.osbp.authentication, org.eclipse.osbp.system.configuration, org.eclipse.osbp.blob: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** org.eclipse.osbp.xtext.table, org.eclipse.osbp.xtext.table.common: Für Attribute mit der Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; wird ein Barcode-Lookup generiert; eine String-Zelle wird als Barcode-Bild angezeigt, wenn das Lookup einen Barcode-Typ trägt&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** net.osbee.pos.tse: Aufrufer können die BSI-Zertifizierungs-ID der TSE abfragen. Die SE-API bietet &amp;lt;code&amp;gt;getCertificationId&amp;lt;/code&amp;gt; in beiden API-Versionen, keiner der beiden Adapter reichte den Aufruf bisher durch&lt;br /&gt;
** net.osbee.pos.tse, net.osbee.pos.rksv: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Einführung der http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/restartService Seite. Damit können entweder Sessions gekillt oder der Service der Anwendung neu gestartet werden.&lt;br /&gt;
** Bei Nichterreichbarkeit der Datenbank wird die Anwendung beendet und der Fehlerstatus auf der Statusseite angezeigt.&lt;br /&gt;
** Das eingebettete &amp;lt;code&amp;gt;shiro-all-1.2.3.jar&amp;lt;/code&amp;gt; wurde durch &amp;lt;code&amp;gt;shiro-core&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; in Version 1.13.0 ersetzt. Damit sind CVE-2016-4437 (Remote Code Execution über das RememberMe-Cookie mit festem Schlüssel) und CVE-2019-12422 geschlossen. &amp;lt;code&amp;gt;encoder-1.2.3.jar&amp;lt;/code&amp;gt; kommt hinzu, weil &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; 1.13 &amp;lt;code&amp;gt;org.owasp.encoder&amp;lt;/code&amp;gt; zwingend importiert.&lt;br /&gt;
** Anmeldung: &lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm&amp;lt;/code&amp;gt; löst den Anmeldenamen vor jeder Abfrage in einen Distinguished Name auf. Active Directory akzeptiert für den Bind auch einen User Principal Name, beantwortet Abfragen damit aber mit LDAP-Fehler 34 (&amp;lt;code&amp;gt;invalidDNSyntax&amp;lt;/code&amp;gt;), sodass ein &amp;lt;code&amp;gt;userDnTemplate&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt; zwar anmeldete, dann aber an den Attributen scheiterte. &amp;lt;code&amp;gt;resolveUserDn&amp;lt;/code&amp;gt; sucht nun über &amp;lt;code&amp;gt;userPrincipalName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sAMAccountName&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;mail&amp;lt;/code&amp;gt;; die Suchbasis stammt aus dem RootDSE. Bestehende Vorlagen der Form &amp;lt;code&amp;gt;cn={0},ou=...&amp;lt;/code&amp;gt; verhalten sich unverändert. Zugleich behoben: eine &amp;lt;code&amp;gt;StringIndexOutOfBoundsException&amp;lt;/code&amp;gt; im E-Mail-Zweig und das Einsetzen des Benutzernamens in den Suchfilter per Verkettung (jetzt als &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt;, von JNDI maskiert)&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm.getUserDn&amp;lt;/code&amp;gt; maskierte nur das Komma. &amp;lt;code&amp;gt;escapeDnValue&amp;lt;/code&amp;gt; deckt nun alle Zeichen nach RFC 4514 Abschnitt 2.4 ab, sodass ein Benutzername die Bedeutung des DN nicht mehr verändern kann&lt;br /&gt;
*** Die Funktionalität „Angemeldet bleiben“ arbeitet nun mit einem signierten Token statt mit verschlüsselten Zugangsdaten. Das Cookie ist eine mit HMAC-SHA256 signierte Aussage über Benutzer, Mandant, Geltungsbereich, Ablaufdatum und Version und enthält keine Zugangsdaten. Es ist zustandslos, sodass beliebig viele Geräte und Browser gleichzeitig eines halten können.&lt;br /&gt;
*** Das „Angemeldet bleiben“-Cookie gilt je Anwendungsinstanz und Browser. Der Cookie-Name trägt einen Kurzhash über Schema, Host, Port, erstes Pfadsegment und Portal-ID, sodass zwei Anwendungen auf demselben Host nicht mehr das Cookie der jeweils anderen lesen. Die selbstgebaute Verschlüsselung entfällt vollständig. Das Cookie wird mit expliziter Lebensdauer, &amp;lt;code&amp;gt;SameSite=Lax&amp;lt;/code&amp;gt; und unter https mit &amp;lt;code&amp;gt;Secure&amp;lt;/code&amp;gt; geschrieben. Die Anmeldung aus einem Cookie wartet fünf Sekunden mit einem Hinweis auf der Anmeldemaske und lässt sich in dieser Zeit abbrechen; ein entferntes Häkchen löscht das Cookie nun in jedem Fall. Die Betrugsmeldung samt Kontosperre bei nicht passendem Cookie entfällt&lt;br /&gt;
*** Fix: Kennwörter erscheinen nicht mehr im Log – weder bei der Anmeldung in &amp;lt;code&amp;gt;AuthenticationProvider.check()&amp;lt;/code&amp;gt; (bisher im Klartext auf DEBUG) noch beim Zurücksetzen, wo der Nachrichtentext mit dem neuen Kennwort dreimal geschrieben wurde&lt;br /&gt;
*** Die Anzeige des neuen Kennworts auf der Anmeldemaske, wenn keine E-Mail versendet werden kann, ist nun eine konfigurierte Betriebsart: &amp;lt;code&amp;gt;Userinterface/showResetPasswordOnScreen&amp;lt;/code&amp;gt;, standardmäßig aus, mit Protokollierung auf WARN. '''Installationen ohne Mailserver müssen den Parameter einmalig setzen'''&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;doResetPassword&amp;lt;/code&amp;gt; hebt weder eine Sperre noch die Deaktivierung eines Kontos auf und setzt den Fehlversuchszähler nicht mehr zurück. Das Zurücksetzen kann jeder auslösen, der einen Benutzernamen eingibt; aufgehoben werden Sperre und Deaktivierung nur noch durch einen Administrator über &amp;lt;code&amp;gt;doUnlock&amp;lt;/code&amp;gt;&lt;br /&gt;
** System Configuration: &lt;br /&gt;
*** Parameter &amp;lt;code&amp;gt;RememberMeSecret&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;IConfigurationService&amp;lt;/code&amp;gt; ergänzt (&amp;lt;code&amp;gt;GLOBAL_PARAMETERS/RememberMeSecret&amp;lt;/code&amp;gt;). Der Schlüssel wird je Installation bei der ersten Benutzung der &amp;quot;RememberMe&amp;quot; Funktionalität einmal aus gezogen und von allen Anmeldungen geteilt; das Löschen des Eintrags macht alle „Angemeldet bleiben“-Cookies auf einmal ungültig.&lt;br /&gt;
*** Fix: Die Einstellungen füllten sich mit Platzhaltern „not set“. &amp;lt;code&amp;gt;ConfigurationService.getConfigurationString&amp;lt;/code&amp;gt; speicherte bei leerem Vorgabewert den Platzhalter und lieferte ihn als leere Zeichenkette zurück, sodass &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; stets eine weitere Zeile anhängte. &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; entfernt nun die Platzhalterzeilen des Schlüssels vor dem Schreiben, und ein gespeicherter Platzhalter gilt als „kein Wert“. &amp;lt;code&amp;gt;deleteConfigurations&amp;lt;/code&amp;gt; setzt zusätzlich den Cache zurück; gelöschte Einträge kamen bisher beim nächsten Lesen wieder&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Fix: org.eclipse.osbp.dependencies-mbp: Das Bundle &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.bundle.activemq.all.osgi&amp;lt;/code&amp;gt; enthält kein Log4j und kein eingebettetes slf4j mehr. &amp;lt;code&amp;gt;activemq-all&amp;lt;/code&amp;gt; brachte eine vollständige Kopie von Apache Log4j 1.2.17 mit (359 Klassen, darunter &amp;lt;code&amp;gt;JDBCAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSSink&amp;lt;/code&amp;gt; und chainsaw – betroffen von CVE-2021-4104, CVE-2022-23302, CVE-2022-23305 und CVE-2022-23307) sowie slf4j-api 1.7.13 und &amp;lt;code&amp;gt;slf4j-log4j12&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;Include-Resource&amp;lt;/code&amp;gt; bindet das Hersteller-Jar nun ohne &amp;lt;code&amp;gt;org.apache.log4j&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org.slf4j&amp;lt;/code&amp;gt;, deren Maven-Koordinaten, die &amp;lt;code&amp;gt;log4j.properties&amp;lt;/code&amp;gt; und Springs &amp;lt;code&amp;gt;Log4jConfigurer&amp;lt;/code&amp;gt; ein. ActiveMQ bezieht slf4j stattdessen aus dem Produkt (&amp;lt;code&amp;gt;org.slf4j.api&amp;lt;/code&amp;gt; 1.7.36)&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neue Dienststeuerungsseite unter &amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;. &lt;br /&gt;
*** Ein Bediener kann darüber – autorisiert durch eine reguläre Anwendungsanmeldung – hängende Sitzungen beenden oder den Dienst neu starten, ohne Zugriff auf den Serverrechner zu benötigen. Drei Stufen: Sitzungen des aufrufenden Arbeitsplatzes, alle Sitzungen, Neustart. Die Seite ist am Root-HTTP-Service registriert und bleibt damit erreichbar, wenn der Anwendungskontext selbst gestört ist; Markup, Stil, Skript und Texte (deutsch, englisch, französisch) sind deshalb in der Seite enthalten. Sitzungen werden über das Invalidieren der HTTP-Sitzung beendet. Der Neustart läuft über die Befehlswarteschlange der Anwendung; die Seite fragt anschließend die Anwendung ab und führt den Bediener über die Unterbrechung hinweg&lt;br /&gt;
*** Alle Aktionen der Dienststeuerungsseite werden im &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; unter denselben Koordinaten wie die Anmeldemaske protokolliert (fehlgeschlagene Anmeldung und Neustart als WARNING, gesperrtes Konto als ERROR, beendete Sitzungen als INFO). Eine abgelehnte Anmeldung sperrt das Formular für die Dauer der Wartezeit mit Countdown; der Zähler ist derselbe wie an der Anmeldemaske, sodass sich Fehlversuche auf beiden Wegen zur Kontosperre summieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260907 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Überarbeitung der Codebasis zur Entfernung veralteter und nicht benötigter Bundles&lt;br /&gt;
** Überarbeitung des Loginvorgangs / der Cookiespeicherung bei &amp;quot;remember me&amp;quot;. Es werden keine kritischen Daten mehr im Cookie gespeichert.&lt;br /&gt;
** Verbesserung der Übersetzungen&lt;br /&gt;
** Anpassungen für frz. Fiskalanforderungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Laden der Übersetzungen in die interne Tabelle beim Systemstart deutlich beschleunigt. Dadurch verbessertes Startverhalten der Anwendungen.&lt;br /&gt;
** Verbesserungen bei der frz. Tastaturunterstützung&lt;br /&gt;
** Verbesserungen der Übersetzungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260618 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Blockieren durch das Laden von Diensten während des Starts vermieden, dadurch schnellerer Anwendungsstart. Anderes Verhalten beim Start an der Benutzeroberfläche.&lt;br /&gt;
** Französische Tastaturunterstützung (AZERTY) im Keymapper der Statemachine ergänzt&lt;br /&gt;
** Login bezieht Build-Version und Hersteller nun aus den &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; (einheitliche Quelle)&lt;br /&gt;
** Neue gemeinsame Hilfsmethoden &amp;lt;code&amp;gt;getBuildVersion()&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;getVendor()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; zur Ermittlung der Build-Identität&lt;br /&gt;
** &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; setzt die Zeitstempel von &amp;lt;code&amp;gt;lastError&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;lastWarning&amp;lt;/code&amp;gt; nicht mehr zurück&lt;br /&gt;
** Fix: NPE in &amp;lt;code&amp;gt;org.eclipse.osbp.xtext.dialog.AutowireUiFactory&amp;lt;/code&amp;gt; behoben&lt;br /&gt;
** Version von 5.2.0 auf 5.3.0 angehoben&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-reverify&amp;lt;/code&amp;gt; (16px/32px) für die NF525-Schaltfläche zur erneuten Archivintegritätsprüfung&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-refresh.png&amp;lt;/code&amp;gt; ergänzt&lt;br /&gt;
** Grid – horizontale Bildlaufleiste wiederhergestellt&lt;br /&gt;
** Grid - Flex-Layout für Kassen-/POS-Grids wiederhergestellt (kollabierte Spalten behoben)&lt;br /&gt;
** französische Übersetzungen überarbeitet&lt;br /&gt;
&lt;br /&gt;
* Grammatiken/Generierung:&lt;br /&gt;
** org.eclipse.osbp.dsl: Benutzerdefinierte &amp;lt;code&amp;gt;@PreRemove&amp;lt;/code&amp;gt;-Hooks werden in der generierten &amp;lt;code&amp;gt;preRemove()&amp;lt;/code&amp;gt;-Methode zusammengeführt&lt;br /&gt;
** org.eclipse.osbp.xtext.i18n: i18n-Generator erzeugt nun das byte-genaue Eclipse-Babel-Format&lt;br /&gt;
&lt;br /&gt;
* POS Framework für franz. Fiskalanforderungen eingeführt&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260410 ==&lt;br /&gt;
&lt;br /&gt;
* POS Framework: &lt;br /&gt;
** Performanceverbesserung beim Kassieren&lt;br /&gt;
** Multi-Protokoll Unterstützung für Paymentterminal &lt;br /&gt;
*** frz. Protokolle &amp;quot;Concert&amp;quot;, &amp;quot;Protocol E&amp;quot;&lt;br /&gt;
*** &amp;quot;Mock&amp;quot; für Tests&lt;br /&gt;
*** Statemachine DSL erweitert: protocol Parameter für Paymentterminal&lt;br /&gt;
*** &amp;quot;Shared Payment Terminal&amp;quot;&lt;br /&gt;
**** locking im PaymentTerminalService implementiert&lt;br /&gt;
**** pro Terminal über ConfigService einstellbar&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260402 ==&lt;br /&gt;
&lt;br /&gt;
Die Version verbessert das Startverhalten einer Anwendung und bringt mehr Informationen über den Status des Starts auf den Bildschirm&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Anzeige des Persistenzservice-Status auf dem Login-Bildschirm&lt;br /&gt;
** Information über den Persistenzservice auf der Fehlerseite hinzugefügt&lt;br /&gt;
** Beim Start wird nun überall auf den Persistenzservice statt nur auf den ConfigurationService gewartet&lt;br /&gt;
&lt;br /&gt;
* BPM:&lt;br /&gt;
** Fix: net.osbee.bpm: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** Fix: net.osbee.pos.epay: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260305 ==&lt;br /&gt;
&lt;br /&gt;
=== Report Anzeige ===&lt;br /&gt;
&lt;br /&gt;
Diese Version konzentriert sich auf '''Stabilitätsverbesserungen''' für das Report-Rendering-System, insbesondere auf die Behebung von Race Conditions und Anzeigeproblemen, die bei schnellen Benutzerinteraktionen auftraten.&lt;br /&gt;
&lt;br /&gt;
* Race Condition beim Report-Rendering&lt;br /&gt;
** '''Behoben: Schnelles Auswählen/Abwählen führte dazu, dass Reports mit ungültigen oder fehlenden Filtern gerendert wurden'''&lt;br /&gt;
*** Reports verarbeiten nun korrekt wenn Benutzer schnell Elemente auswählen und wieder abwählen&lt;br /&gt;
*** Filteränderungen werden blockiert, während ein Render-Vorgang läuft&lt;br /&gt;
*** Ausstehende Filteränderungen werden nachverfolgt und nach Abschluss des Renderings erneut ausgewertet&lt;br /&gt;
*** Reports mit &amp;lt;code&amp;gt;selectById&amp;lt;/code&amp;gt; werden nun korrekt ausgeblendet, wenn nichts ausgewählt ist&lt;br /&gt;
&lt;br /&gt;
* PDF-Anzeigeskalierungsproblem &lt;br /&gt;
** '''Behoben: PDF-Skalierungsprobleme durch Neuerstellung des BrowserFrames bei jedem Rendering'''&lt;br /&gt;
&lt;br /&gt;
=== Anmeldebildschirm ===&lt;br /&gt;
&lt;br /&gt;
Der Anmeldebildschirm zeigt nun während der Initialisierung des Persistence-Services einen Statustext an.&lt;br /&gt;
&lt;br /&gt;
* Lauftext-Anzeige (Marquee) mit dem aktuellen Status des Persistence-Services&lt;br /&gt;
* Deaktivierung aller Anmeldesteuerelemente während der Wartezeit&lt;br /&gt;
&lt;br /&gt;
=== Start der Anwendung ===&lt;br /&gt;
&lt;br /&gt;
* Blockierungen der Initialisierungsvorgänge durch Warten auf Serviceregistrierung während des Anwendungsstarts reduziert. &amp;lt;br&amp;gt;Dadurch verändert sich das Startverhalten, insbesondere die Reihenfolge der Anwendung. Insgesamt schnelleres Laden der Bundles.&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4623</id>
		<title>Releasenotes 2026 OS.Softwarefactory</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4623"/>
				<updated>2026-10-29T10:39:31Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Version 5.3.0.20261029 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261029 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
 ** Fix: org.eclipse.osbp.persistence: Wartezeit beim Start („Getting a lock required more than 20000 ms“). Jede Persistence Unit las beim Anlegen ihren EclipseLink-Cachetyp und ihre Cachegröße (&amp;lt;code&amp;gt;EclipseLink/&amp;amp;lt;Unit&amp;amp;gt;#cacheTypeDefault&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#cacheSizeDefault&amp;lt;/code&amp;gt;) aus der Konfiguration. Das führte zu einer gegenseitigen Blockierung der Initialisierung. Die Werte werden nun einmal auf dem Start-Thread gelesen, damit tritt die Sperre nicht mehr auf.&lt;br /&gt;
** Neu: org.eclipse.osbp.persistence: Flyway findet Datenbankmigrationen, die Bundles mitbringen. Ein Bundle nennt seinen Migrationsordner im Manifest-Header &amp;lt;code&amp;gt;OSBP-Flyway-Migration: db/migration&amp;lt;/code&amp;gt; und legt die Skripte als &amp;lt;code&amp;gt;&amp;amp;lt;Persistence Unit&amp;amp;gt;/&amp;amp;lt;Hersteller&amp;amp;gt;/V&amp;amp;lt;Version&amp;amp;gt;__&amp;amp;lt;Beschreibung&amp;amp;gt;.sql&amp;lt;/code&amp;gt; ab, z.B. &amp;lt;code&amp;gt;monitoringData/mysql/V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;. Ein Skript läuft auf der Datenquelle, für die seine Persistence Unit konfiguriert ist, und zwar vor dem Anlegen und Erweitern der Tabellen durch EclipseLink. Der Herstellerordner wird aus den JDBC-Metadaten bestimmt: &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt; (auch für MariaDB), &amp;lt;code&amp;gt;postgresql&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oracle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sqlserver&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;derby&amp;lt;/code&amp;gt;. Die neue Klasse &amp;lt;code&amp;gt;BundleMigrations&amp;lt;/code&amp;gt; sammelt die Migrationsskripte und übergibt sie Flyway als Resource Provider; die Skripte im Dateisystemordner der Datenquelle (&amp;lt;code&amp;gt;-DFlyway.&amp;amp;lt;Datenquelle&amp;amp;gt;.DatabaseMigrationSourcePath&amp;lt;/code&amp;gt;) werden mitgelesen. '''Die Migrationen laufen weiterhin nur mit &amp;lt;code&amp;gt;-DFlyway.active=true&amp;lt;/code&amp;gt;;'''&lt;br /&gt;
** org.eclipse.osbp.persistence: Jedes Bundle mit Migrationen hat eine eigene Historientabelle, &amp;lt;code&amp;gt;flyway_&amp;lt;/code&amp;gt; und der symbolische Name, gekürzt wie ein Logger Klassennamen kürzt (führende Segmente auf ihren Anfangsbuchstaben, bis höchstens 30 Zeichen erreicht sind): &amp;lt;code&amp;gt;org.eclipse.osbp.system.monitoring.base&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;flyway_oeos_monitoring_base&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;net.osbee.app.bdi.ex.model.entity&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;flyway_noa_bdi_ex_model_entity&amp;lt;/code&amp;gt;. Versionen müssen innerhalb eines Bundles eindeutig sein. Scheitern die Migrationen eines Bundles, wird das mit „the migrations of &amp;amp;lt;Bundle&amp;amp;gt; were NOT applied“ protokolliert, die übrigen Bundles laufen weiter. Ergäben zwei Bundles denselben gekürzten Namen, werden beide mit einem Fehler abgewiesen, statt sich eine Historie zu teilen. Die Skripte des Dateisystemordners behalten Flyways Standardtabelle &amp;lt;code&amp;gt;flyway_schema_history&amp;lt;/code&amp;gt;; eine Quelle ohne Skripte läuft gar nicht&lt;br /&gt;
** Fix: org.eclipse.osbp.persistence: Flyway lief bei jedem Start mit &amp;lt;code&amp;gt;baseline()&amp;lt;/code&amp;gt;. Sobald die Historie Einträge hatte, lehnte Flyway das mit einer Ausnahme ab, die verschluckt wurde – &amp;lt;code&amp;gt;migrate()&amp;lt;/code&amp;gt; lief danach nie. Eine bestehende Datenbank ohne Historie wird nun über &amp;lt;code&amp;gt;baselineOnMigrate&amp;lt;/code&amp;gt; einmalig mit Version 0 versehen. Ebenso entfällt &amp;lt;code&amp;gt;repair()&amp;lt;/code&amp;gt; bei jedem Start: Es schrieb die Historie auf ein nachträglich geändertes oder ersetztes Skript um, das dann nie lief; ein solches Skript scheitert nun an der Prüfsumme. Versionen dürfen außer der Reihe eintreffen (&amp;lt;code&amp;gt;outOfOrder&amp;lt;/code&amp;gt;), ein entferntes, bereits gelaufenes Skript ist kein Fehler mehr.&lt;br /&gt;
** Fix: org.eclipse.osbp.system.configuration (monitoring.base): Überwachungseinträge gingen auf älteren Datenbanken verloren. Datenbanken, die mit einem früheren Monitoring-Modell angelegt wurden, tragen noch eindeutige Indizes auf einem Namen allein (&amp;lt;code&amp;gt;MONITOR_SUB_CATEGORY.MSC_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_CATEGORY.MCA_NAME&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DK&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_MAIN_CATEGORY.MMCA_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_COMPONENT.MCO_NAME&amp;lt;/code&amp;gt;). Das Modell verlangt einen eindeutigen Namen nur unterhalb des jeweiligen Elternelements; die Schemagenerierung legt Indizes an, entfernt aber nie einen. Eine zweite Kategorie mit einer gleichnamigen Unterkategorie – etwa „COMPLETE“ unter &amp;lt;code&amp;gt;XRECHNUNG_UP&amp;lt;/code&amp;gt; und unter &amp;lt;code&amp;gt;ZUGFERD_UP&amp;lt;/code&amp;gt; – scheiterte daher an einem doppelten Schlüssel, &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; fing den Fehler ab, und der Eintrag fehlte (auf einer BDI-Installation über 1.000 solcher Fehler an einem Tag, dazu „transactionRollback - no transactionhandler found“). Ebenso konnten sich zwei Installationen mit gemeinsamer Datenbank nicht beide als Komponente „Application“ anmelden. Die erste Flyway-Migration des Bundles (&amp;lt;code&amp;gt;V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;, für MySQL/MariaDB, PostgreSQL und Oracle) entfernt diese Indizes; &amp;lt;code&amp;gt;MONITOR_COMPONENTI1&amp;lt;/code&amp;gt; legt die Schemagenerierung danach in der Form des Modells (&amp;lt;code&amp;gt;MCO_NAME, MCO_INSTALLATION&amp;lt;/code&amp;gt;) neu an. Da die Indizes nicht mehr im Modell stehen, hängen ihre Namen vom Generator ab, der die Datenbank angelegt hat; die Skripte finden sie daher an ihrer Struktur (eindeutig, kein Primärschlüssel, genau eine dieser Spalten). Auf einer neuen oder bereits bereinigten Datenbank ändern sie nichts. '''Die PostgreSQL- und Oracle-Skripte sind ungetestet.''' Ohne Flyway lassen sich die Indizes auch von Hand entfernen (auf den lokalen Datenbanken &amp;lt;code&amp;gt;shipment&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;pos&amp;lt;/code&amp;gt; geschehen)&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Hinweis für Produkte mit REST-Diensten über ECF: Das Bundle &amp;lt;code&amp;gt;org.eclipse.ecf.osgi.services.remoteserviceadmin.console&amp;lt;/code&amp;gt; (Konsolenbefehle &amp;lt;code&amp;gt;rsa …&amp;lt;/code&amp;gt;) sollte nicht automatisch starten. Seine Komponente &amp;lt;code&amp;gt;RSACommand&amp;lt;/code&amp;gt; benötigt den &amp;lt;code&amp;gt;RemoteServiceAdmin&amp;lt;/code&amp;gt;; während ECF diesen beim Export der Dienste erzeugt, blockieren sich ECF und DS gegenseitig, bis DS nach seiner Wartezeit (&amp;lt;code&amp;gt;-Dequinox.scr.waitTimeOnBlock&amp;lt;/code&amp;gt;, in BDI 20 s) abbricht. In BDI und im CX-Portal ist es auf &amp;lt;code&amp;gt;autoStart=&amp;quot;false&amp;quot;&amp;lt;/code&amp;gt; gesetzt; POS startet es nicht. Zusammen mit der Korrektur oben startet BDI in der IDE ohne Sperrmeldungen (67 s statt 74–101 s). Es verbleibt die Warnung „Enabling components of bundle org.eclipse.osbp.xtext.builder.metadata.services did not complete in 30000 ms“: Das ist das Laden der DSL-Modelle (rund 35 s) auf dem DS-Thread, keine Sperre&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Flyway Integration: org.eclipse.osbp.dependencies-mbp, org.eclipse.osbp.dependencies - Flyway 9 enthält die Unterstützung für MySQL und MariaDB nicht mehr im Kern, sondern im Modul &amp;lt;code&amp;gt;flyway-mysql&amp;lt;/code&amp;gt;, das sich über &amp;lt;code&amp;gt;META-INF/services&amp;lt;/code&amp;gt; registriert und von Flyway mit dessen eigenem Class Loader gesucht wird. Das Modul wird daher als Fragment &amp;lt;code&amp;gt;org.flywaydb.database.mysql&amp;lt;/code&amp;gt; 9.14.0.v20261028 an &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; ausgeliefert (das Manifest des Originals nennt sich selbst &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; und ist so nicht verwendbar) und mit dem Feature &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.feature.flyway&amp;lt;/code&amp;gt; verteilt.&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261012 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** org.eclipse.osbp.dsl (Entity,DTO):&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (1) – &amp;lt;code&amp;gt;AbstractOppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;MappingContext&amp;lt;/code&amp;gt; deklarieren kein &amp;lt;code&amp;gt;finalize()&amp;lt;/code&amp;gt; mehr. Jede &amp;lt;code&amp;gt;OppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OppositeContainmentDtoList&amp;lt;/code&amp;gt; war dadurch finalisierbar, überlebte die Garbage Collection, die sie als unerreichbar erkannt hatte, und hielt bis zur Abarbeitung durch den einzelnen Finalizer-Thread ihren gesamten Objektgraphen am Leben (DTOs, Entitäten, Persistenzkontexte). In einem Kundenabzug waren von 7,56 Mio. Finalizer-Einträgen 7,51 Mio. solche Listen. Die Listener, die der Finalizer abmelden sollte, werden bereits in &amp;lt;code&amp;gt;clear()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;remove()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;resolve()&amp;lt;/code&amp;gt; abgemeldet&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (2) – ein DTO hält für das spätere Nachladen einer Lazy-Referenz nicht mehr die abgelöste Entität fest, sondern nur noch deren Klasse und ID (neue Klasse &amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;org.eclipse.osbp.dsl.dto.lib&amp;lt;/code&amp;gt;). Die Entität hielt über ihre Lazy-Beziehungen den gesamten Persistenzkontext (&amp;lt;code&amp;gt;RepeatableWriteUnitOfWork&amp;lt;/code&amp;gt; samt aller darin geklonten Entitäten), obwohl &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; nur Klasse und ID benötigt. Gemessen an einer Kasse: rund 42 festgehaltene Persistenzkontexte je Verkauf vorher, praktisch keiner danach. Die ID wird erst am Ende des Mappings übernommen, weil der generierte Mapper &amp;lt;code&amp;gt;initialize(entity)&amp;lt;/code&amp;gt; vor &amp;lt;code&amp;gt;setId&amp;lt;/code&amp;gt; aufruft und eine neue Entität bis dahin die zufällige ID ihres Konstruktors trägt; liefert die Datenbank die ID erst später, bleibt es beim bisherigen Verhalten. '''Der Generator (&amp;lt;code&amp;gt;DtoTypesBuilder&amp;lt;/code&amp;gt;) erzeugt den neuen Aufruf; wirksam wird die Änderung erst mit neu generierten DTOs.''' Nicht neu generierte DTOs laufen unverändert weiter; neu generierte DTOs setzen ein &amp;lt;code&amp;gt;dto.lib&amp;lt;/code&amp;gt; ab dem 07.10.2026 voraus&lt;br /&gt;
*** &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; meldet nun, welche Zeile er nicht nachladen konnte. Liefert &amp;lt;code&amp;gt;em.find&amp;lt;/code&amp;gt; kein Ergebnis, wird ein Fehler mit Entitätsklasse, ID, Eigenschaft und DTO-Klasse protokolliert und eine &amp;lt;code&amp;gt;IllegalStateException&amp;lt;/code&amp;gt; geworfen. Bisher erschien an dieser Stelle nur eine &amp;lt;code&amp;gt;NullPointerException&amp;lt;/code&amp;gt; ohne Hinweis auf die Ursache&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;AbstractDTOService.closeEntityManager()&amp;lt;/code&amp;gt; fordert eine offene Transaktion nicht mehr nach jedem Lesezugriff zur Freigabe auf. Das Verhalten ist unverändert, die Warnung &amp;lt;code&amp;gt;dispose() refused&amp;lt;/code&amp;gt; erscheint aber nur noch, wenn tatsächlich jemand eine offene Transaktion abbauen will (zuvor rund zwei Meldungen je Verkauf und etwa 175 je Kassenabschluss)&lt;br /&gt;
*** Fix: Mit &amp;lt;code&amp;gt;-DsendTransactionEventAsync=true&amp;lt;/code&amp;gt; wartete &amp;lt;code&amp;gt;TransactionHandler.dispose()&amp;lt;/code&amp;gt; nach jedem Commit mindestens 800 ms, zuzüglich weiterer 800 ms je Durchlauf mit nicht leerer Ereigniswarteschlange – während &amp;lt;code&amp;gt;SessionManager&amp;lt;/code&amp;gt; die Sperre aller Transaktions-Handler hielt. An einer Kasse waren das mehrere Sekunden je Bon. &amp;lt;code&amp;gt;dispose()&amp;lt;/code&amp;gt; übergibt den Entity Manager nun dem Ereignis-Thread und kehrt sofort zurück; der Thread schließt ihn als letzten Schritt, sobald seine Warteschlange leer ist. Ein Ereignis, das sich nicht versenden lässt, beendet den Thread nicht mehr. Ohne den Schalter ändert sich nicht*s&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;MetadataBuilder&amp;lt;/code&amp;gt; macht beim ersten Scan zunächst alle gestarteten Bundles mit dem Header &amp;lt;code&amp;gt;OSBP-RuntimeBuilder-BundleSpace&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;Factory-Model&amp;lt;/code&amp;gt; im Bundle-Space bekannt und sucht erst danach nach Modellen. Bisher wurde ein Bundle erst beim Erreichen aufgenommen, während ein Participant ein Modell sofort laden kann: Ein ECView aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration&amp;lt;/code&amp;gt; nennt ein DTO aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration.base&amp;lt;/code&amp;gt; mit der höheren Bundle-ID, die Klasse wurde also je nach Reihenfolge beim Start nicht gefunden. In diesem Fall scheiterte &amp;lt;code&amp;gt;activate()&amp;lt;/code&amp;gt;, der DSL-Metadatendienst und damit der Persistenzdienst starteten nie, und die Anwendung blieb auf der Startseite stehen. Eine fehlgeschlagene Aktivierung wird nun zusätzlich als Fehler in das Anwendungslog geschrieben&lt;br /&gt;
** Fix: org.eclipse.osbp.dsl, org.eclipse.osbp.runtime: Vier Fehler in der sitzungsbezogenen Transaktionsverwaltung behoben. (a) &amp;lt;code&amp;gt;SessionManager.removeSession()&amp;lt;/code&amp;gt; gab den Transaktions-Handler unter einem Schlüssel frei, der nie passen konnte (&amp;lt;code&amp;gt;ISession&amp;lt;/code&amp;gt; hat kein &amp;lt;code&amp;gt;toString()&amp;lt;/code&amp;gt;), das Sicherheitsnetz griff also nie. (b) &amp;lt;code&amp;gt;disposeTransactionHandler&amp;lt;/code&amp;gt; entfernte den Eintrag auch dann, wenn die Transaktion noch offen war – der Entity Manager wurde aufgegeben und der Thread, der die Transaktion noch abschließen musste, fand seinen Handler nicht mehr. &amp;lt;code&amp;gt;ITransactionHandler&amp;lt;/code&amp;gt; erhält dafür &amp;lt;code&amp;gt;isDisposable()&amp;lt;/code&amp;gt; als Default-Methode. (c) Die Freigabe nach &amp;lt;code&amp;gt;transactionBegin&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Rollback&amp;lt;/code&amp;gt; steht nun in einem &amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt;; ein &amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt;, insbesondere ein &amp;lt;code&amp;gt;OutOfMemoryError&amp;lt;/code&amp;gt;, ließ den Handler bisher mit Entity Manager in einer statischen Map zurück. (d) &amp;lt;code&amp;gt;txnIsOpen&amp;lt;/code&amp;gt; wird auch bei einem fehlgeschlagenen Commit oder Rollback zurückgesetzt&lt;br /&gt;
** org.eclipse.osbp.persistence: &lt;br /&gt;
*** Der Startstatus nennt nun den Dienst, auf den der Persistenzdienst noch wartet. Die neue Komponente &amp;lt;code&amp;gt;PersistenceStartupStatus&amp;lt;/code&amp;gt; hat keine Pflichtreferenz, ist daher von Beginn an aktiv und setzt den Status auf „persistence service is waiting for the DSL metadata service“ (bzw. „the Mondrian manager“), bis diese gebunden sind. Bisher blieb es unabhängig vom Grund bei „persistenceservice not started yet“, und die wartenden Dienste protokollierten nichts&lt;br /&gt;
*** Beim Einrichten einer Persistence Unit wird jede verwaltete Klasse gemeldet, die nicht statisch gewebt ist, obwohl eine ihrer Oberklassen es ist – in einer ERROR-Zeile mit dem Hinweis, das Projekt vollständig neu zu bauen. Eine solche Klasse wird von EclipseLink instanziiert, aber nie befüllt: Der Dialog bleibt leer, und die nächste Aktualisierung scheitert mit „mapped to a primary key column ... Updates are not allowed“&lt;br /&gt;
** org.eclipse.osbp.ecview.extension: Fix: Das Grid vergisst die Zeilenschlüssel von Einträgen, die den Container als Ganzes verlassen haben. Vaadin gibt die Schlüssel nur über das clientseitige &amp;lt;code&amp;gt;dropRows&amp;lt;/code&amp;gt; frei; nach einem allgemeinen &amp;lt;code&amp;gt;ItemSetChange&amp;lt;/code&amp;gt;, wie ihn &amp;lt;code&amp;gt;removeAllItems()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;addAll()&amp;lt;/code&amp;gt; auslösen, blieben sie im &amp;lt;code&amp;gt;KeyMapper&amp;lt;/code&amp;gt; stehen und hielten jede jemals angezeigte Zeile samt ihrem DTO-Graphen. &amp;lt;code&amp;gt;GridPresentation.CustomGrid&amp;lt;/code&amp;gt; merkt sich die vergebenen Schlüssel und entfernt die nicht mehr enthaltenen&lt;br /&gt;
** org.osbee.datainterchange: Fix: FreeMarkers gemeinsam genutzte &amp;lt;code&amp;gt;InvalidReferenceException&amp;lt;/code&amp;gt; hält nicht mehr den ersten Exportlauf fest. Die statische Instanz übernahm die zum Zeitpunkt ihres Entstehens aktive Umgebung und damit das gesamte Datenmodell des ersten Exports für die Lebensdauer des Prozesses. Der Activator lädt die Klasse nun einmal außerhalb eines Template-Laufs&lt;br /&gt;
** org.eclipse.osbp.display: Fix: Das Display-Servlet wird nicht mehr auf dem Thread registriert, der die Bundles startet. Die Registrierung veröffentlicht einen Dienst, und Declarative Services verarbeitet dieses Ereignis auf dem veröffentlichenden Thread; dort wartete der Start aller nachfolgenden Bundles, in einem Fall über 50 Sekunden („Getting a lock required more than 50000 ms“). Die Registrierung läuft nun auf einem eigenen Thread&lt;br /&gt;
** org.eclipse.osbp.runtime, org.eclipse.osbp.blob, org.eclipse.osbp.autowireHelper, org.eclipse.osbp.ecview.extension, org.eclipse.osbp.ecview.addons, org.eclipse.osbp.infogrid.model: Neue Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; für String-Attribute. Ein Attribut mit &amp;lt;code&amp;gt;key=&amp;quot;barcode&amp;quot; value=&amp;quot;QRCode-128&amp;quot;&amp;lt;/code&amp;gt; wird schreibgeschützt als Barcode-Bild angezeigt, das aus seinem Klartextwert erzeugt wird – im Dialog über &amp;lt;code&amp;gt;BlobComponent&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;BlobUploadComponent&amp;lt;/code&amp;gt; (letztere dann ohne Schaltflächen) und in Grid-Spalten über den Blob-Bildkonverter&lt;br /&gt;
** org.eclipse.osbp.authentication, org.eclipse.osbp.system.configuration, org.eclipse.osbp.blob: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** org.eclipse.osbp.xtext.table, org.eclipse.osbp.xtext.table.common: Für Attribute mit der Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; wird ein Barcode-Lookup generiert; eine String-Zelle wird als Barcode-Bild angezeigt, wenn das Lookup einen Barcode-Typ trägt&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** net.osbee.pos.tse: Aufrufer können die BSI-Zertifizierungs-ID der TSE abfragen. Die SE-API bietet &amp;lt;code&amp;gt;getCertificationId&amp;lt;/code&amp;gt; in beiden API-Versionen, keiner der beiden Adapter reichte den Aufruf bisher durch&lt;br /&gt;
** net.osbee.pos.tse, net.osbee.pos.rksv: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Einführung der http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/restartService Seite. Damit können entweder Sessions gekillt oder der Service der Anwendung neu gestartet werden.&lt;br /&gt;
** Bei Nichterreichbarkeit der Datenbank wird die Anwendung beendet und der Fehlerstatus auf der Statusseite angezeigt.&lt;br /&gt;
** Das eingebettete &amp;lt;code&amp;gt;shiro-all-1.2.3.jar&amp;lt;/code&amp;gt; wurde durch &amp;lt;code&amp;gt;shiro-core&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; in Version 1.13.0 ersetzt. Damit sind CVE-2016-4437 (Remote Code Execution über das RememberMe-Cookie mit festem Schlüssel) und CVE-2019-12422 geschlossen. &amp;lt;code&amp;gt;encoder-1.2.3.jar&amp;lt;/code&amp;gt; kommt hinzu, weil &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; 1.13 &amp;lt;code&amp;gt;org.owasp.encoder&amp;lt;/code&amp;gt; zwingend importiert.&lt;br /&gt;
** Anmeldung: &lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm&amp;lt;/code&amp;gt; löst den Anmeldenamen vor jeder Abfrage in einen Distinguished Name auf. Active Directory akzeptiert für den Bind auch einen User Principal Name, beantwortet Abfragen damit aber mit LDAP-Fehler 34 (&amp;lt;code&amp;gt;invalidDNSyntax&amp;lt;/code&amp;gt;), sodass ein &amp;lt;code&amp;gt;userDnTemplate&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt; zwar anmeldete, dann aber an den Attributen scheiterte. &amp;lt;code&amp;gt;resolveUserDn&amp;lt;/code&amp;gt; sucht nun über &amp;lt;code&amp;gt;userPrincipalName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sAMAccountName&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;mail&amp;lt;/code&amp;gt;; die Suchbasis stammt aus dem RootDSE. Bestehende Vorlagen der Form &amp;lt;code&amp;gt;cn={0},ou=...&amp;lt;/code&amp;gt; verhalten sich unverändert. Zugleich behoben: eine &amp;lt;code&amp;gt;StringIndexOutOfBoundsException&amp;lt;/code&amp;gt; im E-Mail-Zweig und das Einsetzen des Benutzernamens in den Suchfilter per Verkettung (jetzt als &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt;, von JNDI maskiert)&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm.getUserDn&amp;lt;/code&amp;gt; maskierte nur das Komma. &amp;lt;code&amp;gt;escapeDnValue&amp;lt;/code&amp;gt; deckt nun alle Zeichen nach RFC 4514 Abschnitt 2.4 ab, sodass ein Benutzername die Bedeutung des DN nicht mehr verändern kann&lt;br /&gt;
*** Die Funktionalität „Angemeldet bleiben“ arbeitet nun mit einem signierten Token statt mit verschlüsselten Zugangsdaten. Das Cookie ist eine mit HMAC-SHA256 signierte Aussage über Benutzer, Mandant, Geltungsbereich, Ablaufdatum und Version und enthält keine Zugangsdaten. Es ist zustandslos, sodass beliebig viele Geräte und Browser gleichzeitig eines halten können.&lt;br /&gt;
*** Das „Angemeldet bleiben“-Cookie gilt je Anwendungsinstanz und Browser. Der Cookie-Name trägt einen Kurzhash über Schema, Host, Port, erstes Pfadsegment und Portal-ID, sodass zwei Anwendungen auf demselben Host nicht mehr das Cookie der jeweils anderen lesen. Die selbstgebaute Verschlüsselung entfällt vollständig. Das Cookie wird mit expliziter Lebensdauer, &amp;lt;code&amp;gt;SameSite=Lax&amp;lt;/code&amp;gt; und unter https mit &amp;lt;code&amp;gt;Secure&amp;lt;/code&amp;gt; geschrieben. Die Anmeldung aus einem Cookie wartet fünf Sekunden mit einem Hinweis auf der Anmeldemaske und lässt sich in dieser Zeit abbrechen; ein entferntes Häkchen löscht das Cookie nun in jedem Fall. Die Betrugsmeldung samt Kontosperre bei nicht passendem Cookie entfällt&lt;br /&gt;
*** Fix: Kennwörter erscheinen nicht mehr im Log – weder bei der Anmeldung in &amp;lt;code&amp;gt;AuthenticationProvider.check()&amp;lt;/code&amp;gt; (bisher im Klartext auf DEBUG) noch beim Zurücksetzen, wo der Nachrichtentext mit dem neuen Kennwort dreimal geschrieben wurde&lt;br /&gt;
*** Die Anzeige des neuen Kennworts auf der Anmeldemaske, wenn keine E-Mail versendet werden kann, ist nun eine konfigurierte Betriebsart: &amp;lt;code&amp;gt;Userinterface/showResetPasswordOnScreen&amp;lt;/code&amp;gt;, standardmäßig aus, mit Protokollierung auf WARN. '''Installationen ohne Mailserver müssen den Parameter einmalig setzen'''&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;doResetPassword&amp;lt;/code&amp;gt; hebt weder eine Sperre noch die Deaktivierung eines Kontos auf und setzt den Fehlversuchszähler nicht mehr zurück. Das Zurücksetzen kann jeder auslösen, der einen Benutzernamen eingibt; aufgehoben werden Sperre und Deaktivierung nur noch durch einen Administrator über &amp;lt;code&amp;gt;doUnlock&amp;lt;/code&amp;gt;&lt;br /&gt;
** System Configuration: &lt;br /&gt;
*** Parameter &amp;lt;code&amp;gt;RememberMeSecret&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;IConfigurationService&amp;lt;/code&amp;gt; ergänzt (&amp;lt;code&amp;gt;GLOBAL_PARAMETERS/RememberMeSecret&amp;lt;/code&amp;gt;). Der Schlüssel wird je Installation bei der ersten Benutzung der &amp;quot;RememberMe&amp;quot; Funktionalität einmal aus gezogen und von allen Anmeldungen geteilt; das Löschen des Eintrags macht alle „Angemeldet bleiben“-Cookies auf einmal ungültig.&lt;br /&gt;
*** Fix: Die Einstellungen füllten sich mit Platzhaltern „not set“. &amp;lt;code&amp;gt;ConfigurationService.getConfigurationString&amp;lt;/code&amp;gt; speicherte bei leerem Vorgabewert den Platzhalter und lieferte ihn als leere Zeichenkette zurück, sodass &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; stets eine weitere Zeile anhängte. &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; entfernt nun die Platzhalterzeilen des Schlüssels vor dem Schreiben, und ein gespeicherter Platzhalter gilt als „kein Wert“. &amp;lt;code&amp;gt;deleteConfigurations&amp;lt;/code&amp;gt; setzt zusätzlich den Cache zurück; gelöschte Einträge kamen bisher beim nächsten Lesen wieder&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Fix: org.eclipse.osbp.dependencies-mbp: Das Bundle &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.bundle.activemq.all.osgi&amp;lt;/code&amp;gt; enthält kein Log4j und kein eingebettetes slf4j mehr. &amp;lt;code&amp;gt;activemq-all&amp;lt;/code&amp;gt; brachte eine vollständige Kopie von Apache Log4j 1.2.17 mit (359 Klassen, darunter &amp;lt;code&amp;gt;JDBCAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSSink&amp;lt;/code&amp;gt; und chainsaw – betroffen von CVE-2021-4104, CVE-2022-23302, CVE-2022-23305 und CVE-2022-23307) sowie slf4j-api 1.7.13 und &amp;lt;code&amp;gt;slf4j-log4j12&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;Include-Resource&amp;lt;/code&amp;gt; bindet das Hersteller-Jar nun ohne &amp;lt;code&amp;gt;org.apache.log4j&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org.slf4j&amp;lt;/code&amp;gt;, deren Maven-Koordinaten, die &amp;lt;code&amp;gt;log4j.properties&amp;lt;/code&amp;gt; und Springs &amp;lt;code&amp;gt;Log4jConfigurer&amp;lt;/code&amp;gt; ein. ActiveMQ bezieht slf4j stattdessen aus dem Produkt (&amp;lt;code&amp;gt;org.slf4j.api&amp;lt;/code&amp;gt; 1.7.36)&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neue Dienststeuerungsseite unter &amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;. &lt;br /&gt;
*** Ein Bediener kann darüber – autorisiert durch eine reguläre Anwendungsanmeldung – hängende Sitzungen beenden oder den Dienst neu starten, ohne Zugriff auf den Serverrechner zu benötigen. Drei Stufen: Sitzungen des aufrufenden Arbeitsplatzes, alle Sitzungen, Neustart. Die Seite ist am Root-HTTP-Service registriert und bleibt damit erreichbar, wenn der Anwendungskontext selbst gestört ist; Markup, Stil, Skript und Texte (deutsch, englisch, französisch) sind deshalb in der Seite enthalten. Sitzungen werden über das Invalidieren der HTTP-Sitzung beendet. Der Neustart läuft über die Befehlswarteschlange der Anwendung; die Seite fragt anschließend die Anwendung ab und führt den Bediener über die Unterbrechung hinweg&lt;br /&gt;
*** Alle Aktionen der Dienststeuerungsseite werden im &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; unter denselben Koordinaten wie die Anmeldemaske protokolliert (fehlgeschlagene Anmeldung und Neustart als WARNING, gesperrtes Konto als ERROR, beendete Sitzungen als INFO). Eine abgelehnte Anmeldung sperrt das Formular für die Dauer der Wartezeit mit Countdown; der Zähler ist derselbe wie an der Anmeldemaske, sodass sich Fehlversuche auf beiden Wegen zur Kontosperre summieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260907 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Überarbeitung der Codebasis zur Entfernung veralteter und nicht benötigter Bundles&lt;br /&gt;
** Überarbeitung des Loginvorgangs / der Cookiespeicherung bei &amp;quot;remember me&amp;quot;. Es werden keine kritischen Daten mehr im Cookie gespeichert.&lt;br /&gt;
** Verbesserung der Übersetzungen&lt;br /&gt;
** Anpassungen für frz. Fiskalanforderungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Laden der Übersetzungen in die interne Tabelle beim Systemstart deutlich beschleunigt. Dadurch verbessertes Startverhalten der Anwendungen.&lt;br /&gt;
** Verbesserungen bei der frz. Tastaturunterstützung&lt;br /&gt;
** Verbesserungen der Übersetzungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260618 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Blockieren durch das Laden von Diensten während des Starts vermieden, dadurch schnellerer Anwendungsstart. Anderes Verhalten beim Start an der Benutzeroberfläche.&lt;br /&gt;
** Französische Tastaturunterstützung (AZERTY) im Keymapper der Statemachine ergänzt&lt;br /&gt;
** Login bezieht Build-Version und Hersteller nun aus den &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; (einheitliche Quelle)&lt;br /&gt;
** Neue gemeinsame Hilfsmethoden &amp;lt;code&amp;gt;getBuildVersion()&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;getVendor()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; zur Ermittlung der Build-Identität&lt;br /&gt;
** &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; setzt die Zeitstempel von &amp;lt;code&amp;gt;lastError&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;lastWarning&amp;lt;/code&amp;gt; nicht mehr zurück&lt;br /&gt;
** Fix: NPE in &amp;lt;code&amp;gt;org.eclipse.osbp.xtext.dialog.AutowireUiFactory&amp;lt;/code&amp;gt; behoben&lt;br /&gt;
** Version von 5.2.0 auf 5.3.0 angehoben&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-reverify&amp;lt;/code&amp;gt; (16px/32px) für die NF525-Schaltfläche zur erneuten Archivintegritätsprüfung&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-refresh.png&amp;lt;/code&amp;gt; ergänzt&lt;br /&gt;
** Grid – horizontale Bildlaufleiste wiederhergestellt&lt;br /&gt;
** Grid - Flex-Layout für Kassen-/POS-Grids wiederhergestellt (kollabierte Spalten behoben)&lt;br /&gt;
** französische Übersetzungen überarbeitet&lt;br /&gt;
&lt;br /&gt;
* Grammatiken/Generierung:&lt;br /&gt;
** org.eclipse.osbp.dsl: Benutzerdefinierte &amp;lt;code&amp;gt;@PreRemove&amp;lt;/code&amp;gt;-Hooks werden in der generierten &amp;lt;code&amp;gt;preRemove()&amp;lt;/code&amp;gt;-Methode zusammengeführt&lt;br /&gt;
** org.eclipse.osbp.xtext.i18n: i18n-Generator erzeugt nun das byte-genaue Eclipse-Babel-Format&lt;br /&gt;
&lt;br /&gt;
* POS Framework für franz. Fiskalanforderungen eingeführt&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260410 ==&lt;br /&gt;
&lt;br /&gt;
* POS Framework: &lt;br /&gt;
** Performanceverbesserung beim Kassieren&lt;br /&gt;
** Multi-Protokoll Unterstützung für Paymentterminal &lt;br /&gt;
*** frz. Protokolle &amp;quot;Concert&amp;quot;, &amp;quot;Protocol E&amp;quot;&lt;br /&gt;
*** &amp;quot;Mock&amp;quot; für Tests&lt;br /&gt;
*** Statemachine DSL erweitert: protocol Parameter für Paymentterminal&lt;br /&gt;
*** &amp;quot;Shared Payment Terminal&amp;quot;&lt;br /&gt;
**** locking im PaymentTerminalService implementiert&lt;br /&gt;
**** pro Terminal über ConfigService einstellbar&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260402 ==&lt;br /&gt;
&lt;br /&gt;
Die Version verbessert das Startverhalten einer Anwendung und bringt mehr Informationen über den Status des Starts auf den Bildschirm&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Anzeige des Persistenzservice-Status auf dem Login-Bildschirm&lt;br /&gt;
** Information über den Persistenzservice auf der Fehlerseite hinzugefügt&lt;br /&gt;
** Beim Start wird nun überall auf den Persistenzservice statt nur auf den ConfigurationService gewartet&lt;br /&gt;
&lt;br /&gt;
* BPM:&lt;br /&gt;
** Fix: net.osbee.bpm: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** Fix: net.osbee.pos.epay: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260305 ==&lt;br /&gt;
&lt;br /&gt;
=== Report Anzeige ===&lt;br /&gt;
&lt;br /&gt;
Diese Version konzentriert sich auf '''Stabilitätsverbesserungen''' für das Report-Rendering-System, insbesondere auf die Behebung von Race Conditions und Anzeigeproblemen, die bei schnellen Benutzerinteraktionen auftraten.&lt;br /&gt;
&lt;br /&gt;
* Race Condition beim Report-Rendering&lt;br /&gt;
** '''Behoben: Schnelles Auswählen/Abwählen führte dazu, dass Reports mit ungültigen oder fehlenden Filtern gerendert wurden'''&lt;br /&gt;
*** Reports verarbeiten nun korrekt wenn Benutzer schnell Elemente auswählen und wieder abwählen&lt;br /&gt;
*** Filteränderungen werden blockiert, während ein Render-Vorgang läuft&lt;br /&gt;
*** Ausstehende Filteränderungen werden nachverfolgt und nach Abschluss des Renderings erneut ausgewertet&lt;br /&gt;
*** Reports mit &amp;lt;code&amp;gt;selectById&amp;lt;/code&amp;gt; werden nun korrekt ausgeblendet, wenn nichts ausgewählt ist&lt;br /&gt;
&lt;br /&gt;
* PDF-Anzeigeskalierungsproblem &lt;br /&gt;
** '''Behoben: PDF-Skalierungsprobleme durch Neuerstellung des BrowserFrames bei jedem Rendering'''&lt;br /&gt;
&lt;br /&gt;
=== Anmeldebildschirm ===&lt;br /&gt;
&lt;br /&gt;
Der Anmeldebildschirm zeigt nun während der Initialisierung des Persistence-Services einen Statustext an.&lt;br /&gt;
&lt;br /&gt;
* Lauftext-Anzeige (Marquee) mit dem aktuellen Status des Persistence-Services&lt;br /&gt;
* Deaktivierung aller Anmeldesteuerelemente während der Wartezeit&lt;br /&gt;
&lt;br /&gt;
=== Start der Anwendung ===&lt;br /&gt;
&lt;br /&gt;
* Blockierungen der Initialisierungsvorgänge durch Warten auf Serviceregistrierung während des Anwendungsstarts reduziert. &amp;lt;br&amp;gt;Dadurch verändert sich das Startverhalten, insbesondere die Reihenfolge der Anwendung. Insgesamt schnelleres Laden der Bundles.&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4622</id>
		<title>Releasenotes 2026 OS.Softwarefactory</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4622"/>
				<updated>2026-10-29T10:38:35Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261029 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Fix: org.eclipse.osbp.persistence: Wartezeit beim Start („Getting a lock required more than 20000 ms“). Jede Persistence Unit las beim Anlegen ihren EclipseLink-Cachetyp und ihre Cachegröße (&amp;lt;code&amp;gt;EclipseLink/&amp;amp;lt;Unit&amp;amp;gt;#cacheTypeDefault&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#cacheSizeDefault&amp;lt;/code&amp;gt;) aus der Konfiguration. Das führte zu einer gegenseitigen Blockierung der Initialisierung. Die Werte werden nun einmal auf dem Start-Thread gelesen, damit tritt die Sperre nicht mehr auf.&lt;br /&gt;
&lt;br /&gt;
** Neu: org.eclipse.osbp.persistence: Flyway findet Datenbankmigrationen, die Bundles mitbringen. Ein Bundle nennt seinen Migrationsordner im Manifest-Header &amp;lt;code&amp;gt;OSBP-Flyway-Migration: db/migration&amp;lt;/code&amp;gt; und legt die Skripte als &amp;lt;code&amp;gt;&amp;amp;lt;Persistence Unit&amp;amp;gt;/&amp;amp;lt;Hersteller&amp;amp;gt;/V&amp;amp;lt;Version&amp;amp;gt;__&amp;amp;lt;Beschreibung&amp;amp;gt;.sql&amp;lt;/code&amp;gt; ab, z.B. &amp;lt;code&amp;gt;monitoringData/mysql/V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;. Ein Skript läuft auf der Datenquelle, für die seine Persistence Unit konfiguriert ist, und zwar vor dem Anlegen und Erweitern der Tabellen durch EclipseLink. Der Herstellerordner wird aus den JDBC-Metadaten bestimmt: &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt; (auch für MariaDB), &amp;lt;code&amp;gt;postgresql&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oracle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sqlserver&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;derby&amp;lt;/code&amp;gt;. Die neue Klasse &amp;lt;code&amp;gt;BundleMigrations&amp;lt;/code&amp;gt; sammelt die Migrationsskripte und übergibt sie Flyway als Resource Provider; die Skripte im Dateisystemordner der Datenquelle (&amp;lt;code&amp;gt;-DFlyway.&amp;amp;lt;Datenquelle&amp;amp;gt;.DatabaseMigrationSourcePath&amp;lt;/code&amp;gt;) werden mitgelesen. '''Die Migrationen laufen weiterhin nur mit &amp;lt;code&amp;gt;-DFlyway.active=true&amp;lt;/code&amp;gt;;'''&lt;br /&gt;
&lt;br /&gt;
** org.eclipse.osbp.persistence: Jedes Bundle mit Migrationen hat eine eigene Historientabelle, &amp;lt;code&amp;gt;flyway_&amp;lt;/code&amp;gt; und der symbolische Name, gekürzt wie ein Logger Klassennamen kürzt (führende Segmente auf ihren Anfangsbuchstaben, bis höchstens 30 Zeichen erreicht sind): &amp;lt;code&amp;gt;org.eclipse.osbp.system.monitoring.base&amp;lt;/code&amp;gt; wird zu &amp;lt;code&amp;gt;flyway_oeos_monitoring_base&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;net.osbee.app.bdi.ex.model.entity&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;flyway_noa_bdi_ex_model_entity&amp;lt;/code&amp;gt;. Versionen müssen innerhalb eines Bundles eindeutig sein. Scheitern die Migrationen eines Bundles, wird das mit „the migrations of &amp;amp;lt;Bundle&amp;amp;gt; were NOT applied“ protokolliert, die übrigen Bundles laufen weiter. Ergäben zwei Bundles denselben gekürzten Namen, werden beide mit einem Fehler abgewiesen, statt sich eine Historie zu teilen. Die Skripte des Dateisystemordners behalten Flyways Standardtabelle &amp;lt;code&amp;gt;flyway_schema_history&amp;lt;/code&amp;gt;; eine Quelle ohne Skripte läuft gar nicht&lt;br /&gt;
&lt;br /&gt;
** Fix: org.eclipse.osbp.persistence: Flyway lief bei jedem Start mit &amp;lt;code&amp;gt;baseline()&amp;lt;/code&amp;gt;. Sobald die Historie Einträge hatte, lehnte Flyway das mit einer Ausnahme ab, die verschluckt wurde – &amp;lt;code&amp;gt;migrate()&amp;lt;/code&amp;gt; lief danach nie. Eine bestehende Datenbank ohne Historie wird nun über &amp;lt;code&amp;gt;baselineOnMigrate&amp;lt;/code&amp;gt; einmalig mit Version 0 versehen. Ebenso entfällt &amp;lt;code&amp;gt;repair()&amp;lt;/code&amp;gt; bei jedem Start: Es schrieb die Historie auf ein nachträglich geändertes oder ersetztes Skript um, das dann nie lief; ein solches Skript scheitert nun an der Prüfsumme. Versionen dürfen außer der Reihe eintreffen (&amp;lt;code&amp;gt;outOfOrder&amp;lt;/code&amp;gt;), ein entferntes, bereits gelaufenes Skript ist kein Fehler mehr.&lt;br /&gt;
&lt;br /&gt;
** Fix: org.eclipse.osbp.system.configuration (monitoring.base): Überwachungseinträge gingen auf älteren Datenbanken verloren. Datenbanken, die mit einem früheren Monitoring-Modell angelegt wurden, tragen noch eindeutige Indizes auf einem Namen allein (&amp;lt;code&amp;gt;MONITOR_SUB_CATEGORY.MSC_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_CATEGORY.MCA_NAME&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DK&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_MAIN_CATEGORY.MMCA_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MONITOR_COMPONENT.MCO_NAME&amp;lt;/code&amp;gt;). Das Modell verlangt einen eindeutigen Namen nur unterhalb des jeweiligen Elternelements; die Schemagenerierung legt Indizes an, entfernt aber nie einen. Eine zweite Kategorie mit einer gleichnamigen Unterkategorie – etwa „COMPLETE“ unter &amp;lt;code&amp;gt;XRECHNUNG_UP&amp;lt;/code&amp;gt; und unter &amp;lt;code&amp;gt;ZUGFERD_UP&amp;lt;/code&amp;gt; – scheiterte daher an einem doppelten Schlüssel, &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; fing den Fehler ab, und der Eintrag fehlte (auf einer BDI-Installation über 1.000 solcher Fehler an einem Tag, dazu „transactionRollback - no transactionhandler found“). Ebenso konnten sich zwei Installationen mit gemeinsamer Datenbank nicht beide als Komponente „Application“ anmelden. Die erste Flyway-Migration des Bundles (&amp;lt;code&amp;gt;V2026.10.28.1__drop_stale_monitor_unique_indexes.sql&amp;lt;/code&amp;gt;, für MySQL/MariaDB, PostgreSQL und Oracle) entfernt diese Indizes; &amp;lt;code&amp;gt;MONITOR_COMPONENTI1&amp;lt;/code&amp;gt; legt die Schemagenerierung danach in der Form des Modells (&amp;lt;code&amp;gt;MCO_NAME, MCO_INSTALLATION&amp;lt;/code&amp;gt;) neu an. Da die Indizes nicht mehr im Modell stehen, hängen ihre Namen vom Generator ab, der die Datenbank angelegt hat; die Skripte finden sie daher an ihrer Struktur (eindeutig, kein Primärschlüssel, genau eine dieser Spalten). Auf einer neuen oder bereits bereinigten Datenbank ändern sie nichts. '''Die PostgreSQL- und Oracle-Skripte sind ungetestet.''' Ohne Flyway lassen sich die Indizes auch von Hand entfernen (auf den lokalen Datenbanken &amp;lt;code&amp;gt;shipment&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;pos&amp;lt;/code&amp;gt; geschehen)&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Hinweis für Produkte mit REST-Diensten über ECF: Das Bundle &amp;lt;code&amp;gt;org.eclipse.ecf.osgi.services.remoteserviceadmin.console&amp;lt;/code&amp;gt; (Konsolenbefehle &amp;lt;code&amp;gt;rsa …&amp;lt;/code&amp;gt;) sollte nicht automatisch starten. Seine Komponente &amp;lt;code&amp;gt;RSACommand&amp;lt;/code&amp;gt; benötigt den &amp;lt;code&amp;gt;RemoteServiceAdmin&amp;lt;/code&amp;gt;; während ECF diesen beim Export der Dienste erzeugt, blockieren sich ECF und DS gegenseitig, bis DS nach seiner Wartezeit (&amp;lt;code&amp;gt;-Dequinox.scr.waitTimeOnBlock&amp;lt;/code&amp;gt;, in BDI 20 s) abbricht. In BDI und im CX-Portal ist es auf &amp;lt;code&amp;gt;autoStart=&amp;quot;false&amp;quot;&amp;lt;/code&amp;gt; gesetzt; POS startet es nicht. Zusammen mit der Korrektur oben startet BDI in der IDE ohne Sperrmeldungen (67 s statt 74–101 s). Es verbleibt die Warnung „Enabling components of bundle org.eclipse.osbp.xtext.builder.metadata.services did not complete in 30000 ms“: Das ist das Laden der DSL-Modelle (rund 35 s) auf dem DS-Thread, keine Sperre&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Flyway Integration: org.eclipse.osbp.dependencies-mbp, org.eclipse.osbp.dependencies - Flyway 9 enthält die Unterstützung für MySQL und MariaDB nicht mehr im Kern, sondern im Modul &amp;lt;code&amp;gt;flyway-mysql&amp;lt;/code&amp;gt;, das sich über &amp;lt;code&amp;gt;META-INF/services&amp;lt;/code&amp;gt; registriert und von Flyway mit dessen eigenem Class Loader gesucht wird. Das Modul wird daher als Fragment &amp;lt;code&amp;gt;org.flywaydb.database.mysql&amp;lt;/code&amp;gt; 9.14.0.v20261028 an &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; ausgeliefert (das Manifest des Originals nennt sich selbst &amp;lt;code&amp;gt;org.flywaydb.core&amp;lt;/code&amp;gt; und ist so nicht verwendbar) und mit dem Feature &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.feature.flyway&amp;lt;/code&amp;gt; verteilt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261012 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** org.eclipse.osbp.dsl (Entity,DTO):&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (1) – &amp;lt;code&amp;gt;AbstractOppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;MappingContext&amp;lt;/code&amp;gt; deklarieren kein &amp;lt;code&amp;gt;finalize()&amp;lt;/code&amp;gt; mehr. Jede &amp;lt;code&amp;gt;OppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OppositeContainmentDtoList&amp;lt;/code&amp;gt; war dadurch finalisierbar, überlebte die Garbage Collection, die sie als unerreichbar erkannt hatte, und hielt bis zur Abarbeitung durch den einzelnen Finalizer-Thread ihren gesamten Objektgraphen am Leben (DTOs, Entitäten, Persistenzkontexte). In einem Kundenabzug waren von 7,56 Mio. Finalizer-Einträgen 7,51 Mio. solche Listen. Die Listener, die der Finalizer abmelden sollte, werden bereits in &amp;lt;code&amp;gt;clear()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;remove()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;resolve()&amp;lt;/code&amp;gt; abgemeldet&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (2) – ein DTO hält für das spätere Nachladen einer Lazy-Referenz nicht mehr die abgelöste Entität fest, sondern nur noch deren Klasse und ID (neue Klasse &amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;org.eclipse.osbp.dsl.dto.lib&amp;lt;/code&amp;gt;). Die Entität hielt über ihre Lazy-Beziehungen den gesamten Persistenzkontext (&amp;lt;code&amp;gt;RepeatableWriteUnitOfWork&amp;lt;/code&amp;gt; samt aller darin geklonten Entitäten), obwohl &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; nur Klasse und ID benötigt. Gemessen an einer Kasse: rund 42 festgehaltene Persistenzkontexte je Verkauf vorher, praktisch keiner danach. Die ID wird erst am Ende des Mappings übernommen, weil der generierte Mapper &amp;lt;code&amp;gt;initialize(entity)&amp;lt;/code&amp;gt; vor &amp;lt;code&amp;gt;setId&amp;lt;/code&amp;gt; aufruft und eine neue Entität bis dahin die zufällige ID ihres Konstruktors trägt; liefert die Datenbank die ID erst später, bleibt es beim bisherigen Verhalten. '''Der Generator (&amp;lt;code&amp;gt;DtoTypesBuilder&amp;lt;/code&amp;gt;) erzeugt den neuen Aufruf; wirksam wird die Änderung erst mit neu generierten DTOs.''' Nicht neu generierte DTOs laufen unverändert weiter; neu generierte DTOs setzen ein &amp;lt;code&amp;gt;dto.lib&amp;lt;/code&amp;gt; ab dem 07.10.2026 voraus&lt;br /&gt;
*** &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; meldet nun, welche Zeile er nicht nachladen konnte. Liefert &amp;lt;code&amp;gt;em.find&amp;lt;/code&amp;gt; kein Ergebnis, wird ein Fehler mit Entitätsklasse, ID, Eigenschaft und DTO-Klasse protokolliert und eine &amp;lt;code&amp;gt;IllegalStateException&amp;lt;/code&amp;gt; geworfen. Bisher erschien an dieser Stelle nur eine &amp;lt;code&amp;gt;NullPointerException&amp;lt;/code&amp;gt; ohne Hinweis auf die Ursache&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;AbstractDTOService.closeEntityManager()&amp;lt;/code&amp;gt; fordert eine offene Transaktion nicht mehr nach jedem Lesezugriff zur Freigabe auf. Das Verhalten ist unverändert, die Warnung &amp;lt;code&amp;gt;dispose() refused&amp;lt;/code&amp;gt; erscheint aber nur noch, wenn tatsächlich jemand eine offene Transaktion abbauen will (zuvor rund zwei Meldungen je Verkauf und etwa 175 je Kassenabschluss)&lt;br /&gt;
*** Fix: Mit &amp;lt;code&amp;gt;-DsendTransactionEventAsync=true&amp;lt;/code&amp;gt; wartete &amp;lt;code&amp;gt;TransactionHandler.dispose()&amp;lt;/code&amp;gt; nach jedem Commit mindestens 800 ms, zuzüglich weiterer 800 ms je Durchlauf mit nicht leerer Ereigniswarteschlange – während &amp;lt;code&amp;gt;SessionManager&amp;lt;/code&amp;gt; die Sperre aller Transaktions-Handler hielt. An einer Kasse waren das mehrere Sekunden je Bon. &amp;lt;code&amp;gt;dispose()&amp;lt;/code&amp;gt; übergibt den Entity Manager nun dem Ereignis-Thread und kehrt sofort zurück; der Thread schließt ihn als letzten Schritt, sobald seine Warteschlange leer ist. Ein Ereignis, das sich nicht versenden lässt, beendet den Thread nicht mehr. Ohne den Schalter ändert sich nicht*s&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;MetadataBuilder&amp;lt;/code&amp;gt; macht beim ersten Scan zunächst alle gestarteten Bundles mit dem Header &amp;lt;code&amp;gt;OSBP-RuntimeBuilder-BundleSpace&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;Factory-Model&amp;lt;/code&amp;gt; im Bundle-Space bekannt und sucht erst danach nach Modellen. Bisher wurde ein Bundle erst beim Erreichen aufgenommen, während ein Participant ein Modell sofort laden kann: Ein ECView aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration&amp;lt;/code&amp;gt; nennt ein DTO aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration.base&amp;lt;/code&amp;gt; mit der höheren Bundle-ID, die Klasse wurde also je nach Reihenfolge beim Start nicht gefunden. In diesem Fall scheiterte &amp;lt;code&amp;gt;activate()&amp;lt;/code&amp;gt;, der DSL-Metadatendienst und damit der Persistenzdienst starteten nie, und die Anwendung blieb auf der Startseite stehen. Eine fehlgeschlagene Aktivierung wird nun zusätzlich als Fehler in das Anwendungslog geschrieben&lt;br /&gt;
** Fix: org.eclipse.osbp.dsl, org.eclipse.osbp.runtime: Vier Fehler in der sitzungsbezogenen Transaktionsverwaltung behoben. (a) &amp;lt;code&amp;gt;SessionManager.removeSession()&amp;lt;/code&amp;gt; gab den Transaktions-Handler unter einem Schlüssel frei, der nie passen konnte (&amp;lt;code&amp;gt;ISession&amp;lt;/code&amp;gt; hat kein &amp;lt;code&amp;gt;toString()&amp;lt;/code&amp;gt;), das Sicherheitsnetz griff also nie. (b) &amp;lt;code&amp;gt;disposeTransactionHandler&amp;lt;/code&amp;gt; entfernte den Eintrag auch dann, wenn die Transaktion noch offen war – der Entity Manager wurde aufgegeben und der Thread, der die Transaktion noch abschließen musste, fand seinen Handler nicht mehr. &amp;lt;code&amp;gt;ITransactionHandler&amp;lt;/code&amp;gt; erhält dafür &amp;lt;code&amp;gt;isDisposable()&amp;lt;/code&amp;gt; als Default-Methode. (c) Die Freigabe nach &amp;lt;code&amp;gt;transactionBegin&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Rollback&amp;lt;/code&amp;gt; steht nun in einem &amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt;; ein &amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt;, insbesondere ein &amp;lt;code&amp;gt;OutOfMemoryError&amp;lt;/code&amp;gt;, ließ den Handler bisher mit Entity Manager in einer statischen Map zurück. (d) &amp;lt;code&amp;gt;txnIsOpen&amp;lt;/code&amp;gt; wird auch bei einem fehlgeschlagenen Commit oder Rollback zurückgesetzt&lt;br /&gt;
** org.eclipse.osbp.persistence: &lt;br /&gt;
*** Der Startstatus nennt nun den Dienst, auf den der Persistenzdienst noch wartet. Die neue Komponente &amp;lt;code&amp;gt;PersistenceStartupStatus&amp;lt;/code&amp;gt; hat keine Pflichtreferenz, ist daher von Beginn an aktiv und setzt den Status auf „persistence service is waiting for the DSL metadata service“ (bzw. „the Mondrian manager“), bis diese gebunden sind. Bisher blieb es unabhängig vom Grund bei „persistenceservice not started yet“, und die wartenden Dienste protokollierten nichts&lt;br /&gt;
*** Beim Einrichten einer Persistence Unit wird jede verwaltete Klasse gemeldet, die nicht statisch gewebt ist, obwohl eine ihrer Oberklassen es ist – in einer ERROR-Zeile mit dem Hinweis, das Projekt vollständig neu zu bauen. Eine solche Klasse wird von EclipseLink instanziiert, aber nie befüllt: Der Dialog bleibt leer, und die nächste Aktualisierung scheitert mit „mapped to a primary key column ... Updates are not allowed“&lt;br /&gt;
** org.eclipse.osbp.ecview.extension: Fix: Das Grid vergisst die Zeilenschlüssel von Einträgen, die den Container als Ganzes verlassen haben. Vaadin gibt die Schlüssel nur über das clientseitige &amp;lt;code&amp;gt;dropRows&amp;lt;/code&amp;gt; frei; nach einem allgemeinen &amp;lt;code&amp;gt;ItemSetChange&amp;lt;/code&amp;gt;, wie ihn &amp;lt;code&amp;gt;removeAllItems()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;addAll()&amp;lt;/code&amp;gt; auslösen, blieben sie im &amp;lt;code&amp;gt;KeyMapper&amp;lt;/code&amp;gt; stehen und hielten jede jemals angezeigte Zeile samt ihrem DTO-Graphen. &amp;lt;code&amp;gt;GridPresentation.CustomGrid&amp;lt;/code&amp;gt; merkt sich die vergebenen Schlüssel und entfernt die nicht mehr enthaltenen&lt;br /&gt;
** org.osbee.datainterchange: Fix: FreeMarkers gemeinsam genutzte &amp;lt;code&amp;gt;InvalidReferenceException&amp;lt;/code&amp;gt; hält nicht mehr den ersten Exportlauf fest. Die statische Instanz übernahm die zum Zeitpunkt ihres Entstehens aktive Umgebung und damit das gesamte Datenmodell des ersten Exports für die Lebensdauer des Prozesses. Der Activator lädt die Klasse nun einmal außerhalb eines Template-Laufs&lt;br /&gt;
** org.eclipse.osbp.display: Fix: Das Display-Servlet wird nicht mehr auf dem Thread registriert, der die Bundles startet. Die Registrierung veröffentlicht einen Dienst, und Declarative Services verarbeitet dieses Ereignis auf dem veröffentlichenden Thread; dort wartete der Start aller nachfolgenden Bundles, in einem Fall über 50 Sekunden („Getting a lock required more than 50000 ms“). Die Registrierung läuft nun auf einem eigenen Thread&lt;br /&gt;
** org.eclipse.osbp.runtime, org.eclipse.osbp.blob, org.eclipse.osbp.autowireHelper, org.eclipse.osbp.ecview.extension, org.eclipse.osbp.ecview.addons, org.eclipse.osbp.infogrid.model: Neue Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; für String-Attribute. Ein Attribut mit &amp;lt;code&amp;gt;key=&amp;quot;barcode&amp;quot; value=&amp;quot;QRCode-128&amp;quot;&amp;lt;/code&amp;gt; wird schreibgeschützt als Barcode-Bild angezeigt, das aus seinem Klartextwert erzeugt wird – im Dialog über &amp;lt;code&amp;gt;BlobComponent&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;BlobUploadComponent&amp;lt;/code&amp;gt; (letztere dann ohne Schaltflächen) und in Grid-Spalten über den Blob-Bildkonverter&lt;br /&gt;
** org.eclipse.osbp.authentication, org.eclipse.osbp.system.configuration, org.eclipse.osbp.blob: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** org.eclipse.osbp.xtext.table, org.eclipse.osbp.xtext.table.common: Für Attribute mit der Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; wird ein Barcode-Lookup generiert; eine String-Zelle wird als Barcode-Bild angezeigt, wenn das Lookup einen Barcode-Typ trägt&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** net.osbee.pos.tse: Aufrufer können die BSI-Zertifizierungs-ID der TSE abfragen. Die SE-API bietet &amp;lt;code&amp;gt;getCertificationId&amp;lt;/code&amp;gt; in beiden API-Versionen, keiner der beiden Adapter reichte den Aufruf bisher durch&lt;br /&gt;
** net.osbee.pos.tse, net.osbee.pos.rksv: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Einführung der http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/restartService Seite. Damit können entweder Sessions gekillt oder der Service der Anwendung neu gestartet werden.&lt;br /&gt;
** Bei Nichterreichbarkeit der Datenbank wird die Anwendung beendet und der Fehlerstatus auf der Statusseite angezeigt.&lt;br /&gt;
** Das eingebettete &amp;lt;code&amp;gt;shiro-all-1.2.3.jar&amp;lt;/code&amp;gt; wurde durch &amp;lt;code&amp;gt;shiro-core&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; in Version 1.13.0 ersetzt. Damit sind CVE-2016-4437 (Remote Code Execution über das RememberMe-Cookie mit festem Schlüssel) und CVE-2019-12422 geschlossen. &amp;lt;code&amp;gt;encoder-1.2.3.jar&amp;lt;/code&amp;gt; kommt hinzu, weil &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; 1.13 &amp;lt;code&amp;gt;org.owasp.encoder&amp;lt;/code&amp;gt; zwingend importiert.&lt;br /&gt;
** Anmeldung: &lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm&amp;lt;/code&amp;gt; löst den Anmeldenamen vor jeder Abfrage in einen Distinguished Name auf. Active Directory akzeptiert für den Bind auch einen User Principal Name, beantwortet Abfragen damit aber mit LDAP-Fehler 34 (&amp;lt;code&amp;gt;invalidDNSyntax&amp;lt;/code&amp;gt;), sodass ein &amp;lt;code&amp;gt;userDnTemplate&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt; zwar anmeldete, dann aber an den Attributen scheiterte. &amp;lt;code&amp;gt;resolveUserDn&amp;lt;/code&amp;gt; sucht nun über &amp;lt;code&amp;gt;userPrincipalName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sAMAccountName&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;mail&amp;lt;/code&amp;gt;; die Suchbasis stammt aus dem RootDSE. Bestehende Vorlagen der Form &amp;lt;code&amp;gt;cn={0},ou=...&amp;lt;/code&amp;gt; verhalten sich unverändert. Zugleich behoben: eine &amp;lt;code&amp;gt;StringIndexOutOfBoundsException&amp;lt;/code&amp;gt; im E-Mail-Zweig und das Einsetzen des Benutzernamens in den Suchfilter per Verkettung (jetzt als &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt;, von JNDI maskiert)&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm.getUserDn&amp;lt;/code&amp;gt; maskierte nur das Komma. &amp;lt;code&amp;gt;escapeDnValue&amp;lt;/code&amp;gt; deckt nun alle Zeichen nach RFC 4514 Abschnitt 2.4 ab, sodass ein Benutzername die Bedeutung des DN nicht mehr verändern kann&lt;br /&gt;
*** Die Funktionalität „Angemeldet bleiben“ arbeitet nun mit einem signierten Token statt mit verschlüsselten Zugangsdaten. Das Cookie ist eine mit HMAC-SHA256 signierte Aussage über Benutzer, Mandant, Geltungsbereich, Ablaufdatum und Version und enthält keine Zugangsdaten. Es ist zustandslos, sodass beliebig viele Geräte und Browser gleichzeitig eines halten können.&lt;br /&gt;
*** Das „Angemeldet bleiben“-Cookie gilt je Anwendungsinstanz und Browser. Der Cookie-Name trägt einen Kurzhash über Schema, Host, Port, erstes Pfadsegment und Portal-ID, sodass zwei Anwendungen auf demselben Host nicht mehr das Cookie der jeweils anderen lesen. Die selbstgebaute Verschlüsselung entfällt vollständig. Das Cookie wird mit expliziter Lebensdauer, &amp;lt;code&amp;gt;SameSite=Lax&amp;lt;/code&amp;gt; und unter https mit &amp;lt;code&amp;gt;Secure&amp;lt;/code&amp;gt; geschrieben. Die Anmeldung aus einem Cookie wartet fünf Sekunden mit einem Hinweis auf der Anmeldemaske und lässt sich in dieser Zeit abbrechen; ein entferntes Häkchen löscht das Cookie nun in jedem Fall. Die Betrugsmeldung samt Kontosperre bei nicht passendem Cookie entfällt&lt;br /&gt;
*** Fix: Kennwörter erscheinen nicht mehr im Log – weder bei der Anmeldung in &amp;lt;code&amp;gt;AuthenticationProvider.check()&amp;lt;/code&amp;gt; (bisher im Klartext auf DEBUG) noch beim Zurücksetzen, wo der Nachrichtentext mit dem neuen Kennwort dreimal geschrieben wurde&lt;br /&gt;
*** Die Anzeige des neuen Kennworts auf der Anmeldemaske, wenn keine E-Mail versendet werden kann, ist nun eine konfigurierte Betriebsart: &amp;lt;code&amp;gt;Userinterface/showResetPasswordOnScreen&amp;lt;/code&amp;gt;, standardmäßig aus, mit Protokollierung auf WARN. '''Installationen ohne Mailserver müssen den Parameter einmalig setzen'''&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;doResetPassword&amp;lt;/code&amp;gt; hebt weder eine Sperre noch die Deaktivierung eines Kontos auf und setzt den Fehlversuchszähler nicht mehr zurück. Das Zurücksetzen kann jeder auslösen, der einen Benutzernamen eingibt; aufgehoben werden Sperre und Deaktivierung nur noch durch einen Administrator über &amp;lt;code&amp;gt;doUnlock&amp;lt;/code&amp;gt;&lt;br /&gt;
** System Configuration: &lt;br /&gt;
*** Parameter &amp;lt;code&amp;gt;RememberMeSecret&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;IConfigurationService&amp;lt;/code&amp;gt; ergänzt (&amp;lt;code&amp;gt;GLOBAL_PARAMETERS/RememberMeSecret&amp;lt;/code&amp;gt;). Der Schlüssel wird je Installation bei der ersten Benutzung der &amp;quot;RememberMe&amp;quot; Funktionalität einmal aus gezogen und von allen Anmeldungen geteilt; das Löschen des Eintrags macht alle „Angemeldet bleiben“-Cookies auf einmal ungültig.&lt;br /&gt;
*** Fix: Die Einstellungen füllten sich mit Platzhaltern „not set“. &amp;lt;code&amp;gt;ConfigurationService.getConfigurationString&amp;lt;/code&amp;gt; speicherte bei leerem Vorgabewert den Platzhalter und lieferte ihn als leere Zeichenkette zurück, sodass &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; stets eine weitere Zeile anhängte. &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; entfernt nun die Platzhalterzeilen des Schlüssels vor dem Schreiben, und ein gespeicherter Platzhalter gilt als „kein Wert“. &amp;lt;code&amp;gt;deleteConfigurations&amp;lt;/code&amp;gt; setzt zusätzlich den Cache zurück; gelöschte Einträge kamen bisher beim nächsten Lesen wieder&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Fix: org.eclipse.osbp.dependencies-mbp: Das Bundle &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.bundle.activemq.all.osgi&amp;lt;/code&amp;gt; enthält kein Log4j und kein eingebettetes slf4j mehr. &amp;lt;code&amp;gt;activemq-all&amp;lt;/code&amp;gt; brachte eine vollständige Kopie von Apache Log4j 1.2.17 mit (359 Klassen, darunter &amp;lt;code&amp;gt;JDBCAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSSink&amp;lt;/code&amp;gt; und chainsaw – betroffen von CVE-2021-4104, CVE-2022-23302, CVE-2022-23305 und CVE-2022-23307) sowie slf4j-api 1.7.13 und &amp;lt;code&amp;gt;slf4j-log4j12&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;Include-Resource&amp;lt;/code&amp;gt; bindet das Hersteller-Jar nun ohne &amp;lt;code&amp;gt;org.apache.log4j&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org.slf4j&amp;lt;/code&amp;gt;, deren Maven-Koordinaten, die &amp;lt;code&amp;gt;log4j.properties&amp;lt;/code&amp;gt; und Springs &amp;lt;code&amp;gt;Log4jConfigurer&amp;lt;/code&amp;gt; ein. ActiveMQ bezieht slf4j stattdessen aus dem Produkt (&amp;lt;code&amp;gt;org.slf4j.api&amp;lt;/code&amp;gt; 1.7.36)&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neue Dienststeuerungsseite unter &amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;. &lt;br /&gt;
*** Ein Bediener kann darüber – autorisiert durch eine reguläre Anwendungsanmeldung – hängende Sitzungen beenden oder den Dienst neu starten, ohne Zugriff auf den Serverrechner zu benötigen. Drei Stufen: Sitzungen des aufrufenden Arbeitsplatzes, alle Sitzungen, Neustart. Die Seite ist am Root-HTTP-Service registriert und bleibt damit erreichbar, wenn der Anwendungskontext selbst gestört ist; Markup, Stil, Skript und Texte (deutsch, englisch, französisch) sind deshalb in der Seite enthalten. Sitzungen werden über das Invalidieren der HTTP-Sitzung beendet. Der Neustart läuft über die Befehlswarteschlange der Anwendung; die Seite fragt anschließend die Anwendung ab und führt den Bediener über die Unterbrechung hinweg&lt;br /&gt;
*** Alle Aktionen der Dienststeuerungsseite werden im &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; unter denselben Koordinaten wie die Anmeldemaske protokolliert (fehlgeschlagene Anmeldung und Neustart als WARNING, gesperrtes Konto als ERROR, beendete Sitzungen als INFO). Eine abgelehnte Anmeldung sperrt das Formular für die Dauer der Wartezeit mit Countdown; der Zähler ist derselbe wie an der Anmeldemaske, sodass sich Fehlversuche auf beiden Wegen zur Kontosperre summieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260907 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Überarbeitung der Codebasis zur Entfernung veralteter und nicht benötigter Bundles&lt;br /&gt;
** Überarbeitung des Loginvorgangs / der Cookiespeicherung bei &amp;quot;remember me&amp;quot;. Es werden keine kritischen Daten mehr im Cookie gespeichert.&lt;br /&gt;
** Verbesserung der Übersetzungen&lt;br /&gt;
** Anpassungen für frz. Fiskalanforderungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Laden der Übersetzungen in die interne Tabelle beim Systemstart deutlich beschleunigt. Dadurch verbessertes Startverhalten der Anwendungen.&lt;br /&gt;
** Verbesserungen bei der frz. Tastaturunterstützung&lt;br /&gt;
** Verbesserungen der Übersetzungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260618 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Blockieren durch das Laden von Diensten während des Starts vermieden, dadurch schnellerer Anwendungsstart. Anderes Verhalten beim Start an der Benutzeroberfläche.&lt;br /&gt;
** Französische Tastaturunterstützung (AZERTY) im Keymapper der Statemachine ergänzt&lt;br /&gt;
** Login bezieht Build-Version und Hersteller nun aus den &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; (einheitliche Quelle)&lt;br /&gt;
** Neue gemeinsame Hilfsmethoden &amp;lt;code&amp;gt;getBuildVersion()&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;getVendor()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; zur Ermittlung der Build-Identität&lt;br /&gt;
** &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; setzt die Zeitstempel von &amp;lt;code&amp;gt;lastError&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;lastWarning&amp;lt;/code&amp;gt; nicht mehr zurück&lt;br /&gt;
** Fix: NPE in &amp;lt;code&amp;gt;org.eclipse.osbp.xtext.dialog.AutowireUiFactory&amp;lt;/code&amp;gt; behoben&lt;br /&gt;
** Version von 5.2.0 auf 5.3.0 angehoben&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-reverify&amp;lt;/code&amp;gt; (16px/32px) für die NF525-Schaltfläche zur erneuten Archivintegritätsprüfung&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-refresh.png&amp;lt;/code&amp;gt; ergänzt&lt;br /&gt;
** Grid – horizontale Bildlaufleiste wiederhergestellt&lt;br /&gt;
** Grid - Flex-Layout für Kassen-/POS-Grids wiederhergestellt (kollabierte Spalten behoben)&lt;br /&gt;
** französische Übersetzungen überarbeitet&lt;br /&gt;
&lt;br /&gt;
* Grammatiken/Generierung:&lt;br /&gt;
** org.eclipse.osbp.dsl: Benutzerdefinierte &amp;lt;code&amp;gt;@PreRemove&amp;lt;/code&amp;gt;-Hooks werden in der generierten &amp;lt;code&amp;gt;preRemove()&amp;lt;/code&amp;gt;-Methode zusammengeführt&lt;br /&gt;
** org.eclipse.osbp.xtext.i18n: i18n-Generator erzeugt nun das byte-genaue Eclipse-Babel-Format&lt;br /&gt;
&lt;br /&gt;
* POS Framework für franz. Fiskalanforderungen eingeführt&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260410 ==&lt;br /&gt;
&lt;br /&gt;
* POS Framework: &lt;br /&gt;
** Performanceverbesserung beim Kassieren&lt;br /&gt;
** Multi-Protokoll Unterstützung für Paymentterminal &lt;br /&gt;
*** frz. Protokolle &amp;quot;Concert&amp;quot;, &amp;quot;Protocol E&amp;quot;&lt;br /&gt;
*** &amp;quot;Mock&amp;quot; für Tests&lt;br /&gt;
*** Statemachine DSL erweitert: protocol Parameter für Paymentterminal&lt;br /&gt;
*** &amp;quot;Shared Payment Terminal&amp;quot;&lt;br /&gt;
**** locking im PaymentTerminalService implementiert&lt;br /&gt;
**** pro Terminal über ConfigService einstellbar&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260402 ==&lt;br /&gt;
&lt;br /&gt;
Die Version verbessert das Startverhalten einer Anwendung und bringt mehr Informationen über den Status des Starts auf den Bildschirm&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Anzeige des Persistenzservice-Status auf dem Login-Bildschirm&lt;br /&gt;
** Information über den Persistenzservice auf der Fehlerseite hinzugefügt&lt;br /&gt;
** Beim Start wird nun überall auf den Persistenzservice statt nur auf den ConfigurationService gewartet&lt;br /&gt;
&lt;br /&gt;
* BPM:&lt;br /&gt;
** Fix: net.osbee.bpm: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** Fix: net.osbee.pos.epay: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260305 ==&lt;br /&gt;
&lt;br /&gt;
=== Report Anzeige ===&lt;br /&gt;
&lt;br /&gt;
Diese Version konzentriert sich auf '''Stabilitätsverbesserungen''' für das Report-Rendering-System, insbesondere auf die Behebung von Race Conditions und Anzeigeproblemen, die bei schnellen Benutzerinteraktionen auftraten.&lt;br /&gt;
&lt;br /&gt;
* Race Condition beim Report-Rendering&lt;br /&gt;
** '''Behoben: Schnelles Auswählen/Abwählen führte dazu, dass Reports mit ungültigen oder fehlenden Filtern gerendert wurden'''&lt;br /&gt;
*** Reports verarbeiten nun korrekt wenn Benutzer schnell Elemente auswählen und wieder abwählen&lt;br /&gt;
*** Filteränderungen werden blockiert, während ein Render-Vorgang läuft&lt;br /&gt;
*** Ausstehende Filteränderungen werden nachverfolgt und nach Abschluss des Renderings erneut ausgewertet&lt;br /&gt;
*** Reports mit &amp;lt;code&amp;gt;selectById&amp;lt;/code&amp;gt; werden nun korrekt ausgeblendet, wenn nichts ausgewählt ist&lt;br /&gt;
&lt;br /&gt;
* PDF-Anzeigeskalierungsproblem &lt;br /&gt;
** '''Behoben: PDF-Skalierungsprobleme durch Neuerstellung des BrowserFrames bei jedem Rendering'''&lt;br /&gt;
&lt;br /&gt;
=== Anmeldebildschirm ===&lt;br /&gt;
&lt;br /&gt;
Der Anmeldebildschirm zeigt nun während der Initialisierung des Persistence-Services einen Statustext an.&lt;br /&gt;
&lt;br /&gt;
* Lauftext-Anzeige (Marquee) mit dem aktuellen Status des Persistence-Services&lt;br /&gt;
* Deaktivierung aller Anmeldesteuerelemente während der Wartezeit&lt;br /&gt;
&lt;br /&gt;
=== Start der Anwendung ===&lt;br /&gt;
&lt;br /&gt;
* Blockierungen der Initialisierungsvorgänge durch Warten auf Serviceregistrierung während des Anwendungsstarts reduziert. &amp;lt;br&amp;gt;Dadurch verändert sich das Startverhalten, insbesondere die Reihenfolge der Anwendung. Insgesamt schnelleres Laden der Bundles.&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4621</id>
		<title>Releasenotes 2026 OS.Interchange</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4621"/>
				<updated>2026-10-29T10:26:55Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Version 5.3.0.20261029 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261029 ==&lt;br /&gt;
&lt;br /&gt;
Schwerpunkt dieses Zeitraums ist der '''Speicherverbrauch von BDI''': Mit einer Testrechnung wurden XRechnung und ZUGFeRD wiederholt erzeugt und der Speicher nach jeder Anfrage vermessen. Gefunden und behoben wurden ein Rechnungsdatensatz, den FreeMarker festhalten konnte, und offene Transaktionen nach abgewiesenen oder fehlgeschlagenen Anfragen. Daneben startete BDI an einer Konsole zeitweise ohne REST-Dienste, und Überwachungseinträge gingen auf älteren Datenbanken verloren. Zum Abschluss wurden XRechnung und ZUGFeRD mit den offiziellen Validatoren (KoSIT, Mustang/veraPDF) geprüft; die dabei gefundenen Fehler sind behoben, beide Formate werden nun angenommen. &lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261029 OS.Softwarefactory 5.3.0.20261029] und früher&lt;br /&gt;
* Fix: Anhänge in der XRechnung leer&lt;br /&gt;
* Fix: Rechnungs-XML im ZUGFeRD-PDF falsch benannt - es wurde der vollständig Pfad der Datei eingetragen. (&amp;lt;code&amp;gt;factur-x.xml&amp;lt;/code&amp;gt;) wird nun wie erwartet verwendet&lt;br /&gt;
* Fix: verschiedene Speicherlöcher in OS.interchange / XRechnung und Zugferd Funktionalität&lt;br /&gt;
* Fix: offene Transaktionen verbleiben in verschiedenen Bearbeitungssituationen. Betroffen sind &lt;br /&gt;
** abgewiesene Anfrage&lt;br /&gt;
** bei XRechnung-Import: wenn Problem beim Speichern der empfangenen Daten auftritt&lt;br /&gt;
** bei unerwarteten Fehlern wurden Transaktionen nicht zurückgerollt&lt;br /&gt;
* Fix: Rest Dienste wurden gelegentlich nicht gestartet. Ein Reihenfolgproblem beim Start der OSGI Bundles wurde gefixt.&lt;br /&gt;
* Fix: Falsche Gesamtsteuer in ZUGFeRD / Factur-X: Das Feld &amp;lt;code&amp;gt;TaxTotalAmount&amp;lt;/code&amp;gt; wurde aus dem ersten Steuer-Teilbetrag statt aus der Gesamtsteuer gefüllt. Bei einer Rechnung mit mehreren Steuersätzen stand dort die Steuer nur eines Satzes (Testrechnung: 3,50 € statt 22,50 €), was die Regel BR-CO-14 der EN 16931 verletzt. Nun wird die gespeicherte Gesamtsteuer übernommen, wie es die XRechnung bereits tat. In beiden Vorlagen wird kein Wert berechnet; alle Beträge kommen unverändert aus der Datenbank.&lt;br /&gt;
* Fix: Zahlenformate: Das Format der Vorlagen wirkte bisher nur auf den Ersatzwert 0, gespeicherte Werte erschienen im allgemeinen Format (19 statt 19.00, 171.5 statt 171.50). Beträge, Steuersätze und Faktoren stehen nun mit zwei Nachkommastellen, Einzelpreise mit vier, Mengen wie gespeichert ohne Auffüllen.&lt;br /&gt;
* Fix: Steuerkategorie der Rechnungszeilen in Factur-X: Das Pflichtfeld &amp;lt;code&amp;gt;CategoryCode&amp;lt;/code&amp;gt; einer Zeile wurde ausgelassen, wenn &amp;lt;code&amp;gt;ProductTaxCategoryCode&amp;lt;/code&amp;gt; leer war; die Datei war dann schemaungültig. Ersatzweise wird nun die Steuerkategorie des Artikels verwendet, wie in der XRechnung.&lt;br /&gt;
* Fix: USt-IdNr. und Steuernummer fehlten: Die Vorlagen lasen die Umsatzsteuer-Identifikationsnummer von Verkäufer und Käufer nur aus den Steuerschema-Zeilen der Partei und übergingen die Felder &amp;lt;code&amp;gt;VAT_ID&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;TAX_ID&amp;lt;/code&amp;gt; der Partei selbst; im Factur-X-XML fehlte die USt-IdNr. des Käufers ganz. Der KoSIT-Validator wies solche Rechnungen mit BR-S-02, BR-CO-26 und BR-DE-16 zurück. Gibt es keine Steuerschema-Zeilen, werden nun &amp;lt;code&amp;gt;VAT_ID&amp;lt;/code&amp;gt; (BT-31 bzw. BT-48, Schema VAT/VA) und &amp;lt;code&amp;gt;TAX_ID&amp;lt;/code&amp;gt; (BT-32, Schema FC) der Partei übernommen.&lt;br /&gt;
* Fix: Name von Verkäufer und Käufer fehlte in der XRechnung: Die Pflichtfelder BT-27 und BT-44 (&amp;lt;code&amp;gt;PartyLegalEntity/RegistrationName&amp;lt;/code&amp;gt;) wurden nur geschrieben, wenn ein Registername gepflegt war (BR-06, BR-07). Fehlt er, steht nun der Name der Partei darin.&lt;br /&gt;
* Fix: Kontakt: Als Ansprechpartner des Verkäufers erschien der Firmenname und als Kontakt-E-Mail die Adresse der Partei. Verwendet werden nun &amp;lt;code&amp;gt;C_NAME&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;C_EMAIL&amp;lt;/code&amp;gt;, ersatzweise Name und Adresse der Partei.&lt;br /&gt;
* Fix: ZUGFeRD-PDF war kein PDF/A: Das Farbprofil &amp;lt;code&amp;gt;sRGB.icc&amp;lt;/code&amp;gt; für den OutputIntent lag nicht im Bundle, und der Kontext-Classloader eines OSGi-Threads hätte es auch nicht gefunden. Das PDF blieb ohne Meldung ohne OutputIntent und damit nicht PDF/A-3-konform (veraPDF: „DeviceRGB/DeviceGray … without output intent“). Das Bundle enthält nun das zlib-lizenzierte sRGB-Profil von Apache FOP (&amp;lt;code&amp;gt;resources/icc/&amp;lt;/code&amp;gt;) und lädt es über den eigenen Classloader; fehlt es, wird eine Warnung protokolliert.&lt;br /&gt;
* Start steht für 20: Im Log erschien bei jedem Start „Getting a lock required more than 20000 ms“, an zwei Stellen. Behoben&lt;br /&gt;
&lt;br /&gt;
* ToDo: aus früheren Installationen können DB Indizes vorhanden sein, die das Schreiben von Monitoringeinträgen der aktuellen Version verhindern.&lt;br /&gt;
** vor Update: Die Datenbank muss bereinigt werden:&lt;br /&gt;
  &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
  ALTER TABLE monitor_sub_category  DROP INDEX MONITOR_SUB_CATEGORYMSC_NAME_INDEX;&lt;br /&gt;
  ALTER TABLE monitor_category      DROP INDEX MONITOR_CATEGORYMCA_NAME_INDEX;&lt;br /&gt;
  ALTER TABLE monitor_category      DROP INDEX MONITOR_CATEGORYDK_INDEX;&lt;br /&gt;
  ALTER TABLE monitor_main_category DROP INDEX MONITOR_MAIN_CATEGORYMMCA_NAME_INDEX;&lt;br /&gt;
  ALTER TABLE monitor_component     DROP INDEX MONITOR_COMPONENTI1;&lt;br /&gt;
  CREATE UNIQUE INDEX MONITOR_COMPONENTI1 ON monitor_component (MCO_NAME, MCO_INSTALLATION);&lt;br /&gt;
  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** alternativ in der Eclipse.ini der Installation vor dem Update im Verzeichnis bdi-conf den Eintrag   &amp;lt;code&amp;gt;-DFlyway.active=true&amp;lt;/code&amp;gt; ergänzen.&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260707 OS.Softwarefactory 5.3.20260707] und früher&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4620</id>
		<title>Releasenotes 2026 OS.Interchange</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4620"/>
				<updated>2026-10-29T10:26:22Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Version 5.3.0.20261029 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261029 ==&lt;br /&gt;
&lt;br /&gt;
Schwerpunkt dieses Zeitraums ist der '''Speicherverbrauch von BDI''': Mit einer Testrechnung wurden XRechnung und ZUGFeRD wiederholt erzeugt und der Speicher nach jeder Anfrage vermessen. Gefunden und behoben wurden ein Rechnungsdatensatz, den FreeMarker festhalten konnte, und offene Transaktionen nach abgewiesenen oder fehlgeschlagenen Anfragen. Daneben startete BDI an einer Konsole zeitweise ohne REST-Dienste, und Überwachungseinträge gingen auf älteren Datenbanken verloren. Zum Abschluss wurden XRechnung und ZUGFeRD mit den offiziellen Validatoren (KoSIT, Mustang/veraPDF) geprüft; die dabei gefundenen Fehler sind behoben, beide Formate werden nun angenommen. &lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261012 OS.Softwarefactory 5.3.0.20261012] und früher&lt;br /&gt;
* Fix: Anhänge in der XRechnung leer&lt;br /&gt;
* Fix: Rechnungs-XML im ZUGFeRD-PDF falsch benannt - es wurde der vollständig Pfad der Datei eingetragen. (&amp;lt;code&amp;gt;factur-x.xml&amp;lt;/code&amp;gt;) wird nun wie erwartet verwendet&lt;br /&gt;
* Fix: verschiedene Speicherlöcher in OS.interchange / XRechnung und Zugferd Funktionalität&lt;br /&gt;
* Fix: offene Transaktionen verbleiben in verschiedenen Bearbeitungssituationen. Betroffen sind &lt;br /&gt;
** abgewiesene Anfrage&lt;br /&gt;
** bei XRechnung-Import: wenn Problem beim Speichern der empfangenen Daten auftritt&lt;br /&gt;
** bei unerwarteten Fehlern wurden Transaktionen nicht zurückgerollt&lt;br /&gt;
* Fix: Rest Dienste wurden gelegentlich nicht gestartet. Ein Reihenfolgproblem beim Start der OSGI Bundles wurde gefixt.&lt;br /&gt;
* Fix: Falsche Gesamtsteuer in ZUGFeRD / Factur-X: Das Feld &amp;lt;code&amp;gt;TaxTotalAmount&amp;lt;/code&amp;gt; wurde aus dem ersten Steuer-Teilbetrag statt aus der Gesamtsteuer gefüllt. Bei einer Rechnung mit mehreren Steuersätzen stand dort die Steuer nur eines Satzes (Testrechnung: 3,50 € statt 22,50 €), was die Regel BR-CO-14 der EN 16931 verletzt. Nun wird die gespeicherte Gesamtsteuer übernommen, wie es die XRechnung bereits tat. In beiden Vorlagen wird kein Wert berechnet; alle Beträge kommen unverändert aus der Datenbank.&lt;br /&gt;
* Fix: Zahlenformate: Das Format der Vorlagen wirkte bisher nur auf den Ersatzwert 0, gespeicherte Werte erschienen im allgemeinen Format (19 statt 19.00, 171.5 statt 171.50). Beträge, Steuersätze und Faktoren stehen nun mit zwei Nachkommastellen, Einzelpreise mit vier, Mengen wie gespeichert ohne Auffüllen.&lt;br /&gt;
* Fix: Steuerkategorie der Rechnungszeilen in Factur-X: Das Pflichtfeld &amp;lt;code&amp;gt;CategoryCode&amp;lt;/code&amp;gt; einer Zeile wurde ausgelassen, wenn &amp;lt;code&amp;gt;ProductTaxCategoryCode&amp;lt;/code&amp;gt; leer war; die Datei war dann schemaungültig. Ersatzweise wird nun die Steuerkategorie des Artikels verwendet, wie in der XRechnung.&lt;br /&gt;
* Fix: USt-IdNr. und Steuernummer fehlten: Die Vorlagen lasen die Umsatzsteuer-Identifikationsnummer von Verkäufer und Käufer nur aus den Steuerschema-Zeilen der Partei und übergingen die Felder &amp;lt;code&amp;gt;VAT_ID&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;TAX_ID&amp;lt;/code&amp;gt; der Partei selbst; im Factur-X-XML fehlte die USt-IdNr. des Käufers ganz. Der KoSIT-Validator wies solche Rechnungen mit BR-S-02, BR-CO-26 und BR-DE-16 zurück. Gibt es keine Steuerschema-Zeilen, werden nun &amp;lt;code&amp;gt;VAT_ID&amp;lt;/code&amp;gt; (BT-31 bzw. BT-48, Schema VAT/VA) und &amp;lt;code&amp;gt;TAX_ID&amp;lt;/code&amp;gt; (BT-32, Schema FC) der Partei übernommen.&lt;br /&gt;
* Fix: Name von Verkäufer und Käufer fehlte in der XRechnung: Die Pflichtfelder BT-27 und BT-44 (&amp;lt;code&amp;gt;PartyLegalEntity/RegistrationName&amp;lt;/code&amp;gt;) wurden nur geschrieben, wenn ein Registername gepflegt war (BR-06, BR-07). Fehlt er, steht nun der Name der Partei darin.&lt;br /&gt;
* Fix: Kontakt: Als Ansprechpartner des Verkäufers erschien der Firmenname und als Kontakt-E-Mail die Adresse der Partei. Verwendet werden nun &amp;lt;code&amp;gt;C_NAME&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;C_EMAIL&amp;lt;/code&amp;gt;, ersatzweise Name und Adresse der Partei.&lt;br /&gt;
* Fix: ZUGFeRD-PDF war kein PDF/A: Das Farbprofil &amp;lt;code&amp;gt;sRGB.icc&amp;lt;/code&amp;gt; für den OutputIntent lag nicht im Bundle, und der Kontext-Classloader eines OSGi-Threads hätte es auch nicht gefunden. Das PDF blieb ohne Meldung ohne OutputIntent und damit nicht PDF/A-3-konform (veraPDF: „DeviceRGB/DeviceGray … without output intent“). Das Bundle enthält nun das zlib-lizenzierte sRGB-Profil von Apache FOP (&amp;lt;code&amp;gt;resources/icc/&amp;lt;/code&amp;gt;) und lädt es über den eigenen Classloader; fehlt es, wird eine Warnung protokolliert.&lt;br /&gt;
* Start steht für 20: Im Log erschien bei jedem Start „Getting a lock required more than 20000 ms“, an zwei Stellen. Behoben&lt;br /&gt;
&lt;br /&gt;
* ToDo: aus früheren Installationen können DB Indizes vorhanden sein, die das Schreiben von Monitoringeinträgen der aktuellen Version verhindern.&lt;br /&gt;
** vor Update: Die Datenbank muss bereinigt werden:&lt;br /&gt;
  &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
  ALTER TABLE monitor_sub_category  DROP INDEX MONITOR_SUB_CATEGORYMSC_NAME_INDEX;&lt;br /&gt;
  ALTER TABLE monitor_category      DROP INDEX MONITOR_CATEGORYMCA_NAME_INDEX;&lt;br /&gt;
  ALTER TABLE monitor_category      DROP INDEX MONITOR_CATEGORYDK_INDEX;&lt;br /&gt;
  ALTER TABLE monitor_main_category DROP INDEX MONITOR_MAIN_CATEGORYMMCA_NAME_INDEX;&lt;br /&gt;
  ALTER TABLE monitor_component     DROP INDEX MONITOR_COMPONENTI1;&lt;br /&gt;
  CREATE UNIQUE INDEX MONITOR_COMPONENTI1 ON monitor_component (MCO_NAME, MCO_INSTALLATION);&lt;br /&gt;
  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** alternativ in der Eclipse.ini der Installation vor dem Update im Verzeichnis bdi-conf den Eintrag   &amp;lt;code&amp;gt;-DFlyway.active=true&amp;lt;/code&amp;gt; ergänzen.&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260707 OS.Softwarefactory 5.3.20260707] und früher&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4619</id>
		<title>Releasenotes 2026 OS.Interchange</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4619"/>
				<updated>2026-10-29T10:25:15Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Version 5.3.0.20261028 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261029 ==&lt;br /&gt;
&lt;br /&gt;
Schwerpunkt dieses Zeitraums ist der '''Speicherverbrauch von BDI''': Mit einer Testrechnung wurden XRechnung und ZUGFeRD wiederholt erzeugt und der Speicher nach jeder Anfrage vermessen. Gefunden und behoben wurden ein Rechnungsdatensatz, den FreeMarker festhalten konnte, und offene Transaktionen nach abgewiesenen oder fehlgeschlagenen Anfragen. Daneben startete BDI an einer Konsole zeitweise ohne REST-Dienste, und Überwachungseinträge gingen auf älteren Datenbanken verloren. Zum Abschluss wurden XRechnung und ZUGFeRD mit den offiziellen Validatoren (KoSIT, Mustang/veraPDF) geprüft; die dabei gefundenen Fehler sind behoben, beide Formate werden nun angenommen. Alle Änderungen liegen auf dem Branch &amp;lt;code&amp;gt;development&amp;lt;/code&amp;gt; und sind nach &amp;lt;code&amp;gt;origin/development&amp;lt;/code&amp;gt; gepusht. Die Korrekturen im Framework (Flyway-Migrationen, Monitoring-Indizes) beschreiben die Release Notes der Softwarefactory für denselben Zeitraum.&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261012 OS.Softwarefactory 5.3.0.20261012] und früher&lt;br /&gt;
* Fix: Anhänge in der XRechnung leer&lt;br /&gt;
* Fix: Rechnungs-XML im ZUGFeRD-PDF falsch benannt - es wurde der vollständig Pfad der Datei eingetragen. (&amp;lt;code&amp;gt;factur-x.xml&amp;lt;/code&amp;gt;) wird nun wie erwartet verwendet&lt;br /&gt;
* Fix: verschiedene Speicherlöcher in OS.interchange / XRechnung und Zugferd Funktionalität&lt;br /&gt;
* Fix: offene Transaktionen verbleiben in verschiedenen Bearbeitungssituationen. Betroffen sind &lt;br /&gt;
** abgewiesene Anfrage&lt;br /&gt;
** bei XRechnung-Import: wenn Problem beim Speichern der empfangenen Daten auftritt&lt;br /&gt;
** bei unerwarteten Fehlern wurden Transaktionen nicht zurückgerollt&lt;br /&gt;
* Fix: Rest Dienste wurden gelegentlich nicht gestartet. Ein Reihenfolgproblem beim Start der OSGI Bundles wurde gefixt.&lt;br /&gt;
* Fix: Falsche Gesamtsteuer in ZUGFeRD / Factur-X: Das Feld &amp;lt;code&amp;gt;TaxTotalAmount&amp;lt;/code&amp;gt; wurde aus dem ersten Steuer-Teilbetrag statt aus der Gesamtsteuer gefüllt. Bei einer Rechnung mit mehreren Steuersätzen stand dort die Steuer nur eines Satzes (Testrechnung: 3,50 € statt 22,50 €), was die Regel BR-CO-14 der EN 16931 verletzt. Nun wird die gespeicherte Gesamtsteuer übernommen, wie es die XRechnung bereits tat. In beiden Vorlagen wird kein Wert berechnet; alle Beträge kommen unverändert aus der Datenbank.&lt;br /&gt;
* Fix: Zahlenformate: Das Format der Vorlagen wirkte bisher nur auf den Ersatzwert 0, gespeicherte Werte erschienen im allgemeinen Format (19 statt 19.00, 171.5 statt 171.50). Beträge, Steuersätze und Faktoren stehen nun mit zwei Nachkommastellen, Einzelpreise mit vier, Mengen wie gespeichert ohne Auffüllen.&lt;br /&gt;
* Fix: Steuerkategorie der Rechnungszeilen in Factur-X: Das Pflichtfeld &amp;lt;code&amp;gt;CategoryCode&amp;lt;/code&amp;gt; einer Zeile wurde ausgelassen, wenn &amp;lt;code&amp;gt;ProductTaxCategoryCode&amp;lt;/code&amp;gt; leer war; die Datei war dann schemaungültig. Ersatzweise wird nun die Steuerkategorie des Artikels verwendet, wie in der XRechnung.&lt;br /&gt;
* Fix: USt-IdNr. und Steuernummer fehlten: Die Vorlagen lasen die Umsatzsteuer-Identifikationsnummer von Verkäufer und Käufer nur aus den Steuerschema-Zeilen der Partei und übergingen die Felder &amp;lt;code&amp;gt;VAT_ID&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;TAX_ID&amp;lt;/code&amp;gt; der Partei selbst; im Factur-X-XML fehlte die USt-IdNr. des Käufers ganz. Der KoSIT-Validator wies solche Rechnungen mit BR-S-02, BR-CO-26 und BR-DE-16 zurück. Gibt es keine Steuerschema-Zeilen, werden nun &amp;lt;code&amp;gt;VAT_ID&amp;lt;/code&amp;gt; (BT-31 bzw. BT-48, Schema VAT/VA) und &amp;lt;code&amp;gt;TAX_ID&amp;lt;/code&amp;gt; (BT-32, Schema FC) der Partei übernommen.&lt;br /&gt;
* Fix: Name von Verkäufer und Käufer fehlte in der XRechnung: Die Pflichtfelder BT-27 und BT-44 (&amp;lt;code&amp;gt;PartyLegalEntity/RegistrationName&amp;lt;/code&amp;gt;) wurden nur geschrieben, wenn ein Registername gepflegt war (BR-06, BR-07). Fehlt er, steht nun der Name der Partei darin.&lt;br /&gt;
* Fix: Kontakt: Als Ansprechpartner des Verkäufers erschien der Firmenname und als Kontakt-E-Mail die Adresse der Partei. Verwendet werden nun &amp;lt;code&amp;gt;C_NAME&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;C_EMAIL&amp;lt;/code&amp;gt;, ersatzweise Name und Adresse der Partei.&lt;br /&gt;
* Fix: ZUGFeRD-PDF war kein PDF/A: Das Farbprofil &amp;lt;code&amp;gt;sRGB.icc&amp;lt;/code&amp;gt; für den OutputIntent lag nicht im Bundle, und der Kontext-Classloader eines OSGi-Threads hätte es auch nicht gefunden. Das PDF blieb ohne Meldung ohne OutputIntent und damit nicht PDF/A-3-konform (veraPDF: „DeviceRGB/DeviceGray … without output intent“). Das Bundle enthält nun das zlib-lizenzierte sRGB-Profil von Apache FOP (&amp;lt;code&amp;gt;resources/icc/&amp;lt;/code&amp;gt;) und lädt es über den eigenen Classloader; fehlt es, wird eine Warnung protokolliert.&lt;br /&gt;
* Start steht für 20: Im Log erschien bei jedem Start „Getting a lock required more than 20000 ms“, an zwei Stellen. Behoben&lt;br /&gt;
&lt;br /&gt;
* ToDo: aus früheren Installationen können DB Indizes vorhanden sein, die das Schreiben von Monitoringeinträgen der aktuellen Version verhindern.&lt;br /&gt;
** vor Update: Die Datenbank muss bereinigt werden:&lt;br /&gt;
  &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
  ALTER TABLE monitor_sub_category  DROP INDEX MONITOR_SUB_CATEGORYMSC_NAME_INDEX;&lt;br /&gt;
  ALTER TABLE monitor_category      DROP INDEX MONITOR_CATEGORYMCA_NAME_INDEX;&lt;br /&gt;
  ALTER TABLE monitor_category      DROP INDEX MONITOR_CATEGORYDK_INDEX;&lt;br /&gt;
  ALTER TABLE monitor_main_category DROP INDEX MONITOR_MAIN_CATEGORYMMCA_NAME_INDEX;&lt;br /&gt;
  ALTER TABLE monitor_component     DROP INDEX MONITOR_COMPONENTI1;&lt;br /&gt;
  CREATE UNIQUE INDEX MONITOR_COMPONENTI1 ON monitor_component (MCO_NAME, MCO_INSTALLATION);&lt;br /&gt;
  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** alternativ in der Eclipse.ini der Installation vor dem Update im Verzeichnis bdi-conf den Eintrag   &amp;lt;code&amp;gt;-DFlyway.active=true&amp;lt;/code&amp;gt; ergänzen.&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260707 OS.Softwarefactory 5.3.20260707] und früher&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4618</id>
		<title>Releasenotes 2026 OS.Interchange</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4618"/>
				<updated>2026-10-28T13:49:40Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Version 5.3.0.20261028 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261028 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261012 OS.Softwarefactory 5.3.0.20261012] und früher&lt;br /&gt;
* Fix verschiedener Speicherlöcher in OS.interchange / XRechnung und Zugferd Funktionalität&lt;br /&gt;
* ToDo vor Update: Die Datenbank muss bereinigt werden:&lt;br /&gt;
  &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
  ALTER TABLE monitor_sub_category  DROP INDEX MONITOR_SUB_CATEGORYMSC_NAME_INDEX;&lt;br /&gt;
  ALTER TABLE monitor_category      DROP INDEX MONITOR_CATEGORYMCA_NAME_INDEX;&lt;br /&gt;
  ALTER TABLE monitor_category      DROP INDEX MONITOR_CATEGORYDK_INDEX;&lt;br /&gt;
  ALTER TABLE monitor_main_category DROP INDEX MONITOR_MAIN_CATEGORYMMCA_NAME_INDEX;&lt;br /&gt;
  ALTER TABLE monitor_component     DROP INDEX MONITOR_COMPONENTI1;&lt;br /&gt;
  CREATE UNIQUE INDEX MONITOR_COMPONENTI1 ON monitor_component (MCO_NAME, MCO_INSTALLATION);&lt;br /&gt;
  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260707 OS.Softwarefactory 5.3.20260707] und früher&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4617</id>
		<title>Releasenotes 2026 OS.Interchange</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4617"/>
				<updated>2026-10-28T13:49:04Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Version 5.3.0.20261028 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261028 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261012 OS.Softwarefactory 5.3.0.20261012] und früher&lt;br /&gt;
* Fix verschiedener Speicherlöcher in OS.interchange / XRechnung und Zugferd Funktionalität&lt;br /&gt;
* ToDo vor Update: Die Datenbank muss bereinigt werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
ALTER TABLE monitor_sub_category  DROP INDEX MONITOR_SUB_CATEGORYMSC_NAME_INDEX;&lt;br /&gt;
ALTER TABLE monitor_category      DROP INDEX MONITOR_CATEGORYMCA_NAME_INDEX;&lt;br /&gt;
ALTER TABLE monitor_category      DROP INDEX MONITOR_CATEGORYDK_INDEX;&lt;br /&gt;
ALTER TABLE monitor_main_category DROP INDEX MONITOR_MAIN_CATEGORYMMCA_NAME_INDEX;&lt;br /&gt;
ALTER TABLE monitor_component     DROP INDEX MONITOR_COMPONENTI1;&lt;br /&gt;
CREATE UNIQUE INDEX MONITOR_COMPONENTI1 ON monitor_component (MCO_NAME, MCO_INSTALLATION);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260707 OS.Softwarefactory 5.3.20260707] und früher&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4616</id>
		<title>Releasenotes 2026 OS.Interchange</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4616"/>
				<updated>2026-10-28T13:44:55Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Version 5.3.0.20261028 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261028 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261012 OS.Softwarefactory 5.3.0.20261012] und früher&lt;br /&gt;
* Fix verschiedener Speicherlöcher in OS.interchange / XRechnung und Zugferd Funktionalität&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260707 OS.Softwarefactory 5.3.20260707] und früher&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4615</id>
		<title>Releasenotes 2026 OS.Interchange</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4615"/>
				<updated>2026-10-28T09:57:19Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Version 5.3.0.20261028 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261028 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261012 OS.Softwarefactory 5.3.0.20261012] und früher&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260707 OS.Softwarefactory 5.3.20260707] und früher&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4614</id>
		<title>Releasenotes 2026 OS.Interchange</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4614"/>
				<updated>2026-10-28T09:56:30Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261028 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260707 OS.Softwarefactory 5.3.20260707] und früher&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4613</id>
		<title>Releasenotes 2026 OS.Softwarefactory</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4613"/>
				<updated>2026-10-12T14:30:24Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Version 5.3.0.20261012 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261012 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** org.eclipse.osbp.dsl (Entity,DTO):&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (1) – &amp;lt;code&amp;gt;AbstractOppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;MappingContext&amp;lt;/code&amp;gt; deklarieren kein &amp;lt;code&amp;gt;finalize()&amp;lt;/code&amp;gt; mehr. Jede &amp;lt;code&amp;gt;OppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OppositeContainmentDtoList&amp;lt;/code&amp;gt; war dadurch finalisierbar, überlebte die Garbage Collection, die sie als unerreichbar erkannt hatte, und hielt bis zur Abarbeitung durch den einzelnen Finalizer-Thread ihren gesamten Objektgraphen am Leben (DTOs, Entitäten, Persistenzkontexte). In einem Kundenabzug waren von 7,56 Mio. Finalizer-Einträgen 7,51 Mio. solche Listen. Die Listener, die der Finalizer abmelden sollte, werden bereits in &amp;lt;code&amp;gt;clear()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;remove()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;resolve()&amp;lt;/code&amp;gt; abgemeldet&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (2) – ein DTO hält für das spätere Nachladen einer Lazy-Referenz nicht mehr die abgelöste Entität fest, sondern nur noch deren Klasse und ID (neue Klasse &amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;org.eclipse.osbp.dsl.dto.lib&amp;lt;/code&amp;gt;). Die Entität hielt über ihre Lazy-Beziehungen den gesamten Persistenzkontext (&amp;lt;code&amp;gt;RepeatableWriteUnitOfWork&amp;lt;/code&amp;gt; samt aller darin geklonten Entitäten), obwohl &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; nur Klasse und ID benötigt. Gemessen an einer Kasse: rund 42 festgehaltene Persistenzkontexte je Verkauf vorher, praktisch keiner danach. Die ID wird erst am Ende des Mappings übernommen, weil der generierte Mapper &amp;lt;code&amp;gt;initialize(entity)&amp;lt;/code&amp;gt; vor &amp;lt;code&amp;gt;setId&amp;lt;/code&amp;gt; aufruft und eine neue Entität bis dahin die zufällige ID ihres Konstruktors trägt; liefert die Datenbank die ID erst später, bleibt es beim bisherigen Verhalten. '''Der Generator (&amp;lt;code&amp;gt;DtoTypesBuilder&amp;lt;/code&amp;gt;) erzeugt den neuen Aufruf; wirksam wird die Änderung erst mit neu generierten DTOs.''' Nicht neu generierte DTOs laufen unverändert weiter; neu generierte DTOs setzen ein &amp;lt;code&amp;gt;dto.lib&amp;lt;/code&amp;gt; ab dem 07.10.2026 voraus&lt;br /&gt;
*** &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; meldet nun, welche Zeile er nicht nachladen konnte. Liefert &amp;lt;code&amp;gt;em.find&amp;lt;/code&amp;gt; kein Ergebnis, wird ein Fehler mit Entitätsklasse, ID, Eigenschaft und DTO-Klasse protokolliert und eine &amp;lt;code&amp;gt;IllegalStateException&amp;lt;/code&amp;gt; geworfen. Bisher erschien an dieser Stelle nur eine &amp;lt;code&amp;gt;NullPointerException&amp;lt;/code&amp;gt; ohne Hinweis auf die Ursache&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;AbstractDTOService.closeEntityManager()&amp;lt;/code&amp;gt; fordert eine offene Transaktion nicht mehr nach jedem Lesezugriff zur Freigabe auf. Das Verhalten ist unverändert, die Warnung &amp;lt;code&amp;gt;dispose() refused&amp;lt;/code&amp;gt; erscheint aber nur noch, wenn tatsächlich jemand eine offene Transaktion abbauen will (zuvor rund zwei Meldungen je Verkauf und etwa 175 je Kassenabschluss)&lt;br /&gt;
*** Fix: Mit &amp;lt;code&amp;gt;-DsendTransactionEventAsync=true&amp;lt;/code&amp;gt; wartete &amp;lt;code&amp;gt;TransactionHandler.dispose()&amp;lt;/code&amp;gt; nach jedem Commit mindestens 800 ms, zuzüglich weiterer 800 ms je Durchlauf mit nicht leerer Ereigniswarteschlange – während &amp;lt;code&amp;gt;SessionManager&amp;lt;/code&amp;gt; die Sperre aller Transaktions-Handler hielt. An einer Kasse waren das mehrere Sekunden je Bon. &amp;lt;code&amp;gt;dispose()&amp;lt;/code&amp;gt; übergibt den Entity Manager nun dem Ereignis-Thread und kehrt sofort zurück; der Thread schließt ihn als letzten Schritt, sobald seine Warteschlange leer ist. Ein Ereignis, das sich nicht versenden lässt, beendet den Thread nicht mehr. Ohne den Schalter ändert sich nicht*s&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;MetadataBuilder&amp;lt;/code&amp;gt; macht beim ersten Scan zunächst alle gestarteten Bundles mit dem Header &amp;lt;code&amp;gt;OSBP-RuntimeBuilder-BundleSpace&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;Factory-Model&amp;lt;/code&amp;gt; im Bundle-Space bekannt und sucht erst danach nach Modellen. Bisher wurde ein Bundle erst beim Erreichen aufgenommen, während ein Participant ein Modell sofort laden kann: Ein ECView aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration&amp;lt;/code&amp;gt; nennt ein DTO aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration.base&amp;lt;/code&amp;gt; mit der höheren Bundle-ID, die Klasse wurde also je nach Reihenfolge beim Start nicht gefunden. In diesem Fall scheiterte &amp;lt;code&amp;gt;activate()&amp;lt;/code&amp;gt;, der DSL-Metadatendienst und damit der Persistenzdienst starteten nie, und die Anwendung blieb auf der Startseite stehen. Eine fehlgeschlagene Aktivierung wird nun zusätzlich als Fehler in das Anwendungslog geschrieben&lt;br /&gt;
** Fix: org.eclipse.osbp.dsl, org.eclipse.osbp.runtime: Vier Fehler in der sitzungsbezogenen Transaktionsverwaltung behoben. (a) &amp;lt;code&amp;gt;SessionManager.removeSession()&amp;lt;/code&amp;gt; gab den Transaktions-Handler unter einem Schlüssel frei, der nie passen konnte (&amp;lt;code&amp;gt;ISession&amp;lt;/code&amp;gt; hat kein &amp;lt;code&amp;gt;toString()&amp;lt;/code&amp;gt;), das Sicherheitsnetz griff also nie. (b) &amp;lt;code&amp;gt;disposeTransactionHandler&amp;lt;/code&amp;gt; entfernte den Eintrag auch dann, wenn die Transaktion noch offen war – der Entity Manager wurde aufgegeben und der Thread, der die Transaktion noch abschließen musste, fand seinen Handler nicht mehr. &amp;lt;code&amp;gt;ITransactionHandler&amp;lt;/code&amp;gt; erhält dafür &amp;lt;code&amp;gt;isDisposable()&amp;lt;/code&amp;gt; als Default-Methode. (c) Die Freigabe nach &amp;lt;code&amp;gt;transactionBegin&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Rollback&amp;lt;/code&amp;gt; steht nun in einem &amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt;; ein &amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt;, insbesondere ein &amp;lt;code&amp;gt;OutOfMemoryError&amp;lt;/code&amp;gt;, ließ den Handler bisher mit Entity Manager in einer statischen Map zurück. (d) &amp;lt;code&amp;gt;txnIsOpen&amp;lt;/code&amp;gt; wird auch bei einem fehlgeschlagenen Commit oder Rollback zurückgesetzt&lt;br /&gt;
** org.eclipse.osbp.persistence: &lt;br /&gt;
*** Der Startstatus nennt nun den Dienst, auf den der Persistenzdienst noch wartet. Die neue Komponente &amp;lt;code&amp;gt;PersistenceStartupStatus&amp;lt;/code&amp;gt; hat keine Pflichtreferenz, ist daher von Beginn an aktiv und setzt den Status auf „persistence service is waiting for the DSL metadata service“ (bzw. „the Mondrian manager“), bis diese gebunden sind. Bisher blieb es unabhängig vom Grund bei „persistenceservice not started yet“, und die wartenden Dienste protokollierten nichts&lt;br /&gt;
*** Beim Einrichten einer Persistence Unit wird jede verwaltete Klasse gemeldet, die nicht statisch gewebt ist, obwohl eine ihrer Oberklassen es ist – in einer ERROR-Zeile mit dem Hinweis, das Projekt vollständig neu zu bauen. Eine solche Klasse wird von EclipseLink instanziiert, aber nie befüllt: Der Dialog bleibt leer, und die nächste Aktualisierung scheitert mit „mapped to a primary key column ... Updates are not allowed“&lt;br /&gt;
** org.eclipse.osbp.ecview.extension: Fix: Das Grid vergisst die Zeilenschlüssel von Einträgen, die den Container als Ganzes verlassen haben. Vaadin gibt die Schlüssel nur über das clientseitige &amp;lt;code&amp;gt;dropRows&amp;lt;/code&amp;gt; frei; nach einem allgemeinen &amp;lt;code&amp;gt;ItemSetChange&amp;lt;/code&amp;gt;, wie ihn &amp;lt;code&amp;gt;removeAllItems()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;addAll()&amp;lt;/code&amp;gt; auslösen, blieben sie im &amp;lt;code&amp;gt;KeyMapper&amp;lt;/code&amp;gt; stehen und hielten jede jemals angezeigte Zeile samt ihrem DTO-Graphen. &amp;lt;code&amp;gt;GridPresentation.CustomGrid&amp;lt;/code&amp;gt; merkt sich die vergebenen Schlüssel und entfernt die nicht mehr enthaltenen&lt;br /&gt;
** org.osbee.datainterchange: Fix: FreeMarkers gemeinsam genutzte &amp;lt;code&amp;gt;InvalidReferenceException&amp;lt;/code&amp;gt; hält nicht mehr den ersten Exportlauf fest. Die statische Instanz übernahm die zum Zeitpunkt ihres Entstehens aktive Umgebung und damit das gesamte Datenmodell des ersten Exports für die Lebensdauer des Prozesses. Der Activator lädt die Klasse nun einmal außerhalb eines Template-Laufs&lt;br /&gt;
** org.eclipse.osbp.display: Fix: Das Display-Servlet wird nicht mehr auf dem Thread registriert, der die Bundles startet. Die Registrierung veröffentlicht einen Dienst, und Declarative Services verarbeitet dieses Ereignis auf dem veröffentlichenden Thread; dort wartete der Start aller nachfolgenden Bundles, in einem Fall über 50 Sekunden („Getting a lock required more than 50000 ms“). Die Registrierung läuft nun auf einem eigenen Thread&lt;br /&gt;
** org.eclipse.osbp.runtime, org.eclipse.osbp.blob, org.eclipse.osbp.autowireHelper, org.eclipse.osbp.ecview.extension, org.eclipse.osbp.ecview.addons, org.eclipse.osbp.infogrid.model: Neue Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; für String-Attribute. Ein Attribut mit &amp;lt;code&amp;gt;key=&amp;quot;barcode&amp;quot; value=&amp;quot;QRCode-128&amp;quot;&amp;lt;/code&amp;gt; wird schreibgeschützt als Barcode-Bild angezeigt, das aus seinem Klartextwert erzeugt wird – im Dialog über &amp;lt;code&amp;gt;BlobComponent&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;BlobUploadComponent&amp;lt;/code&amp;gt; (letztere dann ohne Schaltflächen) und in Grid-Spalten über den Blob-Bildkonverter&lt;br /&gt;
** org.eclipse.osbp.authentication, org.eclipse.osbp.system.configuration, org.eclipse.osbp.blob: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** org.eclipse.osbp.xtext.table, org.eclipse.osbp.xtext.table.common: Für Attribute mit der Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; wird ein Barcode-Lookup generiert; eine String-Zelle wird als Barcode-Bild angezeigt, wenn das Lookup einen Barcode-Typ trägt&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** net.osbee.pos.tse: Aufrufer können die BSI-Zertifizierungs-ID der TSE abfragen. Die SE-API bietet &amp;lt;code&amp;gt;getCertificationId&amp;lt;/code&amp;gt; in beiden API-Versionen, keiner der beiden Adapter reichte den Aufruf bisher durch&lt;br /&gt;
** net.osbee.pos.tse, net.osbee.pos.rksv: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Einführung der http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/restartService Seite. Damit können entweder Sessions gekillt oder der Service der Anwendung neu gestartet werden.&lt;br /&gt;
** Bei Nichterreichbarkeit der Datenbank wird die Anwendung beendet und der Fehlerstatus auf der Statusseite angezeigt.&lt;br /&gt;
** Das eingebettete &amp;lt;code&amp;gt;shiro-all-1.2.3.jar&amp;lt;/code&amp;gt; wurde durch &amp;lt;code&amp;gt;shiro-core&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; in Version 1.13.0 ersetzt. Damit sind CVE-2016-4437 (Remote Code Execution über das RememberMe-Cookie mit festem Schlüssel) und CVE-2019-12422 geschlossen. &amp;lt;code&amp;gt;encoder-1.2.3.jar&amp;lt;/code&amp;gt; kommt hinzu, weil &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; 1.13 &amp;lt;code&amp;gt;org.owasp.encoder&amp;lt;/code&amp;gt; zwingend importiert.&lt;br /&gt;
** Anmeldung: &lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm&amp;lt;/code&amp;gt; löst den Anmeldenamen vor jeder Abfrage in einen Distinguished Name auf. Active Directory akzeptiert für den Bind auch einen User Principal Name, beantwortet Abfragen damit aber mit LDAP-Fehler 34 (&amp;lt;code&amp;gt;invalidDNSyntax&amp;lt;/code&amp;gt;), sodass ein &amp;lt;code&amp;gt;userDnTemplate&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt; zwar anmeldete, dann aber an den Attributen scheiterte. &amp;lt;code&amp;gt;resolveUserDn&amp;lt;/code&amp;gt; sucht nun über &amp;lt;code&amp;gt;userPrincipalName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sAMAccountName&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;mail&amp;lt;/code&amp;gt;; die Suchbasis stammt aus dem RootDSE. Bestehende Vorlagen der Form &amp;lt;code&amp;gt;cn={0},ou=...&amp;lt;/code&amp;gt; verhalten sich unverändert. Zugleich behoben: eine &amp;lt;code&amp;gt;StringIndexOutOfBoundsException&amp;lt;/code&amp;gt; im E-Mail-Zweig und das Einsetzen des Benutzernamens in den Suchfilter per Verkettung (jetzt als &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt;, von JNDI maskiert)&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm.getUserDn&amp;lt;/code&amp;gt; maskierte nur das Komma. &amp;lt;code&amp;gt;escapeDnValue&amp;lt;/code&amp;gt; deckt nun alle Zeichen nach RFC 4514 Abschnitt 2.4 ab, sodass ein Benutzername die Bedeutung des DN nicht mehr verändern kann&lt;br /&gt;
*** Die Funktionalität „Angemeldet bleiben“ arbeitet nun mit einem signierten Token statt mit verschlüsselten Zugangsdaten. Das Cookie ist eine mit HMAC-SHA256 signierte Aussage über Benutzer, Mandant, Geltungsbereich, Ablaufdatum und Version und enthält keine Zugangsdaten. Es ist zustandslos, sodass beliebig viele Geräte und Browser gleichzeitig eines halten können.&lt;br /&gt;
*** Das „Angemeldet bleiben“-Cookie gilt je Anwendungsinstanz und Browser. Der Cookie-Name trägt einen Kurzhash über Schema, Host, Port, erstes Pfadsegment und Portal-ID, sodass zwei Anwendungen auf demselben Host nicht mehr das Cookie der jeweils anderen lesen. Die selbstgebaute Verschlüsselung entfällt vollständig. Das Cookie wird mit expliziter Lebensdauer, &amp;lt;code&amp;gt;SameSite=Lax&amp;lt;/code&amp;gt; und unter https mit &amp;lt;code&amp;gt;Secure&amp;lt;/code&amp;gt; geschrieben. Die Anmeldung aus einem Cookie wartet fünf Sekunden mit einem Hinweis auf der Anmeldemaske und lässt sich in dieser Zeit abbrechen; ein entferntes Häkchen löscht das Cookie nun in jedem Fall. Die Betrugsmeldung samt Kontosperre bei nicht passendem Cookie entfällt&lt;br /&gt;
*** Fix: Kennwörter erscheinen nicht mehr im Log – weder bei der Anmeldung in &amp;lt;code&amp;gt;AuthenticationProvider.check()&amp;lt;/code&amp;gt; (bisher im Klartext auf DEBUG) noch beim Zurücksetzen, wo der Nachrichtentext mit dem neuen Kennwort dreimal geschrieben wurde&lt;br /&gt;
*** Die Anzeige des neuen Kennworts auf der Anmeldemaske, wenn keine E-Mail versendet werden kann, ist nun eine konfigurierte Betriebsart: &amp;lt;code&amp;gt;Userinterface/showResetPasswordOnScreen&amp;lt;/code&amp;gt;, standardmäßig aus, mit Protokollierung auf WARN. '''Installationen ohne Mailserver müssen den Parameter einmalig setzen'''&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;doResetPassword&amp;lt;/code&amp;gt; hebt weder eine Sperre noch die Deaktivierung eines Kontos auf und setzt den Fehlversuchszähler nicht mehr zurück. Das Zurücksetzen kann jeder auslösen, der einen Benutzernamen eingibt; aufgehoben werden Sperre und Deaktivierung nur noch durch einen Administrator über &amp;lt;code&amp;gt;doUnlock&amp;lt;/code&amp;gt;&lt;br /&gt;
** System Configuration: &lt;br /&gt;
*** Parameter &amp;lt;code&amp;gt;RememberMeSecret&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;IConfigurationService&amp;lt;/code&amp;gt; ergänzt (&amp;lt;code&amp;gt;GLOBAL_PARAMETERS/RememberMeSecret&amp;lt;/code&amp;gt;). Der Schlüssel wird je Installation bei der ersten Benutzung der &amp;quot;RememberMe&amp;quot; Funktionalität einmal aus gezogen und von allen Anmeldungen geteilt; das Löschen des Eintrags macht alle „Angemeldet bleiben“-Cookies auf einmal ungültig.&lt;br /&gt;
*** Fix: Die Einstellungen füllten sich mit Platzhaltern „not set“. &amp;lt;code&amp;gt;ConfigurationService.getConfigurationString&amp;lt;/code&amp;gt; speicherte bei leerem Vorgabewert den Platzhalter und lieferte ihn als leere Zeichenkette zurück, sodass &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; stets eine weitere Zeile anhängte. &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; entfernt nun die Platzhalterzeilen des Schlüssels vor dem Schreiben, und ein gespeicherter Platzhalter gilt als „kein Wert“. &amp;lt;code&amp;gt;deleteConfigurations&amp;lt;/code&amp;gt; setzt zusätzlich den Cache zurück; gelöschte Einträge kamen bisher beim nächsten Lesen wieder&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Fix: org.eclipse.osbp.dependencies-mbp: Das Bundle &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.bundle.activemq.all.osgi&amp;lt;/code&amp;gt; enthält kein Log4j und kein eingebettetes slf4j mehr. &amp;lt;code&amp;gt;activemq-all&amp;lt;/code&amp;gt; brachte eine vollständige Kopie von Apache Log4j 1.2.17 mit (359 Klassen, darunter &amp;lt;code&amp;gt;JDBCAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSSink&amp;lt;/code&amp;gt; und chainsaw – betroffen von CVE-2021-4104, CVE-2022-23302, CVE-2022-23305 und CVE-2022-23307) sowie slf4j-api 1.7.13 und &amp;lt;code&amp;gt;slf4j-log4j12&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;Include-Resource&amp;lt;/code&amp;gt; bindet das Hersteller-Jar nun ohne &amp;lt;code&amp;gt;org.apache.log4j&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org.slf4j&amp;lt;/code&amp;gt;, deren Maven-Koordinaten, die &amp;lt;code&amp;gt;log4j.properties&amp;lt;/code&amp;gt; und Springs &amp;lt;code&amp;gt;Log4jConfigurer&amp;lt;/code&amp;gt; ein. ActiveMQ bezieht slf4j stattdessen aus dem Produkt (&amp;lt;code&amp;gt;org.slf4j.api&amp;lt;/code&amp;gt; 1.7.36)&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neue Dienststeuerungsseite unter &amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;. &lt;br /&gt;
*** Ein Bediener kann darüber – autorisiert durch eine reguläre Anwendungsanmeldung – hängende Sitzungen beenden oder den Dienst neu starten, ohne Zugriff auf den Serverrechner zu benötigen. Drei Stufen: Sitzungen des aufrufenden Arbeitsplatzes, alle Sitzungen, Neustart. Die Seite ist am Root-HTTP-Service registriert und bleibt damit erreichbar, wenn der Anwendungskontext selbst gestört ist; Markup, Stil, Skript und Texte (deutsch, englisch, französisch) sind deshalb in der Seite enthalten. Sitzungen werden über das Invalidieren der HTTP-Sitzung beendet. Der Neustart läuft über die Befehlswarteschlange der Anwendung; die Seite fragt anschließend die Anwendung ab und führt den Bediener über die Unterbrechung hinweg&lt;br /&gt;
*** Alle Aktionen der Dienststeuerungsseite werden im &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; unter denselben Koordinaten wie die Anmeldemaske protokolliert (fehlgeschlagene Anmeldung und Neustart als WARNING, gesperrtes Konto als ERROR, beendete Sitzungen als INFO). Eine abgelehnte Anmeldung sperrt das Formular für die Dauer der Wartezeit mit Countdown; der Zähler ist derselbe wie an der Anmeldemaske, sodass sich Fehlversuche auf beiden Wegen zur Kontosperre summieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260907 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Überarbeitung der Codebasis zur Entfernung veralteter und nicht benötigter Bundles&lt;br /&gt;
** Überarbeitung des Loginvorgangs / der Cookiespeicherung bei &amp;quot;remember me&amp;quot;. Es werden keine kritischen Daten mehr im Cookie gespeichert.&lt;br /&gt;
** Verbesserung der Übersetzungen&lt;br /&gt;
** Anpassungen für frz. Fiskalanforderungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Laden der Übersetzungen in die interne Tabelle beim Systemstart deutlich beschleunigt. Dadurch verbessertes Startverhalten der Anwendungen.&lt;br /&gt;
** Verbesserungen bei der frz. Tastaturunterstützung&lt;br /&gt;
** Verbesserungen der Übersetzungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260618 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Blockieren durch das Laden von Diensten während des Starts vermieden, dadurch schnellerer Anwendungsstart. Anderes Verhalten beim Start an der Benutzeroberfläche.&lt;br /&gt;
** Französische Tastaturunterstützung (AZERTY) im Keymapper der Statemachine ergänzt&lt;br /&gt;
** Login bezieht Build-Version und Hersteller nun aus den &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; (einheitliche Quelle)&lt;br /&gt;
** Neue gemeinsame Hilfsmethoden &amp;lt;code&amp;gt;getBuildVersion()&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;getVendor()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; zur Ermittlung der Build-Identität&lt;br /&gt;
** &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; setzt die Zeitstempel von &amp;lt;code&amp;gt;lastError&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;lastWarning&amp;lt;/code&amp;gt; nicht mehr zurück&lt;br /&gt;
** Fix: NPE in &amp;lt;code&amp;gt;org.eclipse.osbp.xtext.dialog.AutowireUiFactory&amp;lt;/code&amp;gt; behoben&lt;br /&gt;
** Version von 5.2.0 auf 5.3.0 angehoben&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-reverify&amp;lt;/code&amp;gt; (16px/32px) für die NF525-Schaltfläche zur erneuten Archivintegritätsprüfung&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-refresh.png&amp;lt;/code&amp;gt; ergänzt&lt;br /&gt;
** Grid – horizontale Bildlaufleiste wiederhergestellt&lt;br /&gt;
** Grid - Flex-Layout für Kassen-/POS-Grids wiederhergestellt (kollabierte Spalten behoben)&lt;br /&gt;
** französische Übersetzungen überarbeitet&lt;br /&gt;
&lt;br /&gt;
* Grammatiken/Generierung:&lt;br /&gt;
** org.eclipse.osbp.dsl: Benutzerdefinierte &amp;lt;code&amp;gt;@PreRemove&amp;lt;/code&amp;gt;-Hooks werden in der generierten &amp;lt;code&amp;gt;preRemove()&amp;lt;/code&amp;gt;-Methode zusammengeführt&lt;br /&gt;
** org.eclipse.osbp.xtext.i18n: i18n-Generator erzeugt nun das byte-genaue Eclipse-Babel-Format&lt;br /&gt;
&lt;br /&gt;
* POS Framework für franz. Fiskalanforderungen eingeführt&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260410 ==&lt;br /&gt;
&lt;br /&gt;
* POS Framework: &lt;br /&gt;
** Performanceverbesserung beim Kassieren&lt;br /&gt;
** Multi-Protokoll Unterstützung für Paymentterminal &lt;br /&gt;
*** frz. Protokolle &amp;quot;Concert&amp;quot;, &amp;quot;Protocol E&amp;quot;&lt;br /&gt;
*** &amp;quot;Mock&amp;quot; für Tests&lt;br /&gt;
*** Statemachine DSL erweitert: protocol Parameter für Paymentterminal&lt;br /&gt;
*** &amp;quot;Shared Payment Terminal&amp;quot;&lt;br /&gt;
**** locking im PaymentTerminalService implementiert&lt;br /&gt;
**** pro Terminal über ConfigService einstellbar&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260402 ==&lt;br /&gt;
&lt;br /&gt;
Die Version verbessert das Startverhalten einer Anwendung und bringt mehr Informationen über den Status des Starts auf den Bildschirm&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Anzeige des Persistenzservice-Status auf dem Login-Bildschirm&lt;br /&gt;
** Information über den Persistenzservice auf der Fehlerseite hinzugefügt&lt;br /&gt;
** Beim Start wird nun überall auf den Persistenzservice statt nur auf den ConfigurationService gewartet&lt;br /&gt;
&lt;br /&gt;
* BPM:&lt;br /&gt;
** Fix: net.osbee.bpm: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** Fix: net.osbee.pos.epay: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260305 ==&lt;br /&gt;
&lt;br /&gt;
=== Report Anzeige ===&lt;br /&gt;
&lt;br /&gt;
Diese Version konzentriert sich auf '''Stabilitätsverbesserungen''' für das Report-Rendering-System, insbesondere auf die Behebung von Race Conditions und Anzeigeproblemen, die bei schnellen Benutzerinteraktionen auftraten.&lt;br /&gt;
&lt;br /&gt;
* Race Condition beim Report-Rendering&lt;br /&gt;
** '''Behoben: Schnelles Auswählen/Abwählen führte dazu, dass Reports mit ungültigen oder fehlenden Filtern gerendert wurden'''&lt;br /&gt;
*** Reports verarbeiten nun korrekt wenn Benutzer schnell Elemente auswählen und wieder abwählen&lt;br /&gt;
*** Filteränderungen werden blockiert, während ein Render-Vorgang läuft&lt;br /&gt;
*** Ausstehende Filteränderungen werden nachverfolgt und nach Abschluss des Renderings erneut ausgewertet&lt;br /&gt;
*** Reports mit &amp;lt;code&amp;gt;selectById&amp;lt;/code&amp;gt; werden nun korrekt ausgeblendet, wenn nichts ausgewählt ist&lt;br /&gt;
&lt;br /&gt;
* PDF-Anzeigeskalierungsproblem &lt;br /&gt;
** '''Behoben: PDF-Skalierungsprobleme durch Neuerstellung des BrowserFrames bei jedem Rendering'''&lt;br /&gt;
&lt;br /&gt;
=== Anmeldebildschirm ===&lt;br /&gt;
&lt;br /&gt;
Der Anmeldebildschirm zeigt nun während der Initialisierung des Persistence-Services einen Statustext an.&lt;br /&gt;
&lt;br /&gt;
* Lauftext-Anzeige (Marquee) mit dem aktuellen Status des Persistence-Services&lt;br /&gt;
* Deaktivierung aller Anmeldesteuerelemente während der Wartezeit&lt;br /&gt;
&lt;br /&gt;
=== Start der Anwendung ===&lt;br /&gt;
&lt;br /&gt;
* Blockierungen der Initialisierungsvorgänge durch Warten auf Serviceregistrierung während des Anwendungsstarts reduziert. &amp;lt;br&amp;gt;Dadurch verändert sich das Startverhalten, insbesondere die Reihenfolge der Anwendung. Insgesamt schnelleres Laden der Bundles.&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.peripheralssetup&amp;diff=4612</id>
		<title>Releasenotes 2026 OS.peripheralssetup</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.peripheralssetup&amp;diff=4612"/>
				<updated>2026-10-12T09:23:46Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Version 5.2.0.2026???? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20261012 ==&lt;br /&gt;
&lt;br /&gt;
* Installation des TSE Mockers, nicht aktiviert. Muss manuell aktiviert werden.&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.peripherals&amp;diff=4611</id>
		<title>Releasenotes 2026 OS.peripherals</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.peripherals&amp;diff=4611"/>
				<updated>2026-10-12T09:22:52Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 1.2 vom 12.10.2026 ==&lt;br /&gt;
&lt;br /&gt;
=== TSE Implementierung ===&lt;br /&gt;
&lt;br /&gt;
* Einführung eines TSE Mockers für Testzwecke&lt;br /&gt;
&lt;br /&gt;
== Version 1.2 vom 07.07.2026 ==&lt;br /&gt;
&lt;br /&gt;
=== Virtuelle Peripheriegeräte und Diagnose ===&lt;br /&gt;
* Erfassung des zuletzt gedruckten Belegs und der zuletzt angezeigten Zeilen über '''/lastSlip''' und '''/lastDisplay'''; rollierende 10-Zeilen-Historie der Kundenanzeige. &lt;br /&gt;
* Das '''Tray-Icon''' zeigt die letzten Anzeigezeilen (neueste zuerst) als Ballon-Info. &lt;br /&gt;
* Neue Schalter in der application.yml der Standardinstallation: '''virtualPrinter''', '''captureLastSlip''', '''virtualLineDisplay''', '''captureLastDisplay'''.&lt;br /&gt;
&lt;br /&gt;
* '''Verbindungsprobleme''' im HTTP-Client zwischen Tray/POS und Dienst behoben; die Verbindungslast wurde reduziert.&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4610</id>
		<title>Releasenotes 2026 OS.pos</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4610"/>
				<updated>2026-10-12T09:21:25Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Version 5.3.0-V20261006 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261012 ==&lt;br /&gt;
&lt;br /&gt;
Schwerpunkt dieses Zeitraums ist das '''Speicherwachstum des Kassendienstes''' über einen Verkaufstag: Ursachen gefunden, behoben und an einer Kasse nachgemessen. Daneben wurde die Verfügbarkeitsprüfung der Webservices auf eine Implementierung zusammengeführt und ein Datumsfehler darin behoben.&lt;br /&gt;
&lt;br /&gt;
=== Neue Funktionen ===&lt;br /&gt;
* '''NF 525 – Neustart durch den Bediener im Ereignisjournal:''' Ein über die Dienststeuerungsseite (&amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;) ausgelöster Neustart wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben, mit dem auslösenden Bediener. Bisher zeigte das Journal nur „System gestoppt“ und „System gestartet“, nicht aber, wer den Neustart veranlasst hat.&lt;br /&gt;
&lt;br /&gt;
=== Fehlerbehebungen ===&lt;br /&gt;
* '''Speicherwachstum je Verkauf:''' Die DTOs von &amp;lt;code&amp;gt;net.osbee.app.pos.common&amp;lt;/code&amp;gt; wurden neu generiert und halten nur noch Klasse und ID ihrer Entität statt der Entität selbst. Zusammen mit den Korrekturen im Framework (siehe Releasenotes der Softwarefactory, Version 5.3.0.20261012) hält eine Kasse je Verkauf praktisch keinen Persistenzkontext mehr fest; vorher waren es rund 42 je Verkauf, etwa 1 MB.&lt;br /&gt;
* '''Kassenabschluss gibt seine Daten wieder frei:''' Nach dem Speichern eines Kassenabschlusses werden die dafür im Zustandsautomaten abgelegten Daten entfernt. Sie hielten über ihre Mapping-Kontexte alle Bons und Zahlungen der abgeschlossenen Periode bis zum nächsten Abschluss fest.&lt;br /&gt;
* '''NF 525 – Ereignisjournal:''' Beim Anhängen eines Eintrags wird nicht mehr das gesamte Journal gelesen, um dessen letzten Eintrag zu finden. Der Aufwand je Eintrag wuchs bisher mit der Länge des Journals.&lt;br /&gt;
* '''Webservice-Verfügbarkeitsprüfung über Mitternacht:''' Ein als nicht erreichbar vermerkter Webservice wurde nach Mitternacht zu spät oder gar nicht mehr erneut geprüft, weil der Zeitstempel als Millisekunden des Tages abgelegt war. Ein Ausfall um 20:00 Uhr hielt den Webservice bis 21:00 Uhr des Folgetags abgeschaltet, ein Ausfall ab 23:00 Uhr dauerhaft. Der Zeitstempel ist nun fortlaufend.&lt;br /&gt;
&lt;br /&gt;
=== Aktualisierungen ===&lt;br /&gt;
* '''Webservice-Verfügbarkeitsprüfung zusammengeführt:''' Die Prüfung existierte viermal (zweimal in &amp;lt;code&amp;gt;net.osbee.app.pos.common&amp;lt;/code&amp;gt;, zweimal in &amp;lt;code&amp;gt;net.osbee.sample.pos&amp;lt;/code&amp;gt;). Einzige Implementierung ist nun &amp;lt;code&amp;gt;WebService.check(sm, ws)&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;posbase&amp;lt;/code&amp;gt;; die übrigen delegieren dorthin. Der Zustand wird je Webservice in &amp;lt;code&amp;gt;ws.accesible&amp;lt;/code&amp;gt; geführt, der gemeinsame Speicherschlüssel entfällt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261012|Softwarefactory 20261012]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261006 ==&lt;br /&gt;
&lt;br /&gt;
* Ergänzung bei Kundenkartenverarbeitung&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260907 ==&lt;br /&gt;
&lt;br /&gt;
* Schwerpunkt dieses Zeitraums ist die französische Fiskalkonformität '''NF 525''' (WORM-Sicherungseinrichtung, Write-once-Nachweis, Geräte-Lebenszyklus) sowie die Auslagerung des '''DSFinV-K'''-Datenmodells. &lt;br /&gt;
&lt;br /&gt;
=== Änderungen / Neue Funktionen ===&lt;br /&gt;
&lt;br /&gt;
* '''Ausgeschlossene Zahlarten:''' Die Perspektive für ausgeschlossene Zahlungsarten wurde zur Kundenpflege verschoben.&lt;br /&gt;
* '''Benutzerverwaltung:''' Die automatische Synchronisierung der einzelnen views in der Benutzerverwaltungsperspektive wurde abgeschaltet.&lt;br /&gt;
* '''Authentifizierung:''' Die Authentifizierungs-Logger wurden zusammengefasst und schreiben wieder in eine Datei.&lt;br /&gt;
* '''remember me Anmeldefunktion:''' überarbeitet, Cookieverwendung sicherer gemacht.&lt;br /&gt;
* '''Kennwort vergessen?:''' Zurücksetzen des Kennworts löst eine Benutzersperre nicht mehr automatisch auf. Dies muss aktiv durch den Administrator geschehen.&lt;br /&gt;
* '''showResetPasswordOnScreen:''' neuer Konfigurationsschlüssel. Default: false. Bei true wird das neue Passwort im Log angezeigt, falls lein Mailserver kongiguriert ist.&lt;br /&gt;
&lt;br /&gt;
* '''NF 525 – WORM Write-once-Nachweis:''' Ein zertifiziertes WORM-Gerät darf Fiskalverkäufe erst nach einem signierten &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;-Verdikt tragen. Ein asynchroner Probe-Lauf weist die Write-once-Eigenschaft nach (das Medium nimmt eine Teständerung zurück); der Verdikt wird signiert und ist „sticky&amp;quot;. ''(cache-defeat probe, verbreiterte Signaturspalte)''&lt;br /&gt;
* '''NF 525 – Zertifizierungs-Gate:''' Auf einem zertifizierten Gerät führen Struktur-/Integritätsfehler zu einem harten Verkaufsstopp (STOP_SALES); auf einem nicht-zertifizierten Gerät wird die Anomalie nur als Warnung protokolliert (warn-only) und dem Kassierer als Hinweis am Verkauf angezeigt.&lt;br /&gt;
* '''NF 525 – Reaktivierung der Write-once-Bestätigung:''' Der zuvor pausierte Bestätigungs-Block wurde wieder aktiviert; der Scheduler führt ein zertifiziertes Gerät nun wieder von &amp;lt;code&amp;gt;PENDING&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''NF 525 – Schutz gegen Zertifizierungs-Downgrade:''' Eine bereits fiskalisch aktive, zertifizierte Kasse kann nicht mehr auf ein nicht-zertifiziertes oder entferntes Sicherungsgerät umgestellt werden (Geräte-Tausch), und ein zertifiziertes Gerät kann nicht mehr in-place ent-zertifiziert werden. Beide Wege werden abgewiesen (Umgehung der zertifizierten Durchsetzung verhindert).&lt;br /&gt;
* '''NF 525 – Auditierung von Geräte-Konfigurationsänderungen:''' Eine Änderung an der zertifizierungsrelevanten WORM-Konfiguration wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben.&lt;br /&gt;
* '''NF 525 – Retention/Archivierung beim Geräte-Tausch:''' Perioden ohne Fiskaldatensätze werden nicht mehr als leeres ZIP archiviert, sondern als schlanker „abgedeckt&amp;quot;-Marker vermerkt (kein Medium-Scan) – die „Gespeichert&amp;quot;-Rückmeldung nach einem Geräte-Tausch kommt dadurch deutlich schneller. Zum Abschluss wird eine Zusammenfassung protokolliert.&lt;br /&gt;
* '''NF 525 – Write-once-Probe:''' Die Anwesenheit der Probe-Datei wird nun über eine frische Verzeichnis-Enumeration gelesen (behebt eine Fehlerkennung durch veraltete Verzeichnis-Zwischenstände).&lt;br /&gt;
* '''Internationalisierung:''' Neue NF-525-WORM-Schlüssel (Write-once, worm_protection, warn-only) in das zentrale Übersetzungsbündel gespiegelt; allgemeine Vokabular-Erweiterungen.&lt;br /&gt;
* '''Rechnungsdruck (Invoice2p):''' NF-525-Daten in der Rechnungsvorlage berücksichtigt.&lt;br /&gt;
* '''Bondruck:''' NF-525-Daten ergänzt&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260907|Softwarefactory 5.2.0.20260907]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260707 ==&lt;br /&gt;
&lt;br /&gt;
Diese Ausgabe bringt vor allem die Unterstützung französischer Kassen voran: eine&lt;br /&gt;
vollständige AZERTY-Tastaturunterstützung (physisch und als Bildschirmtastatur), das&lt;br /&gt;
französische Zahlungsterminal-Protokoll CAISSE-AP inklusive Simulator sowie virtuelle&lt;br /&gt;
Peripheriegeräte für Test und Diagnose. Ergänzt wird dies durch NF525-Härtungen,&lt;br /&gt;
Fehlerbehebungen bei Kartenzahlungen und eine durchgängige Vereinheitlichung der&lt;br /&gt;
Übersetzungsdateien.&lt;br /&gt;
&lt;br /&gt;
* Die '''physische französische AZERTY-Tastatur''' wird nun vollständig unterstützt. Der komplette Zeichensatz wurde auf realer Hardware getestet; die zuvor fehlende '''ù-Taste''' wurde ergänzt.&lt;br /&gt;
* Die '''Bildschirmtastatur''' (On-Screen-Keypad) &lt;br /&gt;
** bildet nun eine echte französische AZERTY-Belegung über alle drei Ebenen ab (Grundebene, Umschalt, AltGr) inklusive Akzentkomposition über die Tottasten ^ und ¨.&lt;br /&gt;
** folgt jetzt '''einheitlich der Oberflächensprache''': Französisch → AZERTY, Englisch → englische Belegung, alle übrigen Sprachen → deutsches QWERTZ. Die Belegung wird beim Öffnen des Dialogs in der aktiven Sprache neu aufgebaut.&lt;br /&gt;
* Neue Konfiguration '''Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry''' zur Auswahl der physischen Tastaturbelegung je Kasse.&lt;br /&gt;
&lt;br /&gt;
* '''CAISSE-AP – französisches Zahlungsterminal'''&lt;br /&gt;
** Unterstützung des '''Tagesabschlusses (télécollecte)''' für Concert/CAISSE-AP-Terminals; die obligatorischen Felder CB und CE werden nun sowohl in der Abschluss- als auch in der Abbruch-Anfrage übertragen.&lt;br /&gt;
&lt;br /&gt;
* NF525 / Fiskalkonformität&lt;br /&gt;
** Die '''Persistierung des Grand-Totals''' ist nun zwingende Vorbedingung für die Signatur eines Belegs – verhindert eine Signatur bei unvollständig gespeichertem Umsatzzähler. ''(net.osbee.app.pos.common d5a4578ec)''&lt;br /&gt;
&lt;br /&gt;
* Kartenzahlung&lt;br /&gt;
** Eine Kartenzahlung kann nun korrekt '''storniert''' werden: das Belegfeld (receipt) wird aus dem CJ-Feld der Concert-Antwort befüllt.&lt;br /&gt;
** Das '''Löschen einer nicht stornierbaren Terminal-Zahlung''' wird blockiert, um inkonsistente Zustände zu vermeiden. &lt;br /&gt;
** setPaymentTerminalReversal stürzt bei einer fehlerhaften Anfrage nicht mehr ab. &lt;br /&gt;
&lt;br /&gt;
* Oberfläche / Internationalisierung ===&lt;br /&gt;
** Die '''Laufzeit-Sprachumschaltung''' funktioniert nun in der Kassierperspektive&lt;br /&gt;
** Zentrale Übersetzungen aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Systemvoraussetzungen ===&lt;br /&gt;
** Für den französischen Markt: Zahlungsterminal mit CAISSE-AP-/Concert-Protokoll (CB-Port 8888, konfigurierbae), physische AZERTY-Tastatur optional&lt;br /&gt;
** Konfiguration je Kasse über Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry und Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardLayout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260707|Softwarefactory 5.2.0.20260707]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260618 ==&lt;br /&gt;
&lt;br /&gt;
* Version von 5.2 auf 5.3&lt;br /&gt;
* frz. Fiskalanforderungen: erste Implementierung&lt;br /&gt;
* frz. Übersetzungen aktualisiert&lt;br /&gt;
* Verwendung frz. Tastatur in Kassiersicht&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260618|Softwarefactory 5.3.0.20260618]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260410 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Fix Performanceproblem ( eingeführt mit 4.5.7-V20260402 (OS) ), dbcaching Einstellungen&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260410|Softwarefactory 5.2.0.20260410]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260402 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Automatischer Wechsel zum Status &amp;lt;code&amp;gt;PAYMENTTERMINAL_REPEATRECEIPT&amp;lt;/code&amp;gt; im Modus 'store' (statt 'print') bei leeren Bonzeilen&lt;br /&gt;
** Neue Funktion &amp;lt;code&amp;gt;attachRemarks&amp;lt;/code&amp;gt; zum Zeichnen von Bonbemerkungen und deren Verknüpfung mit dem Kassenbon&lt;br /&gt;
** Möglichkeit zur Eingabe von freien Bemerkungen zum Kassenbon&lt;br /&gt;
** Bonbemerkungen: &amp;lt;code&amp;gt;observeFocus&amp;lt;/code&amp;gt; von remark1/2 an Events gebunden&lt;br /&gt;
&lt;br /&gt;
* Kassenkonfiguration:&lt;br /&gt;
** Menüeintrag für Stammdaten der Bonbemerkungen hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Neue Entitäten für Bonbemerkungen (SlipRemarks)&lt;br /&gt;
** Neue Spalten &amp;lt;code&amp;gt;remark_1&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;remark_2&amp;lt;/code&amp;gt; für CashSlip-Entität&lt;br /&gt;
** Dialoge, Tabellen und Perspektive für Bonbemerkungen implementiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7.20260305 (OS) ==&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260305|Softwarefactory 5.2.0.20260305]]&lt;br /&gt;
&lt;br /&gt;
* Berichtanzeige&lt;br /&gt;
** Fix: Probleme bei der Berichtsanzeige mit schneller Klickfolge in Auswahltabelle behoben.&lt;br /&gt;
&lt;br /&gt;
* Kassenschluss:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;determineCloseExpectation&amp;lt;/code&amp;gt; - Sortierung von CashPaymentTermData nach traceNumber absteigend, um den letzten Eintrag zu erhalten&lt;br /&gt;
&lt;br /&gt;
* Kassenentsorgung:&lt;br /&gt;
** Neues Systemprodukt &amp;quot;fee&amp;quot; aktiviert&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Einige Entitäten auf &amp;lt;code&amp;gt;cacheable=false&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
** Entitäten mit escaped Spaltennamen aktualisiert&lt;br /&gt;
** Generierte Entitäten und DTOs aktualisiert&lt;br /&gt;
** Entitäten mit neuem Service Framework aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;canUnparkSelected&amp;lt;/code&amp;gt; - Ablehnung eines Slips mit Zahlungen an einer SiS-Kasse&lt;br /&gt;
** Fix: PRINT_SLIP - &amp;lt;code&amp;gt;onOK&amp;lt;/code&amp;gt; verlässt nicht, wenn Slip änderbar ist&lt;br /&gt;
** Neue Eingabeaktion für MODIFY_FLD, setzt &amp;lt;code&amp;gt;cashposiupdate&amp;lt;/code&amp;gt; auf ausgewählte Position&lt;br /&gt;
&lt;br /&gt;
* Archivierung:&lt;br /&gt;
** &amp;lt;code&amp;gt;archivDescription xml-os&amp;lt;/code&amp;gt; für XML-Format der Beschreibungsdatei für Archiv hinzugefügt&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4609</id>
		<title>Releasenotes 2026 OS.pos</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4609"/>
				<updated>2026-10-12T09:21:09Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Version 5.3.0-V20261006 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261006 ==&lt;br /&gt;
&lt;br /&gt;
Schwerpunkt dieses Zeitraums ist das '''Speicherwachstum des Kassendienstes''' über einen Verkaufstag: Ursachen gefunden, behoben und an einer Kasse nachgemessen. Daneben wurde die Verfügbarkeitsprüfung der Webservices auf eine Implementierung zusammengeführt und ein Datumsfehler darin behoben.&lt;br /&gt;
&lt;br /&gt;
=== Neue Funktionen ===&lt;br /&gt;
* '''NF 525 – Neustart durch den Bediener im Ereignisjournal:''' Ein über die Dienststeuerungsseite (&amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;) ausgelöster Neustart wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben, mit dem auslösenden Bediener. Bisher zeigte das Journal nur „System gestoppt“ und „System gestartet“, nicht aber, wer den Neustart veranlasst hat.&lt;br /&gt;
&lt;br /&gt;
=== Fehlerbehebungen ===&lt;br /&gt;
* '''Speicherwachstum je Verkauf:''' Die DTOs von &amp;lt;code&amp;gt;net.osbee.app.pos.common&amp;lt;/code&amp;gt; wurden neu generiert und halten nur noch Klasse und ID ihrer Entität statt der Entität selbst. Zusammen mit den Korrekturen im Framework (siehe Releasenotes der Softwarefactory, Version 5.3.0.20261012) hält eine Kasse je Verkauf praktisch keinen Persistenzkontext mehr fest; vorher waren es rund 42 je Verkauf, etwa 1 MB.&lt;br /&gt;
* '''Kassenabschluss gibt seine Daten wieder frei:''' Nach dem Speichern eines Kassenabschlusses werden die dafür im Zustandsautomaten abgelegten Daten entfernt. Sie hielten über ihre Mapping-Kontexte alle Bons und Zahlungen der abgeschlossenen Periode bis zum nächsten Abschluss fest.&lt;br /&gt;
* '''NF 525 – Ereignisjournal:''' Beim Anhängen eines Eintrags wird nicht mehr das gesamte Journal gelesen, um dessen letzten Eintrag zu finden. Der Aufwand je Eintrag wuchs bisher mit der Länge des Journals.&lt;br /&gt;
* '''Webservice-Verfügbarkeitsprüfung über Mitternacht:''' Ein als nicht erreichbar vermerkter Webservice wurde nach Mitternacht zu spät oder gar nicht mehr erneut geprüft, weil der Zeitstempel als Millisekunden des Tages abgelegt war. Ein Ausfall um 20:00 Uhr hielt den Webservice bis 21:00 Uhr des Folgetags abgeschaltet, ein Ausfall ab 23:00 Uhr dauerhaft. Der Zeitstempel ist nun fortlaufend.&lt;br /&gt;
&lt;br /&gt;
=== Aktualisierungen ===&lt;br /&gt;
* '''Webservice-Verfügbarkeitsprüfung zusammengeführt:''' Die Prüfung existierte viermal (zweimal in &amp;lt;code&amp;gt;net.osbee.app.pos.common&amp;lt;/code&amp;gt;, zweimal in &amp;lt;code&amp;gt;net.osbee.sample.pos&amp;lt;/code&amp;gt;). Einzige Implementierung ist nun &amp;lt;code&amp;gt;WebService.check(sm, ws)&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;posbase&amp;lt;/code&amp;gt;; die übrigen delegieren dorthin. Der Zustand wird je Webservice in &amp;lt;code&amp;gt;ws.accesible&amp;lt;/code&amp;gt; geführt, der gemeinsame Speicherschlüssel entfällt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261012|Softwarefactory 20261012]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261006 ==&lt;br /&gt;
&lt;br /&gt;
* Ergänzung bei Kundenkartenverarbeitung&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260907 ==&lt;br /&gt;
&lt;br /&gt;
* Schwerpunkt dieses Zeitraums ist die französische Fiskalkonformität '''NF 525''' (WORM-Sicherungseinrichtung, Write-once-Nachweis, Geräte-Lebenszyklus) sowie die Auslagerung des '''DSFinV-K'''-Datenmodells. &lt;br /&gt;
&lt;br /&gt;
=== Änderungen / Neue Funktionen ===&lt;br /&gt;
&lt;br /&gt;
* '''Ausgeschlossene Zahlarten:''' Die Perspektive für ausgeschlossene Zahlungsarten wurde zur Kundenpflege verschoben.&lt;br /&gt;
* '''Benutzerverwaltung:''' Die automatische Synchronisierung der einzelnen views in der Benutzerverwaltungsperspektive wurde abgeschaltet.&lt;br /&gt;
* '''Authentifizierung:''' Die Authentifizierungs-Logger wurden zusammengefasst und schreiben wieder in eine Datei.&lt;br /&gt;
* '''remember me Anmeldefunktion:''' überarbeitet, Cookieverwendung sicherer gemacht.&lt;br /&gt;
* '''Kennwort vergessen?:''' Zurücksetzen des Kennworts löst eine Benutzersperre nicht mehr automatisch auf. Dies muss aktiv durch den Administrator geschehen.&lt;br /&gt;
* '''showResetPasswordOnScreen:''' neuer Konfigurationsschlüssel. Default: false. Bei true wird das neue Passwort im Log angezeigt, falls lein Mailserver kongiguriert ist.&lt;br /&gt;
&lt;br /&gt;
* '''NF 525 – WORM Write-once-Nachweis:''' Ein zertifiziertes WORM-Gerät darf Fiskalverkäufe erst nach einem signierten &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;-Verdikt tragen. Ein asynchroner Probe-Lauf weist die Write-once-Eigenschaft nach (das Medium nimmt eine Teständerung zurück); der Verdikt wird signiert und ist „sticky&amp;quot;. ''(cache-defeat probe, verbreiterte Signaturspalte)''&lt;br /&gt;
* '''NF 525 – Zertifizierungs-Gate:''' Auf einem zertifizierten Gerät führen Struktur-/Integritätsfehler zu einem harten Verkaufsstopp (STOP_SALES); auf einem nicht-zertifizierten Gerät wird die Anomalie nur als Warnung protokolliert (warn-only) und dem Kassierer als Hinweis am Verkauf angezeigt.&lt;br /&gt;
* '''NF 525 – Reaktivierung der Write-once-Bestätigung:''' Der zuvor pausierte Bestätigungs-Block wurde wieder aktiviert; der Scheduler führt ein zertifiziertes Gerät nun wieder von &amp;lt;code&amp;gt;PENDING&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''NF 525 – Schutz gegen Zertifizierungs-Downgrade:''' Eine bereits fiskalisch aktive, zertifizierte Kasse kann nicht mehr auf ein nicht-zertifiziertes oder entferntes Sicherungsgerät umgestellt werden (Geräte-Tausch), und ein zertifiziertes Gerät kann nicht mehr in-place ent-zertifiziert werden. Beide Wege werden abgewiesen (Umgehung der zertifizierten Durchsetzung verhindert).&lt;br /&gt;
* '''NF 525 – Auditierung von Geräte-Konfigurationsänderungen:''' Eine Änderung an der zertifizierungsrelevanten WORM-Konfiguration wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben.&lt;br /&gt;
* '''NF 525 – Retention/Archivierung beim Geräte-Tausch:''' Perioden ohne Fiskaldatensätze werden nicht mehr als leeres ZIP archiviert, sondern als schlanker „abgedeckt&amp;quot;-Marker vermerkt (kein Medium-Scan) – die „Gespeichert&amp;quot;-Rückmeldung nach einem Geräte-Tausch kommt dadurch deutlich schneller. Zum Abschluss wird eine Zusammenfassung protokolliert.&lt;br /&gt;
* '''NF 525 – Write-once-Probe:''' Die Anwesenheit der Probe-Datei wird nun über eine frische Verzeichnis-Enumeration gelesen (behebt eine Fehlerkennung durch veraltete Verzeichnis-Zwischenstände).&lt;br /&gt;
* '''Internationalisierung:''' Neue NF-525-WORM-Schlüssel (Write-once, worm_protection, warn-only) in das zentrale Übersetzungsbündel gespiegelt; allgemeine Vokabular-Erweiterungen.&lt;br /&gt;
* '''Rechnungsdruck (Invoice2p):''' NF-525-Daten in der Rechnungsvorlage berücksichtigt.&lt;br /&gt;
* '''Bondruck:''' NF-525-Daten ergänzt&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260907|Softwarefactory 5.2.0.20260907]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260707 ==&lt;br /&gt;
&lt;br /&gt;
Diese Ausgabe bringt vor allem die Unterstützung französischer Kassen voran: eine&lt;br /&gt;
vollständige AZERTY-Tastaturunterstützung (physisch und als Bildschirmtastatur), das&lt;br /&gt;
französische Zahlungsterminal-Protokoll CAISSE-AP inklusive Simulator sowie virtuelle&lt;br /&gt;
Peripheriegeräte für Test und Diagnose. Ergänzt wird dies durch NF525-Härtungen,&lt;br /&gt;
Fehlerbehebungen bei Kartenzahlungen und eine durchgängige Vereinheitlichung der&lt;br /&gt;
Übersetzungsdateien.&lt;br /&gt;
&lt;br /&gt;
* Die '''physische französische AZERTY-Tastatur''' wird nun vollständig unterstützt. Der komplette Zeichensatz wurde auf realer Hardware getestet; die zuvor fehlende '''ù-Taste''' wurde ergänzt.&lt;br /&gt;
* Die '''Bildschirmtastatur''' (On-Screen-Keypad) &lt;br /&gt;
** bildet nun eine echte französische AZERTY-Belegung über alle drei Ebenen ab (Grundebene, Umschalt, AltGr) inklusive Akzentkomposition über die Tottasten ^ und ¨.&lt;br /&gt;
** folgt jetzt '''einheitlich der Oberflächensprache''': Französisch → AZERTY, Englisch → englische Belegung, alle übrigen Sprachen → deutsches QWERTZ. Die Belegung wird beim Öffnen des Dialogs in der aktiven Sprache neu aufgebaut.&lt;br /&gt;
* Neue Konfiguration '''Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry''' zur Auswahl der physischen Tastaturbelegung je Kasse.&lt;br /&gt;
&lt;br /&gt;
* '''CAISSE-AP – französisches Zahlungsterminal'''&lt;br /&gt;
** Unterstützung des '''Tagesabschlusses (télécollecte)''' für Concert/CAISSE-AP-Terminals; die obligatorischen Felder CB und CE werden nun sowohl in der Abschluss- als auch in der Abbruch-Anfrage übertragen.&lt;br /&gt;
&lt;br /&gt;
* NF525 / Fiskalkonformität&lt;br /&gt;
** Die '''Persistierung des Grand-Totals''' ist nun zwingende Vorbedingung für die Signatur eines Belegs – verhindert eine Signatur bei unvollständig gespeichertem Umsatzzähler. ''(net.osbee.app.pos.common d5a4578ec)''&lt;br /&gt;
&lt;br /&gt;
* Kartenzahlung&lt;br /&gt;
** Eine Kartenzahlung kann nun korrekt '''storniert''' werden: das Belegfeld (receipt) wird aus dem CJ-Feld der Concert-Antwort befüllt.&lt;br /&gt;
** Das '''Löschen einer nicht stornierbaren Terminal-Zahlung''' wird blockiert, um inkonsistente Zustände zu vermeiden. &lt;br /&gt;
** setPaymentTerminalReversal stürzt bei einer fehlerhaften Anfrage nicht mehr ab. &lt;br /&gt;
&lt;br /&gt;
* Oberfläche / Internationalisierung ===&lt;br /&gt;
** Die '''Laufzeit-Sprachumschaltung''' funktioniert nun in der Kassierperspektive&lt;br /&gt;
** Zentrale Übersetzungen aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Systemvoraussetzungen ===&lt;br /&gt;
** Für den französischen Markt: Zahlungsterminal mit CAISSE-AP-/Concert-Protokoll (CB-Port 8888, konfigurierbae), physische AZERTY-Tastatur optional&lt;br /&gt;
** Konfiguration je Kasse über Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry und Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardLayout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260707|Softwarefactory 5.2.0.20260707]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260618 ==&lt;br /&gt;
&lt;br /&gt;
* Version von 5.2 auf 5.3&lt;br /&gt;
* frz. Fiskalanforderungen: erste Implementierung&lt;br /&gt;
* frz. Übersetzungen aktualisiert&lt;br /&gt;
* Verwendung frz. Tastatur in Kassiersicht&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260618|Softwarefactory 5.3.0.20260618]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260410 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Fix Performanceproblem ( eingeführt mit 4.5.7-V20260402 (OS) ), dbcaching Einstellungen&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260410|Softwarefactory 5.2.0.20260410]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260402 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Automatischer Wechsel zum Status &amp;lt;code&amp;gt;PAYMENTTERMINAL_REPEATRECEIPT&amp;lt;/code&amp;gt; im Modus 'store' (statt 'print') bei leeren Bonzeilen&lt;br /&gt;
** Neue Funktion &amp;lt;code&amp;gt;attachRemarks&amp;lt;/code&amp;gt; zum Zeichnen von Bonbemerkungen und deren Verknüpfung mit dem Kassenbon&lt;br /&gt;
** Möglichkeit zur Eingabe von freien Bemerkungen zum Kassenbon&lt;br /&gt;
** Bonbemerkungen: &amp;lt;code&amp;gt;observeFocus&amp;lt;/code&amp;gt; von remark1/2 an Events gebunden&lt;br /&gt;
&lt;br /&gt;
* Kassenkonfiguration:&lt;br /&gt;
** Menüeintrag für Stammdaten der Bonbemerkungen hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Neue Entitäten für Bonbemerkungen (SlipRemarks)&lt;br /&gt;
** Neue Spalten &amp;lt;code&amp;gt;remark_1&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;remark_2&amp;lt;/code&amp;gt; für CashSlip-Entität&lt;br /&gt;
** Dialoge, Tabellen und Perspektive für Bonbemerkungen implementiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7.20260305 (OS) ==&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260305|Softwarefactory 5.2.0.20260305]]&lt;br /&gt;
&lt;br /&gt;
* Berichtanzeige&lt;br /&gt;
** Fix: Probleme bei der Berichtsanzeige mit schneller Klickfolge in Auswahltabelle behoben.&lt;br /&gt;
&lt;br /&gt;
* Kassenschluss:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;determineCloseExpectation&amp;lt;/code&amp;gt; - Sortierung von CashPaymentTermData nach traceNumber absteigend, um den letzten Eintrag zu erhalten&lt;br /&gt;
&lt;br /&gt;
* Kassenentsorgung:&lt;br /&gt;
** Neues Systemprodukt &amp;quot;fee&amp;quot; aktiviert&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Einige Entitäten auf &amp;lt;code&amp;gt;cacheable=false&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
** Entitäten mit escaped Spaltennamen aktualisiert&lt;br /&gt;
** Generierte Entitäten und DTOs aktualisiert&lt;br /&gt;
** Entitäten mit neuem Service Framework aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;canUnparkSelected&amp;lt;/code&amp;gt; - Ablehnung eines Slips mit Zahlungen an einer SiS-Kasse&lt;br /&gt;
** Fix: PRINT_SLIP - &amp;lt;code&amp;gt;onOK&amp;lt;/code&amp;gt; verlässt nicht, wenn Slip änderbar ist&lt;br /&gt;
** Neue Eingabeaktion für MODIFY_FLD, setzt &amp;lt;code&amp;gt;cashposiupdate&amp;lt;/code&amp;gt; auf ausgewählte Position&lt;br /&gt;
&lt;br /&gt;
* Archivierung:&lt;br /&gt;
** &amp;lt;code&amp;gt;archivDescription xml-os&amp;lt;/code&amp;gt; für XML-Format der Beschreibungsdatei für Archiv hinzugefügt&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4608</id>
		<title>Releasenotes 2026 OS.pos</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4608"/>
				<updated>2026-10-12T09:20:01Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261006 ==&lt;br /&gt;
&lt;br /&gt;
=== Neue Funktionen ===&lt;br /&gt;
* '''NF 525 – Neustart durch den Bediener im Ereignisjournal:''' Ein über die Dienststeuerungsseite (&amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;) ausgelöster Neustart wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben, mit dem auslösenden Bediener. Bisher zeigte das Journal nur „System gestoppt“ und „System gestartet“, nicht aber, wer den Neustart veranlasst hat.&lt;br /&gt;
&lt;br /&gt;
=== Fehlerbehebungen ===&lt;br /&gt;
* '''Speicherwachstum je Verkauf:''' Die DTOs von &amp;lt;code&amp;gt;net.osbee.app.pos.common&amp;lt;/code&amp;gt; wurden neu generiert und halten nur noch Klasse und ID ihrer Entität statt der Entität selbst. Zusammen mit den Korrekturen im Framework (siehe Releasenotes der Softwarefactory, Version 5.3.0.20261012) hält eine Kasse je Verkauf praktisch keinen Persistenzkontext mehr fest; vorher waren es rund 42 je Verkauf, etwa 1 MB.&lt;br /&gt;
* '''Kassenabschluss gibt seine Daten wieder frei:''' Nach dem Speichern eines Kassenabschlusses werden die dafür im Zustandsautomaten abgelegten Daten entfernt. Sie hielten über ihre Mapping-Kontexte alle Bons und Zahlungen der abgeschlossenen Periode bis zum nächsten Abschluss fest.&lt;br /&gt;
* '''NF 525 – Ereignisjournal:''' Beim Anhängen eines Eintrags wird nicht mehr das gesamte Journal gelesen, um dessen letzten Eintrag zu finden. Der Aufwand je Eintrag wuchs bisher mit der Länge des Journals.&lt;br /&gt;
* '''Webservice-Verfügbarkeitsprüfung über Mitternacht:''' Ein als nicht erreichbar vermerkter Webservice wurde nach Mitternacht zu spät oder gar nicht mehr erneut geprüft, weil der Zeitstempel als Millisekunden des Tages abgelegt war. Ein Ausfall um 20:00 Uhr hielt den Webservice bis 21:00 Uhr des Folgetags abgeschaltet, ein Ausfall ab 23:00 Uhr dauerhaft. Der Zeitstempel ist nun fortlaufend.&lt;br /&gt;
&lt;br /&gt;
=== Aktualisierungen ===&lt;br /&gt;
* '''Webservice-Verfügbarkeitsprüfung zusammengeführt:''' Die Prüfung existierte viermal (zweimal in &amp;lt;code&amp;gt;net.osbee.app.pos.common&amp;lt;/code&amp;gt;, zweimal in &amp;lt;code&amp;gt;net.osbee.sample.pos&amp;lt;/code&amp;gt;). Einzige Implementierung ist nun &amp;lt;code&amp;gt;WebService.check(sm, ws)&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;posbase&amp;lt;/code&amp;gt;; die übrigen delegieren dorthin. Der Zustand wird je Webservice in &amp;lt;code&amp;gt;ws.accesible&amp;lt;/code&amp;gt; geführt, der gemeinsame Speicherschlüssel entfällt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261012|Softwarefactory 20261012]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261006 ==&lt;br /&gt;
&lt;br /&gt;
* Ergänzung bei Kundenkartenverarbeitung&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260907 ==&lt;br /&gt;
&lt;br /&gt;
* Schwerpunkt dieses Zeitraums ist die französische Fiskalkonformität '''NF 525''' (WORM-Sicherungseinrichtung, Write-once-Nachweis, Geräte-Lebenszyklus) sowie die Auslagerung des '''DSFinV-K'''-Datenmodells. &lt;br /&gt;
&lt;br /&gt;
=== Änderungen / Neue Funktionen ===&lt;br /&gt;
&lt;br /&gt;
* '''Ausgeschlossene Zahlarten:''' Die Perspektive für ausgeschlossene Zahlungsarten wurde zur Kundenpflege verschoben.&lt;br /&gt;
* '''Benutzerverwaltung:''' Die automatische Synchronisierung der einzelnen views in der Benutzerverwaltungsperspektive wurde abgeschaltet.&lt;br /&gt;
* '''Authentifizierung:''' Die Authentifizierungs-Logger wurden zusammengefasst und schreiben wieder in eine Datei.&lt;br /&gt;
* '''remember me Anmeldefunktion:''' überarbeitet, Cookieverwendung sicherer gemacht.&lt;br /&gt;
* '''Kennwort vergessen?:''' Zurücksetzen des Kennworts löst eine Benutzersperre nicht mehr automatisch auf. Dies muss aktiv durch den Administrator geschehen.&lt;br /&gt;
* '''showResetPasswordOnScreen:''' neuer Konfigurationsschlüssel. Default: false. Bei true wird das neue Passwort im Log angezeigt, falls lein Mailserver kongiguriert ist.&lt;br /&gt;
&lt;br /&gt;
* '''NF 525 – WORM Write-once-Nachweis:''' Ein zertifiziertes WORM-Gerät darf Fiskalverkäufe erst nach einem signierten &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;-Verdikt tragen. Ein asynchroner Probe-Lauf weist die Write-once-Eigenschaft nach (das Medium nimmt eine Teständerung zurück); der Verdikt wird signiert und ist „sticky&amp;quot;. ''(cache-defeat probe, verbreiterte Signaturspalte)''&lt;br /&gt;
* '''NF 525 – Zertifizierungs-Gate:''' Auf einem zertifizierten Gerät führen Struktur-/Integritätsfehler zu einem harten Verkaufsstopp (STOP_SALES); auf einem nicht-zertifizierten Gerät wird die Anomalie nur als Warnung protokolliert (warn-only) und dem Kassierer als Hinweis am Verkauf angezeigt.&lt;br /&gt;
* '''NF 525 – Reaktivierung der Write-once-Bestätigung:''' Der zuvor pausierte Bestätigungs-Block wurde wieder aktiviert; der Scheduler führt ein zertifiziertes Gerät nun wieder von &amp;lt;code&amp;gt;PENDING&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''NF 525 – Schutz gegen Zertifizierungs-Downgrade:''' Eine bereits fiskalisch aktive, zertifizierte Kasse kann nicht mehr auf ein nicht-zertifiziertes oder entferntes Sicherungsgerät umgestellt werden (Geräte-Tausch), und ein zertifiziertes Gerät kann nicht mehr in-place ent-zertifiziert werden. Beide Wege werden abgewiesen (Umgehung der zertifizierten Durchsetzung verhindert).&lt;br /&gt;
* '''NF 525 – Auditierung von Geräte-Konfigurationsänderungen:''' Eine Änderung an der zertifizierungsrelevanten WORM-Konfiguration wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben.&lt;br /&gt;
* '''NF 525 – Retention/Archivierung beim Geräte-Tausch:''' Perioden ohne Fiskaldatensätze werden nicht mehr als leeres ZIP archiviert, sondern als schlanker „abgedeckt&amp;quot;-Marker vermerkt (kein Medium-Scan) – die „Gespeichert&amp;quot;-Rückmeldung nach einem Geräte-Tausch kommt dadurch deutlich schneller. Zum Abschluss wird eine Zusammenfassung protokolliert.&lt;br /&gt;
* '''NF 525 – Write-once-Probe:''' Die Anwesenheit der Probe-Datei wird nun über eine frische Verzeichnis-Enumeration gelesen (behebt eine Fehlerkennung durch veraltete Verzeichnis-Zwischenstände).&lt;br /&gt;
* '''Internationalisierung:''' Neue NF-525-WORM-Schlüssel (Write-once, worm_protection, warn-only) in das zentrale Übersetzungsbündel gespiegelt; allgemeine Vokabular-Erweiterungen.&lt;br /&gt;
* '''Rechnungsdruck (Invoice2p):''' NF-525-Daten in der Rechnungsvorlage berücksichtigt.&lt;br /&gt;
* '''Bondruck:''' NF-525-Daten ergänzt&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260907|Softwarefactory 5.2.0.20260907]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260707 ==&lt;br /&gt;
&lt;br /&gt;
Diese Ausgabe bringt vor allem die Unterstützung französischer Kassen voran: eine&lt;br /&gt;
vollständige AZERTY-Tastaturunterstützung (physisch und als Bildschirmtastatur), das&lt;br /&gt;
französische Zahlungsterminal-Protokoll CAISSE-AP inklusive Simulator sowie virtuelle&lt;br /&gt;
Peripheriegeräte für Test und Diagnose. Ergänzt wird dies durch NF525-Härtungen,&lt;br /&gt;
Fehlerbehebungen bei Kartenzahlungen und eine durchgängige Vereinheitlichung der&lt;br /&gt;
Übersetzungsdateien.&lt;br /&gt;
&lt;br /&gt;
* Die '''physische französische AZERTY-Tastatur''' wird nun vollständig unterstützt. Der komplette Zeichensatz wurde auf realer Hardware getestet; die zuvor fehlende '''ù-Taste''' wurde ergänzt.&lt;br /&gt;
* Die '''Bildschirmtastatur''' (On-Screen-Keypad) &lt;br /&gt;
** bildet nun eine echte französische AZERTY-Belegung über alle drei Ebenen ab (Grundebene, Umschalt, AltGr) inklusive Akzentkomposition über die Tottasten ^ und ¨.&lt;br /&gt;
** folgt jetzt '''einheitlich der Oberflächensprache''': Französisch → AZERTY, Englisch → englische Belegung, alle übrigen Sprachen → deutsches QWERTZ. Die Belegung wird beim Öffnen des Dialogs in der aktiven Sprache neu aufgebaut.&lt;br /&gt;
* Neue Konfiguration '''Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry''' zur Auswahl der physischen Tastaturbelegung je Kasse.&lt;br /&gt;
&lt;br /&gt;
* '''CAISSE-AP – französisches Zahlungsterminal'''&lt;br /&gt;
** Unterstützung des '''Tagesabschlusses (télécollecte)''' für Concert/CAISSE-AP-Terminals; die obligatorischen Felder CB und CE werden nun sowohl in der Abschluss- als auch in der Abbruch-Anfrage übertragen.&lt;br /&gt;
&lt;br /&gt;
* NF525 / Fiskalkonformität&lt;br /&gt;
** Die '''Persistierung des Grand-Totals''' ist nun zwingende Vorbedingung für die Signatur eines Belegs – verhindert eine Signatur bei unvollständig gespeichertem Umsatzzähler. ''(net.osbee.app.pos.common d5a4578ec)''&lt;br /&gt;
&lt;br /&gt;
* Kartenzahlung&lt;br /&gt;
** Eine Kartenzahlung kann nun korrekt '''storniert''' werden: das Belegfeld (receipt) wird aus dem CJ-Feld der Concert-Antwort befüllt.&lt;br /&gt;
** Das '''Löschen einer nicht stornierbaren Terminal-Zahlung''' wird blockiert, um inkonsistente Zustände zu vermeiden. &lt;br /&gt;
** setPaymentTerminalReversal stürzt bei einer fehlerhaften Anfrage nicht mehr ab. &lt;br /&gt;
&lt;br /&gt;
* Oberfläche / Internationalisierung ===&lt;br /&gt;
** Die '''Laufzeit-Sprachumschaltung''' funktioniert nun in der Kassierperspektive&lt;br /&gt;
** Zentrale Übersetzungen aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Systemvoraussetzungen ===&lt;br /&gt;
** Für den französischen Markt: Zahlungsterminal mit CAISSE-AP-/Concert-Protokoll (CB-Port 8888, konfigurierbae), physische AZERTY-Tastatur optional&lt;br /&gt;
** Konfiguration je Kasse über Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry und Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardLayout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260707|Softwarefactory 5.2.0.20260707]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260618 ==&lt;br /&gt;
&lt;br /&gt;
* Version von 5.2 auf 5.3&lt;br /&gt;
* frz. Fiskalanforderungen: erste Implementierung&lt;br /&gt;
* frz. Übersetzungen aktualisiert&lt;br /&gt;
* Verwendung frz. Tastatur in Kassiersicht&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260618|Softwarefactory 5.3.0.20260618]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260410 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Fix Performanceproblem ( eingeführt mit 4.5.7-V20260402 (OS) ), dbcaching Einstellungen&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260410|Softwarefactory 5.2.0.20260410]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260402 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Automatischer Wechsel zum Status &amp;lt;code&amp;gt;PAYMENTTERMINAL_REPEATRECEIPT&amp;lt;/code&amp;gt; im Modus 'store' (statt 'print') bei leeren Bonzeilen&lt;br /&gt;
** Neue Funktion &amp;lt;code&amp;gt;attachRemarks&amp;lt;/code&amp;gt; zum Zeichnen von Bonbemerkungen und deren Verknüpfung mit dem Kassenbon&lt;br /&gt;
** Möglichkeit zur Eingabe von freien Bemerkungen zum Kassenbon&lt;br /&gt;
** Bonbemerkungen: &amp;lt;code&amp;gt;observeFocus&amp;lt;/code&amp;gt; von remark1/2 an Events gebunden&lt;br /&gt;
&lt;br /&gt;
* Kassenkonfiguration:&lt;br /&gt;
** Menüeintrag für Stammdaten der Bonbemerkungen hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Neue Entitäten für Bonbemerkungen (SlipRemarks)&lt;br /&gt;
** Neue Spalten &amp;lt;code&amp;gt;remark_1&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;remark_2&amp;lt;/code&amp;gt; für CashSlip-Entität&lt;br /&gt;
** Dialoge, Tabellen und Perspektive für Bonbemerkungen implementiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7.20260305 (OS) ==&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260305|Softwarefactory 5.2.0.20260305]]&lt;br /&gt;
&lt;br /&gt;
* Berichtanzeige&lt;br /&gt;
** Fix: Probleme bei der Berichtsanzeige mit schneller Klickfolge in Auswahltabelle behoben.&lt;br /&gt;
&lt;br /&gt;
* Kassenschluss:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;determineCloseExpectation&amp;lt;/code&amp;gt; - Sortierung von CashPaymentTermData nach traceNumber absteigend, um den letzten Eintrag zu erhalten&lt;br /&gt;
&lt;br /&gt;
* Kassenentsorgung:&lt;br /&gt;
** Neues Systemprodukt &amp;quot;fee&amp;quot; aktiviert&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Einige Entitäten auf &amp;lt;code&amp;gt;cacheable=false&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
** Entitäten mit escaped Spaltennamen aktualisiert&lt;br /&gt;
** Generierte Entitäten und DTOs aktualisiert&lt;br /&gt;
** Entitäten mit neuem Service Framework aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;canUnparkSelected&amp;lt;/code&amp;gt; - Ablehnung eines Slips mit Zahlungen an einer SiS-Kasse&lt;br /&gt;
** Fix: PRINT_SLIP - &amp;lt;code&amp;gt;onOK&amp;lt;/code&amp;gt; verlässt nicht, wenn Slip änderbar ist&lt;br /&gt;
** Neue Eingabeaktion für MODIFY_FLD, setzt &amp;lt;code&amp;gt;cashposiupdate&amp;lt;/code&amp;gt; auf ausgewählte Position&lt;br /&gt;
&lt;br /&gt;
* Archivierung:&lt;br /&gt;
** &amp;lt;code&amp;gt;archivDescription xml-os&amp;lt;/code&amp;gt; für XML-Format der Beschreibungsdatei für Archiv hinzugefügt&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4607</id>
		<title>Releasenotes 2026 OS.Softwarefactory</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4607"/>
				<updated>2026-10-12T09:18:13Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Version 5.3.0.20261012 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261012 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** org.eclipse.osbp.dsl (Entity,DTO):&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (1) – &amp;lt;code&amp;gt;AbstractOppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;MappingContext&amp;lt;/code&amp;gt; deklarieren kein &amp;lt;code&amp;gt;finalize()&amp;lt;/code&amp;gt; mehr. Jede &amp;lt;code&amp;gt;OppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OppositeContainmentDtoList&amp;lt;/code&amp;gt; war dadurch finalisierbar, überlebte die Garbage Collection, die sie als unerreichbar erkannt hatte, und hielt bis zur Abarbeitung durch den einzelnen Finalizer-Thread ihren gesamten Objektgraphen am Leben (DTOs, Entitäten, Persistenzkontexte). In einem Kundenabzug waren von 7,56 Mio. Finalizer-Einträgen 7,51 Mio. solche Listen. Die Listener, die der Finalizer abmelden sollte, werden bereits in &amp;lt;code&amp;gt;clear()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;remove()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;resolve()&amp;lt;/code&amp;gt; abgemeldet&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (2) – ein DTO hält für das spätere Nachladen einer Lazy-Referenz nicht mehr die abgelöste Entität fest, sondern nur noch deren Klasse und ID (neue Klasse &amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;org.eclipse.osbp.dsl.dto.lib&amp;lt;/code&amp;gt;). Die Entität hielt über ihre Lazy-Beziehungen den gesamten Persistenzkontext (&amp;lt;code&amp;gt;RepeatableWriteUnitOfWork&amp;lt;/code&amp;gt; samt aller darin geklonten Entitäten), obwohl &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; nur Klasse und ID benötigt. Gemessen an einer Kasse: rund 42 festgehaltene Persistenzkontexte je Verkauf vorher, praktisch keiner danach. Die ID wird erst am Ende des Mappings übernommen, weil der generierte Mapper &amp;lt;code&amp;gt;initialize(entity)&amp;lt;/code&amp;gt; vor &amp;lt;code&amp;gt;setId&amp;lt;/code&amp;gt; aufruft und eine neue Entität bis dahin die zufällige ID ihres Konstruktors trägt; liefert die Datenbank die ID erst später, bleibt es beim bisherigen Verhalten. '''Der Generator (&amp;lt;code&amp;gt;DtoTypesBuilder&amp;lt;/code&amp;gt;) erzeugt den neuen Aufruf; wirksam wird die Änderung erst mit neu generierten DTOs. Da &amp;lt;code&amp;gt;src-gen&amp;lt;/code&amp;gt; versioniert ist und der Jenkins-Build die eingecheckten Quellen übersetzt, müssen neu generierte DTOs eingecheckt werden.''' Nicht neu generierte DTOs laufen unverändert weiter; neu generierte DTOs setzen ein &amp;lt;code&amp;gt;dto.lib&amp;lt;/code&amp;gt; ab dem 07.10.2026 voraus&lt;br /&gt;
*** &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; meldet nun, welche Zeile er nicht nachladen konnte. Liefert &amp;lt;code&amp;gt;em.find&amp;lt;/code&amp;gt; kein Ergebnis, wird ein Fehler mit Entitätsklasse, ID, Eigenschaft und DTO-Klasse protokolliert und eine &amp;lt;code&amp;gt;IllegalStateException&amp;lt;/code&amp;gt; geworfen. Bisher erschien an dieser Stelle nur eine &amp;lt;code&amp;gt;NullPointerException&amp;lt;/code&amp;gt; ohne Hinweis auf die Ursache&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;AbstractDTOService.closeEntityManager()&amp;lt;/code&amp;gt; fordert eine offene Transaktion nicht mehr nach jedem Lesezugriff zur Freigabe auf. Das Verhalten ist unverändert, die Warnung &amp;lt;code&amp;gt;dispose() refused&amp;lt;/code&amp;gt; erscheint aber nur noch, wenn tatsächlich jemand eine offene Transaktion abbauen will (zuvor rund zwei Meldungen je Verkauf und etwa 175 je Kassenabschluss)&lt;br /&gt;
*** Fix: Mit &amp;lt;code&amp;gt;-DsendTransactionEventAsync=true&amp;lt;/code&amp;gt; wartete &amp;lt;code&amp;gt;TransactionHandler.dispose()&amp;lt;/code&amp;gt; nach jedem Commit mindestens 800 ms, zuzüglich weiterer 800 ms je Durchlauf mit nicht leerer Ereigniswarteschlange – während &amp;lt;code&amp;gt;SessionManager&amp;lt;/code&amp;gt; die Sperre aller Transaktions-Handler hielt. An einer Kasse waren das mehrere Sekunden je Bon. &amp;lt;code&amp;gt;dispose()&amp;lt;/code&amp;gt; übergibt den Entity Manager nun dem Ereignis-Thread und kehrt sofort zurück; der Thread schließt ihn als letzten Schritt, sobald seine Warteschlange leer ist. Ein Ereignis, das sich nicht versenden lässt, beendet den Thread nicht mehr. Ohne den Schalter ändert sich nicht*s&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;MetadataBuilder&amp;lt;/code&amp;gt; macht beim ersten Scan zunächst alle gestarteten Bundles mit dem Header &amp;lt;code&amp;gt;OSBP-RuntimeBuilder-BundleSpace&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;Factory-Model&amp;lt;/code&amp;gt; im Bundle-Space bekannt und sucht erst danach nach Modellen. Bisher wurde ein Bundle erst beim Erreichen aufgenommen, während ein Participant ein Modell sofort laden kann: Ein ECView aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration&amp;lt;/code&amp;gt; nennt ein DTO aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration.base&amp;lt;/code&amp;gt; mit der höheren Bundle-ID, die Klasse wurde also je nach Reihenfolge beim Start nicht gefunden. In diesem Fall scheiterte &amp;lt;code&amp;gt;activate()&amp;lt;/code&amp;gt;, der DSL-Metadatendienst und damit der Persistenzdienst starteten nie, und die Anwendung blieb auf der Startseite stehen. Eine fehlgeschlagene Aktivierung wird nun zusätzlich als Fehler in das Anwendungslog geschrieben&lt;br /&gt;
** Fix: org.eclipse.osbp.dsl, org.eclipse.osbp.runtime: Vier Fehler in der sitzungsbezogenen Transaktionsverwaltung behoben. (a) &amp;lt;code&amp;gt;SessionManager.removeSession()&amp;lt;/code&amp;gt; gab den Transaktions-Handler unter einem Schlüssel frei, der nie passen konnte (&amp;lt;code&amp;gt;ISession&amp;lt;/code&amp;gt; hat kein &amp;lt;code&amp;gt;toString()&amp;lt;/code&amp;gt;), das Sicherheitsnetz griff also nie. (b) &amp;lt;code&amp;gt;disposeTransactionHandler&amp;lt;/code&amp;gt; entfernte den Eintrag auch dann, wenn die Transaktion noch offen war – der Entity Manager wurde aufgegeben und der Thread, der die Transaktion noch abschließen musste, fand seinen Handler nicht mehr. &amp;lt;code&amp;gt;ITransactionHandler&amp;lt;/code&amp;gt; erhält dafür &amp;lt;code&amp;gt;isDisposable()&amp;lt;/code&amp;gt; als Default-Methode. (c) Die Freigabe nach &amp;lt;code&amp;gt;transactionBegin&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Rollback&amp;lt;/code&amp;gt; steht nun in einem &amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt;; ein &amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt;, insbesondere ein &amp;lt;code&amp;gt;OutOfMemoryError&amp;lt;/code&amp;gt;, ließ den Handler bisher mit Entity Manager in einer statischen Map zurück. (d) &amp;lt;code&amp;gt;txnIsOpen&amp;lt;/code&amp;gt; wird auch bei einem fehlgeschlagenen Commit oder Rollback zurückgesetzt&lt;br /&gt;
** org.eclipse.osbp.persistence: &lt;br /&gt;
*** Der Startstatus nennt nun den Dienst, auf den der Persistenzdienst noch wartet. Die neue Komponente &amp;lt;code&amp;gt;PersistenceStartupStatus&amp;lt;/code&amp;gt; hat keine Pflichtreferenz, ist daher von Beginn an aktiv und setzt den Status auf „persistence service is waiting for the DSL metadata service“ (bzw. „the Mondrian manager“), bis diese gebunden sind. Bisher blieb es unabhängig vom Grund bei „persistenceservice not started yet“, und die wartenden Dienste protokollierten nichts&lt;br /&gt;
*** Beim Einrichten einer Persistence Unit wird jede verwaltete Klasse gemeldet, die nicht statisch gewebt ist, obwohl eine ihrer Oberklassen es ist – in einer ERROR-Zeile mit dem Hinweis, das Projekt vollständig neu zu bauen. Eine solche Klasse wird von EclipseLink instanziiert, aber nie befüllt: Der Dialog bleibt leer, und die nächste Aktualisierung scheitert mit „mapped to a primary key column ... Updates are not allowed“&lt;br /&gt;
** org.eclipse.osbp.ecview.extension: Fix: Das Grid vergisst die Zeilenschlüssel von Einträgen, die den Container als Ganzes verlassen haben. Vaadin gibt die Schlüssel nur über das clientseitige &amp;lt;code&amp;gt;dropRows&amp;lt;/code&amp;gt; frei; nach einem allgemeinen &amp;lt;code&amp;gt;ItemSetChange&amp;lt;/code&amp;gt;, wie ihn &amp;lt;code&amp;gt;removeAllItems()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;addAll()&amp;lt;/code&amp;gt; auslösen, blieben sie im &amp;lt;code&amp;gt;KeyMapper&amp;lt;/code&amp;gt; stehen und hielten jede jemals angezeigte Zeile samt ihrem DTO-Graphen. &amp;lt;code&amp;gt;GridPresentation.CustomGrid&amp;lt;/code&amp;gt; merkt sich die vergebenen Schlüssel und entfernt die nicht mehr enthaltenen&lt;br /&gt;
** org.osbee.datainterchange: Fix: FreeMarkers gemeinsam genutzte &amp;lt;code&amp;gt;InvalidReferenceException&amp;lt;/code&amp;gt; hält nicht mehr den ersten Exportlauf fest. Die statische Instanz übernahm die zum Zeitpunkt ihres Entstehens aktive Umgebung und damit das gesamte Datenmodell des ersten Exports für die Lebensdauer des Prozesses. Der Activator lädt die Klasse nun einmal außerhalb eines Template-Laufs&lt;br /&gt;
** org.eclipse.osbp.display: Fix: Das Display-Servlet wird nicht mehr auf dem Thread registriert, der die Bundles startet. Die Registrierung veröffentlicht einen Dienst, und Declarative Services verarbeitet dieses Ereignis auf dem veröffentlichenden Thread; dort wartete der Start aller nachfolgenden Bundles, in einem Fall über 50 Sekunden („Getting a lock required more than 50000 ms“). Die Registrierung läuft nun auf einem eigenen Thread&lt;br /&gt;
** org.eclipse.osbp.runtime, org.eclipse.osbp.blob, org.eclipse.osbp.autowireHelper, org.eclipse.osbp.ecview.extension, org.eclipse.osbp.ecview.addons, org.eclipse.osbp.infogrid.model: Neue Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; für String-Attribute. Ein Attribut mit &amp;lt;code&amp;gt;key=&amp;quot;barcode&amp;quot; value=&amp;quot;QRCode-128&amp;quot;&amp;lt;/code&amp;gt; wird schreibgeschützt als Barcode-Bild angezeigt, das aus seinem Klartextwert erzeugt wird – im Dialog über &amp;lt;code&amp;gt;BlobComponent&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;BlobUploadComponent&amp;lt;/code&amp;gt; (letztere dann ohne Schaltflächen) und in Grid-Spalten über den Blob-Bildkonverter&lt;br /&gt;
** org.eclipse.osbp.authentication, org.eclipse.osbp.system.configuration, org.eclipse.osbp.blob: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** org.eclipse.osbp.xtext.table, org.eclipse.osbp.xtext.table.common: Für Attribute mit der Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; wird ein Barcode-Lookup generiert; eine String-Zelle wird als Barcode-Bild angezeigt, wenn das Lookup einen Barcode-Typ trägt&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** net.osbee.pos.tse: Aufrufer können die BSI-Zertifizierungs-ID der TSE abfragen. Die SE-API bietet &amp;lt;code&amp;gt;getCertificationId&amp;lt;/code&amp;gt; in beiden API-Versionen, keiner der beiden Adapter reichte den Aufruf bisher durch&lt;br /&gt;
** net.osbee.pos.tse, net.osbee.pos.rksv: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Einführung der http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/restartService Seite. Damit können entweder Sessions gekillt oder der Service der Anwendung neu gestartet werden.&lt;br /&gt;
** Bei Nichterreichbarkeit der Datenbank wird die Anwendung beendet und der Fehlerstatus auf der Statusseite angezeigt.&lt;br /&gt;
** Das eingebettete &amp;lt;code&amp;gt;shiro-all-1.2.3.jar&amp;lt;/code&amp;gt; wurde durch &amp;lt;code&amp;gt;shiro-core&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; in Version 1.13.0 ersetzt. Damit sind CVE-2016-4437 (Remote Code Execution über das RememberMe-Cookie mit festem Schlüssel) und CVE-2019-12422 geschlossen. &amp;lt;code&amp;gt;encoder-1.2.3.jar&amp;lt;/code&amp;gt; kommt hinzu, weil &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; 1.13 &amp;lt;code&amp;gt;org.owasp.encoder&amp;lt;/code&amp;gt; zwingend importiert.&lt;br /&gt;
** Anmeldung: &lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm&amp;lt;/code&amp;gt; löst den Anmeldenamen vor jeder Abfrage in einen Distinguished Name auf. Active Directory akzeptiert für den Bind auch einen User Principal Name, beantwortet Abfragen damit aber mit LDAP-Fehler 34 (&amp;lt;code&amp;gt;invalidDNSyntax&amp;lt;/code&amp;gt;), sodass ein &amp;lt;code&amp;gt;userDnTemplate&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt; zwar anmeldete, dann aber an den Attributen scheiterte. &amp;lt;code&amp;gt;resolveUserDn&amp;lt;/code&amp;gt; sucht nun über &amp;lt;code&amp;gt;userPrincipalName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sAMAccountName&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;mail&amp;lt;/code&amp;gt;; die Suchbasis stammt aus dem RootDSE. Bestehende Vorlagen der Form &amp;lt;code&amp;gt;cn={0},ou=...&amp;lt;/code&amp;gt; verhalten sich unverändert. Zugleich behoben: eine &amp;lt;code&amp;gt;StringIndexOutOfBoundsException&amp;lt;/code&amp;gt; im E-Mail-Zweig und das Einsetzen des Benutzernamens in den Suchfilter per Verkettung (jetzt als &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt;, von JNDI maskiert)&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm.getUserDn&amp;lt;/code&amp;gt; maskierte nur das Komma. &amp;lt;code&amp;gt;escapeDnValue&amp;lt;/code&amp;gt; deckt nun alle Zeichen nach RFC 4514 Abschnitt 2.4 ab, sodass ein Benutzername die Bedeutung des DN nicht mehr verändern kann&lt;br /&gt;
*** Die Funktionalität „Angemeldet bleiben“ arbeitet nun mit einem signierten Token statt mit verschlüsselten Zugangsdaten. Das Cookie ist eine mit HMAC-SHA256 signierte Aussage über Benutzer, Mandant, Geltungsbereich, Ablaufdatum und Version und enthält keine Zugangsdaten. Es ist zustandslos, sodass beliebig viele Geräte und Browser gleichzeitig eines halten können.&lt;br /&gt;
*** Das „Angemeldet bleiben“-Cookie gilt je Anwendungsinstanz und Browser. Der Cookie-Name trägt einen Kurzhash über Schema, Host, Port, erstes Pfadsegment und Portal-ID, sodass zwei Anwendungen auf demselben Host nicht mehr das Cookie der jeweils anderen lesen. Die selbstgebaute Verschlüsselung entfällt vollständig. Das Cookie wird mit expliziter Lebensdauer, &amp;lt;code&amp;gt;SameSite=Lax&amp;lt;/code&amp;gt; und unter https mit &amp;lt;code&amp;gt;Secure&amp;lt;/code&amp;gt; geschrieben. Die Anmeldung aus einem Cookie wartet fünf Sekunden mit einem Hinweis auf der Anmeldemaske und lässt sich in dieser Zeit abbrechen; ein entferntes Häkchen löscht das Cookie nun in jedem Fall. Die Betrugsmeldung samt Kontosperre bei nicht passendem Cookie entfällt&lt;br /&gt;
*** Fix: Kennwörter erscheinen nicht mehr im Log – weder bei der Anmeldung in &amp;lt;code&amp;gt;AuthenticationProvider.check()&amp;lt;/code&amp;gt; (bisher im Klartext auf DEBUG) noch beim Zurücksetzen, wo der Nachrichtentext mit dem neuen Kennwort dreimal geschrieben wurde&lt;br /&gt;
*** Die Anzeige des neuen Kennworts auf der Anmeldemaske, wenn keine E-Mail versendet werden kann, ist nun eine konfigurierte Betriebsart: &amp;lt;code&amp;gt;Userinterface/showResetPasswordOnScreen&amp;lt;/code&amp;gt;, standardmäßig aus, mit Protokollierung auf WARN. '''Installationen ohne Mailserver müssen den Parameter einmalig setzen'''&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;doResetPassword&amp;lt;/code&amp;gt; hebt weder eine Sperre noch die Deaktivierung eines Kontos auf und setzt den Fehlversuchszähler nicht mehr zurück. Das Zurücksetzen kann jeder auslösen, der einen Benutzernamen eingibt; aufgehoben werden Sperre und Deaktivierung nur noch durch einen Administrator über &amp;lt;code&amp;gt;doUnlock&amp;lt;/code&amp;gt;&lt;br /&gt;
** System Configuration: &lt;br /&gt;
*** Parameter &amp;lt;code&amp;gt;RememberMeSecret&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;IConfigurationService&amp;lt;/code&amp;gt; ergänzt (&amp;lt;code&amp;gt;GLOBAL_PARAMETERS/RememberMeSecret&amp;lt;/code&amp;gt;). Der Schlüssel wird je Installation bei der ersten Benutzung der &amp;quot;RememberMe&amp;quot; Funktionalität einmal aus gezogen und von allen Anmeldungen geteilt; das Löschen des Eintrags macht alle „Angemeldet bleiben“-Cookies auf einmal ungültig.&lt;br /&gt;
*** Fix: Die Einstellungen füllten sich mit Platzhaltern „not set“. &amp;lt;code&amp;gt;ConfigurationService.getConfigurationString&amp;lt;/code&amp;gt; speicherte bei leerem Vorgabewert den Platzhalter und lieferte ihn als leere Zeichenkette zurück, sodass &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; stets eine weitere Zeile anhängte. &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; entfernt nun die Platzhalterzeilen des Schlüssels vor dem Schreiben, und ein gespeicherter Platzhalter gilt als „kein Wert“. &amp;lt;code&amp;gt;deleteConfigurations&amp;lt;/code&amp;gt; setzt zusätzlich den Cache zurück; gelöschte Einträge kamen bisher beim nächsten Lesen wieder&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Fix: org.eclipse.osbp.dependencies-mbp: Das Bundle &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.bundle.activemq.all.osgi&amp;lt;/code&amp;gt; enthält kein Log4j und kein eingebettetes slf4j mehr. &amp;lt;code&amp;gt;activemq-all&amp;lt;/code&amp;gt; brachte eine vollständige Kopie von Apache Log4j 1.2.17 mit (359 Klassen, darunter &amp;lt;code&amp;gt;JDBCAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSSink&amp;lt;/code&amp;gt; und chainsaw – betroffen von CVE-2021-4104, CVE-2022-23302, CVE-2022-23305 und CVE-2022-23307) sowie slf4j-api 1.7.13 und &amp;lt;code&amp;gt;slf4j-log4j12&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;Include-Resource&amp;lt;/code&amp;gt; bindet das Hersteller-Jar nun ohne &amp;lt;code&amp;gt;org.apache.log4j&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org.slf4j&amp;lt;/code&amp;gt;, deren Maven-Koordinaten, die &amp;lt;code&amp;gt;log4j.properties&amp;lt;/code&amp;gt; und Springs &amp;lt;code&amp;gt;Log4jConfigurer&amp;lt;/code&amp;gt; ein. ActiveMQ bezieht slf4j stattdessen aus dem Produkt (&amp;lt;code&amp;gt;org.slf4j.api&amp;lt;/code&amp;gt; 1.7.36)&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neue Dienststeuerungsseite unter &amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;. &lt;br /&gt;
*** Ein Bediener kann darüber – autorisiert durch eine reguläre Anwendungsanmeldung – hängende Sitzungen beenden oder den Dienst neu starten, ohne Zugriff auf den Serverrechner zu benötigen. Drei Stufen: Sitzungen des aufrufenden Arbeitsplatzes, alle Sitzungen, Neustart. Die Seite ist am Root-HTTP-Service registriert und bleibt damit erreichbar, wenn der Anwendungskontext selbst gestört ist; Markup, Stil, Skript und Texte (deutsch, englisch, französisch) sind deshalb in der Seite enthalten. Sitzungen werden über das Invalidieren der HTTP-Sitzung beendet. Der Neustart läuft über die Befehlswarteschlange der Anwendung; die Seite fragt anschließend die Anwendung ab und führt den Bediener über die Unterbrechung hinweg&lt;br /&gt;
*** Alle Aktionen der Dienststeuerungsseite werden im &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; unter denselben Koordinaten wie die Anmeldemaske protokolliert (fehlgeschlagene Anmeldung und Neustart als WARNING, gesperrtes Konto als ERROR, beendete Sitzungen als INFO). Eine abgelehnte Anmeldung sperrt das Formular für die Dauer der Wartezeit mit Countdown; der Zähler ist derselbe wie an der Anmeldemaske, sodass sich Fehlversuche auf beiden Wegen zur Kontosperre summieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260907 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Überarbeitung der Codebasis zur Entfernung veralteter und nicht benötigter Bundles&lt;br /&gt;
** Überarbeitung des Loginvorgangs / der Cookiespeicherung bei &amp;quot;remember me&amp;quot;. Es werden keine kritischen Daten mehr im Cookie gespeichert.&lt;br /&gt;
** Verbesserung der Übersetzungen&lt;br /&gt;
** Anpassungen für frz. Fiskalanforderungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Laden der Übersetzungen in die interne Tabelle beim Systemstart deutlich beschleunigt. Dadurch verbessertes Startverhalten der Anwendungen.&lt;br /&gt;
** Verbesserungen bei der frz. Tastaturunterstützung&lt;br /&gt;
** Verbesserungen der Übersetzungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260618 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Blockieren durch das Laden von Diensten während des Starts vermieden, dadurch schnellerer Anwendungsstart. Anderes Verhalten beim Start an der Benutzeroberfläche.&lt;br /&gt;
** Französische Tastaturunterstützung (AZERTY) im Keymapper der Statemachine ergänzt&lt;br /&gt;
** Login bezieht Build-Version und Hersteller nun aus den &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; (einheitliche Quelle)&lt;br /&gt;
** Neue gemeinsame Hilfsmethoden &amp;lt;code&amp;gt;getBuildVersion()&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;getVendor()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; zur Ermittlung der Build-Identität&lt;br /&gt;
** &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; setzt die Zeitstempel von &amp;lt;code&amp;gt;lastError&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;lastWarning&amp;lt;/code&amp;gt; nicht mehr zurück&lt;br /&gt;
** Fix: NPE in &amp;lt;code&amp;gt;org.eclipse.osbp.xtext.dialog.AutowireUiFactory&amp;lt;/code&amp;gt; behoben&lt;br /&gt;
** Version von 5.2.0 auf 5.3.0 angehoben&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-reverify&amp;lt;/code&amp;gt; (16px/32px) für die NF525-Schaltfläche zur erneuten Archivintegritätsprüfung&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-refresh.png&amp;lt;/code&amp;gt; ergänzt&lt;br /&gt;
** Grid – horizontale Bildlaufleiste wiederhergestellt&lt;br /&gt;
** Grid - Flex-Layout für Kassen-/POS-Grids wiederhergestellt (kollabierte Spalten behoben)&lt;br /&gt;
** französische Übersetzungen überarbeitet&lt;br /&gt;
&lt;br /&gt;
* Grammatiken/Generierung:&lt;br /&gt;
** org.eclipse.osbp.dsl: Benutzerdefinierte &amp;lt;code&amp;gt;@PreRemove&amp;lt;/code&amp;gt;-Hooks werden in der generierten &amp;lt;code&amp;gt;preRemove()&amp;lt;/code&amp;gt;-Methode zusammengeführt&lt;br /&gt;
** org.eclipse.osbp.xtext.i18n: i18n-Generator erzeugt nun das byte-genaue Eclipse-Babel-Format&lt;br /&gt;
&lt;br /&gt;
* POS Framework für franz. Fiskalanforderungen eingeführt&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260410 ==&lt;br /&gt;
&lt;br /&gt;
* POS Framework: &lt;br /&gt;
** Performanceverbesserung beim Kassieren&lt;br /&gt;
** Multi-Protokoll Unterstützung für Paymentterminal &lt;br /&gt;
*** frz. Protokolle &amp;quot;Concert&amp;quot;, &amp;quot;Protocol E&amp;quot;&lt;br /&gt;
*** &amp;quot;Mock&amp;quot; für Tests&lt;br /&gt;
*** Statemachine DSL erweitert: protocol Parameter für Paymentterminal&lt;br /&gt;
*** &amp;quot;Shared Payment Terminal&amp;quot;&lt;br /&gt;
**** locking im PaymentTerminalService implementiert&lt;br /&gt;
**** pro Terminal über ConfigService einstellbar&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260402 ==&lt;br /&gt;
&lt;br /&gt;
Die Version verbessert das Startverhalten einer Anwendung und bringt mehr Informationen über den Status des Starts auf den Bildschirm&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Anzeige des Persistenzservice-Status auf dem Login-Bildschirm&lt;br /&gt;
** Information über den Persistenzservice auf der Fehlerseite hinzugefügt&lt;br /&gt;
** Beim Start wird nun überall auf den Persistenzservice statt nur auf den ConfigurationService gewartet&lt;br /&gt;
&lt;br /&gt;
* BPM:&lt;br /&gt;
** Fix: net.osbee.bpm: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** Fix: net.osbee.pos.epay: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260305 ==&lt;br /&gt;
&lt;br /&gt;
=== Report Anzeige ===&lt;br /&gt;
&lt;br /&gt;
Diese Version konzentriert sich auf '''Stabilitätsverbesserungen''' für das Report-Rendering-System, insbesondere auf die Behebung von Race Conditions und Anzeigeproblemen, die bei schnellen Benutzerinteraktionen auftraten.&lt;br /&gt;
&lt;br /&gt;
* Race Condition beim Report-Rendering&lt;br /&gt;
** '''Behoben: Schnelles Auswählen/Abwählen führte dazu, dass Reports mit ungültigen oder fehlenden Filtern gerendert wurden'''&lt;br /&gt;
*** Reports verarbeiten nun korrekt wenn Benutzer schnell Elemente auswählen und wieder abwählen&lt;br /&gt;
*** Filteränderungen werden blockiert, während ein Render-Vorgang läuft&lt;br /&gt;
*** Ausstehende Filteränderungen werden nachverfolgt und nach Abschluss des Renderings erneut ausgewertet&lt;br /&gt;
*** Reports mit &amp;lt;code&amp;gt;selectById&amp;lt;/code&amp;gt; werden nun korrekt ausgeblendet, wenn nichts ausgewählt ist&lt;br /&gt;
&lt;br /&gt;
* PDF-Anzeigeskalierungsproblem &lt;br /&gt;
** '''Behoben: PDF-Skalierungsprobleme durch Neuerstellung des BrowserFrames bei jedem Rendering'''&lt;br /&gt;
&lt;br /&gt;
=== Anmeldebildschirm ===&lt;br /&gt;
&lt;br /&gt;
Der Anmeldebildschirm zeigt nun während der Initialisierung des Persistence-Services einen Statustext an.&lt;br /&gt;
&lt;br /&gt;
* Lauftext-Anzeige (Marquee) mit dem aktuellen Status des Persistence-Services&lt;br /&gt;
* Deaktivierung aller Anmeldesteuerelemente während der Wartezeit&lt;br /&gt;
&lt;br /&gt;
=== Start der Anwendung ===&lt;br /&gt;
&lt;br /&gt;
* Blockierungen der Initialisierungsvorgänge durch Warten auf Serviceregistrierung während des Anwendungsstarts reduziert. &amp;lt;br&amp;gt;Dadurch verändert sich das Startverhalten, insbesondere die Reihenfolge der Anwendung. Insgesamt schnelleres Laden der Bundles.&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4606</id>
		<title>Releasenotes 2026 OS.Softwarefactory</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4606"/>
				<updated>2026-10-12T09:17:37Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Version 5.3.0.20261012 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261012 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** org.eclipse.osbp.dsl:&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (1) – &amp;lt;code&amp;gt;AbstractOppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;MappingContext&amp;lt;/code&amp;gt; deklarieren kein &amp;lt;code&amp;gt;finalize()&amp;lt;/code&amp;gt; mehr. Jede &amp;lt;code&amp;gt;OppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OppositeContainmentDtoList&amp;lt;/code&amp;gt; war dadurch finalisierbar, überlebte die Garbage Collection, die sie als unerreichbar erkannt hatte, und hielt bis zur Abarbeitung durch den einzelnen Finalizer-Thread ihren gesamten Objektgraphen am Leben (DTOs, Entitäten, Persistenzkontexte). In einem Kundenabzug waren von 7,56 Mio. Finalizer-Einträgen 7,51 Mio. solche Listen. Die Listener, die der Finalizer abmelden sollte, werden bereits in &amp;lt;code&amp;gt;clear()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;remove()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;resolve()&amp;lt;/code&amp;gt; abgemeldet&lt;br /&gt;
*** Fix: Speicherwachstum durch DTOs behoben (2) – ein DTO hält für das spätere Nachladen einer Lazy-Referenz nicht mehr die abgelöste Entität fest, sondern nur noch deren Klasse und ID (neue Klasse &amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;org.eclipse.osbp.dsl.dto.lib&amp;lt;/code&amp;gt;). Die Entität hielt über ihre Lazy-Beziehungen den gesamten Persistenzkontext (&amp;lt;code&amp;gt;RepeatableWriteUnitOfWork&amp;lt;/code&amp;gt; samt aller darin geklonten Entitäten), obwohl &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; nur Klasse und ID benötigt. Gemessen an einer Kasse: rund 42 festgehaltene Persistenzkontexte je Verkauf vorher, praktisch keiner danach. Die ID wird erst am Ende des Mappings übernommen, weil der generierte Mapper &amp;lt;code&amp;gt;initialize(entity)&amp;lt;/code&amp;gt; vor &amp;lt;code&amp;gt;setId&amp;lt;/code&amp;gt; aufruft und eine neue Entität bis dahin die zufällige ID ihres Konstruktors trägt; liefert die Datenbank die ID erst später, bleibt es beim bisherigen Verhalten. '''Der Generator (&amp;lt;code&amp;gt;DtoTypesBuilder&amp;lt;/code&amp;gt;) erzeugt den neuen Aufruf; wirksam wird die Änderung erst mit neu generierten DTOs. Da &amp;lt;code&amp;gt;src-gen&amp;lt;/code&amp;gt; versioniert ist und der Jenkins-Build die eingecheckten Quellen übersetzt, müssen neu generierte DTOs eingecheckt werden.''' Nicht neu generierte DTOs laufen unverändert weiter; neu generierte DTOs setzen ein &amp;lt;code&amp;gt;dto.lib&amp;lt;/code&amp;gt; ab dem 07.10.2026 voraus&lt;br /&gt;
*** &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; meldet nun, welche Zeile er nicht nachladen konnte. Liefert &amp;lt;code&amp;gt;em.find&amp;lt;/code&amp;gt; kein Ergebnis, wird ein Fehler mit Entitätsklasse, ID, Eigenschaft und DTO-Klasse protokolliert und eine &amp;lt;code&amp;gt;IllegalStateException&amp;lt;/code&amp;gt; geworfen. Bisher erschien an dieser Stelle nur eine &amp;lt;code&amp;gt;NullPointerException&amp;lt;/code&amp;gt; ohne Hinweis auf die Ursache&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;AbstractDTOService.closeEntityManager()&amp;lt;/code&amp;gt; fordert eine offene Transaktion nicht mehr nach jedem Lesezugriff zur Freigabe auf. Das Verhalten ist unverändert, die Warnung &amp;lt;code&amp;gt;dispose() refused&amp;lt;/code&amp;gt; erscheint aber nur noch, wenn tatsächlich jemand eine offene Transaktion abbauen will (zuvor rund zwei Meldungen je Verkauf und etwa 175 je Kassenabschluss)&lt;br /&gt;
*** Fix: Mit &amp;lt;code&amp;gt;-DsendTransactionEventAsync=true&amp;lt;/code&amp;gt; wartete &amp;lt;code&amp;gt;TransactionHandler.dispose()&amp;lt;/code&amp;gt; nach jedem Commit mindestens 800 ms, zuzüglich weiterer 800 ms je Durchlauf mit nicht leerer Ereigniswarteschlange – während &amp;lt;code&amp;gt;SessionManager&amp;lt;/code&amp;gt; die Sperre aller Transaktions-Handler hielt. An einer Kasse waren das mehrere Sekunden je Bon. &amp;lt;code&amp;gt;dispose()&amp;lt;/code&amp;gt; übergibt den Entity Manager nun dem Ereignis-Thread und kehrt sofort zurück; der Thread schließt ihn als letzten Schritt, sobald seine Warteschlange leer ist. Ein Ereignis, das sich nicht versenden lässt, beendet den Thread nicht mehr. Ohne den Schalter ändert sich nicht*s&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;MetadataBuilder&amp;lt;/code&amp;gt; macht beim ersten Scan zunächst alle gestarteten Bundles mit dem Header &amp;lt;code&amp;gt;OSBP-RuntimeBuilder-BundleSpace&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;Factory-Model&amp;lt;/code&amp;gt; im Bundle-Space bekannt und sucht erst danach nach Modellen. Bisher wurde ein Bundle erst beim Erreichen aufgenommen, während ein Participant ein Modell sofort laden kann: Ein ECView aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration&amp;lt;/code&amp;gt; nennt ein DTO aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration.base&amp;lt;/code&amp;gt; mit der höheren Bundle-ID, die Klasse wurde also je nach Reihenfolge beim Start nicht gefunden. In diesem Fall scheiterte &amp;lt;code&amp;gt;activate()&amp;lt;/code&amp;gt;, der DSL-Metadatendienst und damit der Persistenzdienst starteten nie, und die Anwendung blieb auf der Startseite stehen. Eine fehlgeschlagene Aktivierung wird nun zusätzlich als Fehler in das Anwendungslog geschrieben&lt;br /&gt;
** Fix: org.eclipse.osbp.dsl, org.eclipse.osbp.runtime: Vier Fehler in der sitzungsbezogenen Transaktionsverwaltung behoben. (a) &amp;lt;code&amp;gt;SessionManager.removeSession()&amp;lt;/code&amp;gt; gab den Transaktions-Handler unter einem Schlüssel frei, der nie passen konnte (&amp;lt;code&amp;gt;ISession&amp;lt;/code&amp;gt; hat kein &amp;lt;code&amp;gt;toString()&amp;lt;/code&amp;gt;), das Sicherheitsnetz griff also nie. (b) &amp;lt;code&amp;gt;disposeTransactionHandler&amp;lt;/code&amp;gt; entfernte den Eintrag auch dann, wenn die Transaktion noch offen war – der Entity Manager wurde aufgegeben und der Thread, der die Transaktion noch abschließen musste, fand seinen Handler nicht mehr. &amp;lt;code&amp;gt;ITransactionHandler&amp;lt;/code&amp;gt; erhält dafür &amp;lt;code&amp;gt;isDisposable()&amp;lt;/code&amp;gt; als Default-Methode. (c) Die Freigabe nach &amp;lt;code&amp;gt;transactionBegin&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Rollback&amp;lt;/code&amp;gt; steht nun in einem &amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt;; ein &amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt;, insbesondere ein &amp;lt;code&amp;gt;OutOfMemoryError&amp;lt;/code&amp;gt;, ließ den Handler bisher mit Entity Manager in einer statischen Map zurück. (d) &amp;lt;code&amp;gt;txnIsOpen&amp;lt;/code&amp;gt; wird auch bei einem fehlgeschlagenen Commit oder Rollback zurückgesetzt&lt;br /&gt;
** org.eclipse.osbp.persistence: &lt;br /&gt;
*** Der Startstatus nennt nun den Dienst, auf den der Persistenzdienst noch wartet. Die neue Komponente &amp;lt;code&amp;gt;PersistenceStartupStatus&amp;lt;/code&amp;gt; hat keine Pflichtreferenz, ist daher von Beginn an aktiv und setzt den Status auf „persistence service is waiting for the DSL metadata service“ (bzw. „the Mondrian manager“), bis diese gebunden sind. Bisher blieb es unabhängig vom Grund bei „persistenceservice not started yet“, und die wartenden Dienste protokollierten nichts&lt;br /&gt;
*** Beim Einrichten einer Persistence Unit wird jede verwaltete Klasse gemeldet, die nicht statisch gewebt ist, obwohl eine ihrer Oberklassen es ist – in einer ERROR-Zeile mit dem Hinweis, das Projekt vollständig neu zu bauen. Eine solche Klasse wird von EclipseLink instanziiert, aber nie befüllt: Der Dialog bleibt leer, und die nächste Aktualisierung scheitert mit „mapped to a primary key column ... Updates are not allowed“&lt;br /&gt;
** org.eclipse.osbp.ecview.extension: Fix: Das Grid vergisst die Zeilenschlüssel von Einträgen, die den Container als Ganzes verlassen haben. Vaadin gibt die Schlüssel nur über das clientseitige &amp;lt;code&amp;gt;dropRows&amp;lt;/code&amp;gt; frei; nach einem allgemeinen &amp;lt;code&amp;gt;ItemSetChange&amp;lt;/code&amp;gt;, wie ihn &amp;lt;code&amp;gt;removeAllItems()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;addAll()&amp;lt;/code&amp;gt; auslösen, blieben sie im &amp;lt;code&amp;gt;KeyMapper&amp;lt;/code&amp;gt; stehen und hielten jede jemals angezeigte Zeile samt ihrem DTO-Graphen. &amp;lt;code&amp;gt;GridPresentation.CustomGrid&amp;lt;/code&amp;gt; merkt sich die vergebenen Schlüssel und entfernt die nicht mehr enthaltenen&lt;br /&gt;
** org.osbee.datainterchange: Fix: FreeMarkers gemeinsam genutzte &amp;lt;code&amp;gt;InvalidReferenceException&amp;lt;/code&amp;gt; hält nicht mehr den ersten Exportlauf fest. Die statische Instanz übernahm die zum Zeitpunkt ihres Entstehens aktive Umgebung und damit das gesamte Datenmodell des ersten Exports für die Lebensdauer des Prozesses. Der Activator lädt die Klasse nun einmal außerhalb eines Template-Laufs&lt;br /&gt;
** org.eclipse.osbp.display: Fix: Das Display-Servlet wird nicht mehr auf dem Thread registriert, der die Bundles startet. Die Registrierung veröffentlicht einen Dienst, und Declarative Services verarbeitet dieses Ereignis auf dem veröffentlichenden Thread; dort wartete der Start aller nachfolgenden Bundles, in einem Fall über 50 Sekunden („Getting a lock required more than 50000 ms“). Die Registrierung läuft nun auf einem eigenen Thread&lt;br /&gt;
** org.eclipse.osbp.runtime, org.eclipse.osbp.blob, org.eclipse.osbp.autowireHelper, org.eclipse.osbp.ecview.extension, org.eclipse.osbp.ecview.addons, org.eclipse.osbp.infogrid.model: Neue Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; für String-Attribute. Ein Attribut mit &amp;lt;code&amp;gt;key=&amp;quot;barcode&amp;quot; value=&amp;quot;QRCode-128&amp;quot;&amp;lt;/code&amp;gt; wird schreibgeschützt als Barcode-Bild angezeigt, das aus seinem Klartextwert erzeugt wird – im Dialog über &amp;lt;code&amp;gt;BlobComponent&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;BlobUploadComponent&amp;lt;/code&amp;gt; (letztere dann ohne Schaltflächen) und in Grid-Spalten über den Blob-Bildkonverter&lt;br /&gt;
** org.eclipse.osbp.authentication, org.eclipse.osbp.system.configuration, org.eclipse.osbp.blob: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** org.eclipse.osbp.xtext.table, org.eclipse.osbp.xtext.table.common: Für Attribute mit der Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; wird ein Barcode-Lookup generiert; eine String-Zelle wird als Barcode-Bild angezeigt, wenn das Lookup einen Barcode-Typ trägt&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** net.osbee.pos.tse: Aufrufer können die BSI-Zertifizierungs-ID der TSE abfragen. Die SE-API bietet &amp;lt;code&amp;gt;getCertificationId&amp;lt;/code&amp;gt; in beiden API-Versionen, keiner der beiden Adapter reichte den Aufruf bisher durch&lt;br /&gt;
** net.osbee.pos.tse, net.osbee.pos.rksv: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Einführung der http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/restartService Seite. Damit können entweder Sessions gekillt oder der Service der Anwendung neu gestartet werden.&lt;br /&gt;
** Bei Nichterreichbarkeit der Datenbank wird die Anwendung beendet und der Fehlerstatus auf der Statusseite angezeigt.&lt;br /&gt;
** Das eingebettete &amp;lt;code&amp;gt;shiro-all-1.2.3.jar&amp;lt;/code&amp;gt; wurde durch &amp;lt;code&amp;gt;shiro-core&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; in Version 1.13.0 ersetzt. Damit sind CVE-2016-4437 (Remote Code Execution über das RememberMe-Cookie mit festem Schlüssel) und CVE-2019-12422 geschlossen. &amp;lt;code&amp;gt;encoder-1.2.3.jar&amp;lt;/code&amp;gt; kommt hinzu, weil &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; 1.13 &amp;lt;code&amp;gt;org.owasp.encoder&amp;lt;/code&amp;gt; zwingend importiert.&lt;br /&gt;
** Anmeldung: &lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm&amp;lt;/code&amp;gt; löst den Anmeldenamen vor jeder Abfrage in einen Distinguished Name auf. Active Directory akzeptiert für den Bind auch einen User Principal Name, beantwortet Abfragen damit aber mit LDAP-Fehler 34 (&amp;lt;code&amp;gt;invalidDNSyntax&amp;lt;/code&amp;gt;), sodass ein &amp;lt;code&amp;gt;userDnTemplate&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt; zwar anmeldete, dann aber an den Attributen scheiterte. &amp;lt;code&amp;gt;resolveUserDn&amp;lt;/code&amp;gt; sucht nun über &amp;lt;code&amp;gt;userPrincipalName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sAMAccountName&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;mail&amp;lt;/code&amp;gt;; die Suchbasis stammt aus dem RootDSE. Bestehende Vorlagen der Form &amp;lt;code&amp;gt;cn={0},ou=...&amp;lt;/code&amp;gt; verhalten sich unverändert. Zugleich behoben: eine &amp;lt;code&amp;gt;StringIndexOutOfBoundsException&amp;lt;/code&amp;gt; im E-Mail-Zweig und das Einsetzen des Benutzernamens in den Suchfilter per Verkettung (jetzt als &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt;, von JNDI maskiert)&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm.getUserDn&amp;lt;/code&amp;gt; maskierte nur das Komma. &amp;lt;code&amp;gt;escapeDnValue&amp;lt;/code&amp;gt; deckt nun alle Zeichen nach RFC 4514 Abschnitt 2.4 ab, sodass ein Benutzername die Bedeutung des DN nicht mehr verändern kann&lt;br /&gt;
*** Die Funktionalität „Angemeldet bleiben“ arbeitet nun mit einem signierten Token statt mit verschlüsselten Zugangsdaten. Das Cookie ist eine mit HMAC-SHA256 signierte Aussage über Benutzer, Mandant, Geltungsbereich, Ablaufdatum und Version und enthält keine Zugangsdaten. Es ist zustandslos, sodass beliebig viele Geräte und Browser gleichzeitig eines halten können.&lt;br /&gt;
*** Das „Angemeldet bleiben“-Cookie gilt je Anwendungsinstanz und Browser. Der Cookie-Name trägt einen Kurzhash über Schema, Host, Port, erstes Pfadsegment und Portal-ID, sodass zwei Anwendungen auf demselben Host nicht mehr das Cookie der jeweils anderen lesen. Die selbstgebaute Verschlüsselung entfällt vollständig. Das Cookie wird mit expliziter Lebensdauer, &amp;lt;code&amp;gt;SameSite=Lax&amp;lt;/code&amp;gt; und unter https mit &amp;lt;code&amp;gt;Secure&amp;lt;/code&amp;gt; geschrieben. Die Anmeldung aus einem Cookie wartet fünf Sekunden mit einem Hinweis auf der Anmeldemaske und lässt sich in dieser Zeit abbrechen; ein entferntes Häkchen löscht das Cookie nun in jedem Fall. Die Betrugsmeldung samt Kontosperre bei nicht passendem Cookie entfällt&lt;br /&gt;
*** Fix: Kennwörter erscheinen nicht mehr im Log – weder bei der Anmeldung in &amp;lt;code&amp;gt;AuthenticationProvider.check()&amp;lt;/code&amp;gt; (bisher im Klartext auf DEBUG) noch beim Zurücksetzen, wo der Nachrichtentext mit dem neuen Kennwort dreimal geschrieben wurde&lt;br /&gt;
*** Die Anzeige des neuen Kennworts auf der Anmeldemaske, wenn keine E-Mail versendet werden kann, ist nun eine konfigurierte Betriebsart: &amp;lt;code&amp;gt;Userinterface/showResetPasswordOnScreen&amp;lt;/code&amp;gt;, standardmäßig aus, mit Protokollierung auf WARN. '''Installationen ohne Mailserver müssen den Parameter einmalig setzen'''&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;doResetPassword&amp;lt;/code&amp;gt; hebt weder eine Sperre noch die Deaktivierung eines Kontos auf und setzt den Fehlversuchszähler nicht mehr zurück. Das Zurücksetzen kann jeder auslösen, der einen Benutzernamen eingibt; aufgehoben werden Sperre und Deaktivierung nur noch durch einen Administrator über &amp;lt;code&amp;gt;doUnlock&amp;lt;/code&amp;gt;&lt;br /&gt;
** System Configuration: &lt;br /&gt;
*** Parameter &amp;lt;code&amp;gt;RememberMeSecret&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;IConfigurationService&amp;lt;/code&amp;gt; ergänzt (&amp;lt;code&amp;gt;GLOBAL_PARAMETERS/RememberMeSecret&amp;lt;/code&amp;gt;). Der Schlüssel wird je Installation bei der ersten Benutzung der &amp;quot;RememberMe&amp;quot; Funktionalität einmal aus gezogen und von allen Anmeldungen geteilt; das Löschen des Eintrags macht alle „Angemeldet bleiben“-Cookies auf einmal ungültig.&lt;br /&gt;
*** Fix: Die Einstellungen füllten sich mit Platzhaltern „not set“. &amp;lt;code&amp;gt;ConfigurationService.getConfigurationString&amp;lt;/code&amp;gt; speicherte bei leerem Vorgabewert den Platzhalter und lieferte ihn als leere Zeichenkette zurück, sodass &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; stets eine weitere Zeile anhängte. &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; entfernt nun die Platzhalterzeilen des Schlüssels vor dem Schreiben, und ein gespeicherter Platzhalter gilt als „kein Wert“. &amp;lt;code&amp;gt;deleteConfigurations&amp;lt;/code&amp;gt; setzt zusätzlich den Cache zurück; gelöschte Einträge kamen bisher beim nächsten Lesen wieder&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Fix: org.eclipse.osbp.dependencies-mbp: Das Bundle &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.bundle.activemq.all.osgi&amp;lt;/code&amp;gt; enthält kein Log4j und kein eingebettetes slf4j mehr. &amp;lt;code&amp;gt;activemq-all&amp;lt;/code&amp;gt; brachte eine vollständige Kopie von Apache Log4j 1.2.17 mit (359 Klassen, darunter &amp;lt;code&amp;gt;JDBCAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSSink&amp;lt;/code&amp;gt; und chainsaw – betroffen von CVE-2021-4104, CVE-2022-23302, CVE-2022-23305 und CVE-2022-23307) sowie slf4j-api 1.7.13 und &amp;lt;code&amp;gt;slf4j-log4j12&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;Include-Resource&amp;lt;/code&amp;gt; bindet das Hersteller-Jar nun ohne &amp;lt;code&amp;gt;org.apache.log4j&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org.slf4j&amp;lt;/code&amp;gt;, deren Maven-Koordinaten, die &amp;lt;code&amp;gt;log4j.properties&amp;lt;/code&amp;gt; und Springs &amp;lt;code&amp;gt;Log4jConfigurer&amp;lt;/code&amp;gt; ein. ActiveMQ bezieht slf4j stattdessen aus dem Produkt (&amp;lt;code&amp;gt;org.slf4j.api&amp;lt;/code&amp;gt; 1.7.36)&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neue Dienststeuerungsseite unter &amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;. &lt;br /&gt;
*** Ein Bediener kann darüber – autorisiert durch eine reguläre Anwendungsanmeldung – hängende Sitzungen beenden oder den Dienst neu starten, ohne Zugriff auf den Serverrechner zu benötigen. Drei Stufen: Sitzungen des aufrufenden Arbeitsplatzes, alle Sitzungen, Neustart. Die Seite ist am Root-HTTP-Service registriert und bleibt damit erreichbar, wenn der Anwendungskontext selbst gestört ist; Markup, Stil, Skript und Texte (deutsch, englisch, französisch) sind deshalb in der Seite enthalten. Sitzungen werden über das Invalidieren der HTTP-Sitzung beendet. Der Neustart läuft über die Befehlswarteschlange der Anwendung; die Seite fragt anschließend die Anwendung ab und führt den Bediener über die Unterbrechung hinweg&lt;br /&gt;
*** Alle Aktionen der Dienststeuerungsseite werden im &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; unter denselben Koordinaten wie die Anmeldemaske protokolliert (fehlgeschlagene Anmeldung und Neustart als WARNING, gesperrtes Konto als ERROR, beendete Sitzungen als INFO). Eine abgelehnte Anmeldung sperrt das Formular für die Dauer der Wartezeit mit Countdown; der Zähler ist derselbe wie an der Anmeldemaske, sodass sich Fehlversuche auf beiden Wegen zur Kontosperre summieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260907 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Überarbeitung der Codebasis zur Entfernung veralteter und nicht benötigter Bundles&lt;br /&gt;
** Überarbeitung des Loginvorgangs / der Cookiespeicherung bei &amp;quot;remember me&amp;quot;. Es werden keine kritischen Daten mehr im Cookie gespeichert.&lt;br /&gt;
** Verbesserung der Übersetzungen&lt;br /&gt;
** Anpassungen für frz. Fiskalanforderungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Laden der Übersetzungen in die interne Tabelle beim Systemstart deutlich beschleunigt. Dadurch verbessertes Startverhalten der Anwendungen.&lt;br /&gt;
** Verbesserungen bei der frz. Tastaturunterstützung&lt;br /&gt;
** Verbesserungen der Übersetzungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260618 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Blockieren durch das Laden von Diensten während des Starts vermieden, dadurch schnellerer Anwendungsstart. Anderes Verhalten beim Start an der Benutzeroberfläche.&lt;br /&gt;
** Französische Tastaturunterstützung (AZERTY) im Keymapper der Statemachine ergänzt&lt;br /&gt;
** Login bezieht Build-Version und Hersteller nun aus den &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; (einheitliche Quelle)&lt;br /&gt;
** Neue gemeinsame Hilfsmethoden &amp;lt;code&amp;gt;getBuildVersion()&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;getVendor()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; zur Ermittlung der Build-Identität&lt;br /&gt;
** &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; setzt die Zeitstempel von &amp;lt;code&amp;gt;lastError&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;lastWarning&amp;lt;/code&amp;gt; nicht mehr zurück&lt;br /&gt;
** Fix: NPE in &amp;lt;code&amp;gt;org.eclipse.osbp.xtext.dialog.AutowireUiFactory&amp;lt;/code&amp;gt; behoben&lt;br /&gt;
** Version von 5.2.0 auf 5.3.0 angehoben&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-reverify&amp;lt;/code&amp;gt; (16px/32px) für die NF525-Schaltfläche zur erneuten Archivintegritätsprüfung&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-refresh.png&amp;lt;/code&amp;gt; ergänzt&lt;br /&gt;
** Grid – horizontale Bildlaufleiste wiederhergestellt&lt;br /&gt;
** Grid - Flex-Layout für Kassen-/POS-Grids wiederhergestellt (kollabierte Spalten behoben)&lt;br /&gt;
** französische Übersetzungen überarbeitet&lt;br /&gt;
&lt;br /&gt;
* Grammatiken/Generierung:&lt;br /&gt;
** org.eclipse.osbp.dsl: Benutzerdefinierte &amp;lt;code&amp;gt;@PreRemove&amp;lt;/code&amp;gt;-Hooks werden in der generierten &amp;lt;code&amp;gt;preRemove()&amp;lt;/code&amp;gt;-Methode zusammengeführt&lt;br /&gt;
** org.eclipse.osbp.xtext.i18n: i18n-Generator erzeugt nun das byte-genaue Eclipse-Babel-Format&lt;br /&gt;
&lt;br /&gt;
* POS Framework für franz. Fiskalanforderungen eingeführt&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260410 ==&lt;br /&gt;
&lt;br /&gt;
* POS Framework: &lt;br /&gt;
** Performanceverbesserung beim Kassieren&lt;br /&gt;
** Multi-Protokoll Unterstützung für Paymentterminal &lt;br /&gt;
*** frz. Protokolle &amp;quot;Concert&amp;quot;, &amp;quot;Protocol E&amp;quot;&lt;br /&gt;
*** &amp;quot;Mock&amp;quot; für Tests&lt;br /&gt;
*** Statemachine DSL erweitert: protocol Parameter für Paymentterminal&lt;br /&gt;
*** &amp;quot;Shared Payment Terminal&amp;quot;&lt;br /&gt;
**** locking im PaymentTerminalService implementiert&lt;br /&gt;
**** pro Terminal über ConfigService einstellbar&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260402 ==&lt;br /&gt;
&lt;br /&gt;
Die Version verbessert das Startverhalten einer Anwendung und bringt mehr Informationen über den Status des Starts auf den Bildschirm&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Anzeige des Persistenzservice-Status auf dem Login-Bildschirm&lt;br /&gt;
** Information über den Persistenzservice auf der Fehlerseite hinzugefügt&lt;br /&gt;
** Beim Start wird nun überall auf den Persistenzservice statt nur auf den ConfigurationService gewartet&lt;br /&gt;
&lt;br /&gt;
* BPM:&lt;br /&gt;
** Fix: net.osbee.bpm: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** Fix: net.osbee.pos.epay: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260305 ==&lt;br /&gt;
&lt;br /&gt;
=== Report Anzeige ===&lt;br /&gt;
&lt;br /&gt;
Diese Version konzentriert sich auf '''Stabilitätsverbesserungen''' für das Report-Rendering-System, insbesondere auf die Behebung von Race Conditions und Anzeigeproblemen, die bei schnellen Benutzerinteraktionen auftraten.&lt;br /&gt;
&lt;br /&gt;
* Race Condition beim Report-Rendering&lt;br /&gt;
** '''Behoben: Schnelles Auswählen/Abwählen führte dazu, dass Reports mit ungültigen oder fehlenden Filtern gerendert wurden'''&lt;br /&gt;
*** Reports verarbeiten nun korrekt wenn Benutzer schnell Elemente auswählen und wieder abwählen&lt;br /&gt;
*** Filteränderungen werden blockiert, während ein Render-Vorgang läuft&lt;br /&gt;
*** Ausstehende Filteränderungen werden nachverfolgt und nach Abschluss des Renderings erneut ausgewertet&lt;br /&gt;
*** Reports mit &amp;lt;code&amp;gt;selectById&amp;lt;/code&amp;gt; werden nun korrekt ausgeblendet, wenn nichts ausgewählt ist&lt;br /&gt;
&lt;br /&gt;
* PDF-Anzeigeskalierungsproblem &lt;br /&gt;
** '''Behoben: PDF-Skalierungsprobleme durch Neuerstellung des BrowserFrames bei jedem Rendering'''&lt;br /&gt;
&lt;br /&gt;
=== Anmeldebildschirm ===&lt;br /&gt;
&lt;br /&gt;
Der Anmeldebildschirm zeigt nun während der Initialisierung des Persistence-Services einen Statustext an.&lt;br /&gt;
&lt;br /&gt;
* Lauftext-Anzeige (Marquee) mit dem aktuellen Status des Persistence-Services&lt;br /&gt;
* Deaktivierung aller Anmeldesteuerelemente während der Wartezeit&lt;br /&gt;
&lt;br /&gt;
=== Start der Anwendung ===&lt;br /&gt;
&lt;br /&gt;
* Blockierungen der Initialisierungsvorgänge durch Warten auf Serviceregistrierung während des Anwendungsstarts reduziert. &amp;lt;br&amp;gt;Dadurch verändert sich das Startverhalten, insbesondere die Reihenfolge der Anwendung. Insgesamt schnelleres Laden der Bundles.&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4605</id>
		<title>Releasenotes 2026 OS.Softwarefactory</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4605"/>
				<updated>2026-10-12T09:11:30Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261012 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Fix: org.eclipse.osbp.dsl: Speicherwachstum durch DTOs behoben (1) – &amp;lt;code&amp;gt;AbstractOppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;MappingContext&amp;lt;/code&amp;gt; deklarieren kein &amp;lt;code&amp;gt;finalize()&amp;lt;/code&amp;gt; mehr. Jede &amp;lt;code&amp;gt;OppositeDtoList&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;OppositeContainmentDtoList&amp;lt;/code&amp;gt; war dadurch finalisierbar, überlebte die Garbage Collection, die sie als unerreichbar erkannt hatte, und hielt bis zur Abarbeitung durch den einzelnen Finalizer-Thread ihren gesamten Objektgraphen am Leben (DTOs, Entitäten, Persistenzkontexte). In einem Kundenabzug waren von 7,56 Mio. Finalizer-Einträgen 7,51 Mio. solche Listen. Die Listener, die der Finalizer abmelden sollte, werden bereits in &amp;lt;code&amp;gt;clear()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;remove()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;resolve()&amp;lt;/code&amp;gt; abgemeldet&lt;br /&gt;
** Fix: org.eclipse.osbp.dsl: Speicherwachstum durch DTOs behoben (2) – ein DTO hält für das spätere Nachladen einer Lazy-Referenz nicht mehr die abgelöste Entität fest, sondern nur noch deren Klasse und ID (neue Klasse &amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;org.eclipse.osbp.dsl.dto.lib&amp;lt;/code&amp;gt;). Die Entität hielt über ihre Lazy-Beziehungen den gesamten Persistenzkontext (&amp;lt;code&amp;gt;RepeatableWriteUnitOfWork&amp;lt;/code&amp;gt; samt aller darin geklonten Entitäten), obwohl &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; nur Klasse und ID benötigt. Gemessen an einer Kasse: rund 42 festgehaltene Persistenzkontexte je Verkauf vorher, praktisch keiner danach. Die ID wird erst am Ende des Mappings übernommen, weil der generierte Mapper &amp;lt;code&amp;gt;initialize(entity)&amp;lt;/code&amp;gt; vor &amp;lt;code&amp;gt;setId&amp;lt;/code&amp;gt; aufruft und eine neue Entität bis dahin die zufällige ID ihres Konstruktors trägt; liefert die Datenbank die ID erst später, bleibt es beim bisherigen Verhalten. '''Der Generator (&amp;lt;code&amp;gt;DtoTypesBuilder&amp;lt;/code&amp;gt;) erzeugt den neuen Aufruf; wirksam wird die Änderung erst mit neu generierten DTOs. Da &amp;lt;code&amp;gt;src-gen&amp;lt;/code&amp;gt; versioniert ist und der Jenkins-Build die eingecheckten Quellen übersetzt, müssen neu generierte DTOs eingecheckt werden.''' Nicht neu generierte DTOs laufen unverändert weiter; neu generierte DTOs setzen ein &amp;lt;code&amp;gt;dto.lib&amp;lt;/code&amp;gt; ab dem 07.10.2026 voraus&lt;br /&gt;
** org.eclipse.osbp.dsl: &amp;lt;code&amp;gt;LazyManyToOneResolver&amp;lt;/code&amp;gt; meldet nun, welche Zeile er nicht nachladen konnte. Liefert &amp;lt;code&amp;gt;em.find&amp;lt;/code&amp;gt; kein Ergebnis, wird ein Fehler mit Entitätsklasse, ID, Eigenschaft und DTO-Klasse protokolliert und eine &amp;lt;code&amp;gt;IllegalStateException&amp;lt;/code&amp;gt; geworfen. Bisher erschien an dieser Stelle nur eine &amp;lt;code&amp;gt;NullPointerException&amp;lt;/code&amp;gt; ohne Hinweis auf die Ursache&lt;br /&gt;
** Fix: org.eclipse.osbp.dsl, org.eclipse.osbp.runtime: Vier Fehler in der sitzungsbezogenen Transaktionsverwaltung behoben. (a) &amp;lt;code&amp;gt;SessionManager.removeSession()&amp;lt;/code&amp;gt; gab den Transaktions-Handler unter einem Schlüssel frei, der nie passen konnte (&amp;lt;code&amp;gt;ISession&amp;lt;/code&amp;gt; hat kein &amp;lt;code&amp;gt;toString()&amp;lt;/code&amp;gt;), das Sicherheitsnetz griff also nie. (b) &amp;lt;code&amp;gt;disposeTransactionHandler&amp;lt;/code&amp;gt; entfernte den Eintrag auch dann, wenn die Transaktion noch offen war – der Entity Manager wurde aufgegeben und der Thread, der die Transaktion noch abschließen musste, fand seinen Handler nicht mehr. &amp;lt;code&amp;gt;ITransactionHandler&amp;lt;/code&amp;gt; erhält dafür &amp;lt;code&amp;gt;isDisposable()&amp;lt;/code&amp;gt; als Default-Methode. (c) Die Freigabe nach &amp;lt;code&amp;gt;transactionBegin&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Rollback&amp;lt;/code&amp;gt; steht nun in einem &amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt;; ein &amp;lt;code&amp;gt;Error&amp;lt;/code&amp;gt;, insbesondere ein &amp;lt;code&amp;gt;OutOfMemoryError&amp;lt;/code&amp;gt;, ließ den Handler bisher mit Entity Manager in einer statischen Map zurück. (d) &amp;lt;code&amp;gt;txnIsOpen&amp;lt;/code&amp;gt; wird auch bei einem fehlgeschlagenen Commit oder Rollback zurückgesetzt&lt;br /&gt;
** Fix: org.eclipse.osbp.dsl: &amp;lt;code&amp;gt;AbstractDTOService.closeEntityManager()&amp;lt;/code&amp;gt; fordert eine offene Transaktion nicht mehr nach jedem Lesezugriff zur Freigabe auf. Das Verhalten ist unverändert, die Warnung &amp;lt;code&amp;gt;dispose() refused&amp;lt;/code&amp;gt; erscheint aber nur noch, wenn tatsächlich jemand eine offene Transaktion abbauen will (zuvor rund zwei Meldungen je Verkauf und etwa 175 je Kassenabschluss)&lt;br /&gt;
** Fix: org.eclipse.osbp.dsl: Mit &amp;lt;code&amp;gt;-DsendTransactionEventAsync=true&amp;lt;/code&amp;gt; wartete &amp;lt;code&amp;gt;TransactionHandler.dispose()&amp;lt;/code&amp;gt; nach jedem Commit mindestens 800 ms, zuzüglich weiterer 800 ms je Durchlauf mit nicht leerer Ereigniswarteschlange – während &amp;lt;code&amp;gt;SessionManager&amp;lt;/code&amp;gt; die Sperre aller Transaktions-Handler hielt. An einer Kasse waren das mehrere Sekunden je Bon. &amp;lt;code&amp;gt;dispose()&amp;lt;/code&amp;gt; übergibt den Entity Manager nun dem Ereignis-Thread und kehrt sofort zurück; der Thread schließt ihn als letzten Schritt, sobald seine Warteschlange leer ist. Ein Ereignis, das sich nicht versenden lässt, beendet den Thread nicht mehr. Ohne den Schalter ändert sich nichts&lt;br /&gt;
** Fix: org.eclipse.osbp.dsl: &amp;lt;code&amp;gt;MetadataBuilder&amp;lt;/code&amp;gt; macht beim ersten Scan zunächst alle gestarteten Bundles mit dem Header &amp;lt;code&amp;gt;OSBP-RuntimeBuilder-BundleSpace&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;Factory-Model&amp;lt;/code&amp;gt; im Bundle-Space bekannt und sucht erst danach nach Modellen. Bisher wurde ein Bundle erst beim Erreichen aufgenommen, während ein Participant ein Modell sofort laden kann: Ein ECView aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration&amp;lt;/code&amp;gt; nennt ein DTO aus &amp;lt;code&amp;gt;org.eclipse.osbp.system.configuration.base&amp;lt;/code&amp;gt; mit der höheren Bundle-ID, die Klasse wurde also je nach Reihenfolge beim Start nicht gefunden. In diesem Fall scheiterte &amp;lt;code&amp;gt;activate()&amp;lt;/code&amp;gt;, der DSL-Metadatendienst und damit der Persistenzdienst starteten nie, und die Anwendung blieb auf der Startseite stehen. Eine fehlgeschlagene Aktivierung wird nun zusätzlich als Fehler in das Anwendungslog geschrieben&lt;br /&gt;
** org.eclipse.osbp.persistence: Der Startstatus nennt nun den Dienst, auf den der Persistenzdienst noch wartet. Die neue Komponente &amp;lt;code&amp;gt;PersistenceStartupStatus&amp;lt;/code&amp;gt; hat keine Pflichtreferenz, ist daher von Beginn an aktiv und setzt den Status auf „persistence service is waiting for the DSL metadata service“ (bzw. „the Mondrian manager“), bis diese gebunden sind. Bisher blieb es unabhängig vom Grund bei „persistenceservice not started yet“, und die wartenden Dienste protokollierten nichts&lt;br /&gt;
** org.eclipse.osbp.persistence: Beim Einrichten einer Persistence Unit wird jede verwaltete Klasse gemeldet, die nicht statisch gewebt ist, obwohl eine ihrer Oberklassen es ist – in einer ERROR-Zeile mit dem Hinweis, das Projekt vollständig neu zu bauen. Eine solche Klasse wird von EclipseLink instanziiert, aber nie befüllt: Der Dialog bleibt leer, und die nächste Aktualisierung scheitert mit „mapped to a primary key column ... Updates are not allowed“&lt;br /&gt;
** Fix: org.eclipse.osbp.ecview.extension: Das Grid vergisst die Zeilenschlüssel von Einträgen, die den Container als Ganzes verlassen haben. Vaadin gibt die Schlüssel nur über das clientseitige &amp;lt;code&amp;gt;dropRows&amp;lt;/code&amp;gt; frei; nach einem allgemeinen &amp;lt;code&amp;gt;ItemSetChange&amp;lt;/code&amp;gt;, wie ihn &amp;lt;code&amp;gt;removeAllItems()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;addAll()&amp;lt;/code&amp;gt; auslösen, blieben sie im &amp;lt;code&amp;gt;KeyMapper&amp;lt;/code&amp;gt; stehen und hielten jede jemals angezeigte Zeile samt ihrem DTO-Graphen. &amp;lt;code&amp;gt;GridPresentation.CustomGrid&amp;lt;/code&amp;gt; merkt sich die vergebenen Schlüssel und entfernt die nicht mehr enthaltenen&lt;br /&gt;
** Fix: org.osbee.datainterchange: FreeMarkers gemeinsam genutzte &amp;lt;code&amp;gt;InvalidReferenceException&amp;lt;/code&amp;gt; hält nicht mehr den ersten Exportlauf fest. Die statische Instanz übernahm die zum Zeitpunkt ihres Entstehens aktive Umgebung und damit das gesamte Datenmodell des ersten Exports für die Lebensdauer des Prozesses. Der Activator lädt die Klasse nun einmal außerhalb eines Template-Laufs&lt;br /&gt;
** Fix: org.eclipse.osbp.display: Das Display-Servlet wird nicht mehr auf dem Thread registriert, der die Bundles startet. Die Registrierung veröffentlicht einen Dienst, und Declarative Services verarbeitet dieses Ereignis auf dem veröffentlichenden Thread; dort wartete der Start aller nachfolgenden Bundles, in einem Fall über 50 Sekunden („Getting a lock required more than 50000 ms“). Die Registrierung läuft nun auf einem eigenen Thread&lt;br /&gt;
** org.eclipse.osbp.runtime, org.eclipse.osbp.blob, org.eclipse.osbp.autowireHelper, org.eclipse.osbp.ecview.extension, org.eclipse.osbp.ecview.addons, org.eclipse.osbp.infogrid.model: Neue Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; für String-Attribute. Ein Attribut mit &amp;lt;code&amp;gt;key=&amp;quot;barcode&amp;quot; value=&amp;quot;QRCode-128&amp;quot;&amp;lt;/code&amp;gt; wird schreibgeschützt als Barcode-Bild angezeigt, das aus seinem Klartextwert erzeugt wird – im Dialog über &amp;lt;code&amp;gt;BlobComponent&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;BlobUploadComponent&amp;lt;/code&amp;gt; (letztere dann ohne Schaltflächen) und in Grid-Spalten über den Blob-Bildkonverter&lt;br /&gt;
** org.eclipse.osbp.authentication, org.eclipse.osbp.system.configuration, org.eclipse.osbp.blob: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* DSL:&lt;br /&gt;
** org.eclipse.osbp.xtext.table, org.eclipse.osbp.xtext.table.common: Für Attribute mit der Eigenschaft &amp;lt;code&amp;gt;barcode&amp;lt;/code&amp;gt; wird ein Barcode-Lookup generiert; eine String-Zelle wird als Barcode-Bild angezeigt, wenn das Lookup einen Barcode-Typ trägt&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** net.osbee.pos.tse: Aufrufer können die BSI-Zertifizierungs-ID der TSE abfragen. Die SE-API bietet &amp;lt;code&amp;gt;getCertificationId&amp;lt;/code&amp;gt; in beiden API-Versionen, keiner der beiden Adapter reichte den Aufruf bisher durch&lt;br /&gt;
** net.osbee.pos.tse, net.osbee.pos.rksv: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (&amp;lt;code&amp;gt;DetachedEntityRef&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** net.osbee.installer.allinone: Die virtuelle TSE (Mock) wird zusammen mit dem Abschnitt „cryptovision TSE“ installiert – '''ausgeschaltet'''. Einen eigenen Installer-Abschnitt gibt es dafür nicht. &amp;lt;code&amp;gt;tse-config.txt&amp;lt;/code&amp;gt; enthält die Connector-Zeile des Mocks als Kommentar sowie &amp;lt;code&amp;gt;mock.stateDir&amp;lt;/code&amp;gt; unter &amp;lt;code&amp;gt;&amp;amp;lt;INSTDIR&amp;amp;gt;	se�irtual-tse&amp;lt;/code&amp;gt;, damit der Mock nie auf das Laufwerk einer echten TSE schreibt. Ist bei der Installation keine TSE angeschlossen und wird die Rückfrage „Unable to find TSE drive“ mit Nein beantwortet, bleibt eine vorhandene Konfiguration unverändert; gibt es noch keine, wird eine angelegt, die nur den ausgeschalteten Mock enthält&lt;br /&gt;
** net.osbee.installer.allinone: '''Der Mock läuft ausschließlich mit &amp;lt;code&amp;gt;tse.api-version: &amp;quot;MOCK&amp;quot;&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;application.yml&amp;lt;/code&amp;gt;, und dieser Wert wird nur von Hand gesetzt''' – nicht mit &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, und der Installer setzt ihn nie (auch &amp;lt;code&amp;gt;-Dtse.api-version&amp;lt;/code&amp;gt; wird nicht mehr in &amp;lt;code&amp;gt;launch.bat&amp;lt;/code&amp;gt; geschrieben). Eine Kasse kann damit nicht versehentlich auf ein Gerät geraten, dessen Signaturen keine Fiskaldaten sind. Der Peripherie-Server macht die Connector-Zeile beim Start nur bei &amp;lt;code&amp;gt;MOCK&amp;lt;/code&amp;gt; aktiv und kommentiert sie bei jedem anderen Wert wieder aus (mit Datum und Grund, auch im Log); &amp;lt;code&amp;gt;VirtualTSE&amp;lt;/code&amp;gt; verweigert außerdem die eigene Erzeugung, solange der Server nicht mit &amp;lt;code&amp;gt;MOCK&amp;lt;/code&amp;gt; gestartet wurde. Mit &amp;lt;code&amp;gt;MOCK&amp;lt;/code&amp;gt; arbeitet der Server direkt auf SE-API 2; der Umweg über die automatische Erkennung, der den ersten Start um etwa zwei Minuten verlängerte, entfällt. &amp;lt;code&amp;gt;application.yml&amp;lt;/code&amp;gt; beschreibt die vier Werte&lt;br /&gt;
** net.osbee.installer.allinone: &amp;lt;code&amp;gt;tse/README.txt&amp;lt;/code&amp;gt; beschreibt Betrieb, Ein- und Ausschalten sowie die Fehlersimulation der virtuellen TSE&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** net.osbee.softwarefactory: &amp;lt;code&amp;gt;CLAUDE.md&amp;lt;/code&amp;gt; an den aktuellen Stand der Features angeglichen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Einführung der http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/restartService Seite. Damit können entweder Sessions gekillt oder der Service der Anwendung neu gestartet werden.&lt;br /&gt;
** Bei Nichterreichbarkeit der Datenbank wird die Anwendung beendet und der Fehlerstatus auf der Statusseite angezeigt.&lt;br /&gt;
** Das eingebettete &amp;lt;code&amp;gt;shiro-all-1.2.3.jar&amp;lt;/code&amp;gt; wurde durch &amp;lt;code&amp;gt;shiro-core&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; in Version 1.13.0 ersetzt. Damit sind CVE-2016-4437 (Remote Code Execution über das RememberMe-Cookie mit festem Schlüssel) und CVE-2019-12422 geschlossen. &amp;lt;code&amp;gt;encoder-1.2.3.jar&amp;lt;/code&amp;gt; kommt hinzu, weil &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; 1.13 &amp;lt;code&amp;gt;org.owasp.encoder&amp;lt;/code&amp;gt; zwingend importiert.&lt;br /&gt;
** Anmeldung: &lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm&amp;lt;/code&amp;gt; löst den Anmeldenamen vor jeder Abfrage in einen Distinguished Name auf. Active Directory akzeptiert für den Bind auch einen User Principal Name, beantwortet Abfragen damit aber mit LDAP-Fehler 34 (&amp;lt;code&amp;gt;invalidDNSyntax&amp;lt;/code&amp;gt;), sodass ein &amp;lt;code&amp;gt;userDnTemplate&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt; zwar anmeldete, dann aber an den Attributen scheiterte. &amp;lt;code&amp;gt;resolveUserDn&amp;lt;/code&amp;gt; sucht nun über &amp;lt;code&amp;gt;userPrincipalName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sAMAccountName&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;mail&amp;lt;/code&amp;gt;; die Suchbasis stammt aus dem RootDSE. Bestehende Vorlagen der Form &amp;lt;code&amp;gt;cn={0},ou=...&amp;lt;/code&amp;gt; verhalten sich unverändert. Zugleich behoben: eine &amp;lt;code&amp;gt;StringIndexOutOfBoundsException&amp;lt;/code&amp;gt; im E-Mail-Zweig und das Einsetzen des Benutzernamens in den Suchfilter per Verkettung (jetzt als &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt;, von JNDI maskiert)&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm.getUserDn&amp;lt;/code&amp;gt; maskierte nur das Komma. &amp;lt;code&amp;gt;escapeDnValue&amp;lt;/code&amp;gt; deckt nun alle Zeichen nach RFC 4514 Abschnitt 2.4 ab, sodass ein Benutzername die Bedeutung des DN nicht mehr verändern kann&lt;br /&gt;
*** Die Funktionalität „Angemeldet bleiben“ arbeitet nun mit einem signierten Token statt mit verschlüsselten Zugangsdaten. Das Cookie ist eine mit HMAC-SHA256 signierte Aussage über Benutzer, Mandant, Geltungsbereich, Ablaufdatum und Version und enthält keine Zugangsdaten. Es ist zustandslos, sodass beliebig viele Geräte und Browser gleichzeitig eines halten können.&lt;br /&gt;
*** Das „Angemeldet bleiben“-Cookie gilt je Anwendungsinstanz und Browser. Der Cookie-Name trägt einen Kurzhash über Schema, Host, Port, erstes Pfadsegment und Portal-ID, sodass zwei Anwendungen auf demselben Host nicht mehr das Cookie der jeweils anderen lesen. Die selbstgebaute Verschlüsselung entfällt vollständig. Das Cookie wird mit expliziter Lebensdauer, &amp;lt;code&amp;gt;SameSite=Lax&amp;lt;/code&amp;gt; und unter https mit &amp;lt;code&amp;gt;Secure&amp;lt;/code&amp;gt; geschrieben. Die Anmeldung aus einem Cookie wartet fünf Sekunden mit einem Hinweis auf der Anmeldemaske und lässt sich in dieser Zeit abbrechen; ein entferntes Häkchen löscht das Cookie nun in jedem Fall. Die Betrugsmeldung samt Kontosperre bei nicht passendem Cookie entfällt&lt;br /&gt;
*** Fix: Kennwörter erscheinen nicht mehr im Log – weder bei der Anmeldung in &amp;lt;code&amp;gt;AuthenticationProvider.check()&amp;lt;/code&amp;gt; (bisher im Klartext auf DEBUG) noch beim Zurücksetzen, wo der Nachrichtentext mit dem neuen Kennwort dreimal geschrieben wurde&lt;br /&gt;
*** Die Anzeige des neuen Kennworts auf der Anmeldemaske, wenn keine E-Mail versendet werden kann, ist nun eine konfigurierte Betriebsart: &amp;lt;code&amp;gt;Userinterface/showResetPasswordOnScreen&amp;lt;/code&amp;gt;, standardmäßig aus, mit Protokollierung auf WARN. '''Installationen ohne Mailserver müssen den Parameter einmalig setzen'''&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;doResetPassword&amp;lt;/code&amp;gt; hebt weder eine Sperre noch die Deaktivierung eines Kontos auf und setzt den Fehlversuchszähler nicht mehr zurück. Das Zurücksetzen kann jeder auslösen, der einen Benutzernamen eingibt; aufgehoben werden Sperre und Deaktivierung nur noch durch einen Administrator über &amp;lt;code&amp;gt;doUnlock&amp;lt;/code&amp;gt;&lt;br /&gt;
** System Configuration: &lt;br /&gt;
*** Parameter &amp;lt;code&amp;gt;RememberMeSecret&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;IConfigurationService&amp;lt;/code&amp;gt; ergänzt (&amp;lt;code&amp;gt;GLOBAL_PARAMETERS/RememberMeSecret&amp;lt;/code&amp;gt;). Der Schlüssel wird je Installation bei der ersten Benutzung der &amp;quot;RememberMe&amp;quot; Funktionalität einmal aus gezogen und von allen Anmeldungen geteilt; das Löschen des Eintrags macht alle „Angemeldet bleiben“-Cookies auf einmal ungültig.&lt;br /&gt;
*** Fix: Die Einstellungen füllten sich mit Platzhaltern „not set“. &amp;lt;code&amp;gt;ConfigurationService.getConfigurationString&amp;lt;/code&amp;gt; speicherte bei leerem Vorgabewert den Platzhalter und lieferte ihn als leere Zeichenkette zurück, sodass &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; stets eine weitere Zeile anhängte. &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; entfernt nun die Platzhalterzeilen des Schlüssels vor dem Schreiben, und ein gespeicherter Platzhalter gilt als „kein Wert“. &amp;lt;code&amp;gt;deleteConfigurations&amp;lt;/code&amp;gt; setzt zusätzlich den Cache zurück; gelöschte Einträge kamen bisher beim nächsten Lesen wieder&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Fix: org.eclipse.osbp.dependencies-mbp: Das Bundle &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.bundle.activemq.all.osgi&amp;lt;/code&amp;gt; enthält kein Log4j und kein eingebettetes slf4j mehr. &amp;lt;code&amp;gt;activemq-all&amp;lt;/code&amp;gt; brachte eine vollständige Kopie von Apache Log4j 1.2.17 mit (359 Klassen, darunter &amp;lt;code&amp;gt;JDBCAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSSink&amp;lt;/code&amp;gt; und chainsaw – betroffen von CVE-2021-4104, CVE-2022-23302, CVE-2022-23305 und CVE-2022-23307) sowie slf4j-api 1.7.13 und &amp;lt;code&amp;gt;slf4j-log4j12&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;Include-Resource&amp;lt;/code&amp;gt; bindet das Hersteller-Jar nun ohne &amp;lt;code&amp;gt;org.apache.log4j&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org.slf4j&amp;lt;/code&amp;gt;, deren Maven-Koordinaten, die &amp;lt;code&amp;gt;log4j.properties&amp;lt;/code&amp;gt; und Springs &amp;lt;code&amp;gt;Log4jConfigurer&amp;lt;/code&amp;gt; ein. ActiveMQ bezieht slf4j stattdessen aus dem Produkt (&amp;lt;code&amp;gt;org.slf4j.api&amp;lt;/code&amp;gt; 1.7.36)&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neue Dienststeuerungsseite unter &amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;. &lt;br /&gt;
*** Ein Bediener kann darüber – autorisiert durch eine reguläre Anwendungsanmeldung – hängende Sitzungen beenden oder den Dienst neu starten, ohne Zugriff auf den Serverrechner zu benötigen. Drei Stufen: Sitzungen des aufrufenden Arbeitsplatzes, alle Sitzungen, Neustart. Die Seite ist am Root-HTTP-Service registriert und bleibt damit erreichbar, wenn der Anwendungskontext selbst gestört ist; Markup, Stil, Skript und Texte (deutsch, englisch, französisch) sind deshalb in der Seite enthalten. Sitzungen werden über das Invalidieren der HTTP-Sitzung beendet. Der Neustart läuft über die Befehlswarteschlange der Anwendung; die Seite fragt anschließend die Anwendung ab und führt den Bediener über die Unterbrechung hinweg&lt;br /&gt;
*** Alle Aktionen der Dienststeuerungsseite werden im &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; unter denselben Koordinaten wie die Anmeldemaske protokolliert (fehlgeschlagene Anmeldung und Neustart als WARNING, gesperrtes Konto als ERROR, beendete Sitzungen als INFO). Eine abgelehnte Anmeldung sperrt das Formular für die Dauer der Wartezeit mit Countdown; der Zähler ist derselbe wie an der Anmeldemaske, sodass sich Fehlversuche auf beiden Wegen zur Kontosperre summieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260907 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Überarbeitung der Codebasis zur Entfernung veralteter und nicht benötigter Bundles&lt;br /&gt;
** Überarbeitung des Loginvorgangs / der Cookiespeicherung bei &amp;quot;remember me&amp;quot;. Es werden keine kritischen Daten mehr im Cookie gespeichert.&lt;br /&gt;
** Verbesserung der Übersetzungen&lt;br /&gt;
** Anpassungen für frz. Fiskalanforderungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Laden der Übersetzungen in die interne Tabelle beim Systemstart deutlich beschleunigt. Dadurch verbessertes Startverhalten der Anwendungen.&lt;br /&gt;
** Verbesserungen bei der frz. Tastaturunterstützung&lt;br /&gt;
** Verbesserungen der Übersetzungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260618 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Blockieren durch das Laden von Diensten während des Starts vermieden, dadurch schnellerer Anwendungsstart. Anderes Verhalten beim Start an der Benutzeroberfläche.&lt;br /&gt;
** Französische Tastaturunterstützung (AZERTY) im Keymapper der Statemachine ergänzt&lt;br /&gt;
** Login bezieht Build-Version und Hersteller nun aus den &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; (einheitliche Quelle)&lt;br /&gt;
** Neue gemeinsame Hilfsmethoden &amp;lt;code&amp;gt;getBuildVersion()&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;getVendor()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; zur Ermittlung der Build-Identität&lt;br /&gt;
** &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; setzt die Zeitstempel von &amp;lt;code&amp;gt;lastError&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;lastWarning&amp;lt;/code&amp;gt; nicht mehr zurück&lt;br /&gt;
** Fix: NPE in &amp;lt;code&amp;gt;org.eclipse.osbp.xtext.dialog.AutowireUiFactory&amp;lt;/code&amp;gt; behoben&lt;br /&gt;
** Version von 5.2.0 auf 5.3.0 angehoben&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-reverify&amp;lt;/code&amp;gt; (16px/32px) für die NF525-Schaltfläche zur erneuten Archivintegritätsprüfung&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-refresh.png&amp;lt;/code&amp;gt; ergänzt&lt;br /&gt;
** Grid – horizontale Bildlaufleiste wiederhergestellt&lt;br /&gt;
** Grid - Flex-Layout für Kassen-/POS-Grids wiederhergestellt (kollabierte Spalten behoben)&lt;br /&gt;
** französische Übersetzungen überarbeitet&lt;br /&gt;
&lt;br /&gt;
* Grammatiken/Generierung:&lt;br /&gt;
** org.eclipse.osbp.dsl: Benutzerdefinierte &amp;lt;code&amp;gt;@PreRemove&amp;lt;/code&amp;gt;-Hooks werden in der generierten &amp;lt;code&amp;gt;preRemove()&amp;lt;/code&amp;gt;-Methode zusammengeführt&lt;br /&gt;
** org.eclipse.osbp.xtext.i18n: i18n-Generator erzeugt nun das byte-genaue Eclipse-Babel-Format&lt;br /&gt;
&lt;br /&gt;
* POS Framework für franz. Fiskalanforderungen eingeführt&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260410 ==&lt;br /&gt;
&lt;br /&gt;
* POS Framework: &lt;br /&gt;
** Performanceverbesserung beim Kassieren&lt;br /&gt;
** Multi-Protokoll Unterstützung für Paymentterminal &lt;br /&gt;
*** frz. Protokolle &amp;quot;Concert&amp;quot;, &amp;quot;Protocol E&amp;quot;&lt;br /&gt;
*** &amp;quot;Mock&amp;quot; für Tests&lt;br /&gt;
*** Statemachine DSL erweitert: protocol Parameter für Paymentterminal&lt;br /&gt;
*** &amp;quot;Shared Payment Terminal&amp;quot;&lt;br /&gt;
**** locking im PaymentTerminalService implementiert&lt;br /&gt;
**** pro Terminal über ConfigService einstellbar&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260402 ==&lt;br /&gt;
&lt;br /&gt;
Die Version verbessert das Startverhalten einer Anwendung und bringt mehr Informationen über den Status des Starts auf den Bildschirm&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Anzeige des Persistenzservice-Status auf dem Login-Bildschirm&lt;br /&gt;
** Information über den Persistenzservice auf der Fehlerseite hinzugefügt&lt;br /&gt;
** Beim Start wird nun überall auf den Persistenzservice statt nur auf den ConfigurationService gewartet&lt;br /&gt;
&lt;br /&gt;
* BPM:&lt;br /&gt;
** Fix: net.osbee.bpm: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** Fix: net.osbee.pos.epay: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260305 ==&lt;br /&gt;
&lt;br /&gt;
=== Report Anzeige ===&lt;br /&gt;
&lt;br /&gt;
Diese Version konzentriert sich auf '''Stabilitätsverbesserungen''' für das Report-Rendering-System, insbesondere auf die Behebung von Race Conditions und Anzeigeproblemen, die bei schnellen Benutzerinteraktionen auftraten.&lt;br /&gt;
&lt;br /&gt;
* Race Condition beim Report-Rendering&lt;br /&gt;
** '''Behoben: Schnelles Auswählen/Abwählen führte dazu, dass Reports mit ungültigen oder fehlenden Filtern gerendert wurden'''&lt;br /&gt;
*** Reports verarbeiten nun korrekt wenn Benutzer schnell Elemente auswählen und wieder abwählen&lt;br /&gt;
*** Filteränderungen werden blockiert, während ein Render-Vorgang läuft&lt;br /&gt;
*** Ausstehende Filteränderungen werden nachverfolgt und nach Abschluss des Renderings erneut ausgewertet&lt;br /&gt;
*** Reports mit &amp;lt;code&amp;gt;selectById&amp;lt;/code&amp;gt; werden nun korrekt ausgeblendet, wenn nichts ausgewählt ist&lt;br /&gt;
&lt;br /&gt;
* PDF-Anzeigeskalierungsproblem &lt;br /&gt;
** '''Behoben: PDF-Skalierungsprobleme durch Neuerstellung des BrowserFrames bei jedem Rendering'''&lt;br /&gt;
&lt;br /&gt;
=== Anmeldebildschirm ===&lt;br /&gt;
&lt;br /&gt;
Der Anmeldebildschirm zeigt nun während der Initialisierung des Persistence-Services einen Statustext an.&lt;br /&gt;
&lt;br /&gt;
* Lauftext-Anzeige (Marquee) mit dem aktuellen Status des Persistence-Services&lt;br /&gt;
* Deaktivierung aller Anmeldesteuerelemente während der Wartezeit&lt;br /&gt;
&lt;br /&gt;
=== Start der Anwendung ===&lt;br /&gt;
&lt;br /&gt;
* Blockierungen der Initialisierungsvorgänge durch Warten auf Serviceregistrierung während des Anwendungsstarts reduziert. &amp;lt;br&amp;gt;Dadurch verändert sich das Startverhalten, insbesondere die Reihenfolge der Anwendung. Insgesamt schnelleres Laden der Bundles.&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4604</id>
		<title>Releasenotes 2026 OS.pos</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4604"/>
				<updated>2026-10-12T09:10:23Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Aktualisierungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261006 ==&lt;br /&gt;
&lt;br /&gt;
=== Neue Funktionen ===&lt;br /&gt;
* '''NF 525 – Neustart durch den Bediener im Ereignisjournal:''' Ein über die Dienststeuerungsseite (&amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;) ausgelöster Neustart wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben, mit dem auslösenden Bediener. Bisher zeigte das Journal nur „System gestoppt“ und „System gestartet“, nicht aber, wer den Neustart veranlasst hat.&lt;br /&gt;
&lt;br /&gt;
=== Fehlerbehebungen ===&lt;br /&gt;
* '''Speicherwachstum je Verkauf:''' Die DTOs von &amp;lt;code&amp;gt;net.osbee.app.pos.common&amp;lt;/code&amp;gt; wurden neu generiert und halten nur noch Klasse und ID ihrer Entität statt der Entität selbst. Zusammen mit den Korrekturen im Framework (siehe Releasenotes der Softwarefactory, Version 5.3.0.20261012) hält eine Kasse je Verkauf praktisch keinen Persistenzkontext mehr fest; vorher waren es rund 42 je Verkauf, etwa 1 MB.&lt;br /&gt;
* '''Kassenabschluss gibt seine Daten wieder frei:''' Nach dem Speichern eines Kassenabschlusses werden die dafür im Zustandsautomaten abgelegten Daten entfernt. Sie hielten über ihre Mapping-Kontexte alle Bons und Zahlungen der abgeschlossenen Periode bis zum nächsten Abschluss fest.&lt;br /&gt;
* '''NF 525 – Ereignisjournal:''' Beim Anhängen eines Eintrags wird nicht mehr das gesamte Journal gelesen, um dessen letzten Eintrag zu finden. Der Aufwand je Eintrag wuchs bisher mit der Länge des Journals.&lt;br /&gt;
* '''Webservice-Verfügbarkeitsprüfung über Mitternacht:''' Ein als nicht erreichbar vermerkter Webservice wurde nach Mitternacht zu spät oder gar nicht mehr erneut geprüft, weil der Zeitstempel als Millisekunden des Tages abgelegt war. Ein Ausfall um 20:00 Uhr hielt den Webservice bis 21:00 Uhr des Folgetags abgeschaltet, ein Ausfall ab 23:00 Uhr dauerhaft. Der Zeitstempel ist nun fortlaufend.&lt;br /&gt;
&lt;br /&gt;
=== Aktualisierungen ===&lt;br /&gt;
* '''Webservice-Verfügbarkeitsprüfung zusammengeführt:''' Die Prüfung existierte viermal (zweimal in &amp;lt;code&amp;gt;net.osbee.app.pos.common&amp;lt;/code&amp;gt;, zweimal in &amp;lt;code&amp;gt;net.osbee.sample.pos&amp;lt;/code&amp;gt;). Einzige Implementierung ist nun &amp;lt;code&amp;gt;WebService.check(sm, ws)&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;posbase&amp;lt;/code&amp;gt;; die übrigen delegieren dorthin. Der Zustand wird je Webservice in &amp;lt;code&amp;gt;ws.accesible&amp;lt;/code&amp;gt; geführt, der gemeinsame Speicherschlüssel entfällt.&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261006 ==&lt;br /&gt;
&lt;br /&gt;
* Ergänzung bei Kundenkartenverarbeitung&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260907 ==&lt;br /&gt;
&lt;br /&gt;
* Schwerpunkt dieses Zeitraums ist die französische Fiskalkonformität '''NF 525''' (WORM-Sicherungseinrichtung, Write-once-Nachweis, Geräte-Lebenszyklus) sowie die Auslagerung des '''DSFinV-K'''-Datenmodells. &lt;br /&gt;
&lt;br /&gt;
=== Änderungen / Neue Funktionen ===&lt;br /&gt;
&lt;br /&gt;
* '''Ausgeschlossene Zahlarten:''' Die Perspektive für ausgeschlossene Zahlungsarten wurde zur Kundenpflege verschoben.&lt;br /&gt;
* '''Benutzerverwaltung:''' Die automatische Synchronisierung der einzelnen views in der Benutzerverwaltungsperspektive wurde abgeschaltet.&lt;br /&gt;
* '''Authentifizierung:''' Die Authentifizierungs-Logger wurden zusammengefasst und schreiben wieder in eine Datei.&lt;br /&gt;
* '''remember me Anmeldefunktion:''' überarbeitet, Cookieverwendung sicherer gemacht.&lt;br /&gt;
* '''Kennwort vergessen?:''' Zurücksetzen des Kennworts löst eine Benutzersperre nicht mehr automatisch auf. Dies muss aktiv durch den Administrator geschehen.&lt;br /&gt;
* '''showResetPasswordOnScreen:''' neuer Konfigurationsschlüssel. Default: false. Bei true wird das neue Passwort im Log angezeigt, falls lein Mailserver kongiguriert ist.&lt;br /&gt;
&lt;br /&gt;
* '''NF 525 – WORM Write-once-Nachweis:''' Ein zertifiziertes WORM-Gerät darf Fiskalverkäufe erst nach einem signierten &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;-Verdikt tragen. Ein asynchroner Probe-Lauf weist die Write-once-Eigenschaft nach (das Medium nimmt eine Teständerung zurück); der Verdikt wird signiert und ist „sticky&amp;quot;. ''(cache-defeat probe, verbreiterte Signaturspalte)''&lt;br /&gt;
* '''NF 525 – Zertifizierungs-Gate:''' Auf einem zertifizierten Gerät führen Struktur-/Integritätsfehler zu einem harten Verkaufsstopp (STOP_SALES); auf einem nicht-zertifizierten Gerät wird die Anomalie nur als Warnung protokolliert (warn-only) und dem Kassierer als Hinweis am Verkauf angezeigt.&lt;br /&gt;
* '''NF 525 – Reaktivierung der Write-once-Bestätigung:''' Der zuvor pausierte Bestätigungs-Block wurde wieder aktiviert; der Scheduler führt ein zertifiziertes Gerät nun wieder von &amp;lt;code&amp;gt;PENDING&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''NF 525 – Schutz gegen Zertifizierungs-Downgrade:''' Eine bereits fiskalisch aktive, zertifizierte Kasse kann nicht mehr auf ein nicht-zertifiziertes oder entferntes Sicherungsgerät umgestellt werden (Geräte-Tausch), und ein zertifiziertes Gerät kann nicht mehr in-place ent-zertifiziert werden. Beide Wege werden abgewiesen (Umgehung der zertifizierten Durchsetzung verhindert).&lt;br /&gt;
* '''NF 525 – Auditierung von Geräte-Konfigurationsänderungen:''' Eine Änderung an der zertifizierungsrelevanten WORM-Konfiguration wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben.&lt;br /&gt;
* '''NF 525 – Retention/Archivierung beim Geräte-Tausch:''' Perioden ohne Fiskaldatensätze werden nicht mehr als leeres ZIP archiviert, sondern als schlanker „abgedeckt&amp;quot;-Marker vermerkt (kein Medium-Scan) – die „Gespeichert&amp;quot;-Rückmeldung nach einem Geräte-Tausch kommt dadurch deutlich schneller. Zum Abschluss wird eine Zusammenfassung protokolliert.&lt;br /&gt;
* '''NF 525 – Write-once-Probe:''' Die Anwesenheit der Probe-Datei wird nun über eine frische Verzeichnis-Enumeration gelesen (behebt eine Fehlerkennung durch veraltete Verzeichnis-Zwischenstände).&lt;br /&gt;
* '''Internationalisierung:''' Neue NF-525-WORM-Schlüssel (Write-once, worm_protection, warn-only) in das zentrale Übersetzungsbündel gespiegelt; allgemeine Vokabular-Erweiterungen.&lt;br /&gt;
* '''Rechnungsdruck (Invoice2p):''' NF-525-Daten in der Rechnungsvorlage berücksichtigt.&lt;br /&gt;
* '''Bondruck:''' NF-525-Daten ergänzt&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260907|Softwarefactory 5.2.0.20260907]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260707 ==&lt;br /&gt;
&lt;br /&gt;
Diese Ausgabe bringt vor allem die Unterstützung französischer Kassen voran: eine&lt;br /&gt;
vollständige AZERTY-Tastaturunterstützung (physisch und als Bildschirmtastatur), das&lt;br /&gt;
französische Zahlungsterminal-Protokoll CAISSE-AP inklusive Simulator sowie virtuelle&lt;br /&gt;
Peripheriegeräte für Test und Diagnose. Ergänzt wird dies durch NF525-Härtungen,&lt;br /&gt;
Fehlerbehebungen bei Kartenzahlungen und eine durchgängige Vereinheitlichung der&lt;br /&gt;
Übersetzungsdateien.&lt;br /&gt;
&lt;br /&gt;
* Die '''physische französische AZERTY-Tastatur''' wird nun vollständig unterstützt. Der komplette Zeichensatz wurde auf realer Hardware getestet; die zuvor fehlende '''ù-Taste''' wurde ergänzt.&lt;br /&gt;
* Die '''Bildschirmtastatur''' (On-Screen-Keypad) &lt;br /&gt;
** bildet nun eine echte französische AZERTY-Belegung über alle drei Ebenen ab (Grundebene, Umschalt, AltGr) inklusive Akzentkomposition über die Tottasten ^ und ¨.&lt;br /&gt;
** folgt jetzt '''einheitlich der Oberflächensprache''': Französisch → AZERTY, Englisch → englische Belegung, alle übrigen Sprachen → deutsches QWERTZ. Die Belegung wird beim Öffnen des Dialogs in der aktiven Sprache neu aufgebaut.&lt;br /&gt;
* Neue Konfiguration '''Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry''' zur Auswahl der physischen Tastaturbelegung je Kasse.&lt;br /&gt;
&lt;br /&gt;
* '''CAISSE-AP – französisches Zahlungsterminal'''&lt;br /&gt;
** Unterstützung des '''Tagesabschlusses (télécollecte)''' für Concert/CAISSE-AP-Terminals; die obligatorischen Felder CB und CE werden nun sowohl in der Abschluss- als auch in der Abbruch-Anfrage übertragen.&lt;br /&gt;
&lt;br /&gt;
* NF525 / Fiskalkonformität&lt;br /&gt;
** Die '''Persistierung des Grand-Totals''' ist nun zwingende Vorbedingung für die Signatur eines Belegs – verhindert eine Signatur bei unvollständig gespeichertem Umsatzzähler. ''(net.osbee.app.pos.common d5a4578ec)''&lt;br /&gt;
&lt;br /&gt;
* Kartenzahlung&lt;br /&gt;
** Eine Kartenzahlung kann nun korrekt '''storniert''' werden: das Belegfeld (receipt) wird aus dem CJ-Feld der Concert-Antwort befüllt.&lt;br /&gt;
** Das '''Löschen einer nicht stornierbaren Terminal-Zahlung''' wird blockiert, um inkonsistente Zustände zu vermeiden. &lt;br /&gt;
** setPaymentTerminalReversal stürzt bei einer fehlerhaften Anfrage nicht mehr ab. &lt;br /&gt;
&lt;br /&gt;
* Oberfläche / Internationalisierung ===&lt;br /&gt;
** Die '''Laufzeit-Sprachumschaltung''' funktioniert nun in der Kassierperspektive&lt;br /&gt;
** Zentrale Übersetzungen aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Systemvoraussetzungen ===&lt;br /&gt;
** Für den französischen Markt: Zahlungsterminal mit CAISSE-AP-/Concert-Protokoll (CB-Port 8888, konfigurierbae), physische AZERTY-Tastatur optional&lt;br /&gt;
** Konfiguration je Kasse über Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry und Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardLayout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260707|Softwarefactory 5.2.0.20260707]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260618 ==&lt;br /&gt;
&lt;br /&gt;
* Version von 5.2 auf 5.3&lt;br /&gt;
* frz. Fiskalanforderungen: erste Implementierung&lt;br /&gt;
* frz. Übersetzungen aktualisiert&lt;br /&gt;
* Verwendung frz. Tastatur in Kassiersicht&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260618|Softwarefactory 5.3.0.20260618]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260410 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Fix Performanceproblem ( eingeführt mit 4.5.7-V20260402 (OS) ), dbcaching Einstellungen&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260410|Softwarefactory 5.2.0.20260410]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260402 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Automatischer Wechsel zum Status &amp;lt;code&amp;gt;PAYMENTTERMINAL_REPEATRECEIPT&amp;lt;/code&amp;gt; im Modus 'store' (statt 'print') bei leeren Bonzeilen&lt;br /&gt;
** Neue Funktion &amp;lt;code&amp;gt;attachRemarks&amp;lt;/code&amp;gt; zum Zeichnen von Bonbemerkungen und deren Verknüpfung mit dem Kassenbon&lt;br /&gt;
** Möglichkeit zur Eingabe von freien Bemerkungen zum Kassenbon&lt;br /&gt;
** Bonbemerkungen: &amp;lt;code&amp;gt;observeFocus&amp;lt;/code&amp;gt; von remark1/2 an Events gebunden&lt;br /&gt;
&lt;br /&gt;
* Kassenkonfiguration:&lt;br /&gt;
** Menüeintrag für Stammdaten der Bonbemerkungen hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Neue Entitäten für Bonbemerkungen (SlipRemarks)&lt;br /&gt;
** Neue Spalten &amp;lt;code&amp;gt;remark_1&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;remark_2&amp;lt;/code&amp;gt; für CashSlip-Entität&lt;br /&gt;
** Dialoge, Tabellen und Perspektive für Bonbemerkungen implementiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7.20260305 (OS) ==&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260305|Softwarefactory 5.2.0.20260305]]&lt;br /&gt;
&lt;br /&gt;
* Berichtanzeige&lt;br /&gt;
** Fix: Probleme bei der Berichtsanzeige mit schneller Klickfolge in Auswahltabelle behoben.&lt;br /&gt;
&lt;br /&gt;
* Kassenschluss:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;determineCloseExpectation&amp;lt;/code&amp;gt; - Sortierung von CashPaymentTermData nach traceNumber absteigend, um den letzten Eintrag zu erhalten&lt;br /&gt;
&lt;br /&gt;
* Kassenentsorgung:&lt;br /&gt;
** Neues Systemprodukt &amp;quot;fee&amp;quot; aktiviert&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Einige Entitäten auf &amp;lt;code&amp;gt;cacheable=false&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
** Entitäten mit escaped Spaltennamen aktualisiert&lt;br /&gt;
** Generierte Entitäten und DTOs aktualisiert&lt;br /&gt;
** Entitäten mit neuem Service Framework aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;canUnparkSelected&amp;lt;/code&amp;gt; - Ablehnung eines Slips mit Zahlungen an einer SiS-Kasse&lt;br /&gt;
** Fix: PRINT_SLIP - &amp;lt;code&amp;gt;onOK&amp;lt;/code&amp;gt; verlässt nicht, wenn Slip änderbar ist&lt;br /&gt;
** Neue Eingabeaktion für MODIFY_FLD, setzt &amp;lt;code&amp;gt;cashposiupdate&amp;lt;/code&amp;gt; auf ausgewählte Position&lt;br /&gt;
&lt;br /&gt;
* Archivierung:&lt;br /&gt;
** &amp;lt;code&amp;gt;archivDescription xml-os&amp;lt;/code&amp;gt; für XML-Format der Beschreibungsdatei für Archiv hinzugefügt&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4603</id>
		<title>Releasenotes 2026 OS.pos</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4603"/>
				<updated>2026-10-12T09:09:20Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Fehlerbehebungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261006 ==&lt;br /&gt;
&lt;br /&gt;
=== Neue Funktionen ===&lt;br /&gt;
* '''NF 525 – Neustart durch den Bediener im Ereignisjournal:''' Ein über die Dienststeuerungsseite (&amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;) ausgelöster Neustart wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben, mit dem auslösenden Bediener. Bisher zeigte das Journal nur „System gestoppt“ und „System gestartet“, nicht aber, wer den Neustart veranlasst hat.&lt;br /&gt;
&lt;br /&gt;
=== Fehlerbehebungen ===&lt;br /&gt;
* '''Speicherwachstum je Verkauf:''' Die DTOs von &amp;lt;code&amp;gt;net.osbee.app.pos.common&amp;lt;/code&amp;gt; wurden neu generiert und halten nur noch Klasse und ID ihrer Entität statt der Entität selbst. Zusammen mit den Korrekturen im Framework (siehe Releasenotes der Softwarefactory, Version 5.3.0.20261012) hält eine Kasse je Verkauf praktisch keinen Persistenzkontext mehr fest; vorher waren es rund 42 je Verkauf, etwa 1 MB.&lt;br /&gt;
* '''Kassenabschluss gibt seine Daten wieder frei:''' Nach dem Speichern eines Kassenabschlusses werden die dafür im Zustandsautomaten abgelegten Daten entfernt. Sie hielten über ihre Mapping-Kontexte alle Bons und Zahlungen der abgeschlossenen Periode bis zum nächsten Abschluss fest.&lt;br /&gt;
* '''NF 525 – Ereignisjournal:''' Beim Anhängen eines Eintrags wird nicht mehr das gesamte Journal gelesen, um dessen letzten Eintrag zu finden. Der Aufwand je Eintrag wuchs bisher mit der Länge des Journals.&lt;br /&gt;
* '''Webservice-Verfügbarkeitsprüfung über Mitternacht:''' Ein als nicht erreichbar vermerkter Webservice wurde nach Mitternacht zu spät oder gar nicht mehr erneut geprüft, weil der Zeitstempel als Millisekunden des Tages abgelegt war. Ein Ausfall um 20:00 Uhr hielt den Webservice bis 21:00 Uhr des Folgetags abgeschaltet, ein Ausfall ab 23:00 Uhr dauerhaft. Der Zeitstempel ist nun fortlaufend.&lt;br /&gt;
&lt;br /&gt;
=== Aktualisierungen ===&lt;br /&gt;
* '''Webservice-Verfügbarkeitsprüfung zusammengeführt:''' Die Prüfung existierte viermal (zweimal in &amp;lt;code&amp;gt;net.osbee.app.pos.common&amp;lt;/code&amp;gt;, zweimal in &amp;lt;code&amp;gt;net.osbee.sample.pos&amp;lt;/code&amp;gt;). Einzige Implementierung ist nun &amp;lt;code&amp;gt;WebService.check(sm, ws)&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;posbase&amp;lt;/code&amp;gt;; die übrigen delegieren dorthin. Der Zustand wird je Webservice in &amp;lt;code&amp;gt;ws.accesible&amp;lt;/code&amp;gt; geführt, der gemeinsame Speicherschlüssel entfällt.&lt;br /&gt;
* '''Entitäten werden in der Entwicklungsumgebung auch bei inkrementellen Builds gewebt''' (&amp;lt;code&amp;gt;runOnIncremental&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;net.osbee.app.pos.common.entity/pom.xml&amp;lt;/code&amp;gt;). Eine ohne Weaving neu übersetzte Entität führt zu einem leeren Dialog und zu Fehlern bei der nächsten Aktualisierung.&lt;br /&gt;
* '''Nachweise zu den Speicherkorrekturen:''' Eigenständig lauffähige Tests unter &amp;lt;code&amp;gt;tools/&amp;lt;/code&amp;gt; – &amp;lt;code&amp;gt;finalizer-proof&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;detached-entity-ref&amp;lt;/code&amp;gt; (Verträglichkeit alter und neuer DTOs mit &amp;lt;code&amp;gt;dto.lib&amp;lt;/code&amp;gt;), &amp;lt;code&amp;gt;grid-key-leak&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;freemarker-pin&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''Dokumentation:''' &amp;lt;code&amp;gt;MEMORY_GROWTH_FINDING.md&amp;lt;/code&amp;gt; beschreibt Herkunft, Messwerte, verworfene Annahmen und Korrekturen des Speicherwachstums.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261006 ==&lt;br /&gt;
&lt;br /&gt;
* Ergänzung bei Kundenkartenverarbeitung&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260907 ==&lt;br /&gt;
&lt;br /&gt;
* Schwerpunkt dieses Zeitraums ist die französische Fiskalkonformität '''NF 525''' (WORM-Sicherungseinrichtung, Write-once-Nachweis, Geräte-Lebenszyklus) sowie die Auslagerung des '''DSFinV-K'''-Datenmodells. &lt;br /&gt;
&lt;br /&gt;
=== Änderungen / Neue Funktionen ===&lt;br /&gt;
&lt;br /&gt;
* '''Ausgeschlossene Zahlarten:''' Die Perspektive für ausgeschlossene Zahlungsarten wurde zur Kundenpflege verschoben.&lt;br /&gt;
* '''Benutzerverwaltung:''' Die automatische Synchronisierung der einzelnen views in der Benutzerverwaltungsperspektive wurde abgeschaltet.&lt;br /&gt;
* '''Authentifizierung:''' Die Authentifizierungs-Logger wurden zusammengefasst und schreiben wieder in eine Datei.&lt;br /&gt;
* '''remember me Anmeldefunktion:''' überarbeitet, Cookieverwendung sicherer gemacht.&lt;br /&gt;
* '''Kennwort vergessen?:''' Zurücksetzen des Kennworts löst eine Benutzersperre nicht mehr automatisch auf. Dies muss aktiv durch den Administrator geschehen.&lt;br /&gt;
* '''showResetPasswordOnScreen:''' neuer Konfigurationsschlüssel. Default: false. Bei true wird das neue Passwort im Log angezeigt, falls lein Mailserver kongiguriert ist.&lt;br /&gt;
&lt;br /&gt;
* '''NF 525 – WORM Write-once-Nachweis:''' Ein zertifiziertes WORM-Gerät darf Fiskalverkäufe erst nach einem signierten &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;-Verdikt tragen. Ein asynchroner Probe-Lauf weist die Write-once-Eigenschaft nach (das Medium nimmt eine Teständerung zurück); der Verdikt wird signiert und ist „sticky&amp;quot;. ''(cache-defeat probe, verbreiterte Signaturspalte)''&lt;br /&gt;
* '''NF 525 – Zertifizierungs-Gate:''' Auf einem zertifizierten Gerät führen Struktur-/Integritätsfehler zu einem harten Verkaufsstopp (STOP_SALES); auf einem nicht-zertifizierten Gerät wird die Anomalie nur als Warnung protokolliert (warn-only) und dem Kassierer als Hinweis am Verkauf angezeigt.&lt;br /&gt;
* '''NF 525 – Reaktivierung der Write-once-Bestätigung:''' Der zuvor pausierte Bestätigungs-Block wurde wieder aktiviert; der Scheduler führt ein zertifiziertes Gerät nun wieder von &amp;lt;code&amp;gt;PENDING&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''NF 525 – Schutz gegen Zertifizierungs-Downgrade:''' Eine bereits fiskalisch aktive, zertifizierte Kasse kann nicht mehr auf ein nicht-zertifiziertes oder entferntes Sicherungsgerät umgestellt werden (Geräte-Tausch), und ein zertifiziertes Gerät kann nicht mehr in-place ent-zertifiziert werden. Beide Wege werden abgewiesen (Umgehung der zertifizierten Durchsetzung verhindert).&lt;br /&gt;
* '''NF 525 – Auditierung von Geräte-Konfigurationsänderungen:''' Eine Änderung an der zertifizierungsrelevanten WORM-Konfiguration wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben.&lt;br /&gt;
* '''NF 525 – Retention/Archivierung beim Geräte-Tausch:''' Perioden ohne Fiskaldatensätze werden nicht mehr als leeres ZIP archiviert, sondern als schlanker „abgedeckt&amp;quot;-Marker vermerkt (kein Medium-Scan) – die „Gespeichert&amp;quot;-Rückmeldung nach einem Geräte-Tausch kommt dadurch deutlich schneller. Zum Abschluss wird eine Zusammenfassung protokolliert.&lt;br /&gt;
* '''NF 525 – Write-once-Probe:''' Die Anwesenheit der Probe-Datei wird nun über eine frische Verzeichnis-Enumeration gelesen (behebt eine Fehlerkennung durch veraltete Verzeichnis-Zwischenstände).&lt;br /&gt;
* '''Internationalisierung:''' Neue NF-525-WORM-Schlüssel (Write-once, worm_protection, warn-only) in das zentrale Übersetzungsbündel gespiegelt; allgemeine Vokabular-Erweiterungen.&lt;br /&gt;
* '''Rechnungsdruck (Invoice2p):''' NF-525-Daten in der Rechnungsvorlage berücksichtigt.&lt;br /&gt;
* '''Bondruck:''' NF-525-Daten ergänzt&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260907|Softwarefactory 5.2.0.20260907]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260707 ==&lt;br /&gt;
&lt;br /&gt;
Diese Ausgabe bringt vor allem die Unterstützung französischer Kassen voran: eine&lt;br /&gt;
vollständige AZERTY-Tastaturunterstützung (physisch und als Bildschirmtastatur), das&lt;br /&gt;
französische Zahlungsterminal-Protokoll CAISSE-AP inklusive Simulator sowie virtuelle&lt;br /&gt;
Peripheriegeräte für Test und Diagnose. Ergänzt wird dies durch NF525-Härtungen,&lt;br /&gt;
Fehlerbehebungen bei Kartenzahlungen und eine durchgängige Vereinheitlichung der&lt;br /&gt;
Übersetzungsdateien.&lt;br /&gt;
&lt;br /&gt;
* Die '''physische französische AZERTY-Tastatur''' wird nun vollständig unterstützt. Der komplette Zeichensatz wurde auf realer Hardware getestet; die zuvor fehlende '''ù-Taste''' wurde ergänzt.&lt;br /&gt;
* Die '''Bildschirmtastatur''' (On-Screen-Keypad) &lt;br /&gt;
** bildet nun eine echte französische AZERTY-Belegung über alle drei Ebenen ab (Grundebene, Umschalt, AltGr) inklusive Akzentkomposition über die Tottasten ^ und ¨.&lt;br /&gt;
** folgt jetzt '''einheitlich der Oberflächensprache''': Französisch → AZERTY, Englisch → englische Belegung, alle übrigen Sprachen → deutsches QWERTZ. Die Belegung wird beim Öffnen des Dialogs in der aktiven Sprache neu aufgebaut.&lt;br /&gt;
* Neue Konfiguration '''Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry''' zur Auswahl der physischen Tastaturbelegung je Kasse.&lt;br /&gt;
&lt;br /&gt;
* '''CAISSE-AP – französisches Zahlungsterminal'''&lt;br /&gt;
** Unterstützung des '''Tagesabschlusses (télécollecte)''' für Concert/CAISSE-AP-Terminals; die obligatorischen Felder CB und CE werden nun sowohl in der Abschluss- als auch in der Abbruch-Anfrage übertragen.&lt;br /&gt;
&lt;br /&gt;
* NF525 / Fiskalkonformität&lt;br /&gt;
** Die '''Persistierung des Grand-Totals''' ist nun zwingende Vorbedingung für die Signatur eines Belegs – verhindert eine Signatur bei unvollständig gespeichertem Umsatzzähler. ''(net.osbee.app.pos.common d5a4578ec)''&lt;br /&gt;
&lt;br /&gt;
* Kartenzahlung&lt;br /&gt;
** Eine Kartenzahlung kann nun korrekt '''storniert''' werden: das Belegfeld (receipt) wird aus dem CJ-Feld der Concert-Antwort befüllt.&lt;br /&gt;
** Das '''Löschen einer nicht stornierbaren Terminal-Zahlung''' wird blockiert, um inkonsistente Zustände zu vermeiden. &lt;br /&gt;
** setPaymentTerminalReversal stürzt bei einer fehlerhaften Anfrage nicht mehr ab. &lt;br /&gt;
&lt;br /&gt;
* Oberfläche / Internationalisierung ===&lt;br /&gt;
** Die '''Laufzeit-Sprachumschaltung''' funktioniert nun in der Kassierperspektive&lt;br /&gt;
** Zentrale Übersetzungen aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Systemvoraussetzungen ===&lt;br /&gt;
** Für den französischen Markt: Zahlungsterminal mit CAISSE-AP-/Concert-Protokoll (CB-Port 8888, konfigurierbae), physische AZERTY-Tastatur optional&lt;br /&gt;
** Konfiguration je Kasse über Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry und Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardLayout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260707|Softwarefactory 5.2.0.20260707]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260618 ==&lt;br /&gt;
&lt;br /&gt;
* Version von 5.2 auf 5.3&lt;br /&gt;
* frz. Fiskalanforderungen: erste Implementierung&lt;br /&gt;
* frz. Übersetzungen aktualisiert&lt;br /&gt;
* Verwendung frz. Tastatur in Kassiersicht&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260618|Softwarefactory 5.3.0.20260618]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260410 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Fix Performanceproblem ( eingeführt mit 4.5.7-V20260402 (OS) ), dbcaching Einstellungen&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260410|Softwarefactory 5.2.0.20260410]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260402 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Automatischer Wechsel zum Status &amp;lt;code&amp;gt;PAYMENTTERMINAL_REPEATRECEIPT&amp;lt;/code&amp;gt; im Modus 'store' (statt 'print') bei leeren Bonzeilen&lt;br /&gt;
** Neue Funktion &amp;lt;code&amp;gt;attachRemarks&amp;lt;/code&amp;gt; zum Zeichnen von Bonbemerkungen und deren Verknüpfung mit dem Kassenbon&lt;br /&gt;
** Möglichkeit zur Eingabe von freien Bemerkungen zum Kassenbon&lt;br /&gt;
** Bonbemerkungen: &amp;lt;code&amp;gt;observeFocus&amp;lt;/code&amp;gt; von remark1/2 an Events gebunden&lt;br /&gt;
&lt;br /&gt;
* Kassenkonfiguration:&lt;br /&gt;
** Menüeintrag für Stammdaten der Bonbemerkungen hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Neue Entitäten für Bonbemerkungen (SlipRemarks)&lt;br /&gt;
** Neue Spalten &amp;lt;code&amp;gt;remark_1&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;remark_2&amp;lt;/code&amp;gt; für CashSlip-Entität&lt;br /&gt;
** Dialoge, Tabellen und Perspektive für Bonbemerkungen implementiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7.20260305 (OS) ==&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260305|Softwarefactory 5.2.0.20260305]]&lt;br /&gt;
&lt;br /&gt;
* Berichtanzeige&lt;br /&gt;
** Fix: Probleme bei der Berichtsanzeige mit schneller Klickfolge in Auswahltabelle behoben.&lt;br /&gt;
&lt;br /&gt;
* Kassenschluss:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;determineCloseExpectation&amp;lt;/code&amp;gt; - Sortierung von CashPaymentTermData nach traceNumber absteigend, um den letzten Eintrag zu erhalten&lt;br /&gt;
&lt;br /&gt;
* Kassenentsorgung:&lt;br /&gt;
** Neues Systemprodukt &amp;quot;fee&amp;quot; aktiviert&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Einige Entitäten auf &amp;lt;code&amp;gt;cacheable=false&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
** Entitäten mit escaped Spaltennamen aktualisiert&lt;br /&gt;
** Generierte Entitäten und DTOs aktualisiert&lt;br /&gt;
** Entitäten mit neuem Service Framework aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;canUnparkSelected&amp;lt;/code&amp;gt; - Ablehnung eines Slips mit Zahlungen an einer SiS-Kasse&lt;br /&gt;
** Fix: PRINT_SLIP - &amp;lt;code&amp;gt;onOK&amp;lt;/code&amp;gt; verlässt nicht, wenn Slip änderbar ist&lt;br /&gt;
** Neue Eingabeaktion für MODIFY_FLD, setzt &amp;lt;code&amp;gt;cashposiupdate&amp;lt;/code&amp;gt; auf ausgewählte Position&lt;br /&gt;
&lt;br /&gt;
* Archivierung:&lt;br /&gt;
** &amp;lt;code&amp;gt;archivDescription xml-os&amp;lt;/code&amp;gt; für XML-Format der Beschreibungsdatei für Archiv hinzugefügt&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4602</id>
		<title>Releasenotes 2026 OS.pos</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4602"/>
				<updated>2026-10-12T09:07:15Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Neue Funktionen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261006 ==&lt;br /&gt;
&lt;br /&gt;
=== Neue Funktionen ===&lt;br /&gt;
* '''NF 525 – Neustart durch den Bediener im Ereignisjournal:''' Ein über die Dienststeuerungsseite (&amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;) ausgelöster Neustart wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben, mit dem auslösenden Bediener. Bisher zeigte das Journal nur „System gestoppt“ und „System gestartet“, nicht aber, wer den Neustart veranlasst hat.&lt;br /&gt;
&lt;br /&gt;
=== Fehlerbehebungen ===&lt;br /&gt;
* '''Speicherwachstum je Verkauf:''' Die DTOs von &amp;lt;code&amp;gt;net.osbee.app.pos.common&amp;lt;/code&amp;gt; wurden neu generiert und halten nur noch Klasse und ID ihrer Entität statt der Entität selbst. Zusammen mit den Korrekturen im Framework (siehe Releasenotes der Softwarefactory, Version 5.3.0.20261012) hält eine Kasse je Verkauf praktisch keinen Persistenzkontext mehr fest; vorher waren es rund 42 je Verkauf, etwa 1 MB. Nachgemessen in der Entwicklungsumgebung am 9. Oktober und an einer per Jenkins gebauten Installation am 12. Oktober (17 Verkäufe in zwei Messfenstern, Zähler im zweiten Fenster gleichbleibend bis fallend).&lt;br /&gt;
* '''Kassenabschluss gibt seine Daten wieder frei:''' Nach dem Speichern eines Kassenabschlusses werden die dafür im Zustandsautomaten abgelegten Daten (&amp;lt;code&amp;gt;expectedclose&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;todos&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lastfinished&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tobefinished&amp;lt;/code&amp;gt;) entfernt. Sie hielten über ihre Mapping-Kontexte alle Bons und Zahlungen der abgeschlossenen Periode bis zum nächsten Abschluss fest.&lt;br /&gt;
* '''NF 525 – Ereignisjournal:''' Beim Anhängen eines Eintrags wird nicht mehr das gesamte Journal gelesen, um dessen letzten Eintrag zu finden. Der Aufwand je Eintrag wuchs bisher mit der Länge des Journals.&lt;br /&gt;
* '''Webservice-Verfügbarkeitsprüfung über Mitternacht:''' Ein als nicht erreichbar vermerkter Webservice wurde nach Mitternacht zu spät oder gar nicht mehr erneut geprüft, weil der Zeitstempel als Millisekunden des Tages abgelegt war. Ein Ausfall um 20:00 Uhr hielt den Webservice bis 21:00 Uhr des Folgetags abgeschaltet, ein Ausfall ab 23:00 Uhr dauerhaft. Der Zeitstempel ist nun fortlaufend.&lt;br /&gt;
&lt;br /&gt;
=== Aktualisierungen ===&lt;br /&gt;
* '''Webservice-Verfügbarkeitsprüfung zusammengeführt:''' Die Prüfung existierte viermal (zweimal in &amp;lt;code&amp;gt;net.osbee.app.pos.common&amp;lt;/code&amp;gt;, zweimal in &amp;lt;code&amp;gt;net.osbee.sample.pos&amp;lt;/code&amp;gt;). Einzige Implementierung ist nun &amp;lt;code&amp;gt;WebService.check(sm, ws)&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;posbase&amp;lt;/code&amp;gt;; die übrigen delegieren dorthin. Der Zustand wird je Webservice in &amp;lt;code&amp;gt;ws.accesible&amp;lt;/code&amp;gt; geführt, der gemeinsame Speicherschlüssel entfällt.&lt;br /&gt;
* '''Entitäten werden in der Entwicklungsumgebung auch bei inkrementellen Builds gewebt''' (&amp;lt;code&amp;gt;runOnIncremental&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;net.osbee.app.pos.common.entity/pom.xml&amp;lt;/code&amp;gt;). Eine ohne Weaving neu übersetzte Entität führt zu einem leeren Dialog und zu Fehlern bei der nächsten Aktualisierung.&lt;br /&gt;
* '''Nachweise zu den Speicherkorrekturen:''' Eigenständig lauffähige Tests unter &amp;lt;code&amp;gt;tools/&amp;lt;/code&amp;gt; – &amp;lt;code&amp;gt;finalizer-proof&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;detached-entity-ref&amp;lt;/code&amp;gt; (Verträglichkeit alter und neuer DTOs mit &amp;lt;code&amp;gt;dto.lib&amp;lt;/code&amp;gt;), &amp;lt;code&amp;gt;grid-key-leak&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;freemarker-pin&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''Dokumentation:''' &amp;lt;code&amp;gt;MEMORY_GROWTH_FINDING.md&amp;lt;/code&amp;gt; beschreibt Herkunft, Messwerte, verworfene Annahmen und Korrekturen des Speicherwachstums.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261006 ==&lt;br /&gt;
&lt;br /&gt;
* Ergänzung bei Kundenkartenverarbeitung&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260907 ==&lt;br /&gt;
&lt;br /&gt;
* Schwerpunkt dieses Zeitraums ist die französische Fiskalkonformität '''NF 525''' (WORM-Sicherungseinrichtung, Write-once-Nachweis, Geräte-Lebenszyklus) sowie die Auslagerung des '''DSFinV-K'''-Datenmodells. &lt;br /&gt;
&lt;br /&gt;
=== Änderungen / Neue Funktionen ===&lt;br /&gt;
&lt;br /&gt;
* '''Ausgeschlossene Zahlarten:''' Die Perspektive für ausgeschlossene Zahlungsarten wurde zur Kundenpflege verschoben.&lt;br /&gt;
* '''Benutzerverwaltung:''' Die automatische Synchronisierung der einzelnen views in der Benutzerverwaltungsperspektive wurde abgeschaltet.&lt;br /&gt;
* '''Authentifizierung:''' Die Authentifizierungs-Logger wurden zusammengefasst und schreiben wieder in eine Datei.&lt;br /&gt;
* '''remember me Anmeldefunktion:''' überarbeitet, Cookieverwendung sicherer gemacht.&lt;br /&gt;
* '''Kennwort vergessen?:''' Zurücksetzen des Kennworts löst eine Benutzersperre nicht mehr automatisch auf. Dies muss aktiv durch den Administrator geschehen.&lt;br /&gt;
* '''showResetPasswordOnScreen:''' neuer Konfigurationsschlüssel. Default: false. Bei true wird das neue Passwort im Log angezeigt, falls lein Mailserver kongiguriert ist.&lt;br /&gt;
&lt;br /&gt;
* '''NF 525 – WORM Write-once-Nachweis:''' Ein zertifiziertes WORM-Gerät darf Fiskalverkäufe erst nach einem signierten &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;-Verdikt tragen. Ein asynchroner Probe-Lauf weist die Write-once-Eigenschaft nach (das Medium nimmt eine Teständerung zurück); der Verdikt wird signiert und ist „sticky&amp;quot;. ''(cache-defeat probe, verbreiterte Signaturspalte)''&lt;br /&gt;
* '''NF 525 – Zertifizierungs-Gate:''' Auf einem zertifizierten Gerät führen Struktur-/Integritätsfehler zu einem harten Verkaufsstopp (STOP_SALES); auf einem nicht-zertifizierten Gerät wird die Anomalie nur als Warnung protokolliert (warn-only) und dem Kassierer als Hinweis am Verkauf angezeigt.&lt;br /&gt;
* '''NF 525 – Reaktivierung der Write-once-Bestätigung:''' Der zuvor pausierte Bestätigungs-Block wurde wieder aktiviert; der Scheduler führt ein zertifiziertes Gerät nun wieder von &amp;lt;code&amp;gt;PENDING&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''NF 525 – Schutz gegen Zertifizierungs-Downgrade:''' Eine bereits fiskalisch aktive, zertifizierte Kasse kann nicht mehr auf ein nicht-zertifiziertes oder entferntes Sicherungsgerät umgestellt werden (Geräte-Tausch), und ein zertifiziertes Gerät kann nicht mehr in-place ent-zertifiziert werden. Beide Wege werden abgewiesen (Umgehung der zertifizierten Durchsetzung verhindert).&lt;br /&gt;
* '''NF 525 – Auditierung von Geräte-Konfigurationsänderungen:''' Eine Änderung an der zertifizierungsrelevanten WORM-Konfiguration wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben.&lt;br /&gt;
* '''NF 525 – Retention/Archivierung beim Geräte-Tausch:''' Perioden ohne Fiskaldatensätze werden nicht mehr als leeres ZIP archiviert, sondern als schlanker „abgedeckt&amp;quot;-Marker vermerkt (kein Medium-Scan) – die „Gespeichert&amp;quot;-Rückmeldung nach einem Geräte-Tausch kommt dadurch deutlich schneller. Zum Abschluss wird eine Zusammenfassung protokolliert.&lt;br /&gt;
* '''NF 525 – Write-once-Probe:''' Die Anwesenheit der Probe-Datei wird nun über eine frische Verzeichnis-Enumeration gelesen (behebt eine Fehlerkennung durch veraltete Verzeichnis-Zwischenstände).&lt;br /&gt;
* '''Internationalisierung:''' Neue NF-525-WORM-Schlüssel (Write-once, worm_protection, warn-only) in das zentrale Übersetzungsbündel gespiegelt; allgemeine Vokabular-Erweiterungen.&lt;br /&gt;
* '''Rechnungsdruck (Invoice2p):''' NF-525-Daten in der Rechnungsvorlage berücksichtigt.&lt;br /&gt;
* '''Bondruck:''' NF-525-Daten ergänzt&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260907|Softwarefactory 5.2.0.20260907]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260707 ==&lt;br /&gt;
&lt;br /&gt;
Diese Ausgabe bringt vor allem die Unterstützung französischer Kassen voran: eine&lt;br /&gt;
vollständige AZERTY-Tastaturunterstützung (physisch und als Bildschirmtastatur), das&lt;br /&gt;
französische Zahlungsterminal-Protokoll CAISSE-AP inklusive Simulator sowie virtuelle&lt;br /&gt;
Peripheriegeräte für Test und Diagnose. Ergänzt wird dies durch NF525-Härtungen,&lt;br /&gt;
Fehlerbehebungen bei Kartenzahlungen und eine durchgängige Vereinheitlichung der&lt;br /&gt;
Übersetzungsdateien.&lt;br /&gt;
&lt;br /&gt;
* Die '''physische französische AZERTY-Tastatur''' wird nun vollständig unterstützt. Der komplette Zeichensatz wurde auf realer Hardware getestet; die zuvor fehlende '''ù-Taste''' wurde ergänzt.&lt;br /&gt;
* Die '''Bildschirmtastatur''' (On-Screen-Keypad) &lt;br /&gt;
** bildet nun eine echte französische AZERTY-Belegung über alle drei Ebenen ab (Grundebene, Umschalt, AltGr) inklusive Akzentkomposition über die Tottasten ^ und ¨.&lt;br /&gt;
** folgt jetzt '''einheitlich der Oberflächensprache''': Französisch → AZERTY, Englisch → englische Belegung, alle übrigen Sprachen → deutsches QWERTZ. Die Belegung wird beim Öffnen des Dialogs in der aktiven Sprache neu aufgebaut.&lt;br /&gt;
* Neue Konfiguration '''Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry''' zur Auswahl der physischen Tastaturbelegung je Kasse.&lt;br /&gt;
&lt;br /&gt;
* '''CAISSE-AP – französisches Zahlungsterminal'''&lt;br /&gt;
** Unterstützung des '''Tagesabschlusses (télécollecte)''' für Concert/CAISSE-AP-Terminals; die obligatorischen Felder CB und CE werden nun sowohl in der Abschluss- als auch in der Abbruch-Anfrage übertragen.&lt;br /&gt;
&lt;br /&gt;
* NF525 / Fiskalkonformität&lt;br /&gt;
** Die '''Persistierung des Grand-Totals''' ist nun zwingende Vorbedingung für die Signatur eines Belegs – verhindert eine Signatur bei unvollständig gespeichertem Umsatzzähler. ''(net.osbee.app.pos.common d5a4578ec)''&lt;br /&gt;
&lt;br /&gt;
* Kartenzahlung&lt;br /&gt;
** Eine Kartenzahlung kann nun korrekt '''storniert''' werden: das Belegfeld (receipt) wird aus dem CJ-Feld der Concert-Antwort befüllt.&lt;br /&gt;
** Das '''Löschen einer nicht stornierbaren Terminal-Zahlung''' wird blockiert, um inkonsistente Zustände zu vermeiden. &lt;br /&gt;
** setPaymentTerminalReversal stürzt bei einer fehlerhaften Anfrage nicht mehr ab. &lt;br /&gt;
&lt;br /&gt;
* Oberfläche / Internationalisierung ===&lt;br /&gt;
** Die '''Laufzeit-Sprachumschaltung''' funktioniert nun in der Kassierperspektive&lt;br /&gt;
** Zentrale Übersetzungen aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Systemvoraussetzungen ===&lt;br /&gt;
** Für den französischen Markt: Zahlungsterminal mit CAISSE-AP-/Concert-Protokoll (CB-Port 8888, konfigurierbae), physische AZERTY-Tastatur optional&lt;br /&gt;
** Konfiguration je Kasse über Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry und Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardLayout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260707|Softwarefactory 5.2.0.20260707]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260618 ==&lt;br /&gt;
&lt;br /&gt;
* Version von 5.2 auf 5.3&lt;br /&gt;
* frz. Fiskalanforderungen: erste Implementierung&lt;br /&gt;
* frz. Übersetzungen aktualisiert&lt;br /&gt;
* Verwendung frz. Tastatur in Kassiersicht&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260618|Softwarefactory 5.3.0.20260618]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260410 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Fix Performanceproblem ( eingeführt mit 4.5.7-V20260402 (OS) ), dbcaching Einstellungen&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260410|Softwarefactory 5.2.0.20260410]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260402 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Automatischer Wechsel zum Status &amp;lt;code&amp;gt;PAYMENTTERMINAL_REPEATRECEIPT&amp;lt;/code&amp;gt; im Modus 'store' (statt 'print') bei leeren Bonzeilen&lt;br /&gt;
** Neue Funktion &amp;lt;code&amp;gt;attachRemarks&amp;lt;/code&amp;gt; zum Zeichnen von Bonbemerkungen und deren Verknüpfung mit dem Kassenbon&lt;br /&gt;
** Möglichkeit zur Eingabe von freien Bemerkungen zum Kassenbon&lt;br /&gt;
** Bonbemerkungen: &amp;lt;code&amp;gt;observeFocus&amp;lt;/code&amp;gt; von remark1/2 an Events gebunden&lt;br /&gt;
&lt;br /&gt;
* Kassenkonfiguration:&lt;br /&gt;
** Menüeintrag für Stammdaten der Bonbemerkungen hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Neue Entitäten für Bonbemerkungen (SlipRemarks)&lt;br /&gt;
** Neue Spalten &amp;lt;code&amp;gt;remark_1&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;remark_2&amp;lt;/code&amp;gt; für CashSlip-Entität&lt;br /&gt;
** Dialoge, Tabellen und Perspektive für Bonbemerkungen implementiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7.20260305 (OS) ==&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260305|Softwarefactory 5.2.0.20260305]]&lt;br /&gt;
&lt;br /&gt;
* Berichtanzeige&lt;br /&gt;
** Fix: Probleme bei der Berichtsanzeige mit schneller Klickfolge in Auswahltabelle behoben.&lt;br /&gt;
&lt;br /&gt;
* Kassenschluss:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;determineCloseExpectation&amp;lt;/code&amp;gt; - Sortierung von CashPaymentTermData nach traceNumber absteigend, um den letzten Eintrag zu erhalten&lt;br /&gt;
&lt;br /&gt;
* Kassenentsorgung:&lt;br /&gt;
** Neues Systemprodukt &amp;quot;fee&amp;quot; aktiviert&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Einige Entitäten auf &amp;lt;code&amp;gt;cacheable=false&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
** Entitäten mit escaped Spaltennamen aktualisiert&lt;br /&gt;
** Generierte Entitäten und DTOs aktualisiert&lt;br /&gt;
** Entitäten mit neuem Service Framework aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;canUnparkSelected&amp;lt;/code&amp;gt; - Ablehnung eines Slips mit Zahlungen an einer SiS-Kasse&lt;br /&gt;
** Fix: PRINT_SLIP - &amp;lt;code&amp;gt;onOK&amp;lt;/code&amp;gt; verlässt nicht, wenn Slip änderbar ist&lt;br /&gt;
** Neue Eingabeaktion für MODIFY_FLD, setzt &amp;lt;code&amp;gt;cashposiupdate&amp;lt;/code&amp;gt; auf ausgewählte Position&lt;br /&gt;
&lt;br /&gt;
* Archivierung:&lt;br /&gt;
** &amp;lt;code&amp;gt;archivDescription xml-os&amp;lt;/code&amp;gt; für XML-Format der Beschreibungsdatei für Archiv hinzugefügt&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4601</id>
		<title>Releasenotes 2026 OS.pos</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4601"/>
				<updated>2026-10-12T09:06:40Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261006 ==&lt;br /&gt;
&lt;br /&gt;
=== Neue Funktionen ===&lt;br /&gt;
* '''NF 525 – Neustart durch den Bediener im Ereignisjournal:''' Ein über die Dienststeuerungsseite (&amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;) ausgelöster Neustart wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben, mit dem auslösenden Bediener. Bisher zeigte das Journal nur „System gestoppt“ und „System gestartet“, nicht aber, wer den Neustart veranlasst hat.&lt;br /&gt;
* '''Speicher-Snapshot für den Kassendienst:''' Neues Werkzeug &amp;lt;code&amp;gt;tools/memory-snapshot&amp;lt;/code&amp;gt; zur Weitergabe an Kunden. Es nimmt am selben Tag zwei Messungen desselben Prozesses (morgens und abends) und zeigt, was nach einer vollständigen Garbage Collection noch gehalten wird; der Vergleich benennt, welche Objektarten zwischen zwei Messungen gewachsen sind. Die Größe im Task-Manager sagt dazu nichts aus, weil der Dienst seinen Speicher beim Start reserviert.&lt;br /&gt;
* '''Prüfung einer Installation vor der Messung:''' &amp;lt;code&amp;gt;tools/detached-entity-ref/verify-install.ps1&amp;lt;/code&amp;gt; prüft lesend, ob eine installierte Kasse die Speicherkorrekturen tatsächlich enthält (Stand von &amp;lt;code&amp;gt;dto.lib&amp;lt;/code&amp;gt;, Schalter, Anzahl der neu generierten DTOs je Bundle).&lt;br /&gt;
&lt;br /&gt;
=== Fehlerbehebungen ===&lt;br /&gt;
* '''Speicherwachstum je Verkauf:''' Die DTOs von &amp;lt;code&amp;gt;net.osbee.app.pos.common&amp;lt;/code&amp;gt; wurden neu generiert und halten nur noch Klasse und ID ihrer Entität statt der Entität selbst. Zusammen mit den Korrekturen im Framework (siehe Releasenotes der Softwarefactory, Version 5.3.0.20261012) hält eine Kasse je Verkauf praktisch keinen Persistenzkontext mehr fest; vorher waren es rund 42 je Verkauf, etwa 1 MB. Nachgemessen in der Entwicklungsumgebung am 9. Oktober und an einer per Jenkins gebauten Installation am 12. Oktober (17 Verkäufe in zwei Messfenstern, Zähler im zweiten Fenster gleichbleibend bis fallend).&lt;br /&gt;
* '''Kassenabschluss gibt seine Daten wieder frei:''' Nach dem Speichern eines Kassenabschlusses werden die dafür im Zustandsautomaten abgelegten Daten (&amp;lt;code&amp;gt;expectedclose&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;todos&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lastfinished&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tobefinished&amp;lt;/code&amp;gt;) entfernt. Sie hielten über ihre Mapping-Kontexte alle Bons und Zahlungen der abgeschlossenen Periode bis zum nächsten Abschluss fest.&lt;br /&gt;
* '''NF 525 – Ereignisjournal:''' Beim Anhängen eines Eintrags wird nicht mehr das gesamte Journal gelesen, um dessen letzten Eintrag zu finden. Der Aufwand je Eintrag wuchs bisher mit der Länge des Journals.&lt;br /&gt;
* '''Webservice-Verfügbarkeitsprüfung über Mitternacht:''' Ein als nicht erreichbar vermerkter Webservice wurde nach Mitternacht zu spät oder gar nicht mehr erneut geprüft, weil der Zeitstempel als Millisekunden des Tages abgelegt war. Ein Ausfall um 20:00 Uhr hielt den Webservice bis 21:00 Uhr des Folgetags abgeschaltet, ein Ausfall ab 23:00 Uhr dauerhaft. Der Zeitstempel ist nun fortlaufend.&lt;br /&gt;
&lt;br /&gt;
=== Aktualisierungen ===&lt;br /&gt;
* '''Webservice-Verfügbarkeitsprüfung zusammengeführt:''' Die Prüfung existierte viermal (zweimal in &amp;lt;code&amp;gt;net.osbee.app.pos.common&amp;lt;/code&amp;gt;, zweimal in &amp;lt;code&amp;gt;net.osbee.sample.pos&amp;lt;/code&amp;gt;). Einzige Implementierung ist nun &amp;lt;code&amp;gt;WebService.check(sm, ws)&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;posbase&amp;lt;/code&amp;gt;; die übrigen delegieren dorthin. Der Zustand wird je Webservice in &amp;lt;code&amp;gt;ws.accesible&amp;lt;/code&amp;gt; geführt, der gemeinsame Speicherschlüssel entfällt.&lt;br /&gt;
* '''Entitäten werden in der Entwicklungsumgebung auch bei inkrementellen Builds gewebt''' (&amp;lt;code&amp;gt;runOnIncremental&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;net.osbee.app.pos.common.entity/pom.xml&amp;lt;/code&amp;gt;). Eine ohne Weaving neu übersetzte Entität führt zu einem leeren Dialog und zu Fehlern bei der nächsten Aktualisierung.&lt;br /&gt;
* '''Nachweise zu den Speicherkorrekturen:''' Eigenständig lauffähige Tests unter &amp;lt;code&amp;gt;tools/&amp;lt;/code&amp;gt; – &amp;lt;code&amp;gt;finalizer-proof&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;detached-entity-ref&amp;lt;/code&amp;gt; (Verträglichkeit alter und neuer DTOs mit &amp;lt;code&amp;gt;dto.lib&amp;lt;/code&amp;gt;), &amp;lt;code&amp;gt;grid-key-leak&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;freemarker-pin&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''Dokumentation:''' &amp;lt;code&amp;gt;MEMORY_GROWTH_FINDING.md&amp;lt;/code&amp;gt; beschreibt Herkunft, Messwerte, verworfene Annahmen und Korrekturen des Speicherwachstums.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20261006 ==&lt;br /&gt;
&lt;br /&gt;
* Ergänzung bei Kundenkartenverarbeitung&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260907 ==&lt;br /&gt;
&lt;br /&gt;
* Schwerpunkt dieses Zeitraums ist die französische Fiskalkonformität '''NF 525''' (WORM-Sicherungseinrichtung, Write-once-Nachweis, Geräte-Lebenszyklus) sowie die Auslagerung des '''DSFinV-K'''-Datenmodells. &lt;br /&gt;
&lt;br /&gt;
=== Änderungen / Neue Funktionen ===&lt;br /&gt;
&lt;br /&gt;
* '''Ausgeschlossene Zahlarten:''' Die Perspektive für ausgeschlossene Zahlungsarten wurde zur Kundenpflege verschoben.&lt;br /&gt;
* '''Benutzerverwaltung:''' Die automatische Synchronisierung der einzelnen views in der Benutzerverwaltungsperspektive wurde abgeschaltet.&lt;br /&gt;
* '''Authentifizierung:''' Die Authentifizierungs-Logger wurden zusammengefasst und schreiben wieder in eine Datei.&lt;br /&gt;
* '''remember me Anmeldefunktion:''' überarbeitet, Cookieverwendung sicherer gemacht.&lt;br /&gt;
* '''Kennwort vergessen?:''' Zurücksetzen des Kennworts löst eine Benutzersperre nicht mehr automatisch auf. Dies muss aktiv durch den Administrator geschehen.&lt;br /&gt;
* '''showResetPasswordOnScreen:''' neuer Konfigurationsschlüssel. Default: false. Bei true wird das neue Passwort im Log angezeigt, falls lein Mailserver kongiguriert ist.&lt;br /&gt;
&lt;br /&gt;
* '''NF 525 – WORM Write-once-Nachweis:''' Ein zertifiziertes WORM-Gerät darf Fiskalverkäufe erst nach einem signierten &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;-Verdikt tragen. Ein asynchroner Probe-Lauf weist die Write-once-Eigenschaft nach (das Medium nimmt eine Teständerung zurück); der Verdikt wird signiert und ist „sticky&amp;quot;. ''(cache-defeat probe, verbreiterte Signaturspalte)''&lt;br /&gt;
* '''NF 525 – Zertifizierungs-Gate:''' Auf einem zertifizierten Gerät führen Struktur-/Integritätsfehler zu einem harten Verkaufsstopp (STOP_SALES); auf einem nicht-zertifizierten Gerät wird die Anomalie nur als Warnung protokolliert (warn-only) und dem Kassierer als Hinweis am Verkauf angezeigt.&lt;br /&gt;
* '''NF 525 – Reaktivierung der Write-once-Bestätigung:''' Der zuvor pausierte Bestätigungs-Block wurde wieder aktiviert; der Scheduler führt ein zertifiziertes Gerät nun wieder von &amp;lt;code&amp;gt;PENDING&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''NF 525 – Schutz gegen Zertifizierungs-Downgrade:''' Eine bereits fiskalisch aktive, zertifizierte Kasse kann nicht mehr auf ein nicht-zertifiziertes oder entferntes Sicherungsgerät umgestellt werden (Geräte-Tausch), und ein zertifiziertes Gerät kann nicht mehr in-place ent-zertifiziert werden. Beide Wege werden abgewiesen (Umgehung der zertifizierten Durchsetzung verhindert).&lt;br /&gt;
* '''NF 525 – Auditierung von Geräte-Konfigurationsänderungen:''' Eine Änderung an der zertifizierungsrelevanten WORM-Konfiguration wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben.&lt;br /&gt;
* '''NF 525 – Retention/Archivierung beim Geräte-Tausch:''' Perioden ohne Fiskaldatensätze werden nicht mehr als leeres ZIP archiviert, sondern als schlanker „abgedeckt&amp;quot;-Marker vermerkt (kein Medium-Scan) – die „Gespeichert&amp;quot;-Rückmeldung nach einem Geräte-Tausch kommt dadurch deutlich schneller. Zum Abschluss wird eine Zusammenfassung protokolliert.&lt;br /&gt;
* '''NF 525 – Write-once-Probe:''' Die Anwesenheit der Probe-Datei wird nun über eine frische Verzeichnis-Enumeration gelesen (behebt eine Fehlerkennung durch veraltete Verzeichnis-Zwischenstände).&lt;br /&gt;
* '''Internationalisierung:''' Neue NF-525-WORM-Schlüssel (Write-once, worm_protection, warn-only) in das zentrale Übersetzungsbündel gespiegelt; allgemeine Vokabular-Erweiterungen.&lt;br /&gt;
* '''Rechnungsdruck (Invoice2p):''' NF-525-Daten in der Rechnungsvorlage berücksichtigt.&lt;br /&gt;
* '''Bondruck:''' NF-525-Daten ergänzt&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260907|Softwarefactory 5.2.0.20260907]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260707 ==&lt;br /&gt;
&lt;br /&gt;
Diese Ausgabe bringt vor allem die Unterstützung französischer Kassen voran: eine&lt;br /&gt;
vollständige AZERTY-Tastaturunterstützung (physisch und als Bildschirmtastatur), das&lt;br /&gt;
französische Zahlungsterminal-Protokoll CAISSE-AP inklusive Simulator sowie virtuelle&lt;br /&gt;
Peripheriegeräte für Test und Diagnose. Ergänzt wird dies durch NF525-Härtungen,&lt;br /&gt;
Fehlerbehebungen bei Kartenzahlungen und eine durchgängige Vereinheitlichung der&lt;br /&gt;
Übersetzungsdateien.&lt;br /&gt;
&lt;br /&gt;
* Die '''physische französische AZERTY-Tastatur''' wird nun vollständig unterstützt. Der komplette Zeichensatz wurde auf realer Hardware getestet; die zuvor fehlende '''ù-Taste''' wurde ergänzt.&lt;br /&gt;
* Die '''Bildschirmtastatur''' (On-Screen-Keypad) &lt;br /&gt;
** bildet nun eine echte französische AZERTY-Belegung über alle drei Ebenen ab (Grundebene, Umschalt, AltGr) inklusive Akzentkomposition über die Tottasten ^ und ¨.&lt;br /&gt;
** folgt jetzt '''einheitlich der Oberflächensprache''': Französisch → AZERTY, Englisch → englische Belegung, alle übrigen Sprachen → deutsches QWERTZ. Die Belegung wird beim Öffnen des Dialogs in der aktiven Sprache neu aufgebaut.&lt;br /&gt;
* Neue Konfiguration '''Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry''' zur Auswahl der physischen Tastaturbelegung je Kasse.&lt;br /&gt;
&lt;br /&gt;
* '''CAISSE-AP – französisches Zahlungsterminal'''&lt;br /&gt;
** Unterstützung des '''Tagesabschlusses (télécollecte)''' für Concert/CAISSE-AP-Terminals; die obligatorischen Felder CB und CE werden nun sowohl in der Abschluss- als auch in der Abbruch-Anfrage übertragen.&lt;br /&gt;
&lt;br /&gt;
* NF525 / Fiskalkonformität&lt;br /&gt;
** Die '''Persistierung des Grand-Totals''' ist nun zwingende Vorbedingung für die Signatur eines Belegs – verhindert eine Signatur bei unvollständig gespeichertem Umsatzzähler. ''(net.osbee.app.pos.common d5a4578ec)''&lt;br /&gt;
&lt;br /&gt;
* Kartenzahlung&lt;br /&gt;
** Eine Kartenzahlung kann nun korrekt '''storniert''' werden: das Belegfeld (receipt) wird aus dem CJ-Feld der Concert-Antwort befüllt.&lt;br /&gt;
** Das '''Löschen einer nicht stornierbaren Terminal-Zahlung''' wird blockiert, um inkonsistente Zustände zu vermeiden. &lt;br /&gt;
** setPaymentTerminalReversal stürzt bei einer fehlerhaften Anfrage nicht mehr ab. &lt;br /&gt;
&lt;br /&gt;
* Oberfläche / Internationalisierung ===&lt;br /&gt;
** Die '''Laufzeit-Sprachumschaltung''' funktioniert nun in der Kassierperspektive&lt;br /&gt;
** Zentrale Übersetzungen aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Systemvoraussetzungen ===&lt;br /&gt;
** Für den französischen Markt: Zahlungsterminal mit CAISSE-AP-/Concert-Protokoll (CB-Port 8888, konfigurierbae), physische AZERTY-Tastatur optional&lt;br /&gt;
** Konfiguration je Kasse über Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry und Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardLayout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260707|Softwarefactory 5.2.0.20260707]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260618 ==&lt;br /&gt;
&lt;br /&gt;
* Version von 5.2 auf 5.3&lt;br /&gt;
* frz. Fiskalanforderungen: erste Implementierung&lt;br /&gt;
* frz. Übersetzungen aktualisiert&lt;br /&gt;
* Verwendung frz. Tastatur in Kassiersicht&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260618|Softwarefactory 5.3.0.20260618]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260410 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Fix Performanceproblem ( eingeführt mit 4.5.7-V20260402 (OS) ), dbcaching Einstellungen&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260410|Softwarefactory 5.2.0.20260410]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260402 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Automatischer Wechsel zum Status &amp;lt;code&amp;gt;PAYMENTTERMINAL_REPEATRECEIPT&amp;lt;/code&amp;gt; im Modus 'store' (statt 'print') bei leeren Bonzeilen&lt;br /&gt;
** Neue Funktion &amp;lt;code&amp;gt;attachRemarks&amp;lt;/code&amp;gt; zum Zeichnen von Bonbemerkungen und deren Verknüpfung mit dem Kassenbon&lt;br /&gt;
** Möglichkeit zur Eingabe von freien Bemerkungen zum Kassenbon&lt;br /&gt;
** Bonbemerkungen: &amp;lt;code&amp;gt;observeFocus&amp;lt;/code&amp;gt; von remark1/2 an Events gebunden&lt;br /&gt;
&lt;br /&gt;
* Kassenkonfiguration:&lt;br /&gt;
** Menüeintrag für Stammdaten der Bonbemerkungen hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Neue Entitäten für Bonbemerkungen (SlipRemarks)&lt;br /&gt;
** Neue Spalten &amp;lt;code&amp;gt;remark_1&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;remark_2&amp;lt;/code&amp;gt; für CashSlip-Entität&lt;br /&gt;
** Dialoge, Tabellen und Perspektive für Bonbemerkungen implementiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7.20260305 (OS) ==&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260305|Softwarefactory 5.2.0.20260305]]&lt;br /&gt;
&lt;br /&gt;
* Berichtanzeige&lt;br /&gt;
** Fix: Probleme bei der Berichtsanzeige mit schneller Klickfolge in Auswahltabelle behoben.&lt;br /&gt;
&lt;br /&gt;
* Kassenschluss:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;determineCloseExpectation&amp;lt;/code&amp;gt; - Sortierung von CashPaymentTermData nach traceNumber absteigend, um den letzten Eintrag zu erhalten&lt;br /&gt;
&lt;br /&gt;
* Kassenentsorgung:&lt;br /&gt;
** Neues Systemprodukt &amp;quot;fee&amp;quot; aktiviert&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Einige Entitäten auf &amp;lt;code&amp;gt;cacheable=false&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
** Entitäten mit escaped Spaltennamen aktualisiert&lt;br /&gt;
** Generierte Entitäten und DTOs aktualisiert&lt;br /&gt;
** Entitäten mit neuem Service Framework aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;canUnparkSelected&amp;lt;/code&amp;gt; - Ablehnung eines Slips mit Zahlungen an einer SiS-Kasse&lt;br /&gt;
** Fix: PRINT_SLIP - &amp;lt;code&amp;gt;onOK&amp;lt;/code&amp;gt; verlässt nicht, wenn Slip änderbar ist&lt;br /&gt;
** Neue Eingabeaktion für MODIFY_FLD, setzt &amp;lt;code&amp;gt;cashposiupdate&amp;lt;/code&amp;gt; auf ausgewählte Position&lt;br /&gt;
&lt;br /&gt;
* Archivierung:&lt;br /&gt;
** &amp;lt;code&amp;gt;archivDescription xml-os&amp;lt;/code&amp;gt; für XML-Format der Beschreibungsdatei für Archiv hinzugefügt&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4600</id>
		<title>Releasenotes 2026 OS.pos</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4600"/>
				<updated>2026-10-06T12:41:48Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* Ergänzung bei Kundenkartenverarbeitung&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260907 ==&lt;br /&gt;
&lt;br /&gt;
* Schwerpunkt dieses Zeitraums ist die französische Fiskalkonformität '''NF 525''' (WORM-Sicherungseinrichtung, Write-once-Nachweis, Geräte-Lebenszyklus) sowie die Auslagerung des '''DSFinV-K'''-Datenmodells. &lt;br /&gt;
&lt;br /&gt;
=== Änderungen / Neue Funktionen ===&lt;br /&gt;
&lt;br /&gt;
* '''Ausgeschlossene Zahlarten:''' Die Perspektive für ausgeschlossene Zahlungsarten wurde zur Kundenpflege verschoben.&lt;br /&gt;
* '''Benutzerverwaltung:''' Die automatische Synchronisierung der einzelnen views in der Benutzerverwaltungsperspektive wurde abgeschaltet.&lt;br /&gt;
* '''Authentifizierung:''' Die Authentifizierungs-Logger wurden zusammengefasst und schreiben wieder in eine Datei.&lt;br /&gt;
* '''remember me Anmeldefunktion:''' überarbeitet, Cookieverwendung sicherer gemacht.&lt;br /&gt;
* '''Kennwort vergessen?:''' Zurücksetzen des Kennworts löst eine Benutzersperre nicht mehr automatisch auf. Dies muss aktiv durch den Administrator geschehen.&lt;br /&gt;
* '''showResetPasswordOnScreen:''' neuer Konfigurationsschlüssel. Default: false. Bei true wird das neue Passwort im Log angezeigt, falls lein Mailserver kongiguriert ist.&lt;br /&gt;
&lt;br /&gt;
* '''NF 525 – WORM Write-once-Nachweis:''' Ein zertifiziertes WORM-Gerät darf Fiskalverkäufe erst nach einem signierten &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;-Verdikt tragen. Ein asynchroner Probe-Lauf weist die Write-once-Eigenschaft nach (das Medium nimmt eine Teständerung zurück); der Verdikt wird signiert und ist „sticky&amp;quot;. ''(cache-defeat probe, verbreiterte Signaturspalte)''&lt;br /&gt;
* '''NF 525 – Zertifizierungs-Gate:''' Auf einem zertifizierten Gerät führen Struktur-/Integritätsfehler zu einem harten Verkaufsstopp (STOP_SALES); auf einem nicht-zertifizierten Gerät wird die Anomalie nur als Warnung protokolliert (warn-only) und dem Kassierer als Hinweis am Verkauf angezeigt.&lt;br /&gt;
* '''NF 525 – Reaktivierung der Write-once-Bestätigung:''' Der zuvor pausierte Bestätigungs-Block wurde wieder aktiviert; der Scheduler führt ein zertifiziertes Gerät nun wieder von &amp;lt;code&amp;gt;PENDING&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''NF 525 – Schutz gegen Zertifizierungs-Downgrade:''' Eine bereits fiskalisch aktive, zertifizierte Kasse kann nicht mehr auf ein nicht-zertifiziertes oder entferntes Sicherungsgerät umgestellt werden (Geräte-Tausch), und ein zertifiziertes Gerät kann nicht mehr in-place ent-zertifiziert werden. Beide Wege werden abgewiesen (Umgehung der zertifizierten Durchsetzung verhindert).&lt;br /&gt;
* '''NF 525 – Auditierung von Geräte-Konfigurationsänderungen:''' Eine Änderung an der zertifizierungsrelevanten WORM-Konfiguration wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben.&lt;br /&gt;
* '''NF 525 – Retention/Archivierung beim Geräte-Tausch:''' Perioden ohne Fiskaldatensätze werden nicht mehr als leeres ZIP archiviert, sondern als schlanker „abgedeckt&amp;quot;-Marker vermerkt (kein Medium-Scan) – die „Gespeichert&amp;quot;-Rückmeldung nach einem Geräte-Tausch kommt dadurch deutlich schneller. Zum Abschluss wird eine Zusammenfassung protokolliert.&lt;br /&gt;
* '''NF 525 – Write-once-Probe:''' Die Anwesenheit der Probe-Datei wird nun über eine frische Verzeichnis-Enumeration gelesen (behebt eine Fehlerkennung durch veraltete Verzeichnis-Zwischenstände).&lt;br /&gt;
* '''Internationalisierung:''' Neue NF-525-WORM-Schlüssel (Write-once, worm_protection, warn-only) in das zentrale Übersetzungsbündel gespiegelt; allgemeine Vokabular-Erweiterungen.&lt;br /&gt;
* '''Rechnungsdruck (Invoice2p):''' NF-525-Daten in der Rechnungsvorlage berücksichtigt.&lt;br /&gt;
* '''Bondruck:''' NF-525-Daten ergänzt&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260907|Softwarefactory 5.2.0.20260907]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260707 ==&lt;br /&gt;
&lt;br /&gt;
Diese Ausgabe bringt vor allem die Unterstützung französischer Kassen voran: eine&lt;br /&gt;
vollständige AZERTY-Tastaturunterstützung (physisch und als Bildschirmtastatur), das&lt;br /&gt;
französische Zahlungsterminal-Protokoll CAISSE-AP inklusive Simulator sowie virtuelle&lt;br /&gt;
Peripheriegeräte für Test und Diagnose. Ergänzt wird dies durch NF525-Härtungen,&lt;br /&gt;
Fehlerbehebungen bei Kartenzahlungen und eine durchgängige Vereinheitlichung der&lt;br /&gt;
Übersetzungsdateien.&lt;br /&gt;
&lt;br /&gt;
* Die '''physische französische AZERTY-Tastatur''' wird nun vollständig unterstützt. Der komplette Zeichensatz wurde auf realer Hardware getestet; die zuvor fehlende '''ù-Taste''' wurde ergänzt.&lt;br /&gt;
* Die '''Bildschirmtastatur''' (On-Screen-Keypad) &lt;br /&gt;
** bildet nun eine echte französische AZERTY-Belegung über alle drei Ebenen ab (Grundebene, Umschalt, AltGr) inklusive Akzentkomposition über die Tottasten ^ und ¨.&lt;br /&gt;
** folgt jetzt '''einheitlich der Oberflächensprache''': Französisch → AZERTY, Englisch → englische Belegung, alle übrigen Sprachen → deutsches QWERTZ. Die Belegung wird beim Öffnen des Dialogs in der aktiven Sprache neu aufgebaut.&lt;br /&gt;
* Neue Konfiguration '''Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry''' zur Auswahl der physischen Tastaturbelegung je Kasse.&lt;br /&gt;
&lt;br /&gt;
* '''CAISSE-AP – französisches Zahlungsterminal'''&lt;br /&gt;
** Unterstützung des '''Tagesabschlusses (télécollecte)''' für Concert/CAISSE-AP-Terminals; die obligatorischen Felder CB und CE werden nun sowohl in der Abschluss- als auch in der Abbruch-Anfrage übertragen.&lt;br /&gt;
&lt;br /&gt;
* NF525 / Fiskalkonformität&lt;br /&gt;
** Die '''Persistierung des Grand-Totals''' ist nun zwingende Vorbedingung für die Signatur eines Belegs – verhindert eine Signatur bei unvollständig gespeichertem Umsatzzähler. ''(net.osbee.app.pos.common d5a4578ec)''&lt;br /&gt;
&lt;br /&gt;
* Kartenzahlung&lt;br /&gt;
** Eine Kartenzahlung kann nun korrekt '''storniert''' werden: das Belegfeld (receipt) wird aus dem CJ-Feld der Concert-Antwort befüllt.&lt;br /&gt;
** Das '''Löschen einer nicht stornierbaren Terminal-Zahlung''' wird blockiert, um inkonsistente Zustände zu vermeiden. &lt;br /&gt;
** setPaymentTerminalReversal stürzt bei einer fehlerhaften Anfrage nicht mehr ab. &lt;br /&gt;
&lt;br /&gt;
* Oberfläche / Internationalisierung ===&lt;br /&gt;
** Die '''Laufzeit-Sprachumschaltung''' funktioniert nun in der Kassierperspektive&lt;br /&gt;
** Zentrale Übersetzungen aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Systemvoraussetzungen ===&lt;br /&gt;
** Für den französischen Markt: Zahlungsterminal mit CAISSE-AP-/Concert-Protokoll (CB-Port 8888, konfigurierbae), physische AZERTY-Tastatur optional&lt;br /&gt;
** Konfiguration je Kasse über Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry und Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardLayout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260707|Softwarefactory 5.2.0.20260707]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260618 ==&lt;br /&gt;
&lt;br /&gt;
* Version von 5.2 auf 5.3&lt;br /&gt;
* frz. Fiskalanforderungen: erste Implementierung&lt;br /&gt;
* frz. Übersetzungen aktualisiert&lt;br /&gt;
* Verwendung frz. Tastatur in Kassiersicht&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260618|Softwarefactory 5.3.0.20260618]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260410 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Fix Performanceproblem ( eingeführt mit 4.5.7-V20260402 (OS) ), dbcaching Einstellungen&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260410|Softwarefactory 5.2.0.20260410]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260402 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Automatischer Wechsel zum Status &amp;lt;code&amp;gt;PAYMENTTERMINAL_REPEATRECEIPT&amp;lt;/code&amp;gt; im Modus 'store' (statt 'print') bei leeren Bonzeilen&lt;br /&gt;
** Neue Funktion &amp;lt;code&amp;gt;attachRemarks&amp;lt;/code&amp;gt; zum Zeichnen von Bonbemerkungen und deren Verknüpfung mit dem Kassenbon&lt;br /&gt;
** Möglichkeit zur Eingabe von freien Bemerkungen zum Kassenbon&lt;br /&gt;
** Bonbemerkungen: &amp;lt;code&amp;gt;observeFocus&amp;lt;/code&amp;gt; von remark1/2 an Events gebunden&lt;br /&gt;
&lt;br /&gt;
* Kassenkonfiguration:&lt;br /&gt;
** Menüeintrag für Stammdaten der Bonbemerkungen hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Neue Entitäten für Bonbemerkungen (SlipRemarks)&lt;br /&gt;
** Neue Spalten &amp;lt;code&amp;gt;remark_1&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;remark_2&amp;lt;/code&amp;gt; für CashSlip-Entität&lt;br /&gt;
** Dialoge, Tabellen und Perspektive für Bonbemerkungen implementiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7.20260305 (OS) ==&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260305|Softwarefactory 5.2.0.20260305]]&lt;br /&gt;
&lt;br /&gt;
* Berichtanzeige&lt;br /&gt;
** Fix: Probleme bei der Berichtsanzeige mit schneller Klickfolge in Auswahltabelle behoben.&lt;br /&gt;
&lt;br /&gt;
* Kassenschluss:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;determineCloseExpectation&amp;lt;/code&amp;gt; - Sortierung von CashPaymentTermData nach traceNumber absteigend, um den letzten Eintrag zu erhalten&lt;br /&gt;
&lt;br /&gt;
* Kassenentsorgung:&lt;br /&gt;
** Neues Systemprodukt &amp;quot;fee&amp;quot; aktiviert&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Einige Entitäten auf &amp;lt;code&amp;gt;cacheable=false&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
** Entitäten mit escaped Spaltennamen aktualisiert&lt;br /&gt;
** Generierte Entitäten und DTOs aktualisiert&lt;br /&gt;
** Entitäten mit neuem Service Framework aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;canUnparkSelected&amp;lt;/code&amp;gt; - Ablehnung eines Slips mit Zahlungen an einer SiS-Kasse&lt;br /&gt;
** Fix: PRINT_SLIP - &amp;lt;code&amp;gt;onOK&amp;lt;/code&amp;gt; verlässt nicht, wenn Slip änderbar ist&lt;br /&gt;
** Neue Eingabeaktion für MODIFY_FLD, setzt &amp;lt;code&amp;gt;cashposiupdate&amp;lt;/code&amp;gt; auf ausgewählte Position&lt;br /&gt;
&lt;br /&gt;
* Archivierung:&lt;br /&gt;
** &amp;lt;code&amp;gt;archivDescription xml-os&amp;lt;/code&amp;gt; für XML-Format der Beschreibungsdatei für Archiv hinzugefügt&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4599</id>
		<title>Releasenotes 2026 OS.Interchange</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4599"/>
				<updated>2026-10-06T12:39:15Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Version 5.2.0.20261006 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260707 OS.Softwarefactory 5.3.20260707] und früher&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4598</id>
		<title>Releasenotes 2026 OS.Interchange</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4598"/>
				<updated>2026-10-06T12:38:31Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20261006 OS.Softwarefactory 5.3.20261006] und früher&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260707 OS.Softwarefactory 5.3.20260707] und früher&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4597</id>
		<title>Releasenotes 2026 OS.Softwarefactory</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4597"/>
				<updated>2026-10-06T12:37:11Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20261006 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Einführung der http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/restartService Seite. Damit können entweder Sessions gekillt oder der Service der Anwendung neu gestartet werden.&lt;br /&gt;
** Bei Nichterreichbarkeit der Datenbank wird die Anwendung beendet und der Fehlerstatus auf der Statusseite angezeigt.&lt;br /&gt;
** Das eingebettete &amp;lt;code&amp;gt;shiro-all-1.2.3.jar&amp;lt;/code&amp;gt; wurde durch &amp;lt;code&amp;gt;shiro-core&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; in Version 1.13.0 ersetzt. Damit sind CVE-2016-4437 (Remote Code Execution über das RememberMe-Cookie mit festem Schlüssel) und CVE-2019-12422 geschlossen. &amp;lt;code&amp;gt;encoder-1.2.3.jar&amp;lt;/code&amp;gt; kommt hinzu, weil &amp;lt;code&amp;gt;shiro-web&amp;lt;/code&amp;gt; 1.13 &amp;lt;code&amp;gt;org.owasp.encoder&amp;lt;/code&amp;gt; zwingend importiert.&lt;br /&gt;
** Anmeldung: &lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm&amp;lt;/code&amp;gt; löst den Anmeldenamen vor jeder Abfrage in einen Distinguished Name auf. Active Directory akzeptiert für den Bind auch einen User Principal Name, beantwortet Abfragen damit aber mit LDAP-Fehler 34 (&amp;lt;code&amp;gt;invalidDNSyntax&amp;lt;/code&amp;gt;), sodass ein &amp;lt;code&amp;gt;userDnTemplate&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt; zwar anmeldete, dann aber an den Attributen scheiterte. &amp;lt;code&amp;gt;resolveUserDn&amp;lt;/code&amp;gt; sucht nun über &amp;lt;code&amp;gt;userPrincipalName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sAMAccountName&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;mail&amp;lt;/code&amp;gt;; die Suchbasis stammt aus dem RootDSE. Bestehende Vorlagen der Form &amp;lt;code&amp;gt;cn={0},ou=...&amp;lt;/code&amp;gt; verhalten sich unverändert. Zugleich behoben: eine &amp;lt;code&amp;gt;StringIndexOutOfBoundsException&amp;lt;/code&amp;gt; im E-Mail-Zweig und das Einsetzen des Benutzernamens in den Suchfilter per Verkettung (jetzt als &amp;lt;code&amp;gt;{0}&amp;lt;/code&amp;gt;, von JNDI maskiert)&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;LDAPRealm.getUserDn&amp;lt;/code&amp;gt; maskierte nur das Komma. &amp;lt;code&amp;gt;escapeDnValue&amp;lt;/code&amp;gt; deckt nun alle Zeichen nach RFC 4514 Abschnitt 2.4 ab, sodass ein Benutzername die Bedeutung des DN nicht mehr verändern kann&lt;br /&gt;
*** Die Funktionalität „Angemeldet bleiben“ arbeitet nun mit einem signierten Token statt mit verschlüsselten Zugangsdaten. Das Cookie ist eine mit HMAC-SHA256 signierte Aussage über Benutzer, Mandant, Geltungsbereich, Ablaufdatum und Version und enthält keine Zugangsdaten. Es ist zustandslos, sodass beliebig viele Geräte und Browser gleichzeitig eines halten können.&lt;br /&gt;
*** Das „Angemeldet bleiben“-Cookie gilt je Anwendungsinstanz und Browser. Der Cookie-Name trägt einen Kurzhash über Schema, Host, Port, erstes Pfadsegment und Portal-ID, sodass zwei Anwendungen auf demselben Host nicht mehr das Cookie der jeweils anderen lesen. Die selbstgebaute Verschlüsselung entfällt vollständig. Das Cookie wird mit expliziter Lebensdauer, &amp;lt;code&amp;gt;SameSite=Lax&amp;lt;/code&amp;gt; und unter https mit &amp;lt;code&amp;gt;Secure&amp;lt;/code&amp;gt; geschrieben. Die Anmeldung aus einem Cookie wartet fünf Sekunden mit einem Hinweis auf der Anmeldemaske und lässt sich in dieser Zeit abbrechen; ein entferntes Häkchen löscht das Cookie nun in jedem Fall. Die Betrugsmeldung samt Kontosperre bei nicht passendem Cookie entfällt&lt;br /&gt;
*** Fix: Kennwörter erscheinen nicht mehr im Log – weder bei der Anmeldung in &amp;lt;code&amp;gt;AuthenticationProvider.check()&amp;lt;/code&amp;gt; (bisher im Klartext auf DEBUG) noch beim Zurücksetzen, wo der Nachrichtentext mit dem neuen Kennwort dreimal geschrieben wurde&lt;br /&gt;
*** Die Anzeige des neuen Kennworts auf der Anmeldemaske, wenn keine E-Mail versendet werden kann, ist nun eine konfigurierte Betriebsart: &amp;lt;code&amp;gt;Userinterface/showResetPasswordOnScreen&amp;lt;/code&amp;gt;, standardmäßig aus, mit Protokollierung auf WARN. '''Installationen ohne Mailserver müssen den Parameter einmalig setzen'''&lt;br /&gt;
*** Fix: &amp;lt;code&amp;gt;doResetPassword&amp;lt;/code&amp;gt; hebt weder eine Sperre noch die Deaktivierung eines Kontos auf und setzt den Fehlversuchszähler nicht mehr zurück. Das Zurücksetzen kann jeder auslösen, der einen Benutzernamen eingibt; aufgehoben werden Sperre und Deaktivierung nur noch durch einen Administrator über &amp;lt;code&amp;gt;doUnlock&amp;lt;/code&amp;gt;&lt;br /&gt;
** System Configuration: &lt;br /&gt;
*** Parameter &amp;lt;code&amp;gt;RememberMeSecret&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;IConfigurationService&amp;lt;/code&amp;gt; ergänzt (&amp;lt;code&amp;gt;GLOBAL_PARAMETERS/RememberMeSecret&amp;lt;/code&amp;gt;). Der Schlüssel wird je Installation bei der ersten Benutzung der &amp;quot;RememberMe&amp;quot; Funktionalität einmal aus gezogen und von allen Anmeldungen geteilt; das Löschen des Eintrags macht alle „Angemeldet bleiben“-Cookies auf einmal ungültig.&lt;br /&gt;
*** Fix: Die Einstellungen füllten sich mit Platzhaltern „not set“. &amp;lt;code&amp;gt;ConfigurationService.getConfigurationString&amp;lt;/code&amp;gt; speicherte bei leerem Vorgabewert den Platzhalter und lieferte ihn als leere Zeichenkette zurück, sodass &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; stets eine weitere Zeile anhängte. &amp;lt;code&amp;gt;addConfiguration&amp;lt;/code&amp;gt; entfernt nun die Platzhalterzeilen des Schlüssels vor dem Schreiben, und ein gespeicherter Platzhalter gilt als „kein Wert“. &amp;lt;code&amp;gt;deleteConfigurations&amp;lt;/code&amp;gt; setzt zusätzlich den Cache zurück; gelöschte Einträge kamen bisher beim nächsten Lesen wieder&lt;br /&gt;
&lt;br /&gt;
* Build &amp;amp; Infrastruktur:&lt;br /&gt;
** Fix: org.eclipse.osbp.dependencies-mbp: Das Bundle &amp;lt;code&amp;gt;org.eclipse.osbp.dependencies.bundle.activemq.all.osgi&amp;lt;/code&amp;gt; enthält kein Log4j und kein eingebettetes slf4j mehr. &amp;lt;code&amp;gt;activemq-all&amp;lt;/code&amp;gt; brachte eine vollständige Kopie von Apache Log4j 1.2.17 mit (359 Klassen, darunter &amp;lt;code&amp;gt;JDBCAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSAppender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;JMSSink&amp;lt;/code&amp;gt; und chainsaw – betroffen von CVE-2021-4104, CVE-2022-23302, CVE-2022-23305 und CVE-2022-23307) sowie slf4j-api 1.7.13 und &amp;lt;code&amp;gt;slf4j-log4j12&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;Include-Resource&amp;lt;/code&amp;gt; bindet das Hersteller-Jar nun ohne &amp;lt;code&amp;gt;org.apache.log4j&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org.slf4j&amp;lt;/code&amp;gt;, deren Maven-Koordinaten, die &amp;lt;code&amp;gt;log4j.properties&amp;lt;/code&amp;gt; und Springs &amp;lt;code&amp;gt;Log4jConfigurer&amp;lt;/code&amp;gt; ein. ActiveMQ bezieht slf4j stattdessen aus dem Produkt (&amp;lt;code&amp;gt;org.slf4j.api&amp;lt;/code&amp;gt; 1.7.36)&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neue Dienststeuerungsseite unter &amp;lt;code&amp;gt;/restartService&amp;lt;/code&amp;gt;. &lt;br /&gt;
*** Ein Bediener kann darüber – autorisiert durch eine reguläre Anwendungsanmeldung – hängende Sitzungen beenden oder den Dienst neu starten, ohne Zugriff auf den Serverrechner zu benötigen. Drei Stufen: Sitzungen des aufrufenden Arbeitsplatzes, alle Sitzungen, Neustart. Die Seite ist am Root-HTTP-Service registriert und bleibt damit erreichbar, wenn der Anwendungskontext selbst gestört ist; Markup, Stil, Skript und Texte (deutsch, englisch, französisch) sind deshalb in der Seite enthalten. Sitzungen werden über das Invalidieren der HTTP-Sitzung beendet. Der Neustart läuft über die Befehlswarteschlange der Anwendung; die Seite fragt anschließend die Anwendung ab und führt den Bediener über die Unterbrechung hinweg&lt;br /&gt;
*** Alle Aktionen der Dienststeuerungsseite werden im &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; unter denselben Koordinaten wie die Anmeldemaske protokolliert (fehlgeschlagene Anmeldung und Neustart als WARNING, gesperrtes Konto als ERROR, beendete Sitzungen als INFO). Eine abgelehnte Anmeldung sperrt das Formular für die Dauer der Wartezeit mit Countdown; der Zähler ist derselbe wie an der Anmeldemaske, sodass sich Fehlversuche auf beiden Wegen zur Kontosperre summieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260907 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Überarbeitung der Codebasis zur Entfernung veralteter und nicht benötigter Bundles&lt;br /&gt;
** Überarbeitung des Loginvorgangs / der Cookiespeicherung bei &amp;quot;remember me&amp;quot;. Es werden keine kritischen Daten mehr im Cookie gespeichert.&lt;br /&gt;
** Verbesserung der Übersetzungen&lt;br /&gt;
** Anpassungen für frz. Fiskalanforderungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Laden der Übersetzungen in die interne Tabelle beim Systemstart deutlich beschleunigt. Dadurch verbessertes Startverhalten der Anwendungen.&lt;br /&gt;
** Verbesserungen bei der frz. Tastaturunterstützung&lt;br /&gt;
** Verbesserungen der Übersetzungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260618 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Blockieren durch das Laden von Diensten während des Starts vermieden, dadurch schnellerer Anwendungsstart. Anderes Verhalten beim Start an der Benutzeroberfläche.&lt;br /&gt;
** Französische Tastaturunterstützung (AZERTY) im Keymapper der Statemachine ergänzt&lt;br /&gt;
** Login bezieht Build-Version und Hersteller nun aus den &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; (einheitliche Quelle)&lt;br /&gt;
** Neue gemeinsame Hilfsmethoden &amp;lt;code&amp;gt;getBuildVersion()&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;getVendor()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; zur Ermittlung der Build-Identität&lt;br /&gt;
** &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; setzt die Zeitstempel von &amp;lt;code&amp;gt;lastError&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;lastWarning&amp;lt;/code&amp;gt; nicht mehr zurück&lt;br /&gt;
** Fix: NPE in &amp;lt;code&amp;gt;org.eclipse.osbp.xtext.dialog.AutowireUiFactory&amp;lt;/code&amp;gt; behoben&lt;br /&gt;
** Version von 5.2.0 auf 5.3.0 angehoben&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-reverify&amp;lt;/code&amp;gt; (16px/32px) für die NF525-Schaltfläche zur erneuten Archivintegritätsprüfung&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-refresh.png&amp;lt;/code&amp;gt; ergänzt&lt;br /&gt;
** Grid – horizontale Bildlaufleiste wiederhergestellt&lt;br /&gt;
** Grid - Flex-Layout für Kassen-/POS-Grids wiederhergestellt (kollabierte Spalten behoben)&lt;br /&gt;
** französische Übersetzungen überarbeitet&lt;br /&gt;
&lt;br /&gt;
* Grammatiken/Generierung:&lt;br /&gt;
** org.eclipse.osbp.dsl: Benutzerdefinierte &amp;lt;code&amp;gt;@PreRemove&amp;lt;/code&amp;gt;-Hooks werden in der generierten &amp;lt;code&amp;gt;preRemove()&amp;lt;/code&amp;gt;-Methode zusammengeführt&lt;br /&gt;
** org.eclipse.osbp.xtext.i18n: i18n-Generator erzeugt nun das byte-genaue Eclipse-Babel-Format&lt;br /&gt;
&lt;br /&gt;
* POS Framework für franz. Fiskalanforderungen eingeführt&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260410 ==&lt;br /&gt;
&lt;br /&gt;
* POS Framework: &lt;br /&gt;
** Performanceverbesserung beim Kassieren&lt;br /&gt;
** Multi-Protokoll Unterstützung für Paymentterminal &lt;br /&gt;
*** frz. Protokolle &amp;quot;Concert&amp;quot;, &amp;quot;Protocol E&amp;quot;&lt;br /&gt;
*** &amp;quot;Mock&amp;quot; für Tests&lt;br /&gt;
*** Statemachine DSL erweitert: protocol Parameter für Paymentterminal&lt;br /&gt;
*** &amp;quot;Shared Payment Terminal&amp;quot;&lt;br /&gt;
**** locking im PaymentTerminalService implementiert&lt;br /&gt;
**** pro Terminal über ConfigService einstellbar&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260402 ==&lt;br /&gt;
&lt;br /&gt;
Die Version verbessert das Startverhalten einer Anwendung und bringt mehr Informationen über den Status des Starts auf den Bildschirm&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Anzeige des Persistenzservice-Status auf dem Login-Bildschirm&lt;br /&gt;
** Information über den Persistenzservice auf der Fehlerseite hinzugefügt&lt;br /&gt;
** Beim Start wird nun überall auf den Persistenzservice statt nur auf den ConfigurationService gewartet&lt;br /&gt;
&lt;br /&gt;
* BPM:&lt;br /&gt;
** Fix: net.osbee.bpm: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** Fix: net.osbee.pos.epay: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260305 ==&lt;br /&gt;
&lt;br /&gt;
=== Report Anzeige ===&lt;br /&gt;
&lt;br /&gt;
Diese Version konzentriert sich auf '''Stabilitätsverbesserungen''' für das Report-Rendering-System, insbesondere auf die Behebung von Race Conditions und Anzeigeproblemen, die bei schnellen Benutzerinteraktionen auftraten.&lt;br /&gt;
&lt;br /&gt;
* Race Condition beim Report-Rendering&lt;br /&gt;
** '''Behoben: Schnelles Auswählen/Abwählen führte dazu, dass Reports mit ungültigen oder fehlenden Filtern gerendert wurden'''&lt;br /&gt;
*** Reports verarbeiten nun korrekt wenn Benutzer schnell Elemente auswählen und wieder abwählen&lt;br /&gt;
*** Filteränderungen werden blockiert, während ein Render-Vorgang läuft&lt;br /&gt;
*** Ausstehende Filteränderungen werden nachverfolgt und nach Abschluss des Renderings erneut ausgewertet&lt;br /&gt;
*** Reports mit &amp;lt;code&amp;gt;selectById&amp;lt;/code&amp;gt; werden nun korrekt ausgeblendet, wenn nichts ausgewählt ist&lt;br /&gt;
&lt;br /&gt;
* PDF-Anzeigeskalierungsproblem &lt;br /&gt;
** '''Behoben: PDF-Skalierungsprobleme durch Neuerstellung des BrowserFrames bei jedem Rendering'''&lt;br /&gt;
&lt;br /&gt;
=== Anmeldebildschirm ===&lt;br /&gt;
&lt;br /&gt;
Der Anmeldebildschirm zeigt nun während der Initialisierung des Persistence-Services einen Statustext an.&lt;br /&gt;
&lt;br /&gt;
* Lauftext-Anzeige (Marquee) mit dem aktuellen Status des Persistence-Services&lt;br /&gt;
* Deaktivierung aller Anmeldesteuerelemente während der Wartezeit&lt;br /&gt;
&lt;br /&gt;
=== Start der Anwendung ===&lt;br /&gt;
&lt;br /&gt;
* Blockierungen der Initialisierungsvorgänge durch Warten auf Serviceregistrierung während des Anwendungsstarts reduziert. &amp;lt;br&amp;gt;Dadurch verändert sich das Startverhalten, insbesondere die Reihenfolge der Anwendung. Insgesamt schnelleres Laden der Bundles.&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4596</id>
		<title>Releasenotes 2026 OS.pos</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4596"/>
				<updated>2026-09-07T19:16:21Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Version 5.3.0-V20260907 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260907 ==&lt;br /&gt;
&lt;br /&gt;
Schwerpunkt dieses Zeitraums ist die französische Fiskalkonformität '''NF 525''' (WORM-Sicherungseinrichtung, Write-once-Nachweis, Geräte-Lebenszyklus) sowie die Auslagerung des '''DSFinV-K'''-Datenmodells. Alle Änderungen liegen auf dem Branch &amp;lt;code&amp;gt;development&amp;lt;/code&amp;gt; und sind nach &amp;lt;code&amp;gt;origin/development&amp;lt;/code&amp;gt; gepusht.&lt;br /&gt;
&lt;br /&gt;
=== Änderungen / Neue Funktionen ===&lt;br /&gt;
&lt;br /&gt;
* '''Ausgeschlossene Zahlarten:''' Die Perspektive für ausgeschlossene Zahlungsarten wurde zur Kundenpflege verschoben.&lt;br /&gt;
* '''Benutzerverwaltung:''' Die automatische Synchronisierung der einzelnen views in der Benutzerverwaltungsperspektive wurde abgeschaltet.&lt;br /&gt;
* '''Authentifizierung:''' Die Authentifizierungs-Logger wurden zusammengefasst und schreiben wieder in eine Datei.&lt;br /&gt;
* '''remember me Anmeldefunktion:''' überarbeitet, Cookieverwendung sicherer gemacht.&lt;br /&gt;
* '''Kennwort vergessen?:''' Zurücksetzen des Kennworts löst eine Benutzersperre nicht mehr automatisch auf. Dies muss aktiv durch den Administrator geschehen.&lt;br /&gt;
* '''showResetPasswordOnScreen:''' neuer Konfigurationsschlüssel. Default: false. Bei true wird das neue Passwort im Log angezeigt, falls lein Mailserver kongiguriert ist.&lt;br /&gt;
&lt;br /&gt;
* '''NF 525 – WORM Write-once-Nachweis:''' Ein zertifiziertes WORM-Gerät darf Fiskalverkäufe erst nach einem signierten &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;-Verdikt tragen. Ein asynchroner Probe-Lauf weist die Write-once-Eigenschaft nach (das Medium nimmt eine Teständerung zurück); der Verdikt wird signiert und ist „sticky&amp;quot;. ''(cache-defeat probe, verbreiterte Signaturspalte)''&lt;br /&gt;
* '''NF 525 – Zertifizierungs-Gate:''' Auf einem zertifizierten Gerät führen Struktur-/Integritätsfehler zu einem harten Verkaufsstopp (STOP_SALES); auf einem nicht-zertifizierten Gerät wird die Anomalie nur als Warnung protokolliert (warn-only) und dem Kassierer als Hinweis am Verkauf angezeigt.&lt;br /&gt;
* '''NF 525 – Reaktivierung der Write-once-Bestätigung:''' Der zuvor pausierte Bestätigungs-Block wurde wieder aktiviert; der Scheduler führt ein zertifiziertes Gerät nun wieder von &amp;lt;code&amp;gt;PENDING&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''NF 525 – Schutz gegen Zertifizierungs-Downgrade:''' Eine bereits fiskalisch aktive, zertifizierte Kasse kann nicht mehr auf ein nicht-zertifiziertes oder entferntes Sicherungsgerät umgestellt werden (Geräte-Tausch), und ein zertifiziertes Gerät kann nicht mehr in-place ent-zertifiziert werden. Beide Wege werden abgewiesen (Umgehung der zertifizierten Durchsetzung verhindert).&lt;br /&gt;
* '''NF 525 – Auditierung von Geräte-Konfigurationsänderungen:''' Eine Änderung an der zertifizierungsrelevanten WORM-Konfiguration wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben.&lt;br /&gt;
* '''NF 525 – Retention/Archivierung beim Geräte-Tausch:''' Perioden ohne Fiskaldatensätze werden nicht mehr als leeres ZIP archiviert, sondern als schlanker „abgedeckt&amp;quot;-Marker vermerkt (kein Medium-Scan) – die „Gespeichert&amp;quot;-Rückmeldung nach einem Geräte-Tausch kommt dadurch deutlich schneller. Zum Abschluss wird eine Zusammenfassung protokolliert.&lt;br /&gt;
* '''NF 525 – Write-once-Probe:''' Die Anwesenheit der Probe-Datei wird nun über eine frische Verzeichnis-Enumeration gelesen (behebt eine Fehlerkennung durch veraltete Verzeichnis-Zwischenstände).&lt;br /&gt;
* '''Internationalisierung:''' Neue NF-525-WORM-Schlüssel (Write-once, worm_protection, warn-only) in das zentrale Übersetzungsbündel gespiegelt; allgemeine Vokabular-Erweiterungen.&lt;br /&gt;
* '''Rechnungsdruck (Invoice2p):''' NF-525-Daten in der Rechnungsvorlage berücksichtigt.&lt;br /&gt;
* '''Bondruck:''' NF-525-Daten ergänzt&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260907|Softwarefactory 5.2.0.20260907]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260707 ==&lt;br /&gt;
&lt;br /&gt;
Diese Ausgabe bringt vor allem die Unterstützung französischer Kassen voran: eine&lt;br /&gt;
vollständige AZERTY-Tastaturunterstützung (physisch und als Bildschirmtastatur), das&lt;br /&gt;
französische Zahlungsterminal-Protokoll CAISSE-AP inklusive Simulator sowie virtuelle&lt;br /&gt;
Peripheriegeräte für Test und Diagnose. Ergänzt wird dies durch NF525-Härtungen,&lt;br /&gt;
Fehlerbehebungen bei Kartenzahlungen und eine durchgängige Vereinheitlichung der&lt;br /&gt;
Übersetzungsdateien.&lt;br /&gt;
&lt;br /&gt;
* Die '''physische französische AZERTY-Tastatur''' wird nun vollständig unterstützt. Der komplette Zeichensatz wurde auf realer Hardware getestet; die zuvor fehlende '''ù-Taste''' wurde ergänzt.&lt;br /&gt;
* Die '''Bildschirmtastatur''' (On-Screen-Keypad) &lt;br /&gt;
** bildet nun eine echte französische AZERTY-Belegung über alle drei Ebenen ab (Grundebene, Umschalt, AltGr) inklusive Akzentkomposition über die Tottasten ^ und ¨.&lt;br /&gt;
** folgt jetzt '''einheitlich der Oberflächensprache''': Französisch → AZERTY, Englisch → englische Belegung, alle übrigen Sprachen → deutsches QWERTZ. Die Belegung wird beim Öffnen des Dialogs in der aktiven Sprache neu aufgebaut.&lt;br /&gt;
* Neue Konfiguration '''Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry''' zur Auswahl der physischen Tastaturbelegung je Kasse.&lt;br /&gt;
&lt;br /&gt;
* '''CAISSE-AP – französisches Zahlungsterminal'''&lt;br /&gt;
** Unterstützung des '''Tagesabschlusses (télécollecte)''' für Concert/CAISSE-AP-Terminals; die obligatorischen Felder CB und CE werden nun sowohl in der Abschluss- als auch in der Abbruch-Anfrage übertragen.&lt;br /&gt;
&lt;br /&gt;
* NF525 / Fiskalkonformität&lt;br /&gt;
** Die '''Persistierung des Grand-Totals''' ist nun zwingende Vorbedingung für die Signatur eines Belegs – verhindert eine Signatur bei unvollständig gespeichertem Umsatzzähler. ''(net.osbee.app.pos.common d5a4578ec)''&lt;br /&gt;
&lt;br /&gt;
* Kartenzahlung&lt;br /&gt;
** Eine Kartenzahlung kann nun korrekt '''storniert''' werden: das Belegfeld (receipt) wird aus dem CJ-Feld der Concert-Antwort befüllt.&lt;br /&gt;
** Das '''Löschen einer nicht stornierbaren Terminal-Zahlung''' wird blockiert, um inkonsistente Zustände zu vermeiden. &lt;br /&gt;
** setPaymentTerminalReversal stürzt bei einer fehlerhaften Anfrage nicht mehr ab. &lt;br /&gt;
&lt;br /&gt;
* Oberfläche / Internationalisierung ===&lt;br /&gt;
** Die '''Laufzeit-Sprachumschaltung''' funktioniert nun in der Kassierperspektive&lt;br /&gt;
** Zentrale Übersetzungen aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Systemvoraussetzungen ===&lt;br /&gt;
** Für den französischen Markt: Zahlungsterminal mit CAISSE-AP-/Concert-Protokoll (CB-Port 8888, konfigurierbae), physische AZERTY-Tastatur optional&lt;br /&gt;
** Konfiguration je Kasse über Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry und Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardLayout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260707|Softwarefactory 5.2.0.20260707]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260618 ==&lt;br /&gt;
&lt;br /&gt;
* Version von 5.2 auf 5.3&lt;br /&gt;
* frz. Fiskalanforderungen: erste Implementierung&lt;br /&gt;
* frz. Übersetzungen aktualisiert&lt;br /&gt;
* Verwendung frz. Tastatur in Kassiersicht&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260618|Softwarefactory 5.3.0.20260618]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260410 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Fix Performanceproblem ( eingeführt mit 4.5.7-V20260402 (OS) ), dbcaching Einstellungen&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260410|Softwarefactory 5.2.0.20260410]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260402 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Automatischer Wechsel zum Status &amp;lt;code&amp;gt;PAYMENTTERMINAL_REPEATRECEIPT&amp;lt;/code&amp;gt; im Modus 'store' (statt 'print') bei leeren Bonzeilen&lt;br /&gt;
** Neue Funktion &amp;lt;code&amp;gt;attachRemarks&amp;lt;/code&amp;gt; zum Zeichnen von Bonbemerkungen und deren Verknüpfung mit dem Kassenbon&lt;br /&gt;
** Möglichkeit zur Eingabe von freien Bemerkungen zum Kassenbon&lt;br /&gt;
** Bonbemerkungen: &amp;lt;code&amp;gt;observeFocus&amp;lt;/code&amp;gt; von remark1/2 an Events gebunden&lt;br /&gt;
&lt;br /&gt;
* Kassenkonfiguration:&lt;br /&gt;
** Menüeintrag für Stammdaten der Bonbemerkungen hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Neue Entitäten für Bonbemerkungen (SlipRemarks)&lt;br /&gt;
** Neue Spalten &amp;lt;code&amp;gt;remark_1&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;remark_2&amp;lt;/code&amp;gt; für CashSlip-Entität&lt;br /&gt;
** Dialoge, Tabellen und Perspektive für Bonbemerkungen implementiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7.20260305 (OS) ==&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260305|Softwarefactory 5.2.0.20260305]]&lt;br /&gt;
&lt;br /&gt;
* Berichtanzeige&lt;br /&gt;
** Fix: Probleme bei der Berichtsanzeige mit schneller Klickfolge in Auswahltabelle behoben.&lt;br /&gt;
&lt;br /&gt;
* Kassenschluss:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;determineCloseExpectation&amp;lt;/code&amp;gt; - Sortierung von CashPaymentTermData nach traceNumber absteigend, um den letzten Eintrag zu erhalten&lt;br /&gt;
&lt;br /&gt;
* Kassenentsorgung:&lt;br /&gt;
** Neues Systemprodukt &amp;quot;fee&amp;quot; aktiviert&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Einige Entitäten auf &amp;lt;code&amp;gt;cacheable=false&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
** Entitäten mit escaped Spaltennamen aktualisiert&lt;br /&gt;
** Generierte Entitäten und DTOs aktualisiert&lt;br /&gt;
** Entitäten mit neuem Service Framework aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;canUnparkSelected&amp;lt;/code&amp;gt; - Ablehnung eines Slips mit Zahlungen an einer SiS-Kasse&lt;br /&gt;
** Fix: PRINT_SLIP - &amp;lt;code&amp;gt;onOK&amp;lt;/code&amp;gt; verlässt nicht, wenn Slip änderbar ist&lt;br /&gt;
** Neue Eingabeaktion für MODIFY_FLD, setzt &amp;lt;code&amp;gt;cashposiupdate&amp;lt;/code&amp;gt; auf ausgewählte Position&lt;br /&gt;
&lt;br /&gt;
* Archivierung:&lt;br /&gt;
** &amp;lt;code&amp;gt;archivDescription xml-os&amp;lt;/code&amp;gt; für XML-Format der Beschreibungsdatei für Archiv hinzugefügt&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4595</id>
		<title>Releasenotes 2026 OS.pos</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4595"/>
				<updated>2026-09-07T13:58:26Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Änderungen / Neue Funktionen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260907 ==&lt;br /&gt;
&lt;br /&gt;
Schwerpunkt dieses Zeitraums ist die französische Fiskalkonformität '''NF 525''' (WORM-Sicherungseinrichtung, Write-once-Nachweis, Geräte-Lebenszyklus) sowie die Auslagerung des '''DSFinV-K'''-Datenmodells. Alle Änderungen liegen auf dem Branch &amp;lt;code&amp;gt;development&amp;lt;/code&amp;gt; und sind nach &amp;lt;code&amp;gt;origin/development&amp;lt;/code&amp;gt; gepusht.&lt;br /&gt;
&lt;br /&gt;
=== Änderungen / Neue Funktionen ===&lt;br /&gt;
&lt;br /&gt;
* '''Ausgeschlossene Zahlarten:''' Die Perspektive für ausgeschlossene Zahlungsarten wurde zur Kundenpflege verschoben.&lt;br /&gt;
* '''Benutzerverwaltung:''' Die automatische Synchronisierung der einzelnen views in der Benutzerverwaltungsperspektive wurde abgeschaltet.&lt;br /&gt;
* '''Authentifizierung:''' Die Authentifizierungs-Logger wurden zusammengefasst und schreiben wieder in eine Datei.&lt;br /&gt;
* '''remember me Anmeldefunktion:''' überarbeitet, Cookieverwendung sicherer gemacht.&lt;br /&gt;
&lt;br /&gt;
* '''NF 525 – WORM Write-once-Nachweis:''' Ein zertifiziertes WORM-Gerät darf Fiskalverkäufe erst nach einem signierten &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;-Verdikt tragen. Ein asynchroner Probe-Lauf weist die Write-once-Eigenschaft nach (das Medium nimmt eine Teständerung zurück); der Verdikt wird signiert und ist „sticky&amp;quot;. ''(cache-defeat probe, verbreiterte Signaturspalte)''&lt;br /&gt;
* '''NF 525 – Zertifizierungs-Gate:''' Auf einem zertifizierten Gerät führen Struktur-/Integritätsfehler zu einem harten Verkaufsstopp (STOP_SALES); auf einem nicht-zertifizierten Gerät wird die Anomalie nur als Warnung protokolliert (warn-only) und dem Kassierer als Hinweis am Verkauf angezeigt.&lt;br /&gt;
* '''NF 525 – Reaktivierung der Write-once-Bestätigung:''' Der zuvor pausierte Bestätigungs-Block wurde wieder aktiviert; der Scheduler führt ein zertifiziertes Gerät nun wieder von &amp;lt;code&amp;gt;PENDING&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''NF 525 – Schutz gegen Zertifizierungs-Downgrade:''' Eine bereits fiskalisch aktive, zertifizierte Kasse kann nicht mehr auf ein nicht-zertifiziertes oder entferntes Sicherungsgerät umgestellt werden (Geräte-Tausch), und ein zertifiziertes Gerät kann nicht mehr in-place ent-zertifiziert werden. Beide Wege werden abgewiesen (Umgehung der zertifizierten Durchsetzung verhindert).&lt;br /&gt;
* '''NF 525 – Auditierung von Geräte-Konfigurationsänderungen:''' Eine Änderung an der zertifizierungsrelevanten WORM-Konfiguration wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben.&lt;br /&gt;
* '''NF 525 – Retention/Archivierung beim Geräte-Tausch:''' Perioden ohne Fiskaldatensätze werden nicht mehr als leeres ZIP archiviert, sondern als schlanker „abgedeckt&amp;quot;-Marker vermerkt (kein Medium-Scan) – die „Gespeichert&amp;quot;-Rückmeldung nach einem Geräte-Tausch kommt dadurch deutlich schneller. Zum Abschluss wird eine Zusammenfassung protokolliert.&lt;br /&gt;
* '''NF 525 – Write-once-Probe:''' Die Anwesenheit der Probe-Datei wird nun über eine frische Verzeichnis-Enumeration gelesen (behebt eine Fehlerkennung durch veraltete Verzeichnis-Zwischenstände).&lt;br /&gt;
* '''Internationalisierung:''' Neue NF-525-WORM-Schlüssel (Write-once, worm_protection, warn-only) in das zentrale Übersetzungsbündel gespiegelt; allgemeine Vokabular-Erweiterungen.&lt;br /&gt;
* '''Rechnungsdruck (Invoice2p):''' NF-525-Daten in der Rechnungsvorlage berücksichtigt.&lt;br /&gt;
* '''Bondruck:''' NF-525-Daten ergänzt&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260907|Softwarefactory 5.2.0.20260907]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260707 ==&lt;br /&gt;
&lt;br /&gt;
Diese Ausgabe bringt vor allem die Unterstützung französischer Kassen voran: eine&lt;br /&gt;
vollständige AZERTY-Tastaturunterstützung (physisch und als Bildschirmtastatur), das&lt;br /&gt;
französische Zahlungsterminal-Protokoll CAISSE-AP inklusive Simulator sowie virtuelle&lt;br /&gt;
Peripheriegeräte für Test und Diagnose. Ergänzt wird dies durch NF525-Härtungen,&lt;br /&gt;
Fehlerbehebungen bei Kartenzahlungen und eine durchgängige Vereinheitlichung der&lt;br /&gt;
Übersetzungsdateien.&lt;br /&gt;
&lt;br /&gt;
* Die '''physische französische AZERTY-Tastatur''' wird nun vollständig unterstützt. Der komplette Zeichensatz wurde auf realer Hardware getestet; die zuvor fehlende '''ù-Taste''' wurde ergänzt.&lt;br /&gt;
* Die '''Bildschirmtastatur''' (On-Screen-Keypad) &lt;br /&gt;
** bildet nun eine echte französische AZERTY-Belegung über alle drei Ebenen ab (Grundebene, Umschalt, AltGr) inklusive Akzentkomposition über die Tottasten ^ und ¨.&lt;br /&gt;
** folgt jetzt '''einheitlich der Oberflächensprache''': Französisch → AZERTY, Englisch → englische Belegung, alle übrigen Sprachen → deutsches QWERTZ. Die Belegung wird beim Öffnen des Dialogs in der aktiven Sprache neu aufgebaut.&lt;br /&gt;
* Neue Konfiguration '''Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry''' zur Auswahl der physischen Tastaturbelegung je Kasse.&lt;br /&gt;
&lt;br /&gt;
* '''CAISSE-AP – französisches Zahlungsterminal'''&lt;br /&gt;
** Unterstützung des '''Tagesabschlusses (télécollecte)''' für Concert/CAISSE-AP-Terminals; die obligatorischen Felder CB und CE werden nun sowohl in der Abschluss- als auch in der Abbruch-Anfrage übertragen.&lt;br /&gt;
&lt;br /&gt;
* NF525 / Fiskalkonformität&lt;br /&gt;
** Die '''Persistierung des Grand-Totals''' ist nun zwingende Vorbedingung für die Signatur eines Belegs – verhindert eine Signatur bei unvollständig gespeichertem Umsatzzähler. ''(net.osbee.app.pos.common d5a4578ec)''&lt;br /&gt;
&lt;br /&gt;
* Kartenzahlung&lt;br /&gt;
** Eine Kartenzahlung kann nun korrekt '''storniert''' werden: das Belegfeld (receipt) wird aus dem CJ-Feld der Concert-Antwort befüllt.&lt;br /&gt;
** Das '''Löschen einer nicht stornierbaren Terminal-Zahlung''' wird blockiert, um inkonsistente Zustände zu vermeiden. &lt;br /&gt;
** setPaymentTerminalReversal stürzt bei einer fehlerhaften Anfrage nicht mehr ab. &lt;br /&gt;
&lt;br /&gt;
* Oberfläche / Internationalisierung ===&lt;br /&gt;
** Die '''Laufzeit-Sprachumschaltung''' funktioniert nun in der Kassierperspektive&lt;br /&gt;
** Zentrale Übersetzungen aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Systemvoraussetzungen ===&lt;br /&gt;
** Für den französischen Markt: Zahlungsterminal mit CAISSE-AP-/Concert-Protokoll (CB-Port 8888, konfigurierbae), physische AZERTY-Tastatur optional&lt;br /&gt;
** Konfiguration je Kasse über Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry und Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardLayout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260707|Softwarefactory 5.2.0.20260707]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260618 ==&lt;br /&gt;
&lt;br /&gt;
* Version von 5.2 auf 5.3&lt;br /&gt;
* frz. Fiskalanforderungen: erste Implementierung&lt;br /&gt;
* frz. Übersetzungen aktualisiert&lt;br /&gt;
* Verwendung frz. Tastatur in Kassiersicht&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260618|Softwarefactory 5.3.0.20260618]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260410 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Fix Performanceproblem ( eingeführt mit 4.5.7-V20260402 (OS) ), dbcaching Einstellungen&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260410|Softwarefactory 5.2.0.20260410]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260402 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Automatischer Wechsel zum Status &amp;lt;code&amp;gt;PAYMENTTERMINAL_REPEATRECEIPT&amp;lt;/code&amp;gt; im Modus 'store' (statt 'print') bei leeren Bonzeilen&lt;br /&gt;
** Neue Funktion &amp;lt;code&amp;gt;attachRemarks&amp;lt;/code&amp;gt; zum Zeichnen von Bonbemerkungen und deren Verknüpfung mit dem Kassenbon&lt;br /&gt;
** Möglichkeit zur Eingabe von freien Bemerkungen zum Kassenbon&lt;br /&gt;
** Bonbemerkungen: &amp;lt;code&amp;gt;observeFocus&amp;lt;/code&amp;gt; von remark1/2 an Events gebunden&lt;br /&gt;
&lt;br /&gt;
* Kassenkonfiguration:&lt;br /&gt;
** Menüeintrag für Stammdaten der Bonbemerkungen hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Neue Entitäten für Bonbemerkungen (SlipRemarks)&lt;br /&gt;
** Neue Spalten &amp;lt;code&amp;gt;remark_1&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;remark_2&amp;lt;/code&amp;gt; für CashSlip-Entität&lt;br /&gt;
** Dialoge, Tabellen und Perspektive für Bonbemerkungen implementiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7.20260305 (OS) ==&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260305|Softwarefactory 5.2.0.20260305]]&lt;br /&gt;
&lt;br /&gt;
* Berichtanzeige&lt;br /&gt;
** Fix: Probleme bei der Berichtsanzeige mit schneller Klickfolge in Auswahltabelle behoben.&lt;br /&gt;
&lt;br /&gt;
* Kassenschluss:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;determineCloseExpectation&amp;lt;/code&amp;gt; - Sortierung von CashPaymentTermData nach traceNumber absteigend, um den letzten Eintrag zu erhalten&lt;br /&gt;
&lt;br /&gt;
* Kassenentsorgung:&lt;br /&gt;
** Neues Systemprodukt &amp;quot;fee&amp;quot; aktiviert&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Einige Entitäten auf &amp;lt;code&amp;gt;cacheable=false&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
** Entitäten mit escaped Spaltennamen aktualisiert&lt;br /&gt;
** Generierte Entitäten und DTOs aktualisiert&lt;br /&gt;
** Entitäten mit neuem Service Framework aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;canUnparkSelected&amp;lt;/code&amp;gt; - Ablehnung eines Slips mit Zahlungen an einer SiS-Kasse&lt;br /&gt;
** Fix: PRINT_SLIP - &amp;lt;code&amp;gt;onOK&amp;lt;/code&amp;gt; verlässt nicht, wenn Slip änderbar ist&lt;br /&gt;
** Neue Eingabeaktion für MODIFY_FLD, setzt &amp;lt;code&amp;gt;cashposiupdate&amp;lt;/code&amp;gt; auf ausgewählte Position&lt;br /&gt;
&lt;br /&gt;
* Archivierung:&lt;br /&gt;
** &amp;lt;code&amp;gt;archivDescription xml-os&amp;lt;/code&amp;gt; für XML-Format der Beschreibungsdatei für Archiv hinzugefügt&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4594</id>
		<title>Releasenotes 2026 OS.pos</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4594"/>
				<updated>2026-09-07T13:56:43Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260907 ==&lt;br /&gt;
&lt;br /&gt;
Schwerpunkt dieses Zeitraums ist die französische Fiskalkonformität '''NF 525''' (WORM-Sicherungseinrichtung, Write-once-Nachweis, Geräte-Lebenszyklus) sowie die Auslagerung des '''DSFinV-K'''-Datenmodells. Alle Änderungen liegen auf dem Branch &amp;lt;code&amp;gt;development&amp;lt;/code&amp;gt; und sind nach &amp;lt;code&amp;gt;origin/development&amp;lt;/code&amp;gt; gepusht.&lt;br /&gt;
&lt;br /&gt;
=== Änderungen / Neue Funktionen ===&lt;br /&gt;
&lt;br /&gt;
* '''Ausgeschlossene Zahlarten:''' Die Perspektive für ausgeschlossene Zahlungsarten wurde zur Kundenpflege verschoben.&lt;br /&gt;
* '''Benutzerverwaltung:''' Die automatische Synchronisierung der einzelnen views in der Benutzerverwaltungsperspektive wurde abgeschaltet.&lt;br /&gt;
&lt;br /&gt;
* '''NF 525 – WORM Write-once-Nachweis:''' Ein zertifiziertes WORM-Gerät darf Fiskalverkäufe erst nach einem signierten &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;-Verdikt tragen. Ein asynchroner Probe-Lauf weist die Write-once-Eigenschaft nach (das Medium nimmt eine Teständerung zurück); der Verdikt wird signiert und ist „sticky&amp;quot;. ''(cache-defeat probe, verbreiterte Signaturspalte)''&lt;br /&gt;
* '''NF 525 – Zertifizierungs-Gate:''' Auf einem zertifizierten Gerät führen Struktur-/Integritätsfehler zu einem harten Verkaufsstopp (STOP_SALES); auf einem nicht-zertifizierten Gerät wird die Anomalie nur als Warnung protokolliert (warn-only) und dem Kassierer als Hinweis am Verkauf angezeigt.&lt;br /&gt;
* '''NF 525 – Reaktivierung der Write-once-Bestätigung:''' Der zuvor pausierte Bestätigungs-Block wurde wieder aktiviert; der Scheduler führt ein zertifiziertes Gerät nun wieder von &amp;lt;code&amp;gt;PENDING&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''NF 525 – Schutz gegen Zertifizierungs-Downgrade:''' Eine bereits fiskalisch aktive, zertifizierte Kasse kann nicht mehr auf ein nicht-zertifiziertes oder entferntes Sicherungsgerät umgestellt werden (Geräte-Tausch), und ein zertifiziertes Gerät kann nicht mehr in-place ent-zertifiziert werden. Beide Wege werden abgewiesen (Umgehung der zertifizierten Durchsetzung verhindert).&lt;br /&gt;
* '''NF 525 – Auditierung von Geräte-Konfigurationsänderungen:''' Eine Änderung an der zertifizierungsrelevanten WORM-Konfiguration wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben.&lt;br /&gt;
* '''NF 525 – Retention/Archivierung beim Geräte-Tausch:''' Perioden ohne Fiskaldatensätze werden nicht mehr als leeres ZIP archiviert, sondern als schlanker „abgedeckt&amp;quot;-Marker vermerkt (kein Medium-Scan) – die „Gespeichert&amp;quot;-Rückmeldung nach einem Geräte-Tausch kommt dadurch deutlich schneller. Zum Abschluss wird eine Zusammenfassung protokolliert.&lt;br /&gt;
&lt;br /&gt;
* '''Authentifizierung:''' Die Authentifizierungs-Logger wurden zusammengefasst und schreiben wieder in eine Datei.&lt;br /&gt;
* '''NF 525 – Write-once-Probe:''' Die Anwesenheit der Probe-Datei wird nun über eine frische Verzeichnis-Enumeration gelesen (behebt eine Fehlerkennung durch veraltete Verzeichnis-Zwischenstände).&lt;br /&gt;
&lt;br /&gt;
* '''Internationalisierung:''' Neue NF-525-WORM-Schlüssel (Write-once, worm_protection, warn-only) in das zentrale Übersetzungsbündel gespiegelt; allgemeine Vokabular-Erweiterungen.&lt;br /&gt;
* '''Rechnungsdruck (Invoice2p):''' NF-525-Daten in der Rechnungsvorlage berücksichtigt.&lt;br /&gt;
* '''Bondruck:''' NF-525-Daten ergänzt&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260907|Softwarefactory 5.2.0.20260907]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260707 ==&lt;br /&gt;
&lt;br /&gt;
Diese Ausgabe bringt vor allem die Unterstützung französischer Kassen voran: eine&lt;br /&gt;
vollständige AZERTY-Tastaturunterstützung (physisch und als Bildschirmtastatur), das&lt;br /&gt;
französische Zahlungsterminal-Protokoll CAISSE-AP inklusive Simulator sowie virtuelle&lt;br /&gt;
Peripheriegeräte für Test und Diagnose. Ergänzt wird dies durch NF525-Härtungen,&lt;br /&gt;
Fehlerbehebungen bei Kartenzahlungen und eine durchgängige Vereinheitlichung der&lt;br /&gt;
Übersetzungsdateien.&lt;br /&gt;
&lt;br /&gt;
* Die '''physische französische AZERTY-Tastatur''' wird nun vollständig unterstützt. Der komplette Zeichensatz wurde auf realer Hardware getestet; die zuvor fehlende '''ù-Taste''' wurde ergänzt.&lt;br /&gt;
* Die '''Bildschirmtastatur''' (On-Screen-Keypad) &lt;br /&gt;
** bildet nun eine echte französische AZERTY-Belegung über alle drei Ebenen ab (Grundebene, Umschalt, AltGr) inklusive Akzentkomposition über die Tottasten ^ und ¨.&lt;br /&gt;
** folgt jetzt '''einheitlich der Oberflächensprache''': Französisch → AZERTY, Englisch → englische Belegung, alle übrigen Sprachen → deutsches QWERTZ. Die Belegung wird beim Öffnen des Dialogs in der aktiven Sprache neu aufgebaut.&lt;br /&gt;
* Neue Konfiguration '''Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry''' zur Auswahl der physischen Tastaturbelegung je Kasse.&lt;br /&gt;
&lt;br /&gt;
* '''CAISSE-AP – französisches Zahlungsterminal'''&lt;br /&gt;
** Unterstützung des '''Tagesabschlusses (télécollecte)''' für Concert/CAISSE-AP-Terminals; die obligatorischen Felder CB und CE werden nun sowohl in der Abschluss- als auch in der Abbruch-Anfrage übertragen.&lt;br /&gt;
&lt;br /&gt;
* NF525 / Fiskalkonformität&lt;br /&gt;
** Die '''Persistierung des Grand-Totals''' ist nun zwingende Vorbedingung für die Signatur eines Belegs – verhindert eine Signatur bei unvollständig gespeichertem Umsatzzähler. ''(net.osbee.app.pos.common d5a4578ec)''&lt;br /&gt;
&lt;br /&gt;
* Kartenzahlung&lt;br /&gt;
** Eine Kartenzahlung kann nun korrekt '''storniert''' werden: das Belegfeld (receipt) wird aus dem CJ-Feld der Concert-Antwort befüllt.&lt;br /&gt;
** Das '''Löschen einer nicht stornierbaren Terminal-Zahlung''' wird blockiert, um inkonsistente Zustände zu vermeiden. &lt;br /&gt;
** setPaymentTerminalReversal stürzt bei einer fehlerhaften Anfrage nicht mehr ab. &lt;br /&gt;
&lt;br /&gt;
* Oberfläche / Internationalisierung ===&lt;br /&gt;
** Die '''Laufzeit-Sprachumschaltung''' funktioniert nun in der Kassierperspektive&lt;br /&gt;
** Zentrale Übersetzungen aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Systemvoraussetzungen ===&lt;br /&gt;
** Für den französischen Markt: Zahlungsterminal mit CAISSE-AP-/Concert-Protokoll (CB-Port 8888, konfigurierbae), physische AZERTY-Tastatur optional&lt;br /&gt;
** Konfiguration je Kasse über Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry und Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardLayout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260707|Softwarefactory 5.2.0.20260707]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260618 ==&lt;br /&gt;
&lt;br /&gt;
* Version von 5.2 auf 5.3&lt;br /&gt;
* frz. Fiskalanforderungen: erste Implementierung&lt;br /&gt;
* frz. Übersetzungen aktualisiert&lt;br /&gt;
* Verwendung frz. Tastatur in Kassiersicht&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260618|Softwarefactory 5.3.0.20260618]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260410 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Fix Performanceproblem ( eingeführt mit 4.5.7-V20260402 (OS) ), dbcaching Einstellungen&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260410|Softwarefactory 5.2.0.20260410]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260402 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Automatischer Wechsel zum Status &amp;lt;code&amp;gt;PAYMENTTERMINAL_REPEATRECEIPT&amp;lt;/code&amp;gt; im Modus 'store' (statt 'print') bei leeren Bonzeilen&lt;br /&gt;
** Neue Funktion &amp;lt;code&amp;gt;attachRemarks&amp;lt;/code&amp;gt; zum Zeichnen von Bonbemerkungen und deren Verknüpfung mit dem Kassenbon&lt;br /&gt;
** Möglichkeit zur Eingabe von freien Bemerkungen zum Kassenbon&lt;br /&gt;
** Bonbemerkungen: &amp;lt;code&amp;gt;observeFocus&amp;lt;/code&amp;gt; von remark1/2 an Events gebunden&lt;br /&gt;
&lt;br /&gt;
* Kassenkonfiguration:&lt;br /&gt;
** Menüeintrag für Stammdaten der Bonbemerkungen hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Neue Entitäten für Bonbemerkungen (SlipRemarks)&lt;br /&gt;
** Neue Spalten &amp;lt;code&amp;gt;remark_1&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;remark_2&amp;lt;/code&amp;gt; für CashSlip-Entität&lt;br /&gt;
** Dialoge, Tabellen und Perspektive für Bonbemerkungen implementiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7.20260305 (OS) ==&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260305|Softwarefactory 5.2.0.20260305]]&lt;br /&gt;
&lt;br /&gt;
* Berichtanzeige&lt;br /&gt;
** Fix: Probleme bei der Berichtsanzeige mit schneller Klickfolge in Auswahltabelle behoben.&lt;br /&gt;
&lt;br /&gt;
* Kassenschluss:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;determineCloseExpectation&amp;lt;/code&amp;gt; - Sortierung von CashPaymentTermData nach traceNumber absteigend, um den letzten Eintrag zu erhalten&lt;br /&gt;
&lt;br /&gt;
* Kassenentsorgung:&lt;br /&gt;
** Neues Systemprodukt &amp;quot;fee&amp;quot; aktiviert&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Einige Entitäten auf &amp;lt;code&amp;gt;cacheable=false&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
** Entitäten mit escaped Spaltennamen aktualisiert&lt;br /&gt;
** Generierte Entitäten und DTOs aktualisiert&lt;br /&gt;
** Entitäten mit neuem Service Framework aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;canUnparkSelected&amp;lt;/code&amp;gt; - Ablehnung eines Slips mit Zahlungen an einer SiS-Kasse&lt;br /&gt;
** Fix: PRINT_SLIP - &amp;lt;code&amp;gt;onOK&amp;lt;/code&amp;gt; verlässt nicht, wenn Slip änderbar ist&lt;br /&gt;
** Neue Eingabeaktion für MODIFY_FLD, setzt &amp;lt;code&amp;gt;cashposiupdate&amp;lt;/code&amp;gt; auf ausgewählte Position&lt;br /&gt;
&lt;br /&gt;
* Archivierung:&lt;br /&gt;
** &amp;lt;code&amp;gt;archivDescription xml-os&amp;lt;/code&amp;gt; für XML-Format der Beschreibungsdatei für Archiv hinzugefügt&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4593</id>
		<title>Releasenotes 2026 OS.pos</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4593"/>
				<updated>2026-09-07T13:55:36Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Aktualisierungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260907 ==&lt;br /&gt;
&lt;br /&gt;
Schwerpunkt dieses Zeitraums ist die französische Fiskalkonformität '''NF 525''' (WORM-Sicherungseinrichtung, Write-once-Nachweis, Geräte-Lebenszyklus) sowie die Auslagerung des '''DSFinV-K'''-Datenmodells. Alle Änderungen liegen auf dem Branch &amp;lt;code&amp;gt;development&amp;lt;/code&amp;gt; und sind nach &amp;lt;code&amp;gt;origin/development&amp;lt;/code&amp;gt; gepusht.&lt;br /&gt;
&lt;br /&gt;
=== Neue Funktionen ===&lt;br /&gt;
&lt;br /&gt;
* '''Ausgeschlossene Zahlarten:''' Die Perspektive für ausgeschlossene Zahlungsarten wurde zur Kundenpflege verschoben.&lt;br /&gt;
* '''Benutzerverwaltung:''' Die automatische Synchronisierung der einzelnen views in der Benutzerverwaltungsperspektive wurde abgeschaltet.&lt;br /&gt;
&lt;br /&gt;
* '''NF 525 – WORM Write-once-Nachweis:''' Ein zertifiziertes WORM-Gerät darf Fiskalverkäufe erst nach einem signierten &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;-Verdikt tragen. Ein asynchroner Probe-Lauf weist die Write-once-Eigenschaft nach (das Medium nimmt eine Teständerung zurück); der Verdikt wird signiert und ist „sticky&amp;quot;. ''(cache-defeat probe, verbreiterte Signaturspalte)''&lt;br /&gt;
* '''NF 525 – Zertifizierungs-Gate:''' Auf einem zertifizierten Gerät führen Struktur-/Integritätsfehler zu einem harten Verkaufsstopp (STOP_SALES); auf einem nicht-zertifizierten Gerät wird die Anomalie nur als Warnung protokolliert (warn-only) und dem Kassierer als Hinweis am Verkauf angezeigt.&lt;br /&gt;
* '''NF 525 – Reaktivierung der Write-once-Bestätigung:''' Der zuvor pausierte Bestätigungs-Block wurde wieder aktiviert; der Scheduler führt ein zertifiziertes Gerät nun wieder von &amp;lt;code&amp;gt;PENDING&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''NF 525 – Schutz gegen Zertifizierungs-Downgrade:''' Eine bereits fiskalisch aktive, zertifizierte Kasse kann nicht mehr auf ein nicht-zertifiziertes oder entferntes Sicherungsgerät umgestellt werden (Geräte-Tausch), und ein zertifiziertes Gerät kann nicht mehr in-place ent-zertifiziert werden. Beide Wege werden abgewiesen (Umgehung der zertifizierten Durchsetzung verhindert).&lt;br /&gt;
* '''NF 525 – Auditierung von Geräte-Konfigurationsänderungen:''' Eine Änderung an der zertifizierungsrelevanten WORM-Konfiguration wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben.&lt;br /&gt;
* '''NF 525 – Retention/Archivierung beim Geräte-Tausch:''' Perioden ohne Fiskaldatensätze werden nicht mehr als leeres ZIP archiviert, sondern als schlanker „abgedeckt&amp;quot;-Marker vermerkt (kein Medium-Scan) – die „Gespeichert&amp;quot;-Rückmeldung nach einem Geräte-Tausch kommt dadurch deutlich schneller. Zum Abschluss wird eine Zusammenfassung protokolliert.&lt;br /&gt;
&lt;br /&gt;
=== Fehlerbehebungen ===&lt;br /&gt;
&lt;br /&gt;
* '''Authentifizierung:''' Die Authentifizierungs-Logger wurden zusammengefasst und schreiben wieder in eine Datei.&lt;br /&gt;
* '''NF 525 – Write-once-Probe:''' Die Anwesenheit der Probe-Datei wird nun über eine frische Verzeichnis-Enumeration gelesen (behebt eine Fehlerkennung durch veraltete Verzeichnis-Zwischenstände).&lt;br /&gt;
&lt;br /&gt;
=== Aktualisierungen ===&lt;br /&gt;
* '''Internationalisierung:''' Neue NF-525-WORM-Schlüssel (Write-once, worm_protection, warn-only) in das zentrale Übersetzungsbündel gespiegelt; allgemeine Vokabular-Erweiterungen.&lt;br /&gt;
* '''Rechnungsdruck (Invoice2p):''' NF-525-Daten in der Rechnungsvorlage berücksichtigt.&lt;br /&gt;
* '''Bondruck:''' NF-525-Daten ergänzt&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260907|Softwarefactory 5.2.0.20260907]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260707 ==&lt;br /&gt;
&lt;br /&gt;
Diese Ausgabe bringt vor allem die Unterstützung französischer Kassen voran: eine&lt;br /&gt;
vollständige AZERTY-Tastaturunterstützung (physisch und als Bildschirmtastatur), das&lt;br /&gt;
französische Zahlungsterminal-Protokoll CAISSE-AP inklusive Simulator sowie virtuelle&lt;br /&gt;
Peripheriegeräte für Test und Diagnose. Ergänzt wird dies durch NF525-Härtungen,&lt;br /&gt;
Fehlerbehebungen bei Kartenzahlungen und eine durchgängige Vereinheitlichung der&lt;br /&gt;
Übersetzungsdateien.&lt;br /&gt;
&lt;br /&gt;
* Die '''physische französische AZERTY-Tastatur''' wird nun vollständig unterstützt. Der komplette Zeichensatz wurde auf realer Hardware getestet; die zuvor fehlende '''ù-Taste''' wurde ergänzt.&lt;br /&gt;
* Die '''Bildschirmtastatur''' (On-Screen-Keypad) &lt;br /&gt;
** bildet nun eine echte französische AZERTY-Belegung über alle drei Ebenen ab (Grundebene, Umschalt, AltGr) inklusive Akzentkomposition über die Tottasten ^ und ¨.&lt;br /&gt;
** folgt jetzt '''einheitlich der Oberflächensprache''': Französisch → AZERTY, Englisch → englische Belegung, alle übrigen Sprachen → deutsches QWERTZ. Die Belegung wird beim Öffnen des Dialogs in der aktiven Sprache neu aufgebaut.&lt;br /&gt;
* Neue Konfiguration '''Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry''' zur Auswahl der physischen Tastaturbelegung je Kasse.&lt;br /&gt;
&lt;br /&gt;
* '''CAISSE-AP – französisches Zahlungsterminal'''&lt;br /&gt;
** Unterstützung des '''Tagesabschlusses (télécollecte)''' für Concert/CAISSE-AP-Terminals; die obligatorischen Felder CB und CE werden nun sowohl in der Abschluss- als auch in der Abbruch-Anfrage übertragen.&lt;br /&gt;
&lt;br /&gt;
* NF525 / Fiskalkonformität&lt;br /&gt;
** Die '''Persistierung des Grand-Totals''' ist nun zwingende Vorbedingung für die Signatur eines Belegs – verhindert eine Signatur bei unvollständig gespeichertem Umsatzzähler. ''(net.osbee.app.pos.common d5a4578ec)''&lt;br /&gt;
&lt;br /&gt;
* Kartenzahlung&lt;br /&gt;
** Eine Kartenzahlung kann nun korrekt '''storniert''' werden: das Belegfeld (receipt) wird aus dem CJ-Feld der Concert-Antwort befüllt.&lt;br /&gt;
** Das '''Löschen einer nicht stornierbaren Terminal-Zahlung''' wird blockiert, um inkonsistente Zustände zu vermeiden. &lt;br /&gt;
** setPaymentTerminalReversal stürzt bei einer fehlerhaften Anfrage nicht mehr ab. &lt;br /&gt;
&lt;br /&gt;
* Oberfläche / Internationalisierung ===&lt;br /&gt;
** Die '''Laufzeit-Sprachumschaltung''' funktioniert nun in der Kassierperspektive&lt;br /&gt;
** Zentrale Übersetzungen aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Systemvoraussetzungen ===&lt;br /&gt;
** Für den französischen Markt: Zahlungsterminal mit CAISSE-AP-/Concert-Protokoll (CB-Port 8888, konfigurierbae), physische AZERTY-Tastatur optional&lt;br /&gt;
** Konfiguration je Kasse über Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry und Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardLayout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260707|Softwarefactory 5.2.0.20260707]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260618 ==&lt;br /&gt;
&lt;br /&gt;
* Version von 5.2 auf 5.3&lt;br /&gt;
* frz. Fiskalanforderungen: erste Implementierung&lt;br /&gt;
* frz. Übersetzungen aktualisiert&lt;br /&gt;
* Verwendung frz. Tastatur in Kassiersicht&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260618|Softwarefactory 5.3.0.20260618]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260410 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Fix Performanceproblem ( eingeführt mit 4.5.7-V20260402 (OS) ), dbcaching Einstellungen&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260410|Softwarefactory 5.2.0.20260410]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260402 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Automatischer Wechsel zum Status &amp;lt;code&amp;gt;PAYMENTTERMINAL_REPEATRECEIPT&amp;lt;/code&amp;gt; im Modus 'store' (statt 'print') bei leeren Bonzeilen&lt;br /&gt;
** Neue Funktion &amp;lt;code&amp;gt;attachRemarks&amp;lt;/code&amp;gt; zum Zeichnen von Bonbemerkungen und deren Verknüpfung mit dem Kassenbon&lt;br /&gt;
** Möglichkeit zur Eingabe von freien Bemerkungen zum Kassenbon&lt;br /&gt;
** Bonbemerkungen: &amp;lt;code&amp;gt;observeFocus&amp;lt;/code&amp;gt; von remark1/2 an Events gebunden&lt;br /&gt;
&lt;br /&gt;
* Kassenkonfiguration:&lt;br /&gt;
** Menüeintrag für Stammdaten der Bonbemerkungen hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Neue Entitäten für Bonbemerkungen (SlipRemarks)&lt;br /&gt;
** Neue Spalten &amp;lt;code&amp;gt;remark_1&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;remark_2&amp;lt;/code&amp;gt; für CashSlip-Entität&lt;br /&gt;
** Dialoge, Tabellen und Perspektive für Bonbemerkungen implementiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7.20260305 (OS) ==&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260305|Softwarefactory 5.2.0.20260305]]&lt;br /&gt;
&lt;br /&gt;
* Berichtanzeige&lt;br /&gt;
** Fix: Probleme bei der Berichtsanzeige mit schneller Klickfolge in Auswahltabelle behoben.&lt;br /&gt;
&lt;br /&gt;
* Kassenschluss:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;determineCloseExpectation&amp;lt;/code&amp;gt; - Sortierung von CashPaymentTermData nach traceNumber absteigend, um den letzten Eintrag zu erhalten&lt;br /&gt;
&lt;br /&gt;
* Kassenentsorgung:&lt;br /&gt;
** Neues Systemprodukt &amp;quot;fee&amp;quot; aktiviert&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Einige Entitäten auf &amp;lt;code&amp;gt;cacheable=false&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
** Entitäten mit escaped Spaltennamen aktualisiert&lt;br /&gt;
** Generierte Entitäten und DTOs aktualisiert&lt;br /&gt;
** Entitäten mit neuem Service Framework aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;canUnparkSelected&amp;lt;/code&amp;gt; - Ablehnung eines Slips mit Zahlungen an einer SiS-Kasse&lt;br /&gt;
** Fix: PRINT_SLIP - &amp;lt;code&amp;gt;onOK&amp;lt;/code&amp;gt; verlässt nicht, wenn Slip änderbar ist&lt;br /&gt;
** Neue Eingabeaktion für MODIFY_FLD, setzt &amp;lt;code&amp;gt;cashposiupdate&amp;lt;/code&amp;gt; auf ausgewählte Position&lt;br /&gt;
&lt;br /&gt;
* Archivierung:&lt;br /&gt;
** &amp;lt;code&amp;gt;archivDescription xml-os&amp;lt;/code&amp;gt; für XML-Format der Beschreibungsdatei für Archiv hinzugefügt&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4592</id>
		<title>Releasenotes 2026 OS.pos</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4592"/>
				<updated>2026-09-07T13:54:47Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Neue Funktionen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260907 ==&lt;br /&gt;
&lt;br /&gt;
Schwerpunkt dieses Zeitraums ist die französische Fiskalkonformität '''NF 525''' (WORM-Sicherungseinrichtung, Write-once-Nachweis, Geräte-Lebenszyklus) sowie die Auslagerung des '''DSFinV-K'''-Datenmodells. Alle Änderungen liegen auf dem Branch &amp;lt;code&amp;gt;development&amp;lt;/code&amp;gt; und sind nach &amp;lt;code&amp;gt;origin/development&amp;lt;/code&amp;gt; gepusht.&lt;br /&gt;
&lt;br /&gt;
=== Neue Funktionen ===&lt;br /&gt;
&lt;br /&gt;
* '''Ausgeschlossene Zahlarten:''' Die Perspektive für ausgeschlossene Zahlungsarten wurde zur Kundenpflege verschoben.&lt;br /&gt;
* '''Benutzerverwaltung:''' Die automatische Synchronisierung der einzelnen views in der Benutzerverwaltungsperspektive wurde abgeschaltet.&lt;br /&gt;
&lt;br /&gt;
* '''NF 525 – WORM Write-once-Nachweis:''' Ein zertifiziertes WORM-Gerät darf Fiskalverkäufe erst nach einem signierten &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;-Verdikt tragen. Ein asynchroner Probe-Lauf weist die Write-once-Eigenschaft nach (das Medium nimmt eine Teständerung zurück); der Verdikt wird signiert und ist „sticky&amp;quot;. ''(cache-defeat probe, verbreiterte Signaturspalte)''&lt;br /&gt;
* '''NF 525 – Zertifizierungs-Gate:''' Auf einem zertifizierten Gerät führen Struktur-/Integritätsfehler zu einem harten Verkaufsstopp (STOP_SALES); auf einem nicht-zertifizierten Gerät wird die Anomalie nur als Warnung protokolliert (warn-only) und dem Kassierer als Hinweis am Verkauf angezeigt.&lt;br /&gt;
* '''NF 525 – Reaktivierung der Write-once-Bestätigung:''' Der zuvor pausierte Bestätigungs-Block wurde wieder aktiviert; der Scheduler führt ein zertifiziertes Gerät nun wieder von &amp;lt;code&amp;gt;PENDING&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''NF 525 – Schutz gegen Zertifizierungs-Downgrade:''' Eine bereits fiskalisch aktive, zertifizierte Kasse kann nicht mehr auf ein nicht-zertifiziertes oder entferntes Sicherungsgerät umgestellt werden (Geräte-Tausch), und ein zertifiziertes Gerät kann nicht mehr in-place ent-zertifiziert werden. Beide Wege werden abgewiesen (Umgehung der zertifizierten Durchsetzung verhindert).&lt;br /&gt;
* '''NF 525 – Auditierung von Geräte-Konfigurationsänderungen:''' Eine Änderung an der zertifizierungsrelevanten WORM-Konfiguration wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben.&lt;br /&gt;
* '''NF 525 – Retention/Archivierung beim Geräte-Tausch:''' Perioden ohne Fiskaldatensätze werden nicht mehr als leeres ZIP archiviert, sondern als schlanker „abgedeckt&amp;quot;-Marker vermerkt (kein Medium-Scan) – die „Gespeichert&amp;quot;-Rückmeldung nach einem Geräte-Tausch kommt dadurch deutlich schneller. Zum Abschluss wird eine Zusammenfassung protokolliert.&lt;br /&gt;
&lt;br /&gt;
=== Fehlerbehebungen ===&lt;br /&gt;
&lt;br /&gt;
* '''Authentifizierung:''' Die Authentifizierungs-Logger wurden zusammengefasst und schreiben wieder in eine Datei.&lt;br /&gt;
* '''NF 525 – Write-once-Probe:''' Die Anwesenheit der Probe-Datei wird nun über eine frische Verzeichnis-Enumeration gelesen (behebt eine Fehlerkennung durch veraltete Verzeichnis-Zwischenstände).&lt;br /&gt;
&lt;br /&gt;
=== Aktualisierungen ===&lt;br /&gt;
* '''Internationalisierung:''' Neue NF-525-WORM-Schlüssel (Write-once, worm_protection, warn-only) in das zentrale Übersetzungsbündel gespiegelt; allgemeine Vokabular-Erweiterungen.&lt;br /&gt;
* '''Rechnungsdruck (Invoice2p):''' NF-525-Daten in der Rechnungsvorlage berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260907|Softwarefactory 5.2.0.20260907]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260707 ==&lt;br /&gt;
&lt;br /&gt;
Diese Ausgabe bringt vor allem die Unterstützung französischer Kassen voran: eine&lt;br /&gt;
vollständige AZERTY-Tastaturunterstützung (physisch und als Bildschirmtastatur), das&lt;br /&gt;
französische Zahlungsterminal-Protokoll CAISSE-AP inklusive Simulator sowie virtuelle&lt;br /&gt;
Peripheriegeräte für Test und Diagnose. Ergänzt wird dies durch NF525-Härtungen,&lt;br /&gt;
Fehlerbehebungen bei Kartenzahlungen und eine durchgängige Vereinheitlichung der&lt;br /&gt;
Übersetzungsdateien.&lt;br /&gt;
&lt;br /&gt;
* Die '''physische französische AZERTY-Tastatur''' wird nun vollständig unterstützt. Der komplette Zeichensatz wurde auf realer Hardware getestet; die zuvor fehlende '''ù-Taste''' wurde ergänzt.&lt;br /&gt;
* Die '''Bildschirmtastatur''' (On-Screen-Keypad) &lt;br /&gt;
** bildet nun eine echte französische AZERTY-Belegung über alle drei Ebenen ab (Grundebene, Umschalt, AltGr) inklusive Akzentkomposition über die Tottasten ^ und ¨.&lt;br /&gt;
** folgt jetzt '''einheitlich der Oberflächensprache''': Französisch → AZERTY, Englisch → englische Belegung, alle übrigen Sprachen → deutsches QWERTZ. Die Belegung wird beim Öffnen des Dialogs in der aktiven Sprache neu aufgebaut.&lt;br /&gt;
* Neue Konfiguration '''Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry''' zur Auswahl der physischen Tastaturbelegung je Kasse.&lt;br /&gt;
&lt;br /&gt;
* '''CAISSE-AP – französisches Zahlungsterminal'''&lt;br /&gt;
** Unterstützung des '''Tagesabschlusses (télécollecte)''' für Concert/CAISSE-AP-Terminals; die obligatorischen Felder CB und CE werden nun sowohl in der Abschluss- als auch in der Abbruch-Anfrage übertragen.&lt;br /&gt;
&lt;br /&gt;
* NF525 / Fiskalkonformität&lt;br /&gt;
** Die '''Persistierung des Grand-Totals''' ist nun zwingende Vorbedingung für die Signatur eines Belegs – verhindert eine Signatur bei unvollständig gespeichertem Umsatzzähler. ''(net.osbee.app.pos.common d5a4578ec)''&lt;br /&gt;
&lt;br /&gt;
* Kartenzahlung&lt;br /&gt;
** Eine Kartenzahlung kann nun korrekt '''storniert''' werden: das Belegfeld (receipt) wird aus dem CJ-Feld der Concert-Antwort befüllt.&lt;br /&gt;
** Das '''Löschen einer nicht stornierbaren Terminal-Zahlung''' wird blockiert, um inkonsistente Zustände zu vermeiden. &lt;br /&gt;
** setPaymentTerminalReversal stürzt bei einer fehlerhaften Anfrage nicht mehr ab. &lt;br /&gt;
&lt;br /&gt;
* Oberfläche / Internationalisierung ===&lt;br /&gt;
** Die '''Laufzeit-Sprachumschaltung''' funktioniert nun in der Kassierperspektive&lt;br /&gt;
** Zentrale Übersetzungen aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Systemvoraussetzungen ===&lt;br /&gt;
** Für den französischen Markt: Zahlungsterminal mit CAISSE-AP-/Concert-Protokoll (CB-Port 8888, konfigurierbae), physische AZERTY-Tastatur optional&lt;br /&gt;
** Konfiguration je Kasse über Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry und Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardLayout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260707|Softwarefactory 5.2.0.20260707]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260618 ==&lt;br /&gt;
&lt;br /&gt;
* Version von 5.2 auf 5.3&lt;br /&gt;
* frz. Fiskalanforderungen: erste Implementierung&lt;br /&gt;
* frz. Übersetzungen aktualisiert&lt;br /&gt;
* Verwendung frz. Tastatur in Kassiersicht&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260618|Softwarefactory 5.3.0.20260618]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260410 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Fix Performanceproblem ( eingeführt mit 4.5.7-V20260402 (OS) ), dbcaching Einstellungen&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260410|Softwarefactory 5.2.0.20260410]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260402 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Automatischer Wechsel zum Status &amp;lt;code&amp;gt;PAYMENTTERMINAL_REPEATRECEIPT&amp;lt;/code&amp;gt; im Modus 'store' (statt 'print') bei leeren Bonzeilen&lt;br /&gt;
** Neue Funktion &amp;lt;code&amp;gt;attachRemarks&amp;lt;/code&amp;gt; zum Zeichnen von Bonbemerkungen und deren Verknüpfung mit dem Kassenbon&lt;br /&gt;
** Möglichkeit zur Eingabe von freien Bemerkungen zum Kassenbon&lt;br /&gt;
** Bonbemerkungen: &amp;lt;code&amp;gt;observeFocus&amp;lt;/code&amp;gt; von remark1/2 an Events gebunden&lt;br /&gt;
&lt;br /&gt;
* Kassenkonfiguration:&lt;br /&gt;
** Menüeintrag für Stammdaten der Bonbemerkungen hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Neue Entitäten für Bonbemerkungen (SlipRemarks)&lt;br /&gt;
** Neue Spalten &amp;lt;code&amp;gt;remark_1&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;remark_2&amp;lt;/code&amp;gt; für CashSlip-Entität&lt;br /&gt;
** Dialoge, Tabellen und Perspektive für Bonbemerkungen implementiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7.20260305 (OS) ==&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260305|Softwarefactory 5.2.0.20260305]]&lt;br /&gt;
&lt;br /&gt;
* Berichtanzeige&lt;br /&gt;
** Fix: Probleme bei der Berichtsanzeige mit schneller Klickfolge in Auswahltabelle behoben.&lt;br /&gt;
&lt;br /&gt;
* Kassenschluss:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;determineCloseExpectation&amp;lt;/code&amp;gt; - Sortierung von CashPaymentTermData nach traceNumber absteigend, um den letzten Eintrag zu erhalten&lt;br /&gt;
&lt;br /&gt;
* Kassenentsorgung:&lt;br /&gt;
** Neues Systemprodukt &amp;quot;fee&amp;quot; aktiviert&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Einige Entitäten auf &amp;lt;code&amp;gt;cacheable=false&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
** Entitäten mit escaped Spaltennamen aktualisiert&lt;br /&gt;
** Generierte Entitäten und DTOs aktualisiert&lt;br /&gt;
** Entitäten mit neuem Service Framework aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;canUnparkSelected&amp;lt;/code&amp;gt; - Ablehnung eines Slips mit Zahlungen an einer SiS-Kasse&lt;br /&gt;
** Fix: PRINT_SLIP - &amp;lt;code&amp;gt;onOK&amp;lt;/code&amp;gt; verlässt nicht, wenn Slip änderbar ist&lt;br /&gt;
** Neue Eingabeaktion für MODIFY_FLD, setzt &amp;lt;code&amp;gt;cashposiupdate&amp;lt;/code&amp;gt; auf ausgewählte Position&lt;br /&gt;
&lt;br /&gt;
* Archivierung:&lt;br /&gt;
** &amp;lt;code&amp;gt;archivDescription xml-os&amp;lt;/code&amp;gt; für XML-Format der Beschreibungsdatei für Archiv hinzugefügt&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4591</id>
		<title>Releasenotes 2026 OS.pos</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4591"/>
				<updated>2026-09-07T13:53:34Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260907 ==&lt;br /&gt;
&lt;br /&gt;
Schwerpunkt dieses Zeitraums ist die französische Fiskalkonformität '''NF 525''' (WORM-Sicherungseinrichtung, Write-once-Nachweis, Geräte-Lebenszyklus) sowie die Auslagerung des '''DSFinV-K'''-Datenmodells. Alle Änderungen liegen auf dem Branch &amp;lt;code&amp;gt;development&amp;lt;/code&amp;gt; und sind nach &amp;lt;code&amp;gt;origin/development&amp;lt;/code&amp;gt; gepusht.&lt;br /&gt;
&lt;br /&gt;
=== Neue Funktionen ===&lt;br /&gt;
&lt;br /&gt;
* '''Ausgeschlossene Zahlarten:''' Die Perspektive für ausgeschlossene Zahlungsarten wurde zur Kundenpflege verschoben.&lt;br /&gt;
* '''Benutzerverwaltung:''' Die automatische Synchronisierung der einzelnen views in der Benutzerverwaltungsperspektive wurde abgeschaltet.&lt;br /&gt;
&lt;br /&gt;
* '''NF 525 – WORM Write-once-Nachweis (v16):''' Ein zertifiziertes WORM-Gerät darf Fiskalverkäufe erst nach einem signierten &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;-Verdikt tragen. Ein asynchroner Probe-Lauf weist die Write-once-Eigenschaft nach (das Medium nimmt eine Teständerung zurück); der Verdikt wird signiert und ist „sticky&amp;quot;. ''(cache-defeat probe, verbreiterte Signaturspalte)''&lt;br /&gt;
* '''NF 525 – Zertifizierungs-Gate (v17):''' Auf einem zertifizierten Gerät führen Struktur-/Integritätsfehler zu einem harten Verkaufsstopp (STOP_SALES); auf einem nicht-zertifizierten Gerät wird die Anomalie nur als Warnung protokolliert (warn-only) und dem Kassierer als Hinweis am Verkauf angezeigt.&lt;br /&gt;
* '''NF 525 – Reaktivierung der Write-once-Bestätigung:''' Der zuvor pausierte Bestätigungs-Block wurde wieder aktiviert; der Scheduler führt ein zertifiziertes Gerät nun wieder von &amp;lt;code&amp;gt;PENDING&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;PROTECTED&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''NF 525 – Schutz gegen Zertifizierungs-Downgrade (§7.3):''' Eine bereits fiskalisch aktive, zertifizierte Kasse kann nicht mehr auf ein nicht-zertifiziertes oder entferntes Sicherungsgerät umgestellt werden (Geräte-Tausch), und ein zertifiziertes Gerät kann nicht mehr in-place ent-zertifiziert werden. Beide Wege werden abgewiesen (Umgehung der zertifizierten Durchsetzung verhindert).&lt;br /&gt;
* '''NF 525 – Auditierung von Geräte-Konfigurationsänderungen:''' Eine Änderung an der zertifizierungsrelevanten WORM-Konfiguration wird als signiertes Ereignis in das Ereignisjournal (JET) geschrieben.&lt;br /&gt;
* '''NF 525 – Retention/Archivierung beim Geräte-Tausch:''' Perioden ohne Fiskaldatensätze werden nicht mehr als leeres ZIP archiviert, sondern als schlanker „abgedeckt&amp;quot;-Marker vermerkt (kein Medium-Scan) – die „Gespeichert&amp;quot;-Rückmeldung nach einem Geräte-Tausch kommt dadurch deutlich schneller. Zum Abschluss wird eine Zusammenfassung protokolliert.&lt;br /&gt;
&lt;br /&gt;
=== Fehlerbehebungen ===&lt;br /&gt;
&lt;br /&gt;
* '''Authentifizierung:''' Die Authentifizierungs-Logger wurden zusammengefasst und schreiben wieder in eine Datei.&lt;br /&gt;
* '''NF 525 – Write-once-Probe:''' Die Anwesenheit der Probe-Datei wird nun über eine frische Verzeichnis-Enumeration gelesen (behebt eine Fehlerkennung durch veraltete Verzeichnis-Zwischenstände).&lt;br /&gt;
&lt;br /&gt;
=== Aktualisierungen ===&lt;br /&gt;
* '''Internationalisierung:''' Neue NF-525-WORM-Schlüssel (Write-once, worm_protection, warn-only) in das zentrale Übersetzungsbündel gespiegelt; allgemeine Vokabular-Erweiterungen.&lt;br /&gt;
* '''Rechnungsdruck (Invoice2p):''' NF-525-Daten in der Rechnungsvorlage berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260907|Softwarefactory 5.2.0.20260907]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260707 ==&lt;br /&gt;
&lt;br /&gt;
Diese Ausgabe bringt vor allem die Unterstützung französischer Kassen voran: eine&lt;br /&gt;
vollständige AZERTY-Tastaturunterstützung (physisch und als Bildschirmtastatur), das&lt;br /&gt;
französische Zahlungsterminal-Protokoll CAISSE-AP inklusive Simulator sowie virtuelle&lt;br /&gt;
Peripheriegeräte für Test und Diagnose. Ergänzt wird dies durch NF525-Härtungen,&lt;br /&gt;
Fehlerbehebungen bei Kartenzahlungen und eine durchgängige Vereinheitlichung der&lt;br /&gt;
Übersetzungsdateien.&lt;br /&gt;
&lt;br /&gt;
* Die '''physische französische AZERTY-Tastatur''' wird nun vollständig unterstützt. Der komplette Zeichensatz wurde auf realer Hardware getestet; die zuvor fehlende '''ù-Taste''' wurde ergänzt.&lt;br /&gt;
* Die '''Bildschirmtastatur''' (On-Screen-Keypad) &lt;br /&gt;
** bildet nun eine echte französische AZERTY-Belegung über alle drei Ebenen ab (Grundebene, Umschalt, AltGr) inklusive Akzentkomposition über die Tottasten ^ und ¨.&lt;br /&gt;
** folgt jetzt '''einheitlich der Oberflächensprache''': Französisch → AZERTY, Englisch → englische Belegung, alle übrigen Sprachen → deutsches QWERTZ. Die Belegung wird beim Öffnen des Dialogs in der aktiven Sprache neu aufgebaut.&lt;br /&gt;
* Neue Konfiguration '''Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry''' zur Auswahl der physischen Tastaturbelegung je Kasse.&lt;br /&gt;
&lt;br /&gt;
* '''CAISSE-AP – französisches Zahlungsterminal'''&lt;br /&gt;
** Unterstützung des '''Tagesabschlusses (télécollecte)''' für Concert/CAISSE-AP-Terminals; die obligatorischen Felder CB und CE werden nun sowohl in der Abschluss- als auch in der Abbruch-Anfrage übertragen.&lt;br /&gt;
&lt;br /&gt;
* NF525 / Fiskalkonformität&lt;br /&gt;
** Die '''Persistierung des Grand-Totals''' ist nun zwingende Vorbedingung für die Signatur eines Belegs – verhindert eine Signatur bei unvollständig gespeichertem Umsatzzähler. ''(net.osbee.app.pos.common d5a4578ec)''&lt;br /&gt;
&lt;br /&gt;
* Kartenzahlung&lt;br /&gt;
** Eine Kartenzahlung kann nun korrekt '''storniert''' werden: das Belegfeld (receipt) wird aus dem CJ-Feld der Concert-Antwort befüllt.&lt;br /&gt;
** Das '''Löschen einer nicht stornierbaren Terminal-Zahlung''' wird blockiert, um inkonsistente Zustände zu vermeiden. &lt;br /&gt;
** setPaymentTerminalReversal stürzt bei einer fehlerhaften Anfrage nicht mehr ab. &lt;br /&gt;
&lt;br /&gt;
* Oberfläche / Internationalisierung ===&lt;br /&gt;
** Die '''Laufzeit-Sprachumschaltung''' funktioniert nun in der Kassierperspektive&lt;br /&gt;
** Zentrale Übersetzungen aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Systemvoraussetzungen ===&lt;br /&gt;
** Für den französischen Markt: Zahlungsterminal mit CAISSE-AP-/Concert-Protokoll (CB-Port 8888, konfigurierbae), physische AZERTY-Tastatur optional&lt;br /&gt;
** Konfiguration je Kasse über Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry und Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardLayout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260707|Softwarefactory 5.2.0.20260707]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260618 ==&lt;br /&gt;
&lt;br /&gt;
* Version von 5.2 auf 5.3&lt;br /&gt;
* frz. Fiskalanforderungen: erste Implementierung&lt;br /&gt;
* frz. Übersetzungen aktualisiert&lt;br /&gt;
* Verwendung frz. Tastatur in Kassiersicht&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260618|Softwarefactory 5.3.0.20260618]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260410 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Fix Performanceproblem ( eingeführt mit 4.5.7-V20260402 (OS) ), dbcaching Einstellungen&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260410|Softwarefactory 5.2.0.20260410]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260402 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Automatischer Wechsel zum Status &amp;lt;code&amp;gt;PAYMENTTERMINAL_REPEATRECEIPT&amp;lt;/code&amp;gt; im Modus 'store' (statt 'print') bei leeren Bonzeilen&lt;br /&gt;
** Neue Funktion &amp;lt;code&amp;gt;attachRemarks&amp;lt;/code&amp;gt; zum Zeichnen von Bonbemerkungen und deren Verknüpfung mit dem Kassenbon&lt;br /&gt;
** Möglichkeit zur Eingabe von freien Bemerkungen zum Kassenbon&lt;br /&gt;
** Bonbemerkungen: &amp;lt;code&amp;gt;observeFocus&amp;lt;/code&amp;gt; von remark1/2 an Events gebunden&lt;br /&gt;
&lt;br /&gt;
* Kassenkonfiguration:&lt;br /&gt;
** Menüeintrag für Stammdaten der Bonbemerkungen hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Neue Entitäten für Bonbemerkungen (SlipRemarks)&lt;br /&gt;
** Neue Spalten &amp;lt;code&amp;gt;remark_1&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;remark_2&amp;lt;/code&amp;gt; für CashSlip-Entität&lt;br /&gt;
** Dialoge, Tabellen und Perspektive für Bonbemerkungen implementiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7.20260305 (OS) ==&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260305|Softwarefactory 5.2.0.20260305]]&lt;br /&gt;
&lt;br /&gt;
* Berichtanzeige&lt;br /&gt;
** Fix: Probleme bei der Berichtsanzeige mit schneller Klickfolge in Auswahltabelle behoben.&lt;br /&gt;
&lt;br /&gt;
* Kassenschluss:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;determineCloseExpectation&amp;lt;/code&amp;gt; - Sortierung von CashPaymentTermData nach traceNumber absteigend, um den letzten Eintrag zu erhalten&lt;br /&gt;
&lt;br /&gt;
* Kassenentsorgung:&lt;br /&gt;
** Neues Systemprodukt &amp;quot;fee&amp;quot; aktiviert&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Einige Entitäten auf &amp;lt;code&amp;gt;cacheable=false&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
** Entitäten mit escaped Spaltennamen aktualisiert&lt;br /&gt;
** Generierte Entitäten und DTOs aktualisiert&lt;br /&gt;
** Entitäten mit neuem Service Framework aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;canUnparkSelected&amp;lt;/code&amp;gt; - Ablehnung eines Slips mit Zahlungen an einer SiS-Kasse&lt;br /&gt;
** Fix: PRINT_SLIP - &amp;lt;code&amp;gt;onOK&amp;lt;/code&amp;gt; verlässt nicht, wenn Slip änderbar ist&lt;br /&gt;
** Neue Eingabeaktion für MODIFY_FLD, setzt &amp;lt;code&amp;gt;cashposiupdate&amp;lt;/code&amp;gt; auf ausgewählte Position&lt;br /&gt;
&lt;br /&gt;
* Archivierung:&lt;br /&gt;
** &amp;lt;code&amp;gt;archivDescription xml-os&amp;lt;/code&amp;gt; für XML-Format der Beschreibungsdatei für Archiv hinzugefügt&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4590</id>
		<title>Releasenotes 2026 OS.Softwarefactory</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Softwarefactory&amp;diff=4590"/>
				<updated>2026-09-07T13:47:46Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260907 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Überarbeitung der Codebasis zur Entfernung veralteter und nicht benötigter Bundles&lt;br /&gt;
** Überarbeitung des Loginvorgangs / der Cookiespeicherung bei &amp;quot;remember me&amp;quot;. Es werden keine kritischen Daten mehr im Cookie gespeichert.&lt;br /&gt;
** Verbesserung der Übersetzungen&lt;br /&gt;
** Anpassungen für frz. Fiskalanforderungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Laden der Übersetzungen in die interne Tabelle beim Systemstart deutlich beschleunigt. Dadurch verbessertes Startverhalten der Anwendungen.&lt;br /&gt;
** Verbesserungen bei der frz. Tastaturunterstützung&lt;br /&gt;
** Verbesserungen der Übersetzungen&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0.20260618 ==&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework (Allgemein):&lt;br /&gt;
** Blockieren durch das Laden von Diensten während des Starts vermieden, dadurch schnellerer Anwendungsstart. Anderes Verhalten beim Start an der Benutzeroberfläche.&lt;br /&gt;
** Französische Tastaturunterstützung (AZERTY) im Keymapper der Statemachine ergänzt&lt;br /&gt;
** Login bezieht Build-Version und Hersteller nun aus den &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; (einheitliche Quelle)&lt;br /&gt;
** Neue gemeinsame Hilfsmethoden &amp;lt;code&amp;gt;getBuildVersion()&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;getVendor()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;BundleUtilities&amp;lt;/code&amp;gt; zur Ermittlung der Build-Identität&lt;br /&gt;
** &amp;lt;code&amp;gt;MonitoringService&amp;lt;/code&amp;gt; setzt die Zeitstempel von &amp;lt;code&amp;gt;lastError&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;lastWarning&amp;lt;/code&amp;gt; nicht mehr zurück&lt;br /&gt;
** Fix: NPE in &amp;lt;code&amp;gt;org.eclipse.osbp.xtext.dialog.AutowireUiFactory&amp;lt;/code&amp;gt; behoben&lt;br /&gt;
** Version von 5.2.0 auf 5.3.0 angehoben&lt;br /&gt;
&lt;br /&gt;
* UI &amp;amp; Themes:&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-reverify&amp;lt;/code&amp;gt; (16px/32px) für die NF525-Schaltfläche zur erneuten Archivintegritätsprüfung&lt;br /&gt;
** Neues Icon &amp;lt;code&amp;gt;action-refresh.png&amp;lt;/code&amp;gt; ergänzt&lt;br /&gt;
** Grid – horizontale Bildlaufleiste wiederhergestellt&lt;br /&gt;
** Grid - Flex-Layout für Kassen-/POS-Grids wiederhergestellt (kollabierte Spalten behoben)&lt;br /&gt;
** französische Übersetzungen überarbeitet&lt;br /&gt;
&lt;br /&gt;
* Grammatiken/Generierung:&lt;br /&gt;
** org.eclipse.osbp.dsl: Benutzerdefinierte &amp;lt;code&amp;gt;@PreRemove&amp;lt;/code&amp;gt;-Hooks werden in der generierten &amp;lt;code&amp;gt;preRemove()&amp;lt;/code&amp;gt;-Methode zusammengeführt&lt;br /&gt;
** org.eclipse.osbp.xtext.i18n: i18n-Generator erzeugt nun das byte-genaue Eclipse-Babel-Format&lt;br /&gt;
&lt;br /&gt;
* POS Framework für franz. Fiskalanforderungen eingeführt&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260410 ==&lt;br /&gt;
&lt;br /&gt;
* POS Framework: &lt;br /&gt;
** Performanceverbesserung beim Kassieren&lt;br /&gt;
** Multi-Protokoll Unterstützung für Paymentterminal &lt;br /&gt;
*** frz. Protokolle &amp;quot;Concert&amp;quot;, &amp;quot;Protocol E&amp;quot;&lt;br /&gt;
*** &amp;quot;Mock&amp;quot; für Tests&lt;br /&gt;
*** Statemachine DSL erweitert: protocol Parameter für Paymentterminal&lt;br /&gt;
*** &amp;quot;Shared Payment Terminal&amp;quot;&lt;br /&gt;
**** locking im PaymentTerminalService implementiert&lt;br /&gt;
**** pro Terminal über ConfigService einstellbar&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260402 ==&lt;br /&gt;
&lt;br /&gt;
Die Version verbessert das Startverhalten einer Anwendung und bringt mehr Informationen über den Status des Starts auf den Bildschirm&lt;br /&gt;
&lt;br /&gt;
* OSBP Framework:&lt;br /&gt;
** Anzeige des Persistenzservice-Status auf dem Login-Bildschirm&lt;br /&gt;
** Information über den Persistenzservice auf der Fehlerseite hinzugefügt&lt;br /&gt;
** Beim Start wird nun überall auf den Persistenzservice statt nur auf den ConfigurationService gewartet&lt;br /&gt;
&lt;br /&gt;
* BPM:&lt;br /&gt;
** Fix: net.osbee.bpm: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
* POS Framework:&lt;br /&gt;
** Fix: net.osbee.pos.epay: Deadlock beim Anwendungsstart behoben&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260305 ==&lt;br /&gt;
&lt;br /&gt;
=== Report Anzeige ===&lt;br /&gt;
&lt;br /&gt;
Diese Version konzentriert sich auf '''Stabilitätsverbesserungen''' für das Report-Rendering-System, insbesondere auf die Behebung von Race Conditions und Anzeigeproblemen, die bei schnellen Benutzerinteraktionen auftraten.&lt;br /&gt;
&lt;br /&gt;
* Race Condition beim Report-Rendering&lt;br /&gt;
** '''Behoben: Schnelles Auswählen/Abwählen führte dazu, dass Reports mit ungültigen oder fehlenden Filtern gerendert wurden'''&lt;br /&gt;
*** Reports verarbeiten nun korrekt wenn Benutzer schnell Elemente auswählen und wieder abwählen&lt;br /&gt;
*** Filteränderungen werden blockiert, während ein Render-Vorgang läuft&lt;br /&gt;
*** Ausstehende Filteränderungen werden nachverfolgt und nach Abschluss des Renderings erneut ausgewertet&lt;br /&gt;
*** Reports mit &amp;lt;code&amp;gt;selectById&amp;lt;/code&amp;gt; werden nun korrekt ausgeblendet, wenn nichts ausgewählt ist&lt;br /&gt;
&lt;br /&gt;
* PDF-Anzeigeskalierungsproblem &lt;br /&gt;
** '''Behoben: PDF-Skalierungsprobleme durch Neuerstellung des BrowserFrames bei jedem Rendering'''&lt;br /&gt;
&lt;br /&gt;
=== Anmeldebildschirm ===&lt;br /&gt;
&lt;br /&gt;
Der Anmeldebildschirm zeigt nun während der Initialisierung des Persistence-Services einen Statustext an.&lt;br /&gt;
&lt;br /&gt;
* Lauftext-Anzeige (Marquee) mit dem aktuellen Status des Persistence-Services&lt;br /&gt;
* Deaktivierung aller Anmeldesteuerelemente während der Wartezeit&lt;br /&gt;
&lt;br /&gt;
=== Start der Anwendung ===&lt;br /&gt;
&lt;br /&gt;
* Blockierungen der Initialisierungsvorgänge durch Warten auf Serviceregistrierung während des Anwendungsstarts reduziert. &amp;lt;br&amp;gt;Dadurch verändert sich das Startverhalten, insbesondere die Reihenfolge der Anwendung. Insgesamt schnelleres Laden der Bundles.&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4589</id>
		<title>Releasenotes 2026 OS.pos</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.pos&amp;diff=4589"/>
				<updated>2026-09-07T13:44:47Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260907 ==&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260907|Softwarefactory 5.2.0.20260907]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260707 ==&lt;br /&gt;
&lt;br /&gt;
Diese Ausgabe bringt vor allem die Unterstützung französischer Kassen voran: eine&lt;br /&gt;
vollständige AZERTY-Tastaturunterstützung (physisch und als Bildschirmtastatur), das&lt;br /&gt;
französische Zahlungsterminal-Protokoll CAISSE-AP inklusive Simulator sowie virtuelle&lt;br /&gt;
Peripheriegeräte für Test und Diagnose. Ergänzt wird dies durch NF525-Härtungen,&lt;br /&gt;
Fehlerbehebungen bei Kartenzahlungen und eine durchgängige Vereinheitlichung der&lt;br /&gt;
Übersetzungsdateien.&lt;br /&gt;
&lt;br /&gt;
* Die '''physische französische AZERTY-Tastatur''' wird nun vollständig unterstützt. Der komplette Zeichensatz wurde auf realer Hardware getestet; die zuvor fehlende '''ù-Taste''' wurde ergänzt.&lt;br /&gt;
* Die '''Bildschirmtastatur''' (On-Screen-Keypad) &lt;br /&gt;
** bildet nun eine echte französische AZERTY-Belegung über alle drei Ebenen ab (Grundebene, Umschalt, AltGr) inklusive Akzentkomposition über die Tottasten ^ und ¨.&lt;br /&gt;
** folgt jetzt '''einheitlich der Oberflächensprache''': Französisch → AZERTY, Englisch → englische Belegung, alle übrigen Sprachen → deutsches QWERTZ. Die Belegung wird beim Öffnen des Dialogs in der aktiven Sprache neu aufgebaut.&lt;br /&gt;
* Neue Konfiguration '''Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry''' zur Auswahl der physischen Tastaturbelegung je Kasse.&lt;br /&gt;
&lt;br /&gt;
* '''CAISSE-AP – französisches Zahlungsterminal'''&lt;br /&gt;
** Unterstützung des '''Tagesabschlusses (télécollecte)''' für Concert/CAISSE-AP-Terminals; die obligatorischen Felder CB und CE werden nun sowohl in der Abschluss- als auch in der Abbruch-Anfrage übertragen.&lt;br /&gt;
&lt;br /&gt;
* NF525 / Fiskalkonformität&lt;br /&gt;
** Die '''Persistierung des Grand-Totals''' ist nun zwingende Vorbedingung für die Signatur eines Belegs – verhindert eine Signatur bei unvollständig gespeichertem Umsatzzähler. ''(net.osbee.app.pos.common d5a4578ec)''&lt;br /&gt;
&lt;br /&gt;
* Kartenzahlung&lt;br /&gt;
** Eine Kartenzahlung kann nun korrekt '''storniert''' werden: das Belegfeld (receipt) wird aus dem CJ-Feld der Concert-Antwort befüllt.&lt;br /&gt;
** Das '''Löschen einer nicht stornierbaren Terminal-Zahlung''' wird blockiert, um inkonsistente Zustände zu vermeiden. &lt;br /&gt;
** setPaymentTerminalReversal stürzt bei einer fehlerhaften Anfrage nicht mehr ab. &lt;br /&gt;
&lt;br /&gt;
* Oberfläche / Internationalisierung ===&lt;br /&gt;
** Die '''Laufzeit-Sprachumschaltung''' funktioniert nun in der Kassierperspektive&lt;br /&gt;
** Zentrale Übersetzungen aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Systemvoraussetzungen ===&lt;br /&gt;
** Für den französischen Markt: Zahlungsterminal mit CAISSE-AP-/Concert-Protokoll (CB-Port 8888, konfigurierbae), physische AZERTY-Tastatur optional&lt;br /&gt;
** Konfiguration je Kasse über Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardCountry und Hardware/&amp;amp;lt;host&amp;amp;gt;-KeyboardLayout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260707|Softwarefactory 5.2.0.20260707]]&lt;br /&gt;
&lt;br /&gt;
== Version 5.3.0-V20260618 ==&lt;br /&gt;
&lt;br /&gt;
* Version von 5.2 auf 5.3&lt;br /&gt;
* frz. Fiskalanforderungen: erste Implementierung&lt;br /&gt;
* frz. Übersetzungen aktualisiert&lt;br /&gt;
* Verwendung frz. Tastatur in Kassiersicht&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260618|Softwarefactory 5.3.0.20260618]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260410 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Allgemein:&lt;br /&gt;
** Fix Performanceproblem ( eingeführt mit 4.5.7-V20260402 (OS) ), dbcaching Einstellungen&lt;br /&gt;
&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260410|Softwarefactory 5.2.0.20260410]]&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7-V20260402 (OS) ==&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Automatischer Wechsel zum Status &amp;lt;code&amp;gt;PAYMENTTERMINAL_REPEATRECEIPT&amp;lt;/code&amp;gt; im Modus 'store' (statt 'print') bei leeren Bonzeilen&lt;br /&gt;
** Neue Funktion &amp;lt;code&amp;gt;attachRemarks&amp;lt;/code&amp;gt; zum Zeichnen von Bonbemerkungen und deren Verknüpfung mit dem Kassenbon&lt;br /&gt;
** Möglichkeit zur Eingabe von freien Bemerkungen zum Kassenbon&lt;br /&gt;
** Bonbemerkungen: &amp;lt;code&amp;gt;observeFocus&amp;lt;/code&amp;gt; von remark1/2 an Events gebunden&lt;br /&gt;
&lt;br /&gt;
* Kassenkonfiguration:&lt;br /&gt;
** Menüeintrag für Stammdaten der Bonbemerkungen hinzugefügt&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Neue Entitäten für Bonbemerkungen (SlipRemarks)&lt;br /&gt;
** Neue Spalten &amp;lt;code&amp;gt;remark_1&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;remark_2&amp;lt;/code&amp;gt; für CashSlip-Entität&lt;br /&gt;
** Dialoge, Tabellen und Perspektive für Bonbemerkungen implementiert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version 4.5.7.20260305 (OS) ==&lt;br /&gt;
* Verwendung der aktuellen [[Releasenotes_2026_OS.Softwarefactory#Version_5.2.0.20260305|Softwarefactory 5.2.0.20260305]]&lt;br /&gt;
&lt;br /&gt;
* Berichtanzeige&lt;br /&gt;
** Fix: Probleme bei der Berichtsanzeige mit schneller Klickfolge in Auswahltabelle behoben.&lt;br /&gt;
&lt;br /&gt;
* Kassenschluss:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;determineCloseExpectation&amp;lt;/code&amp;gt; - Sortierung von CashPaymentTermData nach traceNumber absteigend, um den letzten Eintrag zu erhalten&lt;br /&gt;
&lt;br /&gt;
* Kassenentsorgung:&lt;br /&gt;
** Neues Systemprodukt &amp;quot;fee&amp;quot; aktiviert&lt;br /&gt;
&lt;br /&gt;
* Datenmodell:&lt;br /&gt;
** Einige Entitäten auf &amp;lt;code&amp;gt;cacheable=false&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
** Entitäten mit escaped Spaltennamen aktualisiert&lt;br /&gt;
** Generierte Entitäten und DTOs aktualisiert&lt;br /&gt;
** Entitäten mit neuem Service Framework aktualisiert&lt;br /&gt;
&lt;br /&gt;
* Kassiervorgang:&lt;br /&gt;
** Fix: &amp;lt;code&amp;gt;canUnparkSelected&amp;lt;/code&amp;gt; - Ablehnung eines Slips mit Zahlungen an einer SiS-Kasse&lt;br /&gt;
** Fix: PRINT_SLIP - &amp;lt;code&amp;gt;onOK&amp;lt;/code&amp;gt; verlässt nicht, wenn Slip änderbar ist&lt;br /&gt;
** Neue Eingabeaktion für MODIFY_FLD, setzt &amp;lt;code&amp;gt;cashposiupdate&amp;lt;/code&amp;gt; auf ausgewählte Position&lt;br /&gt;
&lt;br /&gt;
* Archivierung:&lt;br /&gt;
** &amp;lt;code&amp;gt;archivDescription xml-os&amp;lt;/code&amp;gt; für XML-Format der Beschreibungsdatei für Archiv hinzugefügt&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4588</id>
		<title>Releasenotes 2026 OS.Interchange</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4588"/>
				<updated>2026-08-04T15:14:33Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Version 5.2.0.20260707 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260707 OS.Softwarefactory 5.3.20260707] und früher&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4587</id>
		<title>Releasenotes 2026 OS.Interchange</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4587"/>
				<updated>2026-08-04T15:13:54Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Version 5.2.0.20260707 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260707 OS.Softwarefactory 5.3.20260707]&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4586</id>
		<title>Releasenotes 2026 OS.Interchange</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Releasenotes_2026_OS.Interchange&amp;diff=4586"/>
				<updated>2026-08-04T15:13:30Z</updated>
		
		<summary type="html">&lt;p&gt;Mollik: /* Version 5.2.0.20260707 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Releasenotes | --&amp;gt; zurück zu Releasenotes ]] ==&lt;br /&gt;
&lt;br /&gt;
== Version 5.2.0.20260707 ==&lt;br /&gt;
&lt;br /&gt;
* Build mit aktueller Softwarefactory &amp;lt;br&amp;gt;Änderung siehe [https://download.osbee.org/documentation/index.php/Releasenotes_2026_OS.Softwarefactory#Version_5.3.0.20260707 5.3.20260707]&lt;/div&gt;</summary>
		<author><name>Mollik</name></author>	</entry>

	</feed>