Release Notes

Version 25.7.0

Faktor-IPS 25.7 benötigt jetzt sowohl für das Eclipse-Plugin als auch zur Runtime Java 21.

JAXB-Adapter für eigene Datentypen

Bei der Definition eigener Datentypen in der .ipsproject-Datei kann jetzt über das Attribut jaxbXmlJavaTypeAdapterClass ein eigener XmlAdapter angegeben werden, der dann an Feldern, welche diesen Datentyp nutzen, mit einer @XmlJavaTypeAdapter-Annotation generiert wird. Details siehe JAXB-Adapter.

Externe Internationalisierung von Multi-Language-Strings

Als mehrsprachig markierte String-Attribute können jetzt neben der Produktkonfiguration auch über i18n.properties-Dateien um neue Sprachen ergänzt werden. Dazu muss im gleichen Package, in dem auch die model-label-and-descriptions_<language>.properties-Datei(en) der dem Produktbaustein zugrunde liegenden Produktbausteinklasse (das Package steht dort auch in der @IpsDocumented-Annotation) liegen, eine (oder mehrere) Dateien nach dem Muster i18n_<language>.properties angelegt werden. In der Datei können dann Properties mit dem Key <Runtime-ID des Produktbausteins, wobei ' ' durch '_' ersetzt wird>.<Attributname> angelegt werden, um entsprechende Werte für die gewählte Sprache zu ergänzen. Für mehrsprachige Multi-Value-Attribute kann der Key um einen 0-basierten Index ergänzt werden, also <Runtime-ID>.<Attributname>.<Index>.

Auch Enum-Inhalte können über diesen Mechanismus übersetzt werden, wobei die Keys dabei dem Muster <qualifizierter Name des Contents>.<Name des Attributs>.<Wert des ID-Attributs> folgen. Werte, die bereits im Enum-Type definiert sind konnten bereits bisher übersetzt werden, wobei dabei .properties-Dateien mit dem Namen des EnumTypes und Keys mit dem Muster <Name des Attributs>_<Wert des ID-Attributs>.

Default-Implementierung für areValuesEqual() in IDeltaComputationOptions

Für areValuesEqual() in IDeltaComputationOptions wurde nun eine Standardimplementierung hinzugefügt, welche null und Leerstrings als gleich behandelt. Dadurch entfällt der wiederholte Implementierungsaufwand in den jeweiligen Ableitungen.

Serialisierbare Default-Implementierung für IRuntimeRepositoryLookup

Um ein ClassloaderRuntimeRepository serialisierbar zu machen, genügt es jetzt, die Methode withLookup() aufzurufen. Mehr dazu im Javadoc und der Dokumentation unter Serialization & IRuntimeRepositoryLookup.

API-Änderungen

Generierter Code

  • Der user-code-Block für überschriebene Validierungsregeln wird jetzt enger gefasst, so dass bereits außerhalb alles Notwendige (super-Methodenaufruf, Finden und ggf. Entfernen der alten Message) geschieht und im Block nur noch ggf. andere Prüfungen und Parameterbelegungen implementiert werden müssen.

    • Bei bereits bestehendem Code kann dies zu dupliziertem Code (ehemals im, jetzt außerhalb des User-Blocks) führen, so dass der handgeschriebene Code angepasst werden muss.

  • Tabellenklassen werden jetzt als final generiert. Faktor-IPS erlaubt keine Ableitung von Tabellen und die Aufruffolge Konstruktor → init()initKeyMaps()/performAdditionalInitializations() wird vom Java-21-Compiler zu Recht als "possible this-escape" gebrandmarkt, wenn die Klasse ableitbar ist.

  • Die Felder in den internen SerializationProxy-Klassen von Enums werden jetzt bei neuen Klassen auch mit @generated im Javadoc generiert. Damit werden sie auch bei Änderungen, beispielsweise des Datentyps der ID-Spalte, neu generiert. An bestehenden SerializationProxy-Klassen wird @generated leider nicht ergänzt, da JMerge das Fehlen des Javadocs als @generated NOT interpretiert. Ihr könnt aber das Javadoc manuell ergänzen oder die SerializationProxies löschen und neu generieren lassen.

  • Für ProductCmptType-Methoden generierte Java-Methoden werden nicht mehr mit {@inheritDoc} kommentiert, wenn sie nichts überschreiben oder implementieren.

  • Ausgeblendete Attribute und Beziehungen werden mit "hide" in der @IpsAttribute/Association-Annotation markiert.

  • Die Migration auf Faktor-IPS 25.7 schreibt jetzt neben den aktualisierten Schema-Referenzen in allen Dateien auch eine neue Zeile in die MANIFEST.MF, um dort den Runtime-ID-Präfix zu hinterlegen (siehe auch Verwendung des Manifest für Faktor-IPS-Projekte).

  • Der Initialisierungscode für Vorbelegungswerte von erweiterbaren Enum-Attributen mit primitiven Identifikatoren wurde korrigiert

Runtime

  • Alle runtime model-type Setter-Methoden mit IProductComponent und Calendar als Parameter, wurden jeweils um eine Variante überladen, welche stattdessen IProductComponentGeneration nutzt, um Werte zu setzen. Dies inkludiert setDefaultValue/setValueSet Methoden für alle (Policy/Product)Attribute, TableUsage#setName und Formula#setFormulaText:

    • Attribute#setDefaultValue(IProductComponentGeneration target, Object defaultValue)

    • Attribute#setValueSet(IProductComponentGeneration target, Object defaultValue)

    • TableUsage#setTableName(String tableName, IProductComponentGeneration generation)

    • Formula#setFormulaText(IProductComponentGeneration

  • Neue Default-Implementierung für areValuesEqual(Class<?> clazz, String property, Object value1, Object value2) in IDeltaComputationOptions mit Gleichbehandlung von `null`und Leerstring hinzugefügt

Kompatibilität

Ältere Faktor-IPS-Versionen

Aufgrund der Änderung der Mindestanforderung auf Java 21 ist Faktor-IPS 25.7 nicht mit älteren Versionen von Faktor-IPS kompatibel.

Java

  • Die Design-Time (Eclipse-Plugin) benötigt mindestens Java 21.

  • Die Runtime benötigt mindestens Java 21. (Eine Migration für EclipseLink ist möglicherweise nötig. Siehe Abschnitt Migration für weitere Informationen)

Eclipse

Die Design-Time (Eclipse-Plugin) benötigt mindestens Eclipse 2023-12 und wurde mit diesem und allen Versionen bis einschließlich 2025-06 getestet.

Allerdings ist in Eclipse-Versionen vor 2024-06 kein Java 21 enthalten, sodass Installation und Betrieb von Faktor-IPS nur mit einem aktualisierten JRE möglich ist. Wichtig ist dabei darauf zu achten, dass auch das in Eclipse mitgelieferte JustJ-Plugin entsprechend aktuell ist.

Deshalb empfehlen wir die Verwendung von Eclipse 2025-06.

Eclipse 2025-03 hat einen Bug im internen Java-Compiler, der in manchen Konstellationen Fehler anzeigt, wo keine sein sollten, z. B. beim Aufruf von IRuntimeRepository.getExistingEnumValue(Class<T>, Object) mit einer Kombination aus null und einem primitiven Wert für die ID (z. B. IpsStringUtils.isEmpty(columnValue) ? null : Integer.parseInt(columnValue)). Dieser Bug wird erst mit Eclipse 2025-06 behoben.

Migration

Die Migration auf Faktor-IPS 25.7 schreibt neben den aktualisierten Schema-Referenzen in allen Dateien auch eine neue Zeile in die MANIFEST.MF, um dort den Runtime-ID-Präfix zu hinterlegen (siehe auch Verwendung des Manifest für Faktor-IPS-Projekte).

EclipseLink Version 3.0.2 ist nicht mit Java 21 kompatibel. Eine Aktualisierung der Dependency auf mindestens 3.0.4 ist erforderlich, um die Runtime mit Java 21 zu verwenden.

Behobene Fehler

  • GIT Branch Wechsel auf Konsole zerhaut FIPS/Eclipse Build

  • Refactoring/Rename von Tabelleninhalt führt zu Exception

  • NullPointerException beim Versuch Projekt mit IpsNature aber ohne .ipsproject zu migrieren

  • DefaultRange.isUnrestricted() beachtet NullObject nicht

  • Fields beim SerializationProxy sollen @generated haben

  • Fehlender Import bei generierten Validatorenklassen mit Superklasse aus anderem Package

  • Relevance erzeugt immer ein virtuelles OrderedValueSet

  • Initialisierung des DefaultWerts null für Attribute mit Enum-Datentyp und int-ID wirft NumberFormatException

  • Überschreiben von Prüfungen sorgt für doppelten Aufruf & unvollständig generiertem Code

  • Falsche nullValue-Validierung in DefaultPolicyAttribute

  • Runtime-Wertebereichsvalidierung für primitive Datentypen zu lax

  • cvc-complex-type Fehler bei .ipstestcase(type)

  • Wenn das gleiche Ziel in mehreren Assoziationen verlinkt ist wird es manchmal aus der falschen Assoziation gelöscht

  • Relevance::asValueSet - range&enum in verkehrter Reihenfolge

  • Falsche ObjectProperties bei der Verwendung von Validatorklassen

  • Stringlängenwertebereiche in auf Vorlagen beruhenden Bausteinen werden nun korrekt validiert.

  • Das XSD-Schema für Testklassen und Testfälle wurde korrigiert. Bisher wurden fälschlicherweise Parameter nur in einer bestimmten Reihenfolge erwartet.

  • Änderung der Reihenfolge von Enum-Werten wirkt sich nicht auf die generierten Java-Enum aus

  • Beim Löschen einer Vorlage wird diese jetzt auch aus allen sie verwendenden Produktbausteinen und Vorlagen entfernt. Dies kann über die Preview-Seite des Lösch-Dialogs gesteuert werden.

  • Beim Überschreiben von Validierungsregeln wurde fehlerhafter Code generiert. Mehr dazu unter API-Änderungen - Generierter Code.

  • Null und NullObjects werden jetzt bei DefaultRange#isUnlimited gleich behandelt

  • Validierungsklassen verwenden jetzt das validierte Objekt für InvalidObjectProperties

  • @inheritDoc nicht an Zielmethode von @generated REDIRECT übertragen

  • Copy-Wizard Settings Im/Export logt Exception wenn Dialog geschlossen wird

  • Typo in der Validierungsmeldung für Gültig-Ab

  • Error beim Verschieben des Valid-from Datums mit Wizard

  • Archetype hat Java 17 als default

  • NPE im "Open Ips Object in Editor" Dialog

  • NPE im DeepCopyWizard

  • Aktualisierung von commons-beanutils wegen CVE-2025-48734

  • An IPS-Methode JavaDoc wird inheritDoc generiert

  • DeltaComputationOptionsByPosition nutzt in areValuesEqual jetzt auch die neue Default-Implementierung und betrachtet damit null und Leerstrings als gleich

  • Bei den Dependencies im POM von org.faktorips.devtools.model fehlten im RC 2 einige Eclipse-Projekte

  • DeltaComputationOptionsByPosition sollten das neue default-areValuesEqual nicht mehr überschreiben

  • java.util.MissingResourceException in org.faktorips.fl.Messages

  • Neuer PolicyCmptType enthält UUIDs

  • Beim Herleiten einer Vorlage werden ausgeschlossene Bausteine nicht auf [0..0] gesetzt

Weitere Funktionen und Verbesserungen

  • Runtime-IpsModel um Setter erweitert, die IProductComponentGeneration als Parameter nehmen (mehr hierzu unter Runtime API-Änderungen.)

  • DefaultRange#getValues sollte Werte sortiert ausgeben

  • repository.eclipse sollte auf releases-Repository verweisen statt auf updates

  • Migration von 23.6 auf 24.7 und neuer verhindern

  • Neue DatabaseLengthValidation für generische Validierungen von Maximallängen für Strings sowie numerische Datentypen wie (Big)Decimal und Double. Weitere Informationen hierzu: Datenbankfeld-Längen-Validierung

  • Wizard zum Verschieben des "Gültig Ab"-Datums

  • Kontextmenü um bei Mehrfachauswahl von Beziehungen die Kardinalität für alle aus der Vorlage zu übernehmen

  • XmlJavaTypeAdapter für eigene Datatypes konfigurierbar machen

  • Copy-Wizard: Speichern und Laden von Einstellungen

  • Runtime-Produktbausteine und -Tabelleninhalte brauchen Methoden zum Setzen der Description

  • "Hide"-Flag in Runtime aufnehmen

  • Vorlage: Löschen der Vorlage soll keine Fehler an den ehemals verknüpften Bausteinen verursachen

  • Multiselect→Kardinalität aus Vorlage übernehmen/überschreiben