Document

Werbung
Kapitel 9
Prototyp
9.1
Überblick
Für eine Überprüfung der Funktionsweise und der Umsetzbarkeit der entwickelten Konzepte wurde ein Prototyp implementiert: Das Benutzersystem wurde in der Skriptsprache Tcl/Tk und das
Verarbeitungssystem in der objektorientierten Programmiersprache C++ programmiert. Durch
die Verwendung dieser Werkzeuge wird eine plattformunabhängige Einsetzbarkeit der Software
erreicht, da diese Sprachen für nahezu alle Betriebssysteme, wie UNIX und Microsoft Windows95, verfügbar sind. Für die persistente Speicherung der Daten, die z.B. bei der Ausführung
eines insert Befehls erzeugt werden, wird das Datenbanksystem INGRES PD V8.9 verwendet,
das auf dem Internet frei verfügbar ist. Dieses System verfügt über C-basierte Schnittstellen, die
für die Kommunikation zwischen dem Prototypen und dem Datenbanksystem benutzt werden.
Um das Laufzeitverhalten der Software beurteilen zu können, wurde ein Test-Szenario entwickelt,
das auf mehreren Transaktionen und zahlreichen Regeln basiert. Die Testergebnisse zeigen, dass
der Prototyp eine akzeptable Performance aufweist.
Bevor nun auf den Entwurf, die Implementierung und das Laufzeitverhalten näher eingegangen
wird, sollen einige Anforderungen erläutert werden, die an den Prototypen gestellt wurden.
9.2
Anforderungen
Mit der Entwicklung des Prototypen wurde das Ziel verfolgt, die theoretisch erarbeiteten Konzepte auf ihre Umsetzbarkeit in eine Software zu überprüfen. Daher sind für den Prototypen in
Form von zahlreichen Anforderungen die Leistungsmerkmale festgelegt worden, die das SoftwareSystem zu erfüllen hat. Eine der vorrangigen Anforderungen bestand darin, dass sich der Prototyp plattformunabhängig, also auf verschiedenen Betriebssystemen, installieren und einsetzen
lässt. Diese Forderung resultiert aus der Anforderung nach der Unternehmens- und Branchenunabhängigkeit1 , die an den Entwurf der Konzepte gestellt wurde.
Die restlichen Anforderungen lassen sich in zwei Klassen gliedern: Anforderungen an das Benutzersystem und Anforderungen an das Verarbeitungssystem. In den folgenden Abschnitten werden
einige dieser Kriterien näher erläutert.
1
vgl. Abschnitt 4.1.
318
KAPITEL 9. PROTOTYP
9.2.1
Benutzersystem
Eine wichtige Anforderung, die die Entwicklung der Konzepte besonders beeinflusst hat, bestand darin, dass ALFRED auf prinzipiell jedes (passive) Datenbanksystem aufgesetzt werden kann. Diese Eigenschaft wird dadurch erfüllt, dass eine erweiterte Schichten-Architektur2
gewählt wurde, die sich aus einem Benutzersystem und einem Verarbeitungssystem zusammensetzt. Das Benutzersystem besteht aus mehreren Benutzerschnittstellen, über die der Zugang
zum System erfolgt. Jede dieser Schnittstellen basiert auf einem Menüsystem, das graphikorientiert und auf der Fenstertechnik zu realisieren ist, wenn es den heutigen Anforderungen an
ein modernes Front-End entsprechen soll. Der Entwurf und die Implementierung einer solchen
Benutzeroberfläche erfordern die Beachtung einer Reihe von wichtigen Richtlinien, damit eine
hohe Benutzungsfreundlichkeit, -akzeptanz sowie eine effiziente Interaktion zwischen Benutzer
und System gewährleistet sind. Einige Beispiele dafür sind ([Shn87], S. 60ff.):
• Konsistenz
In Menüs, Eingabeaufforderungen und Hilfesystemen sollten gleiche Terminologien verwendet werden. Zusätzlich muss sichergestellt sein, dass bei der Ausführung von ähnlichen
Aktionsfolgen auch ähnliche Situationen erreicht werden, in denen in Abhängigkeit der
Aktionsfolgen, bspw. mit der Ausgabe von Meldungen, reagiert wird.
• Informatives Feedback
Für jeden auszuführenden Befehl sollte das System Status- und Ergebnismeldungen ausgeben. Aus diesen Mitteilungen kann der Benutzer ersehen, ob seine Befehle verarbeitet
werden, und ob die Ausführung erfolgreich beendet oder aufgrund von Fehlern abgebrochen
wurde. Bei Befehlssequenzen, die eine lange Verarbeitungszeit erfordern, ist es zusätzlich
hilfreich, wenn das System Zwischenmeldungen generiert und ausgibt.
• Fehlerbehandlung
Die Benutzeroberfläche sollte so konzipiert sein, dass der Benutzer keine (schwerwiegenden) Fehler machen kann. Da i. allg. Fehler auftreten, sollte das System diese erkennen
und eine möglichst einfache Fehlerbehandlung anbieten, in der z.B. der Benutzer seine Eingaben überarbeiten kann. Zusätzlich sollte sichergestellt sein, dass fehlerhafte Befehle zu
keinem Zustandswechsel innerhalb des Systems führen. Falls doch, müssen entsprechende
Recovery-Massnahmen durchgeführt werden.
• Recovery
Die Benutzeroberfläche sollte eine Funktionalität unterstützen, mit der Befehle und Befehlssequenzen zurücksetzbar sind. Damit wird dem Benutzer die Angst genommen, mit
dem System zu arbeiten.
• Benutzergesteuerter Dialog
Der Benutzer und das System sollten häufig miteinander kommunizieren. Dies kann aber
durch unerwartete Systemreaktionen, lange Dateneingabesequenzen, Schwierigkeiten beim
Aufruf von Funktionen oder bei der Auslösung gewünschter Aktionen beeinträchtigt werden. Solche Eigenschaften sind beim Entwurf von Benutzeroberflächen zu vermeiden.
Neben diesen Richtlinien gibt es auch noch solche Anforderungen zu berücksichtigen, die sich
auf die zu unterstützenden Funktionalitäten des Menüsystems beziehen:
2
vgl. Kapitel 5.
9.2. ANFORDERUNGEN
319
• Datenbanken
Der Systemadministrator muss in dem zugrundeliegenden Datenbanksystem Datenbanken
erzeugen und verwalten können. Zusätzlich muss es das Menüsystem zulassen, dass sich
der Benutzer für die Bearbeitung seiner Aufgaben an einer Datenbank anmelden kann.
• Datendefinitionen
Für den Systemadministrator müssen Befehle zur Verfügung stehen, mit denen sich (neue)
Benutzer einrichten und verwalten lassen. Diese Forderung beinhaltet auch, dass Privilegien und Zugriffsrechte auf die in einer Datenbank existierenden Elemente, wie Objekttypen und Datenbankprozeduren, vergeben bzw. entzogen werden. Für die Realisierung von
konzeptionellen Datenmodellen müssen Befehle verfügbar sein, mit denen sich Entitätstypen und Beziehungstypen implementieren lassen. Ferner müssen Funktionalitäten zur
Verfügung stehen, mit denen Programme, Datenbankprozeduren und Regeln definiert und
verwaltet werden können.
• Datenmanipulationen
Für einen Zugriff auf die in einer Datenbank gespeicherten Daten müssen Befehle, wie
select, insert, update und delete, unterstützt werden.
• Administration
Die Administration von Benutzern und Datenbankobjekten erfordert die Berücksichtigung
gewisser Abhängigkeiten. So müssen z.B. beim Löschen eines Objekttypen die Zugriffsrechte der Benutzer aktualisiert, Regeln, die bezüglich dieses Typen definiert sind, entfernt
und Regeln, die in ihren Aktionskomponenten darauf zugreifen, manipuliert werden. Das
Menüsystem sollte daher Funktionalitäten beinhalten, mit denen der Systemadministrator
bei solchen Aufgaben unterstützt und beim Auftreten von Problemen informiert wird.
• Simulationen
Für eine Überprüfung des im System definierten aktiven Verhaltens muss das Menüsystem die Definition und Ausführung von Simulationen zulassen. So sollte es möglich sein,
Situationen und Zustände zu spezifizieren, von denen aus eine Simulation gestartet wird.
Die Ausführung darf aber zu keinem Zustandswechsel in einer Datenbank führen. Für eine
Überprüfung des definierten Verhaltens sind bei der Verarbeitung einer Simulation verschiedene Daten zu protokollieren (, z.B. welche Befehle ausgeführt wurden, wann und
welche Regeln verarbeitet wurden und auf welche Objekttypen zugegriffen wurde). Die
Auswertung der Daten sollte graphisch erfolgen und mehrere Stufen der Detailliertheit
unterstützen.
• Hilfesystem
Zur Unterstützung des Benutzers ist es wichtig, ein Hilfesystem zu integrieren, über das
z.B. beim Problem der Befehlsspezifikation hilfreiche Informationen abgefragt werden
können. Zudem sollte sich dieses System beim Erkennen von Fehlern automatisch aktivieren und detaillierte Meldungen zur Korrektur ausgeben. In gewissen Situationen ist es
nützlich, wenn das System mehrere Alternativen anbietet, aus denen der Benutzer eine
auswählen kann.
Für die Definition eines reaktiven Verhaltens muss die entwickelte ARDL3 realisiert werden. Da
durch einen ersten Prototypen vor allem die erarbeiteten Konzepte für die korrekte Ausführung
von Befehlen, Transaktionen und Regeln überprüft werden sollen, ist es nicht erforderlich, dass
die gesamte Regelsprache umgesetzt wird. Es wurde daher festgelegt, welche Regeltypen definiert
werden können und verarbeitet werden müssen:
3
vgl. Kapitel 6.
320
KAPITEL 9. PROTOTYP
• Strukturen
Im System müssen Regeln mit einer EA-, ECA- oder ECAA-Struktur definiert werden
können.
• Inhalte
Die Definition einer Regel beinhaltet u.a. die Spezifikation der Komponenteninhalte. Vom
System müssen die folgenden Ereignisse, Bedingungen und Aktionen unterstützen werden:
– Ereignisse
Die Ereigniskomponenten sind primitiv und basieren auf Datenmanipulations-Ereignissen, Transaktions-Ereignissen oder abstrakten Ereignissen.
– Bedingungen
Die Bedingungskomponenten sind primitiv und basieren auf TRUE, FALSE oder Prädikaten.
– Aktionen
Die Reaktion auf eine erkannte Situation besteht in der Verarbeitung einer primitiven
oder komplexen Aktion, die auf einer Sequenz von primitiven Aktionen basiert.
• Semantiken
Im System müssen Regeln mit folgenden Semantiken definiert und verarbeitet werden
können:
– Auslösungszeitpunkte pre und post
– Granularitäten instance und set
– Prioritäten
– Kopplungsmodus immediate
9.2.2
Verarbeitungssystem
Die an das Verarbeitungssystem gestellten Anforderungen lassen sich so zusammenfassen, dass
die im Menüsystem spezifizierten Befehle und Transaktionen unter Berücksichtigung der dabei
ausgelösten Regeln im Verarbeitungssystem semantisch korrekt ausgeführt werden. Für die Verarbeitung solcher Abläufe ist es aber nicht notwendig, dass alle Subsysteme und Module, wie
das Regelanalysesystem4 , realisiert werden. Bei den zu implementierenden Modulen handelt es
sich um:
• Modul ’AFPN Generation’
Dieses Modul erzeugt für jeden vom Benutzer eingegebenen Befehl ein Petri-Netz (AFPN),
das die Grundlage für die Verarbeitung darstellt.
• Modul ’Primitive Event Detection’ (PED)
Der ’PED’ hat die Aufgabe, das vom Modul ’AFPN Generation’ erzeugte Netzwerk auf
primitive Ereignisse zu überprüfen. Falls dabei Ereignisse erkannt werden, ist das PetriNetz gegebenenfalls um Plätze und Transitionen zu erweitern, damit eine Verknüpfung
mit dem Ereignissystem5 aufgebaut werden kann.
4
5
vgl. Abschnitt 5.3.3.
vgl. Abschnitt 7.5.5.
9.3. ENTWURF
321
• Modul ’Complex Event Detection’ (CED)
Dieses Modul ist für die Erkennung von Ereignissen verantwortlich und überprüft, ob durch
ein signalisiertes Ereignis Regeln ausgelöst werden.
• Modul ’Net Processing’ (NP)
Die Verarbeitung des Netzwerks, in dem der benutzerdefinierte Befehl und die ausgelösten
Regeln dargestellt sind, ist Aufgabe dieses Moduls.
• Modul ’ARFPN Generation’
Die ausgelösten Regeln werden durch dieses Modul instanziiert und entsprechend der definierten Semantiken in das zu verarbeitende Petri-Netz integriert. Zusätzlich entfernt die
’ARFPN Generation’ aus dem Netz die instance-basierten Regeln nach ihrer Ausführung.
• Modul ’Transaction Management’ (TM)
Dieses Modul hat die Aufgabe, Transaktionen zu erzeugen und zu verwalten sowie die
(tatsächliche) Ausführung von Befehlen und Regeln zu koordinieren.
• Modul ’Transaction Execution’ (TE)
Befehle, die im zugrundeliegenden Datenbanksystem verarbeitet werden müssen, werden
von diesem Modul entsprechend transformiert und an das System übergeben.
• Subsystem ’Repository’
Das ’Repository’ speichert Informationen über die im System definierten Datenbankelemente und Regeln. Diese Daten werden von der ’AFPN Generation’ u.a. zur Erzeugung
eines repräsentativen Petri-Netzes verwendet.
Auf die Implementierung von weiteren Modulen, wie dem Modul ’Lock Management’ (LM), das
Sperren für Objekttypen und Datensätze erzeugt und verwaltet, kann verzichtet werden, da der
Prototyp für einen ’single user’-, ’single tasking’-Betrieb realisiert wird.
9.3
Entwurf
Die Implementierung eines Prototypen mit dem oben erläuterten Anforderungsprofil erfordert,
dass Konzepte erarbeitet werden, auf deren Basis das Benutzersystem und das Verarbeitungssystem programmiert werden können. Die entwickelten Konzepte werden im folgenden genauer
betrachtet.
9.3.1
Benutzersystem
Das Benutzersystem von ALFRED soll den heutigen Anforderungen an ein modernes FrontEnd entsprechen. Daher wurde eine Benutzerschnittstelle entworfen, die graphikorientiert ist
und auf der Fenstertechnik basiert. Aufgrund der zu unterstützenden Funktionalitäten wurde
ein Menü entwickelt, das sich aus sieben Einträgen zusammensetzt:
• Datenbankmenü
Dieses Menü besteht aus Befehlen, mit denen Datenbanken erzeugt und gelöscht werden
können. Zusätzlich beinhaltet es Befehle, mit denen sich der Benutzer an einer Datenbank
an- und abmelden kann.
322
KAPITEL 9. PROTOTYP
• Datendefinitionsmenü
Das Datendefinitionsmenü setzt sich aus Befehlen zusammen, mit denen Objekttypen,
Sichten, Regeln, Regelmengen, Datenbankprozeduren, Programme und Benutzer erzeugt,
manipuliert und gelöscht werden können.
• Datenmanipulationsmenü
Dieses Menü enthält Befehle, mit denen auf die Datensätze einer Datenbank zugegriffen
werden kann. Zudem beinhaltet es mehrere Befehle, mit denen sich die Zustände von
Regeln ändern sowie Datenbankprozeduren und Programme aufrufen lassen.
• Transaktionsmenü
Die Befehle, mit denen Transaktionen erzeugt, manipuliert, gelöscht und ausgeführt werden
können, sind in diesem Menü zusammengefasst.
• Simulationsmenü
Dieses Menü enthält Befehle zur Erzeugung und Ausführung von Simulationen.
• Regelinformationsmenü
Das Regelinformationsmenü enthält Befehle zur Abfrage von Informationen aus der existierenden Regelbasis.
• Hilfemenü
Dieses Menü soll den Benutzer bei der Arbeit mit ALFRED unterstützen, indem er sich
z.B. über die Syntax von Befehlen informieren kann.
Um die potentielle Gefahr der fehlerhaften Eingabe zu verringern, sollten die Fenster zur Spezifikation der auszuführenden Befehle Konstrukte aufweisen, aus denen sich einzelne oder mehrere
Einträge auswählen lassen. Ein Beispiel dafür sind systemgenerierte Auswahllisten. Eine Eingabe
über die Tastatur sollte nur dann erfolgen, wenn dies unumgänglich ist.
Für das Menüsystem von ALFRED wurde eine Vielzahl von Fenstern konzipiert, die vor allem
für die Spezifikation von Befehlen, die Ausgabe von Meldungen und die Durchführung von Auswahlentscheidungen verwendet werden. Um dem Benutzer ein einheitliches Aussehen zu bieten,
basiert der Entwurf dieser Fenster auf folgenden Richtlinien:
• Jedes Dialogfenster setzt sich aus einem Eingabe- und einem Aktionsbereich zusammen:
– Eingabebereich
Der Eingabebereich befindet sich links im Fenster und wird vom Benutzer für die
Spezifikation der auszuführenden Befehle verwendet. Dazu werden u.a. Listboxen,
Felder und Schaltflächen benutzt, mit denen weitere Fenster geöffnet werden können.
– Aktionsbereich
Der Aktionsbereich befindet sich rechts im Fenster und enthält bis zu drei Schaltflächen:
∗ Mit Ok werden die eingegebenen Befehle zur Ausführung an das Verarbeitungssystem übergeben. Danach wird das Dialogfenster geschlossen.
∗ Mit Cancel werden die Eingaben des Benutzers verworfen und das Fenster wird
geschlossen. Der Befehl wird nicht verarbeitet.
∗ Die Schaltfläche Apply weist im Vergleich zu Ok eine erweiterte Funktionalität auf.
Nach der Übergabe des Befehls an das Verarbeitungssystem werden die Eingaben
des Benutzers aus dem Fenster entfernt, damit sich ein neuer Befehl dieses Typs
spezifizieren lässt.
9.3. ENTWURF
323
• Einige Befehle sind so komplex, dass ihre Spezifikation auf mehrere Fenster verteilt wurde.
Dabei wurde besonders darauf geachtet, dass logisch zusammenhängende Befehlsteile in
einem Fenster dargestellt sind. Über Schaltflächen, die im Eingabebereich positioniert sind,
werden die anderen Fenster geöffnet.
• In bestimmten Situationen ist die Ausführung gewisser Befehle nicht sinnvoll und wird
daher vom System auch nicht zugelassen. Solche Befehle sind grau dargestellt.
9.3.2
Verarbeitungssystem
Das Verarbeitungssystem stellt den eigentlichen Kern des Prototypen dar, da hier sowohl die
vom Benutzer spezifizierten Befehle als auch die ausgelösten Regeln unter Berücksichtigung
der Semantiken ausgeführt werden. Die Implementierung dieses Teilsystems erfordert daher die
Verwendung einer geeigneten Entwurfsmethode. Der Auswahl einer solchen Methode ist eine
entscheidende Bedeutung zuzuweisen, da sie sowohl ein Vorgehen definiert als auch eine Notation
bereitstellt. Dabei sollte
• das Vorgehen möglichst flexibel und
• die Notation einfach, gut verständlich und durch eine hohe Ausdruckskraft gekennzeichnet
sein, damit sich komplexe Zusammenhänge korrekt und vollständig beschreiben lassen.
Zwei wichtige Entwurfstypen sind das strukturierte Design (SD) und das objektorientierte Design
(OOD), die Booch wie folgt definiert ([Boo94], S. 608, 614):
Definition 9.1 (Strukturiertes Design)
Eine Designmethode, die den Prozess der algorithmischen Zerlegung umfasst. Die algorithmische Zerlegung ist ein Prozess der Zerlegung eines Systems in Bestandteile, die jeweils
kleinere Schritte in einem grösseren Prozess repräsentieren. Die Anwendung der strukturierten Design-Methoden führt zu einer Zerlegung, die sich auf den Steuerfluss eines Systems
konzentriert.
Definition 9.2 (Objektorientiertes Design)
Eine Designmethode, die den Prozess der objektorientierten Zerlegung und eine Notation
für die Darstellung der logischen und physikalischen sowie der statischen und dynamischen
Modelle des zu entwickelnden Systems umfasst. Diese Notation verwendet normalerweise
Klassendiagramme, Objektdiagramme, Moduldiagramme und Prozessdiagramme.
Auf der Basis eines Vergleichs wurde entschieden, das Verarbeitungssystem von ALFRED objektorientiert zu entwerfen, da mit einer solchen Zerlegungsart laut Booch mehrere signifikante
Vorteile verbunden sind:
”Die objektorientierte Zerlegung schafft durch die Wiederverwendung gemeinsamer
Mechanismen kleinere Systeme, wodurch erhebliche Einsparungen bezüglich der verwendeten Ausdrucksmittel erzielt werden. Objektorientierte Systeme sind außerdem
leichter zu ändern und können dadurch einfacher weiterentwickelt werden, da ihr
Entwurf auf stabilen Zwischenformen beruht. Tatsächlich reduziert die objektorientierte Zerlegung das Risiko bei der Erstellung komplexer Software-Systeme erheblich,
324
KAPITEL 9. PROTOTYP
weil diese dahingehend entworfen werden, daß sie sich inkrementell aus kleineren
Systemen weiterentwickeln. Darüber hinaus zielt die objektorientierte Zerlegung direkt auf die inhärente Komplexität ab, indem sie hilft, intelligente Entscheidungen
hinsichtlich der Aufteilung von Problemen, die bei umfangreichen Arbeitskonditionen
gegeben sind, zu treffen.” ([Boo94], S. 34).
Für ein objektorientiertes Design werden in der Literatur mehrere Methoden vorgeschlagen.
Beispiele dafür sind OMT ([Rum91]), Catalysis ([DW98]), Fusion ([CB94]) und die Methode
von Booch ([Boo94]). Ein Vergleich dieser Ansätze hat gezeigt, dass die Methode von Booch
geeignet ist, da das Schwergewicht auf den Entwurf gelegt wird. Zudem ist dieser Ansatz durch
eine hohe Praxisorientiertheit gekennzeichnet und leicht verständlich.
Das entwickelte objektorientierte Modell des Verarbeitungssystems besteht aus einer Vielzahl
von Klassen, mit denen die zu implementierenden Module repräsentiert sind. Zur Erläuterung
wird die Modellierung der einzelnen Module nun genauer betrachtet. Eine ausführlichere Beschreibung wird in [Blu99] gegeben:
• Modul ’AFPN Generation’
Dieses Modul wird durch die Klasse afpn repräsentiert. Eine wichtige Methode dieser
Klasse ist run(), die für einen zu verarbeitenden Befehl ein repräsentatives Petri-Netz
erzeugt. Der Algorithmus dieser Methode lässt sich wie folgt beschreiben:
Begin net with a place and a BEG_ARFPN-transition
If it’s ‘‘execute transaction’’
Load transaction from repository
Append a place and a BOT-transition
For each command
Append a place and a P_BOT-transition
Append a place and the command-transition
Append a place and a P_EOT-transition
End for
Append a place and a EOT-transition
Append a CHOICE-place
Append a AOT-transition on TRUE-branch
Append a COT-transition on FALSE-branch
Else if it’s a simple command
Append a place and a P_BOT-transition
Append a place and the command-transition
Append a place and a P_EOT-transition
Append a CHOICE-place
Append a P_AOT-transition on TRUE-branch
Append a P_COT-transition on FALSE-branch
end if
Append a place and a END_ARFPN-transition
Create a token and put it into the first place
Return pointer to first place as result.
9.3. ENTWURF
325
• Modul ’PED’
Im objektorientierten Modell ist dieses Modul durch eine Klasse repräsentiert, die als ped
bezeichnet wird. Für die Erkennung primitiver Ereignisse beinhaltet diese Klasse die Methode run(). Ist ein Ereignis erkannt worden, wird das Netzwerk gegebenenfalls um eine
Transition und einen Platz erweitert. Zudem wird die ereignissignalisierende Transition
über eine Kante mit dem entsprechenden PEP des Ereignissystems verbunden. Der Algorithmus dieser Methode lautet:
For all transitions in the petri-net
If it’s a transaction-transition
Check for rules triggered by transaction-transitions
Else if it’s a command-transition
Check for rules triggered by command-transitions
End if
If place after transition is a CHOICE-place
Check next transition for true-out-branch
Check next transition for false-out-branch
End if
Goto next transition
End for.
• Module ’NP’ und ’CED’
Diese beiden Module, mit denen die Marken durch die Netzwerke des Ereignissystems und
des zu verarbeitenden Befehls bewegt werden, sind nicht explizit dargestellt. Beim Entwurf
wurde entschieden, die Funktionalitäten dieser Module in die Petri-Netze zu verschieben,
in dem mehrere Klassen von Plätzen und Transitionen entworfen wurden. Da durch die
Konzeption von rekursiven Methoden das Verschieben der Marken sichergestellt ist, bedarf
es keiner weiteren Klassen, die den Fluss der Marken überwachen und steuern.
Für die Modellierung der statischen Struktur und des dynamischen Verhaltens der zu
verarbeitenden Petri-Netze wurden mehrere Klassen und Subklassen entwickelt. Einige
Beispiele dafür sind:
1. Klasse place
Eine Instanz dieser Klasse repräsentiert einen Platz, der versucht, eine Marke an
eine Transition weiterzugeben. Diese Dynamik wird durch den Aufruf der Methode
fire trans() erreicht, die auf folgendem Algorithmus basiert:
For all outgoing transitions
Get the transition
If transition can fire
Return 0
Else
Find next transition
End if
End for
Return 1 if no transition has fired.
Zu dieser Klasse wurden auch noch einige Subklassen entworfen, die ein anderes
Verhalten aufweisen:
326
KAPITEL 9. PROTOTYP
– Klassen passive place und eoe place
Die Plätze dieser beiden Klassen versuchen nicht, eine Marke weiterzusenden,
sondern warten darauf, von einer Transition aufgefordert zu werden.
– Klasse choice place
Diese Klasse repräsentiert die CHOICE Plätze, die eine Marke in Abhängigkeit
eines Wahrheitswertes über eine Kante bewegen. Dieser Wert ist in der Marke
gespeichert.
– Klasse pep place
Diese Subklasse repräsentiert die PEP im Ereignissystem. Diese Plätze geben eine
Marke nur dann an die verbundene Vervielfältigungstransition RT weiter, wenn
die aktuelle Transaktion den Status running hat. Damit ist sichergestellt, dass
keine Regeln mehr verarbeitet werden, wenn die (aktuelle) Transaktion aufgrund
eines Fehlers bereits abgebrochen wurde.
2. Klasse transition
Diese Klasse repräsentiert Transitionen, die nach den bekannten Regeln gefeuert werden. Das Feuern wird durch einen Eingangsplatz initiiert, der versucht, seine Marke
an die Transition zu übergeben. Dadurch wird die Methode fire token() aufgerufen, die bei jedem Eingangsplatz der Transition anfragt, ob er markiert ist. Unter der
Annahme, dass die Transition feuerbar ist, wird von jedem dieser Plätze eine Marke
angefordert, die dem Modul ’TM’ (Klasse tmgr, s.u.) zur Verarbeitung übergeben
wird. Als Ergebnis wird eine neue Marke erzeugt und zurückgegeben, die nun so
oft vervielfältigt wird, wie es Ausgangsplätze gibt. Der Algorithmus dieser Methode
lautet:
Check if every incoming place has a token to deliver
If true
Get a token from every incoming place
Insert token in token-list
Call transaction-manager to process the transition
If the transaction-manager returns a token
For each outgoing place
Create a copy of the token
Send the copy to the outgoing place
End for
Delete the token received from transaction-manager
Return 0 (Firing ok)
Else
Return 1 (couldn’t fire)
End if
End if.
Zu dieser Klasse wurden mehrere Subklassen definiert, die sich zum Teil durch ein
davon abweichendes Verhalten auszeichnen. Zwei Beispiele dafür sind die Klassen
replication trans, mit der die Vervielfältigungstransitionen RT repräsentiert, und
bot trans, mit der die BOT Transitionen beschrieben werden.
3. Klasse token
Die Objekte dieser Klasse stellen die Marken dar, die durch die zu verarbeitenden Petri-Netze bewegt werden. Sie speichern verschiedene Daten, die u.a. für die
Ausführung von Befehlen und Auswertung von Bedingungen benötigt werden. Die
Methoden dieser Klasse erfüllen daher vor allem die Funktion der Wertzuweisung
und die der Aktualisierung von Variablenwerten.
9.3. ENTWURF
327
• Modul ’ARFPN Generation’
Dieses Modul hat die Aufgabe, die ausgelösten Regeln zu instanziieren und in das zu
verarbeitende Netzwerk des Benutzerbefehls zu integrieren. Dazu wird die Regel vom EOE
Platz bis zum EOR Platz kopiert und unter Beachtung der definierten Semantiken eingefügt.
Diese Aufgabe realisiert die Methode run(), die auf folgendem Algorithmus basiert:
Get rule-informations from PEP
For each rule after replication-transition
If EOE-place has a token
Make a copy of the rule
Move token to EOE of the copied rule
End if
End for
Connect rules with priorities and coupling-modes
If granularity is instance
Set the record counter in the last place of all copied rules
For each record
Make a copy of the token of every rule
Fire the first transition of the first rule
End for
Else if granularity is set
Fire the first transition of the first rule
End if.
• Module ’TM’ und ’TE’
Im Transaktionssystem werden die als Transitionen dargestellten Befehle und Bedingungen
verarbeitet. Das objektorientierte Modell umfasst daher einige Klassen, die die Aufgaben
der Module ’TM’ und ’TE’ repräsentieren:
– Klasse tmgr
In dieser Klasse werden die Transaktionen verwaltet und verarbeitet, die für die
Ausführung der benutzerdefinierten Befehle und ausgelösten Regeln unter Verwendung von Listenstrukturen erzeugt werden. Die Verarbeitung erfolgt mit Hilfe mehrerer Methoden. Ein Beispiel dafür ist commit transaction(), mit der die in einer
Transaktion durchgeführten Datenmanipulationen auf Datenbankebene festgeschrieben werden. Der Algorithmus dafür lautet:
For all relations in CURRENT-data
For all records in relation
if record-state is ‘‘deleted’’
delete record from database
else if record-state is ‘‘changed’’
delete record from database
insert record into database
else if record-state is ‘‘inserted’’
insert record into database
end if
End for all records
End for all relations.
328
KAPITEL 9. PROTOTYP
– Klasse transaction
Die Objekte dieser Klasse repräsentieren die Transaktionen, die in der Klasse tmgr
verwaltet werden. Damit in den Transaktionen zu jeder Zeit die aktuellen Attributwerte der Datensätze vorliegen, umfasst die Klasse mehrere wichtige Methoden. Ein
Beispiel dafür ist merge record curr data(), mit der die Datensätze einer übergeordneten Transaktion mit denjenigen einer davon abhängigen Transaktion verschmolzen werden. Der Algorithmus dieser Methode lässt sich wie folgt angeben:
Find concerned relation in CDS
If found
Find corresponding record in this relation
If found
If record is to delete
Set record state to deleted
Else if record is to change
Set new values
Set record state to changed
End if
Set flag: record could be merged
End if
End if
If record could not be merged
Merge the record in ODS
End if.
– Klasse trans rel
In dieser Klasse werden die Datensätze, auf die bei der Verarbeitung einer Transaktion zugegriffen wird, in Form einer Listenstruktur verwaltet. Die Methoden dieser
Klasse ermöglichen es z.B. einen neuen Datensatz in eine Liste einzufügen oder einen
bestimmten Datensatz aus einer Liste zu ermitteln.
– Klasse record
Die Objekte dieser Klasse beschreiben die Datensätze, die durch die Befehle einer
Transaktion selektiert, eingefügt, manipuliert oder gelöscht werden. Insgesamt werden
für jeden Datensatz drei Versionen gespeichert:
∗ RET
Diese Struktur beinhaltet die Attributwerte der Datensätze, die aus einer Datenbank selektiert wurden.
∗ OLD
In dieser Struktur sind die alten Attributwerte der Datensätze gespeichert, auf
die bei der Verarbeitung von update oder delete Befehlen zugegriffen wurde.
∗ NEW
In dieser Struktur sind die neuen (aktuellen) Attributwerte der Datensätze gespeichert, die entweder neu eingefügt oder manipuliert wurden.
Die Methoden dieser Klasse werden verwendet, um Attributwerte zu selektieren und
zu manipulieren.
• Subsystem ’Repository’
Das ’Repository’ setzt sich u.a. aus einem Daten- und einem Regel-Repository zusammen,
die im objektorientierten Modell durch zwei Klassen repräsentiert sind:
9.4. IMPLEMENTIERUNG
329
– Klasse data rep
Das Daten-Repository speichert Informationen über die existierenden Datenbanken
und der darin enthaltenen Elemente, wie Objekttypen, Datenbankprozeduren, Programme, Benutzer, Privilegien und Zugriffsrechte. Für die Verwaltung dieser Daten werden Listenstrukturen verwendet. Die grundlegenden Funktionen, wie Daten
einfügen, manipulieren und suchen, werden durch Methoden realisiert.
– Klasse rule rep
Das Regel-Repository speichert Informationen über die im System definierten Regeln.
Beispiele dafür sind Strukturen, Ereignisse, Bedingungen, Aktionen und Semantiken.
Der Aufbau dieser Klasse ist analog zu der des Daten-Repository. Auch hier erfüllen
die Methoden die grundlegenden Operationen.
Neben diesen Klassen, mit denen die Module repräsentiert sind, beinhaltet das objektorientierte
Modell einige weitere Klassen, die für die Verwaltung und Steuerung der Module benötigt werden.
Zwei Klassen, die es hier besonders zu erläutern gilt, sind subsys und bilist:
• Klasse subsys
Diese Klasse verwaltet die Module des Verarbeitungssystems. Die Instanziierung eines solchen Klassenobjektes bewirkt, dass die Module erzeugt und initialisiert werden. Da alle diese Module einen Zugriff auf das gleiche Objekt haben, ist sichergestellt, dass ein Modul auf
ein anderes zugreifen kann. Eine wichtige Methode dieser Klasse ist execute command(),
mit der die Verarbeitung eines benutzerdefinierten Befehls eingeleitet wird. Der entsprechende Algorithmus lautet:
Write message to log-file: STARTED
Build AFPN by calling afpn.run()
If net exists
Detect primitive events by calling ped.run()
If no error has occured
Fire the token from the first place of the net
Write message to log-file: TERMINATED
Delete net
Else if error
Error-message
End if
Else if no net exists
Error-message
End if.
• Klasse bilist
Diese Klasse repräsentiert den abstrakten Datentyp doppelt verkettete Ringliste. Diese Listenstruktur wird von mehreren anderen Klassen, wie z.B. data rep und tmgr, zur Verwaltung verwendet.
9.4
Implementierung
Für eine Realisierung des Prototypen wurden die entwickelten Entwürfe implementiert. Dazu
wurde für das Benutzersystem eine graphische Benutzeroberfläche auf der Basis der Skriptsprache Tcl/Tk programmiert, die sich dem Benutzer in Form eines Menüsystems präsentiert. Das
330
KAPITEL 9. PROTOTYP
Menüsystem besteht aus mehreren Menüs, die Befehle beinhalten, die logisch zusammenhängen.
Das Verarbeitungssystem wurde in C++ realisiert.
9.4.1
Benutzersystem
Für die prototypische Implementierung des Benutzersystems wurden mehrere Werkzeuge auf
ihre Eignung hin untersucht. Drei Beispiele dafür sind:
• Borland Delphi
Dieses Werkzeug ist eine objektorientierte Erweiterung der Programmiersprache Pascal für
Windows-basierte Systeme. Borland Delphi unterstützt eine Vielzahl von Entwicklungsaktivitäten, die interaktiv genutzt werden können.
• Microsoft Access
Microsoft Access ist ein Windows-basiertes relationales Datenbankmanagementsystem, das
zusätzlich über eine Entwicklungsumgebung verfügt, mit der graphische Benutzeroberflächen realisiert werden können.
• Tcl/Tk
Tcl/Tk (tool command language/toolkit) ist ein Werkzeug, das an der University of Berkeley entwickelt wurde ([Out84]). Tcl ist eine interpretierte Skriptsprache, mit der Applikationen erzeugt werden können. Tk stellt eine Erweiterung zu Tcl dar, das Funktionalitäten zum Erstellen von X-Windows-kompatiblen Benutzeroberflächen beinhaltet. Tcl
und Tk sind als C-Bibliotheken implementiert und sowohl für UNIX- als auch Windowsbasierte Systeme auf dem Internet frei verfügbar (FTP-Sites: ftp.neosoft.com/pub/tcl und
ftp.neosoft.com/pub/tk).
Um entscheiden zu können, welches Werkzeug die gestellten Anforderungen am besten erfüllt,
wurde ein Vergleich durchgeführt. Dabei hat sich gezeigt, dass Tcl/Tk der Vorzug zu geben ist, da
dieses Werkzeug als einziges die Anforderung nach der Plattformunabhängigkeit erfüllt. Gestützt
wird diese Entscheidung auch dadurch, dass diese Skriptsprache Schnittstellen zu C und C++
enthält. So besteht die Möglichkeit, das objektorientierte Modell des Verarbeitungssystems in
C++ zu programmieren und mit der graphischen Oberfläche zu kombinieren.
Für die Erstellung der graphischen Benutzeroberfläche wurde das Werkzeug Xf verwendet, das
an der Technischen Universität Berlin entwickelt wurde. Mit Xf lassen sich Tcl/Tk-basierte
Applikationen interaktiv konstruieren und testen. Auch dieses Werkzeug ist auf dem Internet frei
verfügbar (FTP-Site: ftp.neosoft.com/pub/tcl). Für die Implementierung des Benutzersystems
wurden somit die folgenden Werkzeuge benutzt: Tcl V8.0, Tk V8.0 und Xf V3.1.
Um einen Eindruck der graphischen Benutzeroberfläche und der damit verbundenen Arbeitsweise
zu vermitteln, werden im folgenden das Datenbank-, Datendefinitions- und Datenmanipulationsmenü näher betrachtet.
9.4.1.1
Datenbankmenü
Das System wird gestartet durch den Befehl alfred. Auf dem Bildschirm erscheinen die graphische Benutzeroberfläche und das Fenster Log on, über das sich der Benutzer anmeldet (vgl. Abb.
9.1). Dazu wählt er aus der Liste der Benutzer, die das System anhand der im ’Repository’ gespeicherten Informationen selbständig erzeugt, einen Eintrag aus und gibt zusätzlich ein Kennwort
9.4. IMPLEMENTIERUNG
331
ein. Mit dem Klicken auf die Schaltfläche Ok überprüft das System die Zugangsberechtigung und
aktiviert den Menüpunkt Data base, wenn die Eingaben korrekt sind. Das Datenbankmenü beinhaltet insgesamt fünf Einträge, von denen sich vier auf Datenbanken beziehen (vgl. Abb. 9.2).
Neben Quit, mit dem das Programm beendet wird, besteht dieses Menü aus:
• Create
Über diesen Eintrag wird ein Fenster geöffnet, in dem der Befehl create data base spezifiziert wird. Mit diesem Befehl erzeugt der Systemadministrator eine neue Datenbank.
• Connect
Das Klicken auf diesen Eintrag öffnet ein Fenster, über das ein connect data base Befehl
spezifiziert wird. Damit meldet sich der Benutzer an einer Datenbank an (vgl. Abb. 9.3).
• Disconnect
Für die Abmeldung von einer Datenbank klickt der Benutzer auf diesen Eintrag.
• Destroy
Mit destroy wird ein Fenster geöffnet, mit dem der Systemadministrator eine Datenbank
löschen kann.
Um sich an einer Datenbank anmelden zu können, muss folglich auf Connect geklickt werden,
wodurch jenes Fenster geöffnet wird, das die Abbildung 9.3 zeigt. Für die Verarbeitung eines
solchen Befehls sind insgesamt drei Eingaben zu spezifizieren:
• Datenbank
In der ersten Liste muss der Name der Datenbank markiert werden, mit der gearbeitet
werden soll.
• Benutzer
Aus der zweiten Liste ist der Name des Benutzers zu selektieren, für den die Datenbank
geöffnet werden soll.
• Kennwort
Im Feld der Klausel with password ist ein Kennwort einzugeben, das für die Überprüfung
der Zugangsberechtigung benötigt wird.
Das Fenster in Abbildung 9.3 zeigt, dass sich der Benutzer admin an der Datenbank kunden db
anmelden möchte. Wird der Befehl erfolgreich ausgeführt, aktiviert das System die restlichen
Menüpunkte.
9.4.1.2
Datendefinitionsmenü
Das Datendefinitionsmenü fasst Befehle zusammen, mit denen u.a. Objekttypen, Sichten, Regeln,
Regelmengen, Datenbankprozeduren und Benutzer definiert werden können (vgl. Abb. 9.4).
Jeder Menüeintrag ist mit einem Pfeil gekennzeichnet, der auf ein Untermenü hinweist.
Im folgenden wird beschrieben, wie ein Objekttyp und eine Regel zu definieren sind. Dazu wird
noch einmal das Beispiel der Auftragsabwicklung6 aufgegriffen:
6
vgl. Abschnitte 2.3.2.1, 2.3.2.2 und Kapitel 8.
332
KAPITEL 9. PROTOTYP
Abbildung 9.1: Fenster Log on
Abbildung 9.2: Datenbankmenü.
Abbildung 9.3: Fenster Connect data base.
9.4. IMPLEMENTIERUNG
333
Abbildung 9.4: Datendefinitionsmenü.
• Objekttyp
Es wird angenommen, dass das konzeptionelle Datenmodell (vgl. Abb. 9.5) bis auf den
Entitätstypen WARE im Prototypen umgesetzt ist. In WARE werden die Artikel zusammengefasst, die von den Kunden bestellt werden können. Dazu umfasst dieser Entitätstyp
mehrere Attribute:
– Im Attribut wnr wird eine laufende Nummer erfasst, über welche die Eindeutigkeit
der Artikel sichergestellt wird.
– Im Attribut bezeichnung werden die Artikelnamen gespeichert.
– Im Attribut farbe werden die Farben der Artikel angegeben.
– Im Attribut groesse werden die Grössen der Artikel erfasst.
– Die Hersteller der Artikel werden im Attribut hersteller gespeichert.
– Die im Lager verfügbaren Bestände werden im Attribut bestand gespeichert.
– Die Preise der Artikel werden im Attribut preis erfasst.
Die Erzeugung dieses Entitätstypen beinhaltet nicht nur die Spezifikation der Attribute, sondern auch die Definition von Integritätsbedingungen und Beziehungen zu anderen
Objekttypen:
– Integritätsbedingungen
Kein Datensatz enthält einen Nullwert. Die Eindeutigkeit der erfassten Artikel ergibt sich aus dem Attribut wnr sowie aus der Attributkombination von bezeichnung,
groesse, farbe und hersteller. Als Primärschlüssel wird das Attribut wnr verwendet. Zudem ist sicherzustellen, dass in den Attributen bestand und preis keine
negativen Zahlenwerte vorkommen.
334
KAPITEL 9. PROTOTYP
MITARBEITER
(1,1)
bearbeitet
(0,n)
KUNDE
(1,1)
erteilt
(1,n)
(1,1)
umfasst
(0,1)
AUFTRAGSABLEHNUNG
umfasst
(1,1)
AUFTRAGSBESTÄTIGUNG
(1,n)
AUFTRAGSLIEFERSCHEIN
(1,1)
AUFTRAGSRECHNUNG
(0,1)
RECHNUNGSERINNERUNG
(0,3)
AUFTRAGSMAHNUNG
(1,1)
BESTELLUNGSBESTÄTIGUNG
(0,n)
BESTELLUNGSREKLAMATION
(1,1)
AUFTRAG
(1,1)
(1,1)
umfasst
(1,1)
umfasst
(1,1)
umfasst
(1,1)
umfasst
beinhaltet
(1,n)
AUFTRAGSARTIKEL
(0,n)
ist
(1,1)
liefert
(1,n)
WARE
(1,1)
ist
(1,n)
BESTELLUNGSARTIKEL
(1,n)
beinhaltet
(1,1)
(1,1)
LIEFERANT
(1,1)
erteilt
(1,n)
BESTELLUNG
(1,1)
umfasst
(1,1)
umfasst
(1,1)
umfasst
(1,1)
BESTELLUNGSRECHNUNG
Abbildung 9.5: Datenmodell der Auftragsabwicklung.
9.4. IMPLEMENTIERUNG
335
– Beziehungen
Der Entitätstyp WARE steht mit drei anderen Typen in Beziehung (vgl. Abb. 9.5). So
existiert z.B. eine (1,1)-(0,n) Beziehung zu AUFTRAGS ARTIKEL, in welchem die von
den Kunden bestellten Artikel gespeichert sind. Des weiteren besteht eine (1,1)-(1,n)
Beziehung zu LIEFERANT, worin die Daten der Lieferanten abgelegt sind. Eine dritte
Beziehung der Art (1,1)-(0,n) existiert zu BESTELLUNGS ARTIKEL, in der die Artikel
gespeichert sind, die bei den Lieferanten bestellt wurden.
Für die Definition des Objekttypen WARE muss im Datendefinitionsmenü der Eintrag
Object type gewählt werden. Es erscheint ein Untermenü, das die Einträge Create, Alter
und Destroy enthält (vgl. Abb. 9.4). Durch Klicken auf den ersten Eintrag öffnet das System das Fenster Create object type (vgl. Abb. 9.6). Dieses Fenster setzt sich aus mehreren
Elementen zusammen:
– Objekttypname
Der Name des Objekttypen wird im Feld der Klausel Create object type spezifiziert. In Abbildung 9.6 enthält dieses Feld den Eintrag WARE.
– Attribute
Für die Definition der Attribute stehen die Schaltflächen add und del zur Verfügung:
∗ Schaltfläche add
Über diese Schaltfläche wird das Fenster Add attributes geöffnet (vgl. Abb. 9.7).
Dieses Fenster besteht u.a. aus zwei Feldern und zwei Listen. Die Attributnamen
können dabei entweder durch das Markieren eines Eintrags in der oberen Liste
oder über die Tastatur eingegeben werden. Der Datentyp des Attributes ist durch
das Auswählen eines Elementes aus der unteren Liste zu definieren.
∗ Schaltfläche del
Wurde bei der Spezifikation irrtümlich ein falsches Attribut definiert, kann dieses
dadurch gelöscht werden, dass in der Attributliste des Fensters Create object type
der entsprechende Eintrag markiert wird. Danach ist auf del zu klicken.
– Integritätsbedingungen
Für die Definition von Integritätsbedingungen muss im Fenster Create object type
auf Integrity constraints geklickt werden. Auf der Benutzeroberfläche erscheint
ein Fenster, das Abbildung 9.8 zeigt. In diesem Fenster lassen sich vier Arten von
Integritätsbedingungen spezifizieren:
∗ Not Null-Integritätsbedingungen
Durch Klicken auf die obere Schaltfläche add wird ein Fenster geöffnet, das die
Attribute des Objekttypen in Form einer Liste anzeigt. Durch Markieren eines
Listenelementes und Klicken auf Ok oder Apply wird für das ausgewählte Attribut
eine Not Null-Integritätsbedingung definiert. Die so spezifizierten Bedingungen
werden in einer Liste im Fenster Integrity constraints gezeigt (vgl. Abb. 9.8).
Wurde für ein Attribut irrtümlicherweise eine solche Integritätsbedingung spezifiziert, kann diese gelöscht werden, wenn das entsprechende Listenelement markiert
und auf del geklickt wird.
∗ Schlüssel-Integritätsbedingungen
Für die Definition dieser Integritätsbedingungen stehen ebenfalls zwei Schaltflächen zur Verfügung. Die Spezifikation erfolgt dabei analog zu den Not NullIntegritätsbedingungen. Der einzige Unterschied besteht darin, dass in der Attributliste mehrere Einträge markiert werden können, die zusammen einen Schlüssel
bilden. Abbildung 9.8 zeigt, dass für WARE zwei Schlüssel definiert wurden, wobei
K-IC2 auf vier Attributen basiert.
336
KAPITEL 9. PROTOTYP
Abbildung 9.6: Fenster Create object type.
Abbildung 9.7: Fenster Add attributes.
9.4. IMPLEMENTIERUNG
337
Abbildung 9.8: Fenster Integrity constraints.
∗ Primärschlüssel-Integritätsbedingungen
Für die Festlegung eines Primärschlüssels ist auf die Schaltfläche select zu
klicken. So wird ein Fenster geöffnet, das die zuvor definierten Schlüssel in einer Liste anzeigt. Durch Markieren eines Eintrags und Klicken auf Ok wird für
den ausgewählten Schlüssel eine Primärschlüssel-Integritätsbedingung definiert,
die im Fenster Integrity constraints angezeigt wird (vgl. Abb. 9.8).
∗ Benutzerdefinierte Integritätsbedingungen
Benutzerdefinierte Integritätsbedingungen werden in dem Fenster User defined
IC spezifiziert, das über die untere Schaltfläche add geöffnet wird (vgl. Abb.
9.9). Da diese Bedingungen auf Prädikaten basieren, umfasst das Fenster einige
Listen, in denen die Attribute des Objekttypen, vier arithmetische und sechs Vergleichsoperatoren angegeben sind. Durch Markieren eines Listenelementes wird
dieses in das darüberliegende Feld eingefügt. Nach der Definition werden diese
Bedingungen im Fenster Integrity constraints angezeigt (vgl. Abb. 9.8).
In ALFRED werden die Integritätsbedingungen durch Regeln repräsentiert, die das
System automatisch erzeugt. Dieser Mechanismus wurde in der hier beschriebenen
ersten Version des Prototpyen nicht realisiert.
– Beziehungstypen
Für die Spezifikation von Beziehungen muss im Fenster Create object type auf die
Schaltfläche Relationships geklickt werden, wodurch ein gleichnamiges Fenster geöffnet wird (vgl. Abb. 9.10). Über add wird das Fenster Add relationships geöffnet, in
338
KAPITEL 9. PROTOTYP
Abbildung 9.9: Fenster User defined IC.
welchem die Beziehungen des definierten Objekttypen zu anderen Typen spezifiziert
werden:
∗ In der Klausel Relationship ist der Name der Beziehung einzugeben.
∗ In der Klausel in relation to wird der Objekttyp spezifiziert, zu dem eine Beziehung hergestellt werden soll. Dazu ist aus der Liste der entsprechende Eintrag
zu markieren.
∗ Die Kardinalitäten der Beziehung werden durch Klicken auf die entsprechenden
Radiobuttons eingegeben.
∗ Zuletzt ist festzulegen, wie reagiert werden soll, wenn die spezifizierte Beziehung verletzt wird. Dazu stehen insgesamt vier Reaktionsarten zur Verfügung,
die ebenfalls als Radiobuttons dargestellt sind.
Abbildung 9.11 zeigt, wie eine (1,1)-(0,n) Beziehung zwischen den Objekttypen WARE
und AUF ARTIL (AUFTRAGS ARTIKEL) spezifiziert wird. Als Reaktionsart wurde restrict gewählt, wodurch die verletzenden Befehle abgebrochen und zurückgesetzt
werden.
In ALFRED werden die Beziehungen durch Regeln realisiert. Dazu wurde ein Konzept
erarbeitet ([Blu97]), das aber in diesem Prototypen keine Anwendung findet.
– Regeln
Bei der Definition eines Objekttypen können auch Regeln definiert werden. Zu diesem
Zweck enthält das Fenster Create object type die Schaltfläche Rules.
• Regeln
Nachdem die Erzeugung eines Objekttypen beschrieben worden ist, soll nun die Definition
einer Regel genauer betrachtet werden. Dazu wird angenommen, dass für die Implementierung der Auftragsbearbeitung noch die Regel AB3 zu definieren ist. Zur Erinnerung sei
erwähnt, dass mit dieser Regel eine Neubestellung von Artikeln ausgelöst wird, wenn nach
der Manipulation eines Artikels dessen Bestand den Schwellenwert 100 unterschreitet. Um
den Abteilungsleiter des Lagers darüber zu informieren, wird ihm eine Meldung gesendet.
Die Regel AB3 lässt sich in der ARDL wie folgt definieren:
9.4. IMPLEMENTIERUNG
Abbildung 9.10: Fenster Relationships.
Abbildung 9.11: Fenster Add relationships.
339
340
KAPITEL 9. PROTOTYP
RULE AB3
ON post update WARE instance
IF (:NEW.WARE.bestand < 100)
DO message to AL LAGER (’:NEW.WARE.bezeichnung bestellen.’)
IS active
PRIORITY 0
EC-COUPLING immediate
CA-COUPLING immediate.
Für die Definition dieser Regel kann im Datendefinitionsmenü auf Rule und dann auf
Create geklickt werden, wodurch das Fenster Create rule erscheint (vgl. Abb. 9.12). Der
Eingabebereich dieses Fensters besteht aus zwei Feldern und drei Schaltflächen, über die
andere Fenster geöffnet werden. Im Feld der Klausel Create rule ist der Name der zu
erzeugenden Regel einzugeben. Das andere Feld, das sich im unteren Teil des Fensters
befindet, dient nur der Information, da dort der Name der Datenbank angegeben ist, in
der die Regel definiert wird. Für die Spezifikation der Struktur, der Komponenteninhalte
und der Ausführungssemantiken stehen drei Schaltflächen zur Verfügung:
– Allgemeine Regeldaten
Über die Schaltfläche Rule generalities wird ein Fenster geöffnet (vgl. Abb. 9.13),
über das sich die Regel zu Regelmengen zuordnen lässt. Zusätzlich wird der Zustand
spezifiziert:
∗ Regelmengen
Für die Zuordnung der Regel zu einer Regelmenge ist auf add zu klicken. Es
erscheint ein Fenster, in dem die bereits im System definierten Mengen in Form
einer Liste angezeigt werden. Durch das Markieren eines Listenelementes und
klicken auf Apply oder Ok wird die Regel in eine Menge eingefügt. Der Name der
ausgewählten Regelmenge erscheint dann in der Liste des Fensters Rule generalities. Die Abbildung 9.13 zeigt, dass AB3 der Menge UD-RU zugewiesen ist, in der
die benutzerdefinierten Regeln zusammengefasst sind. Wurde irrtümlicherweise
eine falsche Regelmenge spezifiziert, kann diese Zugehörigkeit durch das Markieren des entsprechenden Listenelementes und Klicken auf del gelöscht werden.
∗ Regelzustand
Der Regel kann entweder ein aktiver oder passiver Zustand zugewiesen werden.
Für AB3 wurde ein aktiver Zustand definiert (vgl. Abb. 9.13).
– Regelstruktur und -inhalte
Die Regelstruktur und auch die Inhalte der Komponenten werden im Fenster Rule
structure definiert, das über die gleichnamige Schaltfläche im Fenster Create rule
geöffnet wird (vgl. Abb. 9.14):
∗ Struktur
Die Regelstruktur legt der Benutzer durch Klicken auf eine der drei Radiobuttons
fest. In Abhängigkeit der gewählten Struktur können gewisse Schaltflächen, über
welche die Spezifikation der Komponenteninhalte erfolgt, inaktiv sein. So ist z.B.
in der Abbildung 9.14 die untere Schaltfläche grau, da für AB3 eine ECA-Struktur
gewählt wurde. In den Feldern, die sich unter den Schaltflächen befinden, werden
die Komponenteninhalte nach ihrer Spezifikation angezeigt.
9.4. IMPLEMENTIERUNG
341
Abbildung 9.12: Fenster Create rule.
Abbildung 9.13: Fenster Rule generalities.
∗ Ereignis
Für die Definition der Ereigniskomponente ist auf die Schaltfläche Rule event
zu klicken. Auf der Benutzeroberfläche erscheint dann das in Abbildung 9.15
gezeigte Fenster. Dieses Fenster hat im Eingabebereich drei Schaltflächen, über
die weitere Fenster zur Spezifikation von sprachlichen, primitiven und komplexen
Ereignissen geöffnet werden. Da die Regel AB3 durch ein DatenmanipulationsEreignis ausgelöst wird, ist auf die mittlere Schaltfläche zu klicken.
Auf der Oberfläche erscheint das Fenster Primitive rule event, in dem die unterstützten Ereignistypen als Schaltflächen dargestellt sind (vgl. Abb. 9.16). Durch
Klicken auf Data manipulation event wird ein Fenster geöffnet, das die Abbildung 9.17 zeigt. Der Eingabebereich dieses Fensters setzt sich aus drei Teilen
zusammen:
· Auslösungszeitpunkte
Im linken Bereich sind die beiden Auslösungszeitpunkte pre und post als
Radiobuttons dargestellt. Da die Überprüfung der Artikelbestände immer
nach einer Manipulation durchgeführt werden muss, ist für AB3 der Zeitpunkt
post markiert worden (vgl. Abb. 9.17).
342
KAPITEL 9. PROTOTYP
Abbildung 9.14: Fenster Rule structure.
Abbildung 9.15: Fenster Rule event.
9.4. IMPLEMENTIERUNG
Abbildung 9.16: Fenster Primitive rule event.
Abbildung 9.17: Fenster Data manipulation events.
343
344
KAPITEL 9. PROTOTYP
· Datenmanipulations-Ereignisse
Im mittleren Bereich sind die vier Datenmanipulations-Ereignisse select,
insert, update und delete dargestellt. Sobald ein Radiobutton markiert ist,
erscheinen in der dazugehörigen Liste die Objekttypen, die in der Datenbank
existieren. Durch das Markieren eines Listenelementes wird für das Ereignis
ein Objekttyp festgelegt.
· Granularitäten
Im rechten Bereich sind die Granularitäten set und instance repräsentiert,
mit denen die Häufigkeit der Regelverarbeitung in Abhängigkeit der involvierten Datensätze festgelegt wird. Für AB3 wurde die Granularität instance
markiert (vgl. Abb. 9.17).
Nachdem das Ereignis spezifiziert und im Fenster Data manipulation events auf
Ok geklickt wurde, erscheint das Ereignis im Feld der Klausel is triggered by
event der Fenster Primitive rule event und Rule structure.
∗ Bedingung
Für die Definition einer Bedingung ist im Fenster Rule structure auf die Schaltfläche Rule condition zu klicken. Das System öffnet ein Fenster, in dem entschieden werden muss, ob eine sprachliche, primitive oder komplexe Bedingung
eingegeben werden soll. Dieses Fenster (vgl. Abb. 9.18) hat den gleichen Aufbau
wie Rule event.
Über die Schaltfläche Primitive condition wird ein Fenster geöffnet, in welchem die unterstützten primitiven Bedingungstypen dargestellt sind (vgl. Abb.
9.19). Da für AB3 ein Prädikat zu spezifizieren ist, muss hier auf Predicate
condition geklickt werden. Das Fenster, das dadurch erscheint, hat den gleichen Aufbau wie User defined IC, das im Zusammenhang mit benutzerdefinierten
Integritätsbedingungen erläutert wurde (vgl. Abb. 9.9).
Sobald die Bedingung eingegeben und bestätigt wurde, wird sie in den Fenstern
Primitive rule condition und Rule structure in der Klausel checks condition
angezeigt.
∗ Aktion
Die Aktionskomponente wird spezifiziert, wenn im Fenster Rule structure auf die
Schaltfläche Rule action geklickt wird. Auf der Oberfläche erscheint dann das
Fenster Rule action (vgl. Abb. 9.20). Auch hier muss sich der Benutzer entscheiden, ob er eine sprachliche, primitive oder komplexe Aktion definieren möchte.
Durch Klicken auf die mittlere Schaltfläche wird ein Fenster geöffnet, das die
primitiven Aktionstypen darstellt (vgl. Abb. 9.21). Da durch die Regel AB3 eine
Nachricht an den Abteilungsleiter des Lagers gesendet werden soll, ist die Schaltfläche Message action zu wählen. Das System öffnet das dazugehörige Fenster
(vgl. Abb. 9.22), in dem der Benutzer, die Wichtigkeit der Nachricht und die
Meldung selbst spezifiziert werden.
– Regelsemantiken
Die Regelsemantiken sind in einem separaten Fenster zusammengefasst, das über die
Schaltfläche Rule semantics im Fenster Create rule aufgerufen wird (vgl. Abb. 9.23).
Der Eingabebereich dieses Fensters besteht aus mehreren Elementen, über die sich
für die Regel eine Priorität und in Abhängigkeit der gewählten Struktur ein oder
mehrere Kopplungmodi definieren lassen:
∗ Priorität
Die Priorität der Regel wird im Feld der Klausel has priority angegeben.
Zulässige Werte sind ganze Zahlen im Bereich von −1000 bis +1000. Der Wert
9.4. IMPLEMENTIERUNG
345
Abbildung 9.18: Fenster Rule condition.
Abbildung 9.19: Fenster Primitive rule condition.
Abbildung 9.20: Fenster Rule action.
346
KAPITEL 9. PROTOTYP
Abbildung 9.21: Fenster Primitive rule action.
Abbildung 9.22: Fenster Message action.
9.4. IMPLEMENTIERUNG
347
Abbildung 9.23: Fenster Rule semantics.
0, der für die Regel AB3 eingegeben wurde, stellt den Standardwert dar.
∗ Kopplungsmodi
In Abhängigkeit der gewählten Regelstruktur sind die entsprechenden Schaltflächen für die Definition der Kopplungen aktiviert. Standardmässig ist für jede
Kopplung der Modus immediate angegeben, so dass die Regel sofort nach der
Auslösung verarbeitet wird. Soll für eine Kopplung ein anderer Modus definiert
werden, ist auf die Schaltfläche Coupling mode zu klicken. Es wird dann ein Fenster geöffnet, in dem die unterstützten Modi in Form einer Liste gezeigt werden
(vgl. Abb. 9.24).
9.4.1.3
Datenmanipulationsmenü
Für die Selektion und Manipulation von Datensätzen ist das Datenmanipulationsmenü zu verwenden (vgl. Abb. 9.25). Dieses Menü beinhaltet Befehle, die sich in drei Gruppen gliedern
lassen:
• Datenmanipulationsbefehle
Dieser erste Bereich besteht aus den vier Befehlen select, insert, update und delete,
mit denen sich Datensätze selektieren und manipulieren lassen.
• Regelbefehle
Dieser Bereich umfasst zwei Befehle, mit denen die Zustände der Regeln geändert werden
können. Mit enable rule wird der Zustand einer passiven Regel auf aktiv gesetzt. Mit
dem zweiten Befehl, disable rule, erhält eine aktive Regel einen passiven Zustand.
348
KAPITEL 9. PROTOTYP
Abbildung 9.24: Fenster Coupling modes.
• Prozedur- und Programmbefehle
Der dritte Teil des Menüs setzt sich aus Befehlen zusammen, mit denen Datenbankprozeduren und Programme ausgeführt werden.
Um zu veranschaulichen, wie Datensätze aus einer Datenbank selektiert und dem Benutzer
angezeigt werden, wird im folgenden angenommen, dass ein Benutzer wissen möchte, welche
Artikel in WARE gespeichert sind. Dazu klickt er im Datenmanipulationsmenü auf den Eintrag
select. Auf der graphischen Oberfläche erscheint das Fenster Select from object type (vgl. Abb.
9.26), wo nun der auszuführende Befehl zu spezifizieren ist:
• Objekttyp
In der Klausel Select from ist der Name des Objekttypen zu spezifizieren, auf den sich
der Befehl bezieht. Hierfür ist in der darunterliegenden Liste der entsprechende Eintrag zu
markieren.
• Attribute
Für die Festlegung der zu selektierenden Attributwerte ist auf die Schaltfläche add zu
klicken. Es erscheint ein Fenster, das die Attribute des zuvor gewählten Objekttypen anzeigt. Zudem enthält diese Liste den Eintrag <all>, womit alle Attribute eines Objekttypen bezeichnet sind.
• Bedingung
In der Klausel where condition wird die Bedingung angegeben, die von den Datensätzen
zu erfüllen ist. Dazu muss auf die Schaltfläche condition geklickt werden, wodurch ein
entsprechendes Fenster geöffnet wird. In Abbildung 9.26 ist diese Klausel leer, da alle
Datensätze von WARE ausgegeben werden sollen.
Sobald der Benutzer seine Eingaben bestätigt hat, wird der Befehl im Verarbeitungssystem
ausgeführt. Für die Ausgabe der selektierten Datensätze wird ein Fenster geöffnet, das Abbildung
9.27 zeigt.
9.4.2
Verarbeitungssystem
Das Verarbeitungssystem von ALFRED wurde mit der Programmiersprache C++ implementiert. Diese Sprache wurde vor allem deswegen verwendet, weil sich die graphische Benutzeroberfläche, die in Tcl/Tk realisiert ist, problemlos integrieren lässt. Da einige Funktionen des
Menüsystems auf Teile des Verarbeitungssystems, wie das ’Online-Repository’, zugreifen, war es
9.4. IMPLEMENTIERUNG
Abbildung 9.25: Fenster Datenmanipulationsmenü.
Abbildung 9.26: Fenster Select from object type.
Abbildung 9.27: Fenster Selected data from WARE.
349
350
KAPITEL 9. PROTOTYP
notwendig, diese beim Tcl-Interpreter zu registrieren. So wurde z.B. für die Ausführung eines
Benutzerbefehls der folgende Code programmiert:
Tcl_CreateCommand(
interp,
"execute_command",
(Tcl_CmdProc *) execute_command,
(Tcl_ClientData *) NULL,
(Tcl_DeleteCmdProc *) NULL);
Für die persistente Speicherung von Daten wird das Datenbanksystem INGRES PD V8.9 verwendet, das auf dem Internet frei verfügbar ist. Auf dieses System wird von drei Klassen zugegriffen:
• Klasse data rep
Für die Initialisierung des ’Online-Daten-Repository’ werden von dieser Klasse die entsprechenden Daten aus der Datenbank system gelesen.
• Klasse rule rep
Diese Klasse greift auch auf die Daten der Datenbank system zu, damit das ’Online-RegelRepository’ aufgebaut werden kann.
• Klasse tmgr
Diese Klasse repräsentiert das implementierte Transaktionssystem und muss einen Zugriff
auf die im Datenbanksystem gespeicherten Daten haben. So ist es z.B. erforderlich, dass
die Daten, die bei der Verarbeitung einer Transaktion manipuliert wurden, am Ende im
Datenbanksystem festgeschrieben werden. Um diese Zugriffe zu ermöglichen, müssen die
Befehle der ADML in EQUEL-Befehle (Embedded Query Language for INGRES) transformiert werden. Diese Transformation erfolgt mit Hilfe von Treiberprogrammen, die in C
programmiert sind und in das Programm bei der Übersetzung eingebunden werden.
Die Module, die EQUEL-Befehle enthalten, müssen vor dem Übersetzen mit dem EQUELPrecompiler übersetzt werden. Dadurch werden die Befehle (beginnend mit ’##’) von einem
normalen C-Code ersetzt. Beim Binden des Programms muss die Bibliothek libq angegeben
werden, die ein Bestandteil von INGRES PD V8.9 ist.
Das folgende Beispiel zeigt eine Sequenz von EQUEL-Befehlen, die einen neuen Datensatz in
die Relation WARE der Datenbank kunden db einfügen. Zuerst werden einige EQUEL-Variablen
deklariert. Anschliessend werden diesen Variablen gewisse Werte zugewiesen. Zum Schluss wird
der Datensatz in die Relation WARE eingefügt:
##
##
##
##
char
char
char
char
db_name[20]
rel_name[20]
att_list[100]
val_list[100]
strcpy(db_name,"kunden_db");
strcpy(rel_name,"WARE");
strcpy(att_list,"wnr,bezeichnung,farbe,groesse,hersteller,bestand,preis");
strcpy(val_list,"10,Hose,blau,32,Lewis,1500,79.90");
9.5. LAUFZEITVERHALTEN
351
## INGRES kunden_db
## PARAM APPEND TO rel_name (att_list, val_list)
## EXIT.
9.5
Laufzeitverhalten
Für eine Beurteilung des Prototypen wurden Aufwandsabschätzungen und Laufzeitanalysen
durchgeführt. Ziel dieser Untersuchungen war es, Aussagen über das Laufzeitverhalten formulieren zu können und Hinweise auf Optimierungsmöglichkeiten der Module zu erhalten. Die
Analysen konzentrierten sich vor allem auf zwei Punkte:
• Module
Für eine Beurteilung der Performance des Prototypen wurden die implementierten Module
darauf analysiert, welche Zeit sie für die Bearbeitung ihrer Aufgaben benötigen. Aus diesen
Resultaten können sich Hinweise der Optimierung ergeben.
• ALFRED vs. INGRES
Es ist offensichtlich, dass die Verarbeitung von Befehlen und Regeln in ALFRED mehr
Zeit benötigt, als wenn die Befehle direkt in INGRES ausgeführt werden. Um aber beurteilen zu können, ob sich die Entwicklung der Konzepte aus Sicht der Performance
rechtfertigen lässt, wurde ein Vergleich zwischen ALFRED und INGRES durchgeführt. Es
muss aber darauf hingewiesen werden, dass diese Ergebnisse nur zu einem geringen Teil
in eine Gesamtbewertung einfliessen dürfen, da die Systeme nicht die gleichen Funktionalitäten unterstützen. So beinhaltet INGRES z.B. kein Transaktionssystem, und es lassen
sich gewisse Integritätsbedingungen, wie z.B. Primärschlüssel-Integritätsbedingungen, nicht
implementieren.
Die Grundlage der Analysen stellt ein Test-Szenario dar, das auf der Verarbeitung von Transaktionen und Regeln basiert:
• Transaktionen
Die Transaktionen enthalten im Durchschnitt 50 Datenmanipulationsbefehle, die sich auf
mehrere Relationen einer Datenbank beziehen. Daten werden selektiert, eingefügt, manipuliert und gelöscht.
• Regeln
Aufgrund der geringen aktiven Funktionalitäten, die vom Prototypen unterstützt werden,
konnten nur Regeln definiert werden, die sich vor allem für die folgenden Aufgaben einsetzen lassen:
– Integritätsbedingungen
Ein Teil der Regeln wurde definiert, um Not Null- und benutzerdefinierte Integritätsbedingungen sicherzustellen. Schlüssel- und Primärschlüssel-Integritätsbedingungen
konnten nicht realisiert werden, da dafür Bedingungen zu spezifizieren sind, die auf
select Befehlen basieren. Solche Bedingungen werden aber vom Prototypen nicht
unterstützt.
– Verhinderung der Aktualisierung von Attributwerten
Ein anderer Teil der Regeln wird verwendet, um die Aktualisierung von Attributwerten zu verhindern. So wurde z.B. festgelegt, dass Primärschlüsselattribute nicht
manipuliert werden dürfen.
352
KAPITEL 9. PROTOTYP
– Verhinderung der Löschung von Datensätzen
Andere Regeln stellen sicher, dass keine Datensätze aus einer Relation gelöscht werden.
– Zugriffsberechtigungen
Eine weitere Aufgabe der Regeln stellt die Überprüfung von Zugriffsberechtigungen
dar. So wird bspw. kontrolliert, ob ein Benutzer das Recht hat, eine Transaktion
auszuführen oder nicht.
Die im Rahmen dieses Test-Szenarios definierten Regeln weisen entweder eine ECA- oder
EA-Struktur auf und werden durch Datenmanipulations- oder Transaktions-Ereignisse
ausgelöst. Bei der Definition der Ereigniskomponenten wurden sowohl die Auslösungszeitpunkte pre und post als auch die Granularitäten set und instance verwendet. Die
Bedingungen sind primitiv und wurden auf der Basis von Prädikaten gebildet. Die Aktionskomponenten sind primitiv oder komplex und bestehen hauptsächlich aus MeldungsAktionen, mit denen der Benutzer z.B. über die Verletzung einer Integritätsbedingung
informiert wird. Da mehrere Regeln durch das gleiche Ereignis ausgelöst werden, wurden
Prioritäten benutzt, um die Reihenfolge der Verarbeitung eindeutig festzulegen. Bei der
Definition der Kopplungen wurde nur der Modus immediate angegeben, so dass die Regeln
unmittelbar nach der Auslösung verarbeitet werden.
Bei der Implementierung des Prototypen wurden mehrere Methoden erstellt und integriert,
mit denen u.a. zeitbasierte Meldungen generiert und ausgegeben werden. Diese Daten wurden
nicht nur für Analysezwecke, sondern auch für eine Überprüfung der korrekten Verarbeitung
von Transaktionen und Regeln verwendet. Die Tabelle 9.1 zeigt die Resultate, die sich bei der
Verarbeitung einer Test-Transaktion ergaben:
• Test-Transaktion
Diese Transaktion besteht aus insgesamt 60 Befehlen, die vom Prototypen in 29.4 Sekunden
verarbeitet wurden. Die Ausführung eines Befehls beträgt im Schnitt eine halbe Sekunde,
worin die Zeit für die Verarbeitung von durchschnittlich 10 Regeln inbegriffen ist.
• Regeln
Insgesamt wurden 711 Regeln ausgelöst und verarbeitet, wofür 11.8 Sekunden benötigt
wurden. Dies entspricht 40% der Zeit, die für die Verarbeitung der Test-Transaktion erforderlich war.
• Erzeugte Transaktionen
Für die Ausführung der Test-Transaktion wurden 1861 Transaktionen erzeugt, verwaltet
und verarbeitet. Davon hat das System insgesamt 1799 Transaktionen für die Verarbeitung
von Regeln generiert.
Es fällt auf, dass mehr ACTION-Transaktionen als INSTRUCTION-Transaktionen erzeugt wurden. Dies ist damit zu begründen, dass jede ECA-Regel als ECAA-Regel modelliert ist,
wobei das Teilnetz der SONST-Aktionskomponente leer ist. Wird bei der Auswertung einer Bedingung festgestellt, dass sie verletzt ist, erzeugt das System für die Verarbeitung
dieser leeren Aktionskomponente eine ACTION-Transaktion, die kurze Zeit später wieder
terminiert wird.
• Module
Die Analyseergebnisse enthalten auch Angaben zu einigen Modulen, die eine Bewertung
ihres Laufzeitverhaltens erlauben:
9.5. LAUFZEITVERHALTEN
353
Anzahl
Gemessene Zeiten in Sek.
Mittelwert
Standardabweichung
Module
’AFPN Generation’
1
0.490
’PED’
1
1.150
60
0.010
1
29.400
60
0.484
0.233
491
0.065
0.177
431
0.006
0.017
Condition-Transaktionen
657
0.014
0.010
Action-Transaktionen
711
0.016
0.016
11.850
3.644
’ARFPN Generation’
0.005
Transaktionen
Root-Transaktionen
Befehle
Instruction-Transaktionen
für Transaktionsbefehle
für Regelaktionen
Total
1861
Regeln
711
ECA-Regeln
EA-Regeln
60
657
54
Tabelle 9.1: Ergebnisse einer Test-Transaktion
– Modul ’AFPN Generation’
Das Modul ’AFPN Generation’ erzeugt für die Test-Transaktion ein Petri-Netz mit
etwa 180 Plätzen und Transitionen und benötigt dazu eine knappe halbe Sekunde.
Darin inbegriffen ist die Zeit, die für das Lesen der benutzerdefinierten Transaktion
aus dem ’Online-Daten-Repository’ erforderlich ist.
– Modul ’PED’
Der ’PED’ benötigt für die Erkennung von über 60 primitiven Ereignissen, der Erweiterung des Netzes um Plätze und Transitionen sowie der Erstellung der Verbindungen
zum Ereignissystem mehr als 1 Sekunde.
– Modul ’ARFPN Generation’
Das Modul ’ARFPN Generation’ instanziiert durchschnittlich 10 Regeln pro Aufruf
und benötigt dafür etwa 0.1 Sekunde, inbegriffen der Zeit für die Integration der
erstellten Regelinstanzen.
Neben der Analyse des Prototypen wurde auch ein Vergleich mit INGRES durchgeführt. Dazu
wurden einzig die Verarbeitungszeiten der Datenmanipulationsbefehle protokolliert. Das Ergebnis dieser Untersuchung lässt sich so zusammenfassen, dass die Test-Transaktionen von INGRES
rund 10 Mal schneller als von ALFRED verarbeitet werden. Dieses Resultat ist jedoch stark zu
354
KAPITEL 9. PROTOTYP
relativieren, da für den Vergleich dieser Systeme nicht dieselben Voraussetzungen geschaffen
werden konnten. So werden z.B. im Unterschied zu INGRES die Befehle in ALFRED transaktionsbasiert verarbeitet, was eine Verschlechterung der Performance bewirkt.
Anhand der Auswertungsergebnisse lassen sich nicht nur einige Aussagen über das Laufzeitverhalten formulieren, sondern auch Optimierungsmöglichkeiten aufzeigen:
• Laufzeitverhalten
Der Prototyp zeigt ein gutes Laufzeitverhalten, wie die gemessenen Zeiten für die Verarbeitung der Test-Transaktionen zeigen. Durch eine Optimierung der Datenstrukturen,
Algorithmen und der auszuführenden Netzwerke könnte die Performance des Systems noch
gesteigert werden. Dies gilt besonders für den ’PED’, da dieses Modul, im Verhältnis zu
anderen Systemkomponenten, relativ viel Zeit benötigt.
• Optimierungen
Aus den Untersuchungsergebnissen lassen sich Möglichkeiten der Optimierung folgern. Vier
Beispiele dafür sind:
– Regelanzahl
Da im Prototypen nur primitive Ereignisse und Bedingungen spezifiziert werden
können, muss eine grössere Anzahl von Regeln definiert und verarbeitet werden, als
es durch die Unterstützung von komplexen Komponenten nötig wäre. So könnten
z.B. die Regeln, mit denen Not Null-Integritätsbedingungen implementiert sind, zu
einigen wenigen Regeln zusammengefasst werden. Dadurch reduziert sich bei 10 solchen Bedingungen die Anzahl der zu verarbeitenden Transitionen um 90%. Dies hat
beträchtliche Auswirkungen auf die Laufzeit und führt damit zu einer besseren Performance.
– Petri-Netze
Bei der Modellierung der Petri-Netze stand nicht der Aspekt des Laufzeitverhaltens
im Vordergrund. So enthalten z.B. die Petri-Netze der ECA-Regeln auch eine leere
SONST-Aktionskomponente, die durch eine BOA und EOA Transition dargestellt ist. Damit die nutzlose Erzeugung von ACTION-Transaktionen verhindert wird, könnten die
CHOICE Plätze mit Hilfe einer DUMMY Transition direkt mit den EOR Plätzen verbunden
werden. Ähnliche Optimierungsmöglichkeiten bestehen auch an anderen Stellen der
Petri-Netze.
– Datenstrukturen
Die verwendeten Listen-Datenstrukturen sind durch ihre Einfachheit gekennzeichnet
und eignen sich daher besonders für die Implementierung eines Prototypen. Durch
die Verwendung effizienter Datenstrukturen und Suchalgorithmen, wie z.B. Hashing,
ist insbesondere bei grossen Datenbeständen eine Verbesserung der Performance anzunehmen.
– Programmierung
Das primäre Ziel eines Prototypen besteht nicht darin, ein unter Performance-Aspekten möglichst leistungsfähiges System zu entwickeln. Ein Prototyp dient vor allem
der Überprüfung der Umsetzbarkeit entwickelter Konzepte. Die Implementierung des
Prototypen ist daher aus Performance-Sicht nicht als optimal anzusehen. Folglich ist
zu vermuten, dass sich ein relativ grosses Optimierungspotential in den Datenstrukturen und Algorithmen befindet.
Zusammenfassend lässt sich festhalten, dass die Entwicklung der Konzepte für eine datenbankunabhängig einsetzbare aktive Schicht sinnvoll ist, da regelbasierte Abläufe auf der Basis von
9.5. LAUFZEITVERHALTEN
355
ARFPN ausgeführt werden können. Zudem lassen sich diese Modelle auch für andere Anwendungen, wie zur Ereigniserkennung, verwenden. Durch die Struktur des Ereignissystems und
Regelwaldes7 ist eine effiziente Ereigniserkennung und Regelauslösung möglich. Dies wird durch
das Laufzeitverhalten des Moduls ’ARFPN Generation’ gestützt.
Obgleich mit der Ausführung regelbasierter Abläufe einige Performance-Einbussen verbunden
sind, hat sich gezeigt, dass der Prototyp für einfache Anwendungen gut eingesetzt werden kann
und dabei eine akzeptable Performance aufweist.
7
vgl. Abschnitt 7.5.5.
Herunterladen