Message-Listener
Überblick
Das Server-Operation Konzept ermöglicht es Integratoren,
dokumentbezogene Aktionen asynchron auf der Serverseite auszuführen.
Anwendungsfälle sind beispielsweise das Speichern von clientseitigen
Änderungen an Annotationen, das Drucken via StreamPrinting oder das
Auswerten von Attributen der serverseitigen HttpSession
.
Funktionsweise
Der Client schickt hierfür einen ServerOperation.REQUEST, der das zugrundeliegende Dokument sowie Konfigurationsparameter für die Steuerung der serverseitigen Ausführung enthält, an den Server. Die Verarbeitung des Requests wird im Anschluss vom Server asynchron durchgeführt und kann daher mit einer beliebigen Anzahl von ServerOperationMessages beantwortet werden. Insbesondere kann der Server bei lang laufenden Operationen den Fortschritt der Verabeitung an den Client zurückmelden. Auf Clientseite muss hierfür eine Implementierung des Callback-Interfaces Observer zur Verfügung gestellt werden, innerhalb der flexibel auf etwaige ankommende ServerOperationMessages reagiert werden kann.
Vor der Verwendung muss die ServerOperation Instanz zunächst mit der zugehörigen ServerOperationParameters Klasse als Schlüssel an der ServerOperationRegistry registriert werden. Dies geschieht typischerweise beim Starten der Webanwendung in einem ServletContextListener. Anschließend kann die ServerOperation zu einem beliebigen Zeitpunkt auf Clientseite aufgerufen werden.
Aus Integratorsicht müssen die Interfaces ServerOperation, ServerOperationParameters und ServerOperationMessage implementiert werden. Beispiele zu Server Operations können im Showcase gefunden werden.
Instanziierung mittels einer ContextualFactory
Um innerhalb einer Server-Operation auf den aktuellen HttpRequest
oder
die aktuelle HttpSession
zuzugreifen, kann die Server-Operation
mittels einer ContextualFactory
erzeugt werden. Hierfür muss eine
Implementierung des Interfaces ContextualFactory
bereitgestellt
werden. Im Unterschied zur einfachen Verwendung wird anstatt der
Server-Operation Instanz eine Instanz der ContextualFacory
an der
ServerOperationRegistry registriert. Die Instanziierung der
ServerOperation erfolgt dann dynamisch zur Laufzeit über die
zugehörige Factory-Methode. Da diese Methode auf dem Request-Thread
ausgeführt wird, kann dort auf die oben aufgeführten Entitäten
zugegriffen werden. Die für die Ausführung relevanten Attribute werden
dabei in den Konstruktor der ServerOperation injiziert und stehen
dadurch bei der asynchronen Ausführung der ServerOperation auf dem
zugehörigen Worker-Thread zur Verfügung.
Ein Codebeispiel, das den Zugriff auf die ID der HttpSession demonstriert, findet sich im Showcase Accessing HttpSession
Weiterführende Informationen
Ein eigenes Kapitel zur Realisierung des Drucks mittels Server Operationen findet sich in Export mittels einer ServerOperation .
Weitere Codebeispiele, die die Verwendung demonstrieren, finden sich in mehreren Showcases - u.a. in: Simple Usage