Aufbau ereignisbasierter Frameworks

Das Framework besteht aus verschiedenen Schnittstellen und abstrakten Klassen (Abbildung A), so dass seine Funktionalität erweitert werden kann. Die zentrale Schnittstelle in der Hierarchie des Frameworks ist das Blackboard. Es bestimmt den Empfänger, die Registrierung von Prädikat und Ereignis, die Weitergabe des Ereignisses und die Benachrichtigung des Empfängers (Listing A). Die Klasse AbstractBlackboard ist eine tabellarische Variante der Blackboard-Schnittstelle (Listing B). Die Predicate-Schnittstelle (Listing C) und die Klasse AbstractPredicate (Listing D) setzen das grundlegende logische Konzept des Frameworks um und dienen zur Weiterleitung von Ereignissen. BlackboardAction (Listing E) stellt eine Aktion dar, die im BlackboardEvent (Listing F) ausgelöst wird, wenn sich ein Prädikat als „wahr“ erweist.

Abbildung A
Abbildung A: Klassendiagramm

Wir wollen nun einmal die Blackboard-Schnittstelle näher betrachten. Die Methode addPredicate() dient zur Zuordnung einer logischen Bedingung (Predicate) zu einer Aktion (BlackboardAction) bzw. einer Reihe von Aktionen, die durch ein Ereignis ausgelöst werden (BlackboardEvent). Ein neues Ereignis wird im Blackboard registriert, indem die Methode putEvent() aufgerufen wird. Wenn ein Prädikat im Blackboard dem Ereignis entspricht, werden die für dieses Prädikat registrierten Aktionen ausgelöst. Dabei erfüllt ein Predicate ein BlackboardEvent, wenn die Methode test() „wahr“ zurückgibt. Die Aktionen können beim Eintreffen eines Ereignisses ausgelöst werden, genau wie jedes beliebige an eine Bedingung geknüpfte Objekt. Die Methode waitPredicate() registriert ein Objekt für ein Prädikat und blockiert dessen Ausführungs-Thread. Wenn ein Ereignis das Prädikat erfüllt, wird das Objekt freigegeben und sein Ausführungs-Thread wird fortgeführt.

Wenn in einem bestimmten Zeitraum keine Ereignisse das Prädikat erfüllen, startet die Methode eine TimeoutException und gibt das Objekt frei. Dieser Vorgang dient als Sperre, durch die mehrere Threads an eine Bedingung geknüpft angehalten werden. Es ist problemlos möglich ein Ereignis zurückzurufen, das ein Prädikat zum Ergebnis „wahr“ veranlasst hat. In diesem Fall müsste das Prädikat das Ereignis speichern, das seine Bedingung erfüllt (Listing G). Zwei weitere Methoden, removePredicate() und removeEvent(), bieten ein zusätzliche Kontrolle über das Blackboard.

Normalerweise kann ein Ereignis, für das ein Prädikat gefunden wurde, entfernt werden. Auch Ereignisse, deren Lebensdauer abgelaufen ist, können entfernt werden. Dennoch bleibt BlackboardAction im Blackboard, bis dieses ausdrücklich entfernt wird. Vor dem Entfernen des Blackboard muss die Methode close() aufgerufen werden, um die Ressourcen freizugeben (z.B. Threads).

Themenseiten: Anwendungsentwicklung, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Aufbau ereignisbasierter Frameworks

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *