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 altenMessage
) 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 bestehendenSerializationProxy
-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
undCalendar
als Parameter, wurden jeweils um eine Variante überladen, welche stattdessenIProductComponentGeneration
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)
inIDeltaComputationOptions
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 inareValuesEqual
jetzt auch die neue Default-Implementierung und betrachtet damitnull
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