Wichtig
Detail
Wichtig
Detail
Szenario
Im Layout wird eine bidirektionale Modelltransformation deklariert, wobei der Eingangswert der Transformation einem Interface-Typen entspricht, von dem im Transformationsausdruck das Zielmodell abgefragt wird:
model->$model.get(`example:ContainerInterface#containmentAttr`)
Das Layout wird veröffentlicht.
Im Rahmen eines Refactorings wird nun diese Transformation aus dem Layout entfernt (die Sicht gelöscht) und auch der nicht länger benötigte Typ "ContainmentInterface" aus dem Modell gelöscht. Alles funktioniert zunächst wie erwartet.
Problem
Wenn nun die Session beendet wird (timeout, logout), bevor diese Layoutänderung erneut veröffentlicht wurde, ist ein erneuter Login nicht mehr möglich. Auch ein Neustart des Servers auf diesem Datenstand ist nun nicht mehr möglich.
Hintergrund ist, das die entfernte Modelltransformation im zuvor veröffentlichten Layout noch immer existiert und sowohl bei Neustart als auch Login initialisiert wird. Dabei wird (im Konstruktor von BidirectionalTransformLinkingByExpression) der angegebene Transformationsausdruck compiliert, was aber fehlschlägt, weil dort auf den nicht mehr vorhandenen Modelltyp verwiesen wird.
Lösung
Robustheit gegen diesen Fehler sicherstellen. Die Anwendung muss trotz Fehlkonfiguration einzelner Sichten starten und eine Korrektur der Fehler zulassen.
Test
Kein Test.