Metamodellbasierte und hierarchieorientierte ... - RosDok
Metamodellbasierte und hierarchieorientierte ... - RosDok
Metamodellbasierte und hierarchieorientierte ... - RosDok
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
50 Deklarative UML metamodellbasierte Workflowmodellierung<br />
✞<br />
1 context FlowObject inv noSeqCycles:<br />
2 self.getSuccObjects(Set{})−>excludes(self)<br />
3<br />
4 context Activity inv notParallelAndInterleaved:<br />
5 let parallelAct:Set(Activity)=self.group−>select(g|g.oclIsTypeOf(Parallel)).activity−>excluding(self)−>asSet() in<br />
6 let interleavedAct:Set(Activity)=self.group−>select(g|g.oclIsTypeOf(InterleavedParallelRouting)).activity−><br />
excluding(self)−>asSet() in<br />
7 parallelAct−>excludesAll(interleavedAct)<br />
✝<br />
Listing 3.9: OCL-Invarianten zur So<strong>und</strong>ness-Überprüfung zur Designtime<br />
☎<br />
✆<br />
hat offensichtlich ein Problem zur Folge, wenn ein Zyklus auftritt. Um das Problem schon während der<br />
Designtime zu identifizieren wird in Listing 3.9 die OCL-Invariante noSeqCycles vorgestellt, die Zyklen<br />
von seq-Links identifiziert. Mit der OCL-Hilfsfunktion getSuccObjects(), welche in Abschnitt 3.2.3.2 näher<br />
vorgestellt wurde, wird eine transitive Hülle unter Verwendung der succ-Aktivitäten gebildet. Nun fordert<br />
die Invariante, dass in der vom self -Objekt ausgehende transitiven Hülle dasselbige Objekt nicht enthalten<br />
darf. Wäre dieses der Fall, so hätte man einen Zyklus im Workflowmodell identifiziert.<br />
In Abbildung 3.10 ist ein Teil des Beispielprozesses von Abbildung 3.9 angegeben <strong>und</strong> erweitert worden, so<br />
dass jetzt die Invarianten von Listing 3.9 verletzt werden. Beispielsweise wird die Invariante noSeqCycles<br />
durch den Zyklus von seq-Links bei den Aktivitäten HeliAmbu, SurguryCheck <strong>und</strong> WakeUp verletzt.<br />
Abbildung 3.10: Modell, das die zwei OCL-So<strong>und</strong>ness-Invarianten verletzt<br />
Die zweite in Listing 3.9 angegebene Konsistenzeigenschaft ist mit der OCL-Invariante notParallelAndInterleaved<br />
angegeben. Die beiden Beziehungen InterleavedParallelRouting <strong>und</strong> Parallel stehen im Widerspruch<br />
zueinander. Während die eine aussagt, dass die in der Gruppe enthaltenen Aktivitäten nicht gleichzeitig<br />
ausgeführt werden dürfen, garantiert die andere Beziehung eine zwingende parallele Ausführung der enthaltenen<br />
Aktivitäten. Sollten nun zwei Aktivitäten gleichzeitig beiden Beziehungen zugeordnet werden, liegt<br />
offenbar ein Widerspruch vor, der zu einem Deadlock zur Runtime führen würde. Um das zu verhindern,<br />
ist mit der Invarianten notParallelAndInterleaved in Listing 3.2.6 eine OCL-Invariante angegeben, die ein<br />
solches Problem identifiziert. Dort werden zunächst in der Variablen parallelAct die Aktivitäten gespeichert,<br />
die in einer Parallel-Beziehung mit der aktuell betrachteten self -Aktivität stehen. Analog werden die Aktivitäten<br />
in der Variablen interleavedAct eingesammelt, die zum aktuellen Objekt in einer Interleaved Parallel<br />
Routing-Beziehung stehen. Nun sichert die Invariante mit dem OCL-Kommando excludesAll zu, dass diese<br />
beiden Mengen disjunkt sein müssen. Sollte dies nicht der Fall sein, ist wie in Abbildung 3.10 angegeben,<br />
ein Problem aufgetreten. Dort sind die Aktivitäten EmergencySurgery <strong>und</strong> AssistEmergencySurgery den