Skip to content

[WIP] Neue Crawler Architektur

Nicklas Wiegandt edited this page Sep 1, 2017 · 4 revisions

Im folgenden möchte ich meine Planungen und Vorstellungen bezüglich der angestrebten neuen Crawler Architektur vorstellen.

Die hier beschriebene Architektur ist ein erster wurf und kann sich während der Umsetzung noch ändern wenn mir/uns z.B. noch unstimmigkeiten auffallen.

Der aktuelle Umsetzungsstand kann im MServer Branch feature/cleanup + MLib feature/mserverCleanup gefunden werden.

Stellen an denen in diesem Dokument noch "//TODO" seht sind noch nicht fertig beschrieben und werden folgen.


Allgemein

Die Hauptintension bei der neuen Architektur ist es die Crawler, mit Hilfe von Vererbung, auf eine möglichst einheitliche Codebasis zusammen zu führen und so Code duplicationen zu vermeiden und Fehlerquellen zu minimieren. Außerdem soll die Crawlerlogik komplett von eventuellen UIs entbunden werden um die UIs einfach austauschbar machen zu können und so z.B. neben einer GUI auch eine reine Konsolen UI und eine UI ohne Menü die alle nötigen Infos aus den Konfigs zieht. Desweiteren ist geplant, die gemeinsame Codebasis auf dem ForkJoinFramework aufbauen zu lassen. Dieses Framework ist darauf ausgelegt rekursive Arbeiten durchzuführen. Dementsprechend sollen die einzelnen Teilaufgaben der Crawler, wo möglich, rekursiv aufgebaut werden. Nicht rekursiv durchführbare Aufgaben werden entweder gemeinsam mit der nächsten übergeordneten rekursiven Aufgabe durchgeführt oder als Callable gemeinsam mit dem ExekutorService ausgeführt.

Neben dieser angestrebten Ziele / Grundsätze soll ein neues Konfigurationssystem auf Basis von YML Datein so wie ein neues Filmlisten Format eingeführt werden. Diese beiden sind im Wiki von MLib genauer beschrieben.

Übersicht

Klassendiagramm

Schnittstelle CrawlerManager

Der CrawlerManager ist die zentrale Schnittstelle der neuen Architektur. Er dient hauptsächlich als Schnittstelle zwischen der internen MServer Logik und den einzelnen UIs. Er startet, steuert und stoppt die einzelnen Crawler. An ihm können die Progress- und Messagelistener registriert werden.

Codebasis AbstractCrawler

In der abstrakten Klasse AbstractCrawler ist alles vereint, was sich alle Crawler teilen um so eine zentrale, wartbare Stelle zu erhalten deren Verhalten sich auf alle Crawler auswirkt. U.a. werden in dieser Klasse die Statistikdaten für die Fortschrittserkennung erhoben.

Benachrichtungssystem + Fortschrittsverfolgung mit Listenern

In MLib definiert und im MServer implementiert ist ein neues Benachrichtigungs- und Fortschritsverfolgungssystem. Basierend as der Java eigenen Lokalisierungslösung wird ein Listener basiertes System augebaut welches die dem Anwender angezeigten Texte lokalisiert in Properties Datein speichert. Die Anwendung hat Enums mit möglichen Meldungen hinterlegt und kann bei bedarf über die Listener bekannt geben welcheMeldung dem Benutzer angezeigt werden soll. Basierend auf der eingestellten Sprache kann dem Anewender so die passenden Meldungen z.B. auf der GUI angzeigt werden. Außerdem kommt noch ein auf Listenern basierendes neues Fortschrittverfolgungssystem hinzu welches für eine Konsolen UI beispielsweise mit dem Benachrichtigungssystem kombiniert werden kann.

Anmerkung: Das Benachrichtigungssystem ist dazu gedacht dem Anwender wichtige Meldungen wie z.B. Hinweise auf Fehler auszugeben. Exception Texte und ähnliches sollen weiterhin via Log4J ausgegeben werden da diese den Anwender nicht weiter interessieren und eher zum debugging wichtig sind.