Wir stellen unsere UI-Lösung zur eleganten und einfachen Realisierung asynchroner Web-Seiten vor, inklusive einer Beispiel-Applikation auf Basis der Bosch SI inubit BPM Suite. Den anschaulichen Screencast finden Sie am Ende des Beitrags.
In unseren Projekten sehen wir uns zunehmend neuen Anforderungen gegenüber:
Wenn sich Serverseitig ein Zustand ändert, ein Fehler auftritt oder eine neue Nachricht eintrifft, dann soll dieses Ereignis zeitgleich in allen geöffneten Browser-Fenstern angezeigt werden. Wenn sich ein Zustand erneut ändert, soll dies zeitgleich nachvollzogen werden. Es gibt verschiedene Ansätze diese Anforderungen programmatisch anzugehen. Aber gerade bei BPM- und Integrations-Lösungen wie dem Inubit IS möchte man möglichst keine Spezialkomponenten entwickeln.
In diesem Blog-Post stellen wir vor, wie GUIDE die Probleme der traditionelle Ansätze Pull und Idle-Wait umgeht ohne die Business-Logik Ihrer Anwendung zu verkomplizieren.
Beim Pull-Ansatz fragt die Web-Seite regelmäßig den aktuellen Zustand beim Server an. Typischerweise, in dem Teile der Seite neu geladen werden. Sind mehrere Browser verbunden, vervielfachen sich Anfragen und Antworten.
Die Probleme dieses Ansatzes werden schnell offensichtlich:
Ein eleganterer Weg ist der Idle-Wait oder auch Long-Poll genannte Ansatz. Der Ansatz funktioniert wie folgt: Der Web-Browser fragt nach neuen Ereignissen beim Server an. Der Server gibt jedoch nicht wie üblich schnellstmöglich eine Antwort zurück, sondern wartet, bis tatsächlich ein neues Ereignis eintritt. Die Netzwerkverbindung wird solange gehalten. Erst dann gibt er eine Antwort mit dem Ereignis zurück und der Browser fragt sofort erneut an.
Der Ansatz basiert auf einem sehr eleganten Trick. Für einen zuverlässigen Betrieb müssen aber einige Randbedingungen berücksichtigt werden: So kann der Browser nicht unterscheiden, ob ein Netzwerkfehler aufgetreten ist oder beim Server bloß noch kein Ereignis vorliegt. Es muss sichergestellt werden, dass Ereignisse nicht verloren gehen, auch wenn sie genau zwischen zwei Anfragen auftreten oder tatsächlich ein Netzwerkfehler auftritt.
Die Berücksichtigung dieser Randbedingungen gestaltet die Umsetzung relativ komplex. Für jede gehaltene Netzwerkverbindung wird, je nach Server-Backend-Technologie, darüber hinaus jeweils ein Thread belegt. Speziell auf inubit-Backends sind Threads jedoch Lizenz- und damit kostenpflichtig und ihre Belegung konkurriert mit der Verarbeitung anderer, evtl. geschäftskritischer, Prozesse.
Mit GUIDE stellen wir eine Komplettlösung für diese Probleme vor.
Auf Basis unserer Projekterfahrung haben wir den Generic UI Dispatcher of Events (GUIDE) als eigenständige Komponente entwickelt, die zwischen Server und Clients vermittelt. Ereignisse, die auf dem Server eintreten leitet dieser an den GUIDE-Dispatcher weiter und GUIDE übernimmt die sichere und effiziente Verteilung an alle authorisierten Browser.
Durch diesen Ansatz ergeben sich folgende Vorteile:
GUIDE ist aus dem Kontext von inubit-Projekten entwickelt worden, lässt sich aber genauso einfach in andere Tomcat Enterprise Anwendung integrieren, sowie als eigenständige Applikation oder mit anderen BPM- bzw. Web-Backends verwenden.
Wie ein Einsatz an einem konkreten Beispiel auf Basis der inubit BPM-Suite aussieht, sehen Sie im nachfolgenden Screencast.