Merge-Schlüsselregeln dienen dem Verschmelzen von Merge-Ereignissen innerhalb einer Prozessinstanz. Auf diese Weise werden die durch Prozessschlüssel zugeordneten Prozessinstanzfragmente zu einer Prozessinstanz verkettet.
Merge-Schlüssel werden aus bestimmten Objektattributen des Prozessinstanzfragments berechnet. Mit ihrer Hilfe wird die Ablauflogik der Prozessinstanz rekonstruiert und die unverbundenen Fragmente werden entsprechend verkettet.
PPM unterscheidet zwei Merge-Verfahren:
Schlüsselbasierter Merge
Ordnungsbasierter Merge
Das gewünschte Merge-Verfahren wird in der XML-Konfigurationsdatei *_merger.xml angegeben. Der Aufbau dieser Datei ist durch die DTD mergerconfig.dtd vorgegeben.
Datei mergerconfig.dtd (1. Teil)
<!ELEMENT mergerconfig ( mergehandling, connectorhandling? )>
<!ELEMENT mergehandling ( sharedfragmentmerge?, processmerge?, eventmerge+ )>
<!ATTLIST mergehandling eventmode (startevent | endevent | importtime) "importtime">
<!ELEMENT sharedfragmentmerge ( algorithm )>
<!ELEMENT processmerge ( algorithm?, mergeattributes?)>
<!ATTLIST processmerge
mode (replace|update) 'replace'>
<!ELEMENT eventmerge ( mode, condition?, algorithm? )>
<!ATTLIST eventmerge
key ID #IMPLIED
priority CDATA #IMPLIED>
<!ELEMENT condition EMPTY>
<!ATTLIST condition
classname NMTOKEN #REQUIRED
value (TRUE|FALSE) 'TRUE'
comment CDATA #IMPLIED>
<!ELEMENT algorithm EMPTY>
<!ATTLIST algorithm
classname NMTOKEN #REQUIRED
comment CDATA #IMPLIED>
<!ELEMENT mergeattributes (attribute+)>
<!ELEMENT attribute EMPTY>
<!ATTLIST attribute
key CDATA #REQUIRED>
<!ELEMENT mode ( keymerge | sortmerge )>
<!ELEMENT keymerge EMPTY >
<!ELEMENT sortmerge ( criterion*, algorithm? )>
<!ELEMENT criterion EMPTY>
<!ATTLIST criterion
name NMTOKEN #REQUIRED>
XML-Tag |
Bezeichnung |
---|---|
mergerconfig |
Gruppierung der Merge-Konfiguration |
mergehandling |
Merge-Art, die konfiguriert wird. Es muss mindestens das Element eventmerge (Ereignis-Merge) angegeben werden. |
sharedfragmentmerge |
Vom Standardalgorithmus abweichender Algorithmus zum Zusammenführen der Shared Fragments mit Prozessinstanzfragmenten |
processmerge |
Vom Standardalgorithmus abweichender Algorithmus zum Zusammenführen der Prozessinstanzfragmente. Wählbar sind die Modi Ersetzen (replace) oder Zusammenführen (update). Standardwert ist replace. |
eventmerge |
Vom Standardalgorithmus abweichender Algorithmus zum Verschmelzen der Merge-Ereignisse |
key |
ID, über die das Element eventmerge referenziert werden kann |
priority |
Priorisierung des eventmerge-Elements - je niedriger der ganzzahlige Wert, desto höher priorisiert. |
condition |
Bedingung für das Verschmelzen der Merge-Ereignisse |
classname |
Name der JAVA-Klasse, die die angegebene Bedingung überprüft |
value |
Bedingung ist erfüllt, wenn die Überprüfung durch die JAVA-Klasse den angegebenen Wert (TRUE oder FALSE) zurückliefert. Vorgabewert ist TRUE. |
algorithm |
Berechnungsvorschrift (JAVA-Klasse) |
classname |
JAVA-Klasse, die eine bestimmte Berechnungsvorschrift implementiert |
mode |
Merge-Verfahren zur Ereignisverschmelzung |
keymerge |
Schlüsselbasierter Ereignis-Merge auf der Basis von definierten Merge-Schlüsseln |
sortmerge |
Ordnungsbasierter Ereignis-Merge auf der Basis der Sortierung von Funktionen |
criterion |
Kriterium (Funktionsattribut), auf dessen Basis die Fragmente geordnet werden sollen. Es können mehrere Kriterien angegeben werden. |
name |
Bezeichner des Funktionsattributs |
Datei mergerconfig.dtd (2. Teil)
<!ELEMENT connectorhandling ( multiindegreehandling?, multioutdegreehandling?, andhandling?, orhandling?, xorhandling?)>
<!ELEMENT multiindegreehandling (algorithm) >
<!ELEMENT multioutdegreehandling (algorithm) >
<!ELEMENT andhandling (algorithm) >
<!ELEMENT orhandling (algorithm) >
<!ELEMENT xorhandling (algorithm) >
XML-Tag |
Bezeichnung |
---|---|
connectorhandling |
Behandlung von Konnektoren in Prozessgraphen über die Angabe einer JAVA-Klasse (algorithm) |
multiindegreehandling |
Algorithmus, der beim Objekt-Merge das Einfügen von Konnektoren mit mehreren eingehenden Kanten steuert |
multioutdegreehandling |
Algorithmus, der beim Objekt-Merge das Einfügen von Konnektoren mit mehreren ausgehenden Kanten steuert |
andhandling |
Algorithmus zur Behandlung von AND-Konnektoren |
orhandling |
Algorithmus zur Behandlung von OR-Konnektoren |
xorhandling |
Algorithmus zur Behandlung von XOR-Konnektoren |
Beispiel
Für das Verketten der Prozessinstanzfragmente wird der schlüsselbasierte Ereignis-Merge verwendet.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE mergerconfig SYSTEM "mergerconfig.dtd">
<mergerconfig>
...
<mergehandling>
<eventmerge>
<mode>
<keymerge/>
</mode>
</eventmerge>
</mergehandling>
...
</mergerconfig>
Während der Ereignisverschmelzung wird die Vereinigungsmenge der Attribute beider Merge-Ereignisse an das verbleibende Ereignis kopiert. Bereits vorhandene Objektattribute werden nicht überschrieben. Das zuerst importierte Merge-Ereignis wird gelöscht.