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.
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).
Beim Online-Gaming kommt es nicht nur auf das eigene Können an. Auch die technischen Voraussetzungen…
Fast jedes zweite Unternehmen bietet keinerlei Schulungen an. In den übrigen Betrieben profitieren oft nur…
Huawei stellt auf der Connect Europe 2024 in Paris mit Xinghe Intelligent Network eine erweiterte…
Höchste Zeit für eine schnelle Kupfer-Glas-Migration. Bis 2030 soll in Deutschland Glasfaser flächendeckend ausgerollt sein.
Schon im April 2025 soll Android 16 den Status Plattformstabilität erreichen. Entwicklern gibt Google danach…
Die Hintermänner setzen KI-Chatbot-Tools als Köder ein. Opfer fangen sich den Infostealer JarkaStealer ein.