Verschiedene Interaktionsmetaphern in dWb+

vorhergehende Artikel in: dWb+
18.09.2016

Nach Fertigstellung einiger Module, die die Kommunikation zwischen Komponenten auf Dateiebene unterstützen, werde ich versuchen, verschiedene Interaktionsmetaphern bzw. Kommunikationsstrategien aus anderen datenflussgetriebenen Systemen in dWb+ nachzuvollziehen, um die Effizienz der Implementierung und die Vor- und Nachteile ihrer Anwendung diskutieren zu können.

Dataflow Workbench dWb+ Ich habe mehrere Module fertiggestellt, die in Workspaces die Arbeit mit Dateien erlauben. Da wäre zunächst ein DirectoryWatcher, der das Auftauchen von Dateien eines bestimmten Namensschemas in einem gewählten Verzeichnis an seinem Ausgang meldet. Weiterhin wurde ein Modul erstellt, das Dateien in eine gewähltes Zielverzeichnis kopiert. Auf Wunsch des Anwenders wird die Quelldatei dabei gelöscht. Daneben existiert noch ein Modul, das nur dem Löschen von Dateien dient. Schließlich wurde noch ein Modul entwickelt, das auf Empfang eines Dateinamens an seinem Eingang eine leereDatei gleichen Namens plus angehängtem, frei wählbarem Suffix erzeugt. Dies schließt den Kreis zu dem ersten genannten Modul: Dieses hatte ja die Aufgabe, auf die Erzeugung einer Datei hin den Namen dieser Datei weiterzumelden. Wenn aber das nächste Modul mit den Inhalten dieser Datei arbeiten möchte ist die Datei eventuell noch gar nicht fertig geschrieben, da ja das Anlegen der Datei detektiert wird - und das geschieht bereits mit Schreiben des ersten Datenbytes. Daher detektiert das Modul Dateien mit einem bestimmten Suffix - beispielsweise "trig". Findet es eine solche Datei, testet es, ob es eine Datei gibt die bis auf den Suffix denselben Namen trägt und meldet dann diesen Namen weiter. So kann man erst in aller Ruhe eine Datei namens "riesige Datei.mp4" schreiben und erst wenn man daneben eine Datei namens "riesige Datei.mp4.trig" anlegt, erkennt dWb+ das und beginnt mit der Arbeit an der Datei.

Weiterhin werde ich eine Kommunikationsstrategie testen, die - sozusagen als Seiteneffekt - automatisch einen Kontext für jede versendete Botschaft mitbringt. Dies ist ein Feature, das ich erst kürzlich zu dWb+ in seiner nativen Kommunikationsstrategie integriert habe. Die neue Interaktionsstrategie besteht nicht in einer neuen Implementierung, sondern baut auf der bestehenden nativen Strategie auf, interpretiert jedoch ihre Semantik neu: Es existiert pro Modul nur jeweils ein Eingang und eine beliebige Anzahl Ausgänge. Alle Daten, die zwischen Modulen ausgetauscht werden, haben denselben Typ - Arbeitstitel: HashMapMessage. Die Idee ist, dass jedes Modul, wenn es eine Message erhält, darin nach geeigneten Daten sucht und seine Ergebnisse in diese Message packt und sie dann weitersendet. Damit ist der Context automatisch da: die Message gestattet es nicht, Informationen wegzunehmen - es können nur immer neue dazu hinzugefügt werden. Das Problem dabei ist natürlich, dass es schwerer ist, damit Module zu bauen, die beliebig mit anderen kombiniert werden können- Aus Sicht von dWb+ können alle diese Module beliebig kombiniert werden. Das trifft auch dann zu, wenn ein Modul, das Bilder von einem Framegrabber an seinem Ausgang in die versendeten Messages packt, mit einem verbunden wird, das EMails versendet und daher eine Empfängeradresse in der empfangenen Message sucht. Nichtsdestotrotz existieren aber Szenarien, in denen diese Kommunikationsstrategie Vorteile bietet - speziell durch den nicht löschbaren und jederzeit nachvollziehbaren Kontext jeder Message. Man könnte sogar noch dafür sorgen, dass durch das System Audittrails an die Botschaften engehängt werden - etwa die Zeitpunkte der Übergabe zwischen den Modulen und die Module, die die Message bisher passiert hat.

Im Zuge der Umsetzung dieser Kommunikationsstrategie wird auch eine Möglichkeit prototypisch integriert, eine solche Funktionalität in die Verbindungen unabhängig von der Kommunikationsstrategie zu implementieren.

Weiterhin wird eine Möglichkeit untersucht werden, die Kommunikation zu entkoppeln - bisher funktioniert die Kommunikation direkt zwischen Modulen. Dazu werden immer PropertyChangeEvents benutzt. Lösungen zur Verteilung von Workspaces über mehrere Knoten werden immer innerhalb eines Moduls abgewickelt - sei es remoting, ejbs oder explizite Kommunikation übers Netzwerk. In Zukunft soll es möglich sein, für diese Kommunikation zwischen Modulen verschiedene Strategien, bzw. Implementierungen anzubieten.

Alle Artikel rss Wochenübersicht Monatsübersicht Codeberg Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • Multi-User-WebDAV, Docker, GitHub

    17.11.2019

    Nachdem ich mich in letzter Zeit verstärkt mit Docker und dem zugehörigen Ökosystem beschäftige, habe ich begonnen, verschiedenste Dienste in Containern zu testen um zu sehen, ob in manchen Fällen LXC oder KVM nicht doch die bessere Wahl wäre...

    Weiterlesen...

Neueste Artikel

  • Migration der Webseite und aller OpenSource Projekte

    In eigener Sache...

    Weiterlesen...
  • AutoHideToolbar für Java Swing

    Ich habe eine neue Java Swing Komponente erstellt: Es handelt sich um einen Wrapper für von JToolBar abgeleitete Klassen, die die Werkzeugleiste minimieren und sie nur dann einblenden, wenn der Mauszeiger über ihnen schwebt.

    Weiterlesen...
  • Integration von EBMap4D in die sQLshell

    Ich habe bereits in einem früheren Artikel über meine ersten Erfolge berichtet, der sQLshell auf Basis des bestehenden Codes aus dem Projekt EBMap4D eine bessere Integration für Geo-Daten zu spendieren und entsprechende Abfragen, bzw. deren Ergebnisse auf einer Kartenansicht zu visualisieren.

    Weiterlesen...

Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.

Wer daran teilhaben und eventuell sogar davon profitieren möchte, muss damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.

Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...

PS: Meine öffentlichen Codeberg-Repositories findet man hier.