18.01.2014 Aufrufe

Metamodellbasierte und hierarchieorientierte ... - RosDok

Metamodellbasierte und hierarchieorientierte ... - RosDok

Metamodellbasierte und hierarchieorientierte ... - RosDok

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!