Releasenotes 2026 OS.Softwarefactory
From OS.bee documentation
Contents
--> zurück zu Releasenotes
Version 5.3.0.20261012
- OSBP Framework:
- org.eclipse.osbp.dsl:
- Fix: Speicherwachstum durch DTOs behoben (1) –
AbstractOppositeDtoListundMappingContextdeklarieren keinfinalize()mehr. JedeOppositeDtoListundOppositeContainmentDtoListwar 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 inclear(),remove()undresolve()abgemeldet - 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
DetachedEntityRefinorg.eclipse.osbp.dsl.dto.lib). Die Entität hielt über ihre Lazy-Beziehungen den gesamten Persistenzkontext (RepeatableWriteUnitOfWorksamt aller darin geklonten Entitäten), obwohlLazyManyToOneResolvernur 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 Mapperinitialize(entity)vorsetIdaufruft 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 (DtoTypesBuilder) erzeugt den neuen Aufruf; wirksam wird die Änderung erst mit neu generierten DTOs. Dasrc-genversioniert 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 eindto.libab dem 07.10.2026 voraus -
LazyManyToOneResolvermeldet nun, welche Zeile er nicht nachladen konnte. Liefertem.findkein Ergebnis, wird ein Fehler mit Entitätsklasse, ID, Eigenschaft und DTO-Klasse protokolliert und eineIllegalStateExceptiongeworfen. Bisher erschien an dieser Stelle nur eineNullPointerExceptionohne Hinweis auf die Ursache - Fix:
AbstractDTOService.closeEntityManager()fordert eine offene Transaktion nicht mehr nach jedem Lesezugriff zur Freigabe auf. Das Verhalten ist unverändert, die Warnungdispose() refusederscheint aber nur noch, wenn tatsächlich jemand eine offene Transaktion abbauen will (zuvor rund zwei Meldungen je Verkauf und etwa 175 je Kassenabschluss) - Fix: Mit
-DsendTransactionEventAsync=truewarteteTransactionHandler.dispose()nach jedem Commit mindestens 800 ms, zuzüglich weiterer 800 ms je Durchlauf mit nicht leerer Ereigniswarteschlange – währendSessionManagerdie Sperre aller Transaktions-Handler hielt. An einer Kasse waren das mehrere Sekunden je Bon.dispose()ü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
- Fix: Speicherwachstum durch DTOs behoben (1) –
- Fix:
MetadataBuildermacht beim ersten Scan zunächst alle gestarteten Bundles mit dem HeaderOSBP-RuntimeBuilder-BundleSpaceoderFactory-Modelim 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 ausorg.eclipse.osbp.system.configurationnennt ein DTO ausorg.eclipse.osbp.system.configuration.basemit der höheren Bundle-ID, die Klasse wurde also je nach Reihenfolge beim Start nicht gefunden. In diesem Fall scheiterteactivate(), 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 - Fix: org.eclipse.osbp.dsl, org.eclipse.osbp.runtime: Vier Fehler in der sitzungsbezogenen Transaktionsverwaltung behoben. (a)
SessionManager.removeSession()gab den Transaktions-Handler unter einem Schlüssel frei, der nie passen konnte (ISessionhat keintoString()), das Sicherheitsnetz griff also nie. (b)disposeTransactionHandlerentfernte 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.ITransactionHandlererhält dafürisDisposable()als Default-Methode. (c) Die Freigabe nachtransactionBegin/Commit/Rollbacksteht nun in einemfinally; einError, insbesondere einOutOfMemoryError, ließ den Handler bisher mit Entity Manager in einer statischen Map zurück. (d)txnIsOpenwird auch bei einem fehlgeschlagenen Commit oder Rollback zurückgesetzt - org.eclipse.osbp.persistence:
- Der Startstatus nennt nun den Dienst, auf den der Persistenzdienst noch wartet. Die neue Komponente
PersistenceStartupStatushat 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 - 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“
- Der Startstatus nennt nun den Dienst, auf den der Persistenzdienst noch wartet. Die neue Komponente
- 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
dropRowsfrei; nach einem allgemeinenItemSetChange, wie ihnremoveAllItems()undaddAll()auslösen, blieben sie imKeyMapperstehen und hielten jede jemals angezeigte Zeile samt ihrem DTO-Graphen.GridPresentation.CustomGridmerkt sich die vergebenen Schlüssel und entfernt die nicht mehr enthaltenen - org.osbee.datainterchange: Fix: FreeMarkers gemeinsam genutzte
InvalidReferenceExceptionhä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 - 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
- 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
barcodefür String-Attribute. Ein Attribut mitkey="barcode" value="QRCode-128"wird schreibgeschützt als Barcode-Bild angezeigt, das aus seinem Klartextwert erzeugt wird – im Dialog überBlobComponentundBlobUploadComponent(letztere dann ohne Schaltflächen) und in Grid-Spalten über den Blob-Bildkonverter - 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 (
DetachedEntityRef)
- org.eclipse.osbp.dsl:
- DSL:
- org.eclipse.osbp.xtext.table, org.eclipse.osbp.xtext.table.common: Für Attribute mit der Eigenschaft
barcodewird ein Barcode-Lookup generiert; eine String-Zelle wird als Barcode-Bild angezeigt, wenn das Lookup einen Barcode-Typ trägt
- org.eclipse.osbp.xtext.table, org.eclipse.osbp.xtext.table.common: Für Attribute mit der Eigenschaft
- POS Framework:
- net.osbee.pos.tse: Aufrufer können die BSI-Zertifizierungs-ID der TSE abfragen. Die SE-API bietet
getCertificationIdin beiden API-Versionen, keiner der beiden Adapter reichte den Aufruf bisher durch - net.osbee.pos.tse, net.osbee.pos.rksv: DTOs neu generiert; sie halten nur noch Klasse und ID ihrer Entität (
DetachedEntityRef)
- net.osbee.pos.tse: Aufrufer können die BSI-Zertifizierungs-ID der TSE abfragen. Die SE-API bietet
Version 5.3.0.20261006
- OSBP Framework (Allgemein):
- Einführung der http://<host>:<port>/restartService Seite. Damit können entweder Sessions gekillt oder der Service der Anwendung neu gestartet werden.
- Bei Nichterreichbarkeit der Datenbank wird die Anwendung beendet und der Fehlerstatus auf der Statusseite angezeigt.
- Das eingebettete
shiro-all-1.2.3.jarwurde durchshiro-coreundshiro-webin 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.encoder-1.2.3.jarkommt hinzu, weilshiro-web1.13org.owasp.encoderzwingend importiert. - Anmeldung:
- Fix:
LDAPRealmlö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 (invalidDNSyntax), sodass einuserDnTemplatevon{0}zwar anmeldete, dann aber an den Attributen scheiterte.resolveUserDnsucht nun überuserPrincipalName,sAMAccountNameodermail; die Suchbasis stammt aus dem RootDSE. Bestehende Vorlagen der Formcn={0},ou=...verhalten sich unverändert. Zugleich behoben: eineStringIndexOutOfBoundsExceptionim E-Mail-Zweig und das Einsetzen des Benutzernamens in den Suchfilter per Verkettung (jetzt als{0}, von JNDI maskiert) - Fix:
LDAPRealm.getUserDnmaskierte nur das Komma.escapeDnValuedeckt nun alle Zeichen nach RFC 4514 Abschnitt 2.4 ab, sodass ein Benutzername die Bedeutung des DN nicht mehr verändern kann - 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.
- 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,
SameSite=Laxund unter https mitSecuregeschrieben. 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 - Fix: Kennwörter erscheinen nicht mehr im Log – weder bei der Anmeldung in
AuthenticationProvider.check()(bisher im Klartext auf DEBUG) noch beim Zurücksetzen, wo der Nachrichtentext mit dem neuen Kennwort dreimal geschrieben wurde - Die Anzeige des neuen Kennworts auf der Anmeldemaske, wenn keine E-Mail versendet werden kann, ist nun eine konfigurierte Betriebsart:
Userinterface/showResetPasswordOnScreen, standardmäßig aus, mit Protokollierung auf WARN. Installationen ohne Mailserver müssen den Parameter einmalig setzen - Fix:
doResetPasswordhebt 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 überdoUnlock
- Fix:
- System Configuration:
- Parameter
RememberMeSecretinIConfigurationServiceergänzt (GLOBAL_PARAMETERS/RememberMeSecret). Der Schlüssel wird je Installation bei der ersten Benutzung der "RememberMe" Funktionalität einmal aus gezogen und von allen Anmeldungen geteilt; das Löschen des Eintrags macht alle „Angemeldet bleiben“-Cookies auf einmal ungültig. - Fix: Die Einstellungen füllten sich mit Platzhaltern „not set“.
ConfigurationService.getConfigurationStringspeicherte bei leerem Vorgabewert den Platzhalter und lieferte ihn als leere Zeichenkette zurück, sodassaddConfigurationstets eine weitere Zeile anhängte.addConfigurationentfernt nun die Platzhalterzeilen des Schlüssels vor dem Schreiben, und ein gespeicherter Platzhalter gilt als „kein Wert“.deleteConfigurationssetzt zusätzlich den Cache zurück; gelöschte Einträge kamen bisher beim nächsten Lesen wieder
- Parameter
- Build & Infrastruktur:
- Fix: org.eclipse.osbp.dependencies-mbp: Das Bundle
org.eclipse.osbp.dependencies.bundle.activemq.all.osgienthält kein Log4j und kein eingebettetes slf4j mehr.activemq-allbrachte eine vollständige Kopie von Apache Log4j 1.2.17 mit (359 Klassen, darunterJDBCAppender,JMSAppender,JMSSinkund chainsaw – betroffen von CVE-2021-4104, CVE-2022-23302, CVE-2022-23305 und CVE-2022-23307) sowie slf4j-api 1.7.13 undslf4j-log4j12.Include-Resourcebindet das Hersteller-Jar nun ohneorg.apache.log4j,org.slf4j, deren Maven-Koordinaten, dielog4j.propertiesund SpringsLog4jConfigurerein. ActiveMQ bezieht slf4j stattdessen aus dem Produkt (org.slf4j.api1.7.36)
- Fix: org.eclipse.osbp.dependencies-mbp: Das Bundle
- UI & Themes:
- Neue Dienststeuerungsseite unter
/restartService.- 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
- Alle Aktionen der Dienststeuerungsseite werden im
MonitoringServiceunter 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
- Neue Dienststeuerungsseite unter
Version 5.3.0.20260907
- OSBP Framework (Allgemein):
- Überarbeitung der Codebasis zur Entfernung veralteter und nicht benötigter Bundles
- Überarbeitung des Loginvorgangs / der Cookiespeicherung bei "remember me". Es werden keine kritischen Daten mehr im Cookie gespeichert.
- Verbesserung der Übersetzungen
- Anpassungen für frz. Fiskalanforderungen
Version 5.3.0.20260707
- OSBP Framework (Allgemein):
- Laden der Übersetzungen in die interne Tabelle beim Systemstart deutlich beschleunigt. Dadurch verbessertes Startverhalten der Anwendungen.
- Verbesserungen bei der frz. Tastaturunterstützung
- Verbesserungen der Übersetzungen
Version 5.3.0.20260618
- OSBP Framework (Allgemein):
- Blockieren durch das Laden von Diensten während des Starts vermieden, dadurch schnellerer Anwendungsstart. Anderes Verhalten beim Start an der Benutzeroberfläche.
- Französische Tastaturunterstützung (AZERTY) im Keymapper der Statemachine ergänzt
- Login bezieht Build-Version und Hersteller nun aus den
BundleUtilities(einheitliche Quelle) - Neue gemeinsame Hilfsmethoden
getBuildVersion()/getVendor()inBundleUtilitieszur Ermittlung der Build-Identität -
MonitoringServicesetzt die Zeitstempel vonlastErrorundlastWarningnicht mehr zurück - Fix: NPE in
org.eclipse.osbp.xtext.dialog.AutowireUiFactorybehoben - Version von 5.2.0 auf 5.3.0 angehoben
- UI & Themes:
- Neues Icon
action-reverify(16px/32px) für die NF525-Schaltfläche zur erneuten Archivintegritätsprüfung - Neues Icon
action-refresh.pngergänzt - Grid – horizontale Bildlaufleiste wiederhergestellt
- Grid - Flex-Layout für Kassen-/POS-Grids wiederhergestellt (kollabierte Spalten behoben)
- französische Übersetzungen überarbeitet
- Neues Icon
- Grammatiken/Generierung:
- org.eclipse.osbp.dsl: Benutzerdefinierte
@PreRemove-Hooks werden in der generiertenpreRemove()-Methode zusammengeführt - org.eclipse.osbp.xtext.i18n: i18n-Generator erzeugt nun das byte-genaue Eclipse-Babel-Format
- org.eclipse.osbp.dsl: Benutzerdefinierte
- POS Framework für franz. Fiskalanforderungen eingeführt
Version 5.2.0.20260410
- POS Framework:
- Performanceverbesserung beim Kassieren
- Multi-Protokoll Unterstützung für Paymentterminal
- frz. Protokolle "Concert", "Protocol E"
- "Mock" für Tests
- Statemachine DSL erweitert: protocol Parameter für Paymentterminal
- "Shared Payment Terminal"
- locking im PaymentTerminalService implementiert
- pro Terminal über ConfigService einstellbar
Version 5.2.0.20260402
Die Version verbessert das Startverhalten einer Anwendung und bringt mehr Informationen über den Status des Starts auf den Bildschirm
- OSBP Framework:
- Anzeige des Persistenzservice-Status auf dem Login-Bildschirm
- Information über den Persistenzservice auf der Fehlerseite hinzugefügt
- Beim Start wird nun überall auf den Persistenzservice statt nur auf den ConfigurationService gewartet
- BPM:
- Fix: net.osbee.bpm: Deadlock beim Anwendungsstart behoben
- POS Framework:
- Fix: net.osbee.pos.epay: Deadlock beim Anwendungsstart behoben
Version 5.2.0.20260305
Report Anzeige
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.
- Race Condition beim Report-Rendering
- Behoben: Schnelles Auswählen/Abwählen führte dazu, dass Reports mit ungültigen oder fehlenden Filtern gerendert wurden
- Reports verarbeiten nun korrekt wenn Benutzer schnell Elemente auswählen und wieder abwählen
- Filteränderungen werden blockiert, während ein Render-Vorgang läuft
- Ausstehende Filteränderungen werden nachverfolgt und nach Abschluss des Renderings erneut ausgewertet
- Reports mit
selectByIdwerden nun korrekt ausgeblendet, wenn nichts ausgewählt ist
- Behoben: Schnelles Auswählen/Abwählen führte dazu, dass Reports mit ungültigen oder fehlenden Filtern gerendert wurden
- PDF-Anzeigeskalierungsproblem
- Behoben: PDF-Skalierungsprobleme durch Neuerstellung des BrowserFrames bei jedem Rendering
Anmeldebildschirm
Der Anmeldebildschirm zeigt nun während der Initialisierung des Persistence-Services einen Statustext an.
- Lauftext-Anzeige (Marquee) mit dem aktuellen Status des Persistence-Services
- Deaktivierung aller Anmeldesteuerelemente während der Wartezeit
Start der Anwendung
- Blockierungen der Initialisierungsvorgänge durch Warten auf Serviceregistrierung während des Anwendungsstarts reduziert.
Dadurch verändert sich das Startverhalten, insbesondere die Reihenfolge der Anwendung. Insgesamt schnelleres Laden der Bundles.