Version 3.13.0

New and Noteworthy in Version 3.13.0

Die neue Faktor-IPS Version 3.13 zeichnet sich vor allem durch weitere Verbesserungen in der Bedienbarkeit und Performance aus. Aber auch technische Neuerungen und nicht zuletzt das einfache Einbinden der Laufzeitbibliotheken über das Maven Central Repository wurden umgesetzt. Die Highlights werden im Folgenden detailliert vorgestellt. Am Ende dieser Seite findet sich eine vollständige Liste aller Neuerungen.

Deaktivieren von Validierung und Codegenerierung

Modelle

Insbesondere in länger laufenden Projekten ergibt sich häufig die Situation, dass Entwickler das inzwischen relativ stabile Modell vermehrt als Dokumentation nutzen und dabei hauptsächlich im Java Code weiter entwickeln. Vor allem bei einem Clean-Build entsteht eine unnötige Verzögerung, da das Modell validiert und auch die Faktor-IPS Artefakte neu generiert werden.

Entwickler können in diesem Fall in den „Ansehen“ (Browse) Modus wechseln. Dieser kann direkt in der Toolbar per Button f10-org-new_3_13_0-ansicht_bearbeitung_icon oder über die Benutzervorgaben eingestellt werden. Befindet sich Faktor-IPS in diesem Modus, können Faktor-IPS Objekte nicht mehr bearbeitet werden. Außerdem werden in diesem Modus keine Validierungen oder Codegenerierungen mehr durchgeführt.

Große Tabellen

Eine weitere Verzögerung beim Bauen der Projekte stellt die Validierung großer Tabelleninhalte dar. Insbesondere in Kombination mit komplizierten Schlüsseln kann diese bei mehreren tausend Zeilen einige Zeit in Anspruch nehmen. Für Produktentwickler ist es natürlich keine Option in den Ansichtsmodus zu wechseln.

Mit der neuen Faktor-IPS Version kann die Validierung von Tabelleninhalten in den Benutzervorgaben ein- und ausgeschalten werden. Das Deaktivieren der Validierung führt zusätzlich zu schnelleren Aktualisierungs- und Buildzeiten, da die Tabellen nicht mehr geladen werden.

Insbesondere wenn die Tabelle auf Werte einer Aufzählung zugreift, sollte diese Option mit Vorsicht behandelt werden. Wenn sich die Aufzählung ändert würden möglicherweise ungültige Einträge nicht erkannt werden.

Beim Öffnen einer Tabelle im Editor wird der Inhalt in den Speicher geladen und die Tabelle validiert, egal ob die Validierung ein- oder ausgeschaltet ist.

Verbesserte Eingabe von Enum-Werten

Die Eingabe von Enum-Werten wird durch neue Bedienelemente erleichtert. Neben der gewohnten Auswahl der Werte, gibt es nun auch die Möglichkeit Werte direkt mit der Tastatur einzugeben.

Dabei bieten sich mehrere Vorteile:

  • Werte-Suche: Während des Eintippens werden bereits Vorschläge für mögliche Werte angezeigt. Dies vereinfacht z.B. eine Suche einzelner Werte in einer großen Aufzählung.
  • Schnellere Eingabemöglichkeit: Bekannte Enum-Werte können über ihren Namen oder die IDs direkt eingegeben werden, ohne dabei die Such- oder Drop-Down Funktionalität verwenden zu müssen.

Basisklasse für Modellstrukturen

Faktor-IPS ermöglicht es ab sofort eine gemeinsame Basisklasse für alle Vertragsklassen einzuführen (sog. Layer Supertype). Bisher war dies nicht möglich, da alle Typen in der Hierarchie entweder produktkonfiguriert oder nicht produktkonfiguriert sein mussten. Jetzt ist es möglich, dass ein produktkonfigurierter Vertragsteiltyp von einem nicht produktkonfigurierten Typ ableitet.

1

Dies zieht eine grundsätzliche Änderung in den Basisklassen der Faktor-IPS Laufzeitumgebung nach sich. Alle generierten Vertragsklassen, sowohl produktkonfigurierte als auch nicht konfigurierte, leiten direkt von der Laufzeitklasse AbstractModelObject ab. Die Abhängigkeit zur Klasse AbstractConfigurableModelObject wurde entfernt.

Die gemeinsame Basisklasse kann beispielsweise für technische, übergreifende Eigenschaften, wie z.B. eine technische ID für Datenbankpersistenz, definieren.

Faktor-IPS Runtime im Maven-Central-Repository verfügbar

Die Runtime-, Valuetypes- und Valuetypes-Joda-Bibliotheken stehen ab diesem Release im Maven-Central-Repository zur Verfügung. Eine Anleitung zur Nutzung des Maven Dependency Managements mit Faktor-IPS wird demnächst auf unserer Homepage veröffentlicht. Zur Einbindung der Laufzeitbibliotheken genügt der entsprechende Eintrag in die Maven Konfiguration pom.xml.

Definition der Abhängigkeit zur Faktor-IPS Runtime und Valuetypes in der pom.xml

 <dependency>
   <groupId>org.faktorips>
   <artifactId>faktorips-runtime>         
   <version>3.13.0>
 >

Einbinden der Valuetypes-Joda Bibliothek inkl. Joda-Time

 <dependency>
   <groupId>org.faktorips>
   <artifactId>faktorips-valuetypes-joda>         
   <version>3.13.0>
 >

Migration 3.13

Um Faktor-IPS 3.13 einzusetzen müssen vorhanden Projekte migriert werden. Dies kann einfach durch den entsprechenden Eintrag im Kontextmenü erfolgen.

Währende der Migration werden die XML-Dateien für Tabelleninhalte auf die neue Struktur migriert.

Ggf. müssen außerdem vorhandene XML-Adapter Klassen manuell gelöscht werden. Siehe: XMLAdapter

Generierten Code und Runtime

XMLAdapter

Die generierten XmlAdapter-Klassen für erweiterbaren Enums werden jetzt nicht mehr in den „derived“-Ordner, sondern in den „src“-Ordner generiert. Auch wenn diese Klassen weiterhin nicht manuell bearbeitbar sind, wurde diese Änderung durchgeführt um eine bessere Kompatibilität mit den Maven Projekteinstellungen zu erzielen. Dadurch werden nun keine Java Quellen in den derived-Ordner geschrieben. Die Trennung zwischen „src“ und „derived“ entspricht also dem Maven Konzept von „sources“ und „resources“.

Die alten Klassen im „derived“-Ordner werden nur gelöscht, wenn in den Generatoreinstellungen die Option „Derived Resources“ auf true gesetzt ist. Andernfalls ist es notwendig, die bestehenden Dateien (*XmlAdapter.java) manuell aus dem „derived“-Ordner zu löschen.

Support Serializable für Modellklassen

Serialisierbarkeit kann bei der Verwendung von Faktor-IPS Laufzeitklassen im Umfeld von Applicationservern notwendig sein, z.B. zur Persistierung der aktuellen Session.

In den Code-Generator-Einstellungen des Projekts kann der Serializable-Support für Vertragsklassen aktiviert werden. Anschließend sind alle generierten Vertragsklassen dieses Projekts serialisierbar. Da die Produktklassen und das Runtime Repository nicht serialisierbar sind, muss im verwendeten Runtime Repository eine projektspezifische Implementierung des Interfaces IRuntimeRepositoryLookup gesetzt sein. Diese könnte beispielsweise durch einen statischen Zugriff auf das Runtime Repository realisiert sein.

Vorsicht: Der aktuell generierte Code für die Serialisierung berücksichtigt in Bezug auf die Serial-Version-UID keine Änderungen des Modells. Die serialVersionUID wird aktuell immer mit dem Wert 1L generiert! Es sollte daher in der Anwendung ausgeschlossen werden, dass nach einer Modelländerung alte serialisierte Zustände geladen werden. Dies könnte andernfalls zu korrupten Vertragsdaten führen!

Grundsätzlich gilt bei der Serialisierung von Klassen in Java einiges zu beachten und die Entscheidung sollte nicht leichtfertig getroffen werden. Daher sei an dieser Stelle auf das Kapitel 11 aus dem Buch „Effective Java“ von Joshua Bloch verwiesen.

AbstractConfigurableModelObject entfernt

Wie im Kapitel „Basisklasse für Modellstrukturen“ beschrieben, leiten nun alle generierten Laufzeitklassen von AbstractModelObject ab. Produktkonfigurierte Vertragsklassen implementieren zusätzlich das Interface IConfigurableModelObject. Die Basisklasse AbstractConfigurableModelObject wurde entfernt.

Message und ObjectProperty

Das API der Klasse org.faktorips.runtime.Message wurde erweitert. Eine Message kann nun eine Liste von Markern enthalten. Die konkrete Verwendung von Markern ist bislang projektspezifisch, z.B. ein spezielles Enum. Im Zuge dessen wurde die Aufzählung Severity in eine eigene Klasse ausgelagert. Manueller Code mit einem direkten Zugriff auf dieses Enum muss daher ggf. umgestellt werden. Der Umgang und die Verwendung von Markern an Messages steht noch am Beginn der Entwicklung. Änderungen dieser Schnittstelle in den nächsten Versionen sind daher nicht ausgeschlossen.

Zum Erzeugen von Messages wurde außerdem neue statische Methoden eingeführt, die das Builder-Pattern nutzen. Damit ist es komfortabel möglich neue Messages zu erzeugen. Beispiele:

 // Neue Error-Message
 Message.error("Error while doing anything").code("ERROR_CODE").invalidObjects(theObject, "anything").create();
 
 // Neue Warning-Message mit der Angabe eines ungültigen Objects: Eigenschaft "anything" am Objekt "theObject"
 Message.warning("Warning while doing anything").code("WARNING_XY").invalidObjects(theObject, "anything").create();

An der Klasse ObjectProperty wurde ein neues Attribut qualifier vom Typ IPropertyQualifier eingeführt. Damit kann z.B. für eine Message, die für eine ungültige Beziehung erstellt wird definiert werden, durch was diese Beziehung qualifiziert ist. Die Implementierung von IPropertyQualifier ist zunächst projektspezifisch.

Release Notes – Faktor-IPS – Version 3.13.0

Bugs

  • IT möchte fehlende Validierungen im Modell ergänzt haben (FIPS-1433)
  • Faktor-IPS: Einschränkungen bei Custom Validations (FIPS-2150)
  • Reihenfolge von Extension Properties soll sich im XML nicht willkürlich ändern (FIPS-2623)
  • IT möchte Validierung bei unterschiedlichen Returntype in IF (FIPS-2725)
  • Überschreiben einer Methode/Formelsignatur kann zu fehlerhaften Code führen (FIPS-2771)
  • IT möchte Validierung bei Eingabe von Listenfunktionen anstatt fehler im Java Code (FIPS-2787)
  • Die Einstellung „Single Content“ bei Tabellentypen wird nicht validiert (FIPS-2794)
  • NPE beim HTML-Export (FIPS-2811)
  • Überladene Formeln können beim Arbeitsbereich erstellen zu NPE führen (FIPS-2835)
  • Fehlendes @Override in verschiedenen Fällen (FIPS-2966)
  • Fehler in ModelTypeAttribute (FIPS-3046)
  • Vorbelegungswert „Keine Vorbelegung“ erscheint nicht bei Wertemenge „Uneingeschränkt“ (FIPS-3101)
  • Nicht geschlossener Input Stream verhindert Löschen von Analyseprojekt (FIPS-3114)
  • Falsches JavaDoc findRows() (FIPS-3115)
  • DeltaFix für versteckte Attribute wirft NPE wenn das Attribut in er Superklasse liegt (FIPS-3148)
  • ProductCopy-Wizard berücksichtigt referenzierte Projekte nicht bei Prüfung (FIPS-3156)
  • IT möchte korrekten generierten Code für Enums mit abstraktem Supertyp (FIPS-3184)
  • null in ValidFrom-Datum in Anpassungsstufe wird nicht validiert (FIPS-3218)
  • Modellsuche erstreckt sich nicht auf installierte Modelle (FIPS-3230)
  • Fehlendes Final am Parameter von Formelbibliotheksmethoden (FIPS-3231)
  • Mangelnde Performance bei Refactoring von Bausteinen mit vielen Formeln und Bauen von Produktbausteinen (FIPS-3242)
  • ConcurrentModificationException beim Suchen von IpsSrcFiles (FIPS-3279)
  • FB möchte auch die Namen der Enumwerte sehen (FIPS-3291)
  • PA möchte per API alle obsoleten Extension Properties entfernen (FIPS-3360)
  • Fixen der neuen Enum Controls (vor allem im Tabellen-Editor) (FIPS-3371)
  • serialVersionUID steht an der falschen Stelle (FIPS-3386)
  • Refactoring von TableStructures wirft Exceptions und speichert Abhängigkeiten nicht (FIPS-3525)
  • NPE beim Marshalling der ProductConfiguration (FIPS-3533)
  • DateUtil ist nicht Thread Safe (FIPS-3537)
  • Autovervollständigen erzeugt doppelte Anführungszeichen (FIPS-3514)
  • in Tabellenverwendungen führt zu Exceptions und Bausteinen die nicht mehr geparst werden können (FIPS-3554)

Improvements

  • Bessere Enum Controls (FIPS-429)
  • JPA Annotationen in der Faktor-IPS Runtime (FIPS-1068)
  • Die gültigen Werte eines Attributs in einem Testfall sollen von dem konkret verwendeten Produktbaustein abhängig sein (FIPS-1124)
  • Produktkonfigurierte Vertragsteiltypen sollten von nicht-produktkonfigurierte Vertragsteiltypen ableiten können (FIPS-1221)
  • IT aus PA möchte Verbesserung der Auswahlhilfe für Formelsprache (FIPS-1491)
  • Wenn ein Produktprojekt weniger Sprachen unterstützt als die Modellprojekte sollen keine falschen Warnungen kommen (FIPS-2734)
  • Generierte Klasse -XmlAdapter nicht im derived Ordner speichern (FIPS-2767)
  • FB und IT möchte bei Unterschiede beheben auch ausgeblendete Attribute auf den Defaultwert setzen (FIPS-2788)
  • Es soll in allen Explorerern möglich sein beliebige Dateien zu löschen (FIPS-2795)
  • Runtime und Valuetypes in öffentliches Nexus-Repository (FIPS-2801)
  • FB und IT möchten, dass Abweichungen zwischen Werten von ausgeblendeten Attributen und dem Modell validiert werden (FIPS-2916)
  • Abschaffen von AbstractConfigurableModelObject (FIPS-3146)
  • Coolbar Icons in FipsProdukt auf Basis von Eclipse 4.x verstreut (FIPS-3173)
  • Performance Verbesserung bei Tabellen mit Enum-Spalten (FIPS-3223)
  • Bekannte Performance Probleme beseitigen (FIPS-3241)
  • EnumExtensionPropertyDefinition ohne Deprecated EnumType (FIPS-3243)
  • API Änderungen bzgl. ExtensionProperties für Multiedit und PA (FIPS-3488)
  • IT PA möchte die Wartezeit für Validierung setzen können (FIPS-3113)
  • InMemoryRepository: ProductCmptGenerationComparator sollte null als validFrom tolerieren (FIPS-2447)

New Features

  • JPA Index Annotation generieren (FIPS-1735)
  • Ausschalten des Ladens & Validierens von Tabellen während des Project-Builds (FIPS-1957)
  • Fachbereich wünscht Änderung bei Namensvorschlag beim kopieren von Bausteinen (Strg-C/Strg-V) (FIPS-2821)
  • Aufklappen der Beziehungen beim Drag & Drop von Bausteinen in den Editor (FIPS-2824)
  • Fachbereich wünscht im Produktbausteineditor Button zum Zu- und Aufklappen aller Beziehungen – kein automatisches Aufklappen! (FIPS-2826)
  • Fachbereich wünscht Mehrfachselektion im IPS-Objekt Öffnen Dialog (FIPS-2828)
  • Fachbereich wünscht die Beschreibung von Regeln im Modellbeschreibungs-View (FIPS-2829)
  • Fachbereich wünscht Erweiterung der Referenzsuche (FIPS-2830)
  • Validierung während des Project-Builds ein/auschaltbar machen (FIPS-2887)
  • Support Serializable für Modellklassen (FIPS-3041)
  • Erweiterung Faktor-IPS Runtime ObjectProperty um Qualifier (FIPS-3043)
  • Erweiterung Faktor-IPS Runtime Message um Marker (FIPS-3044)