Java EE 7 Grundkurs

Ereignisse

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Ereignisse informieren weitere Komponenten über durchgeführte Veränderungen an einem Bestandteil innerhalb eines Projekts. Die CDI ermöglicht es, Ereignisse sowie Ereignisbehandlungsmethoden in wenigen Schritten zu definieren.

Transkript

Ein typisches Szenario: In einer Applikation gibt es an einer Komponente eine Änderung. Es sollen alle interessierten Komponenten von dieser Änderung benachrichtigt werden. Das ist die Stelle, an der Ereignisse, oder Events, ins Spiel kommen. Und wir werden uns genau mit diesem Thema nun auseinandersetzen. Ereignisse implementieren das Observer-Entwurfsmuster. Das Ganze geschieht auf CDI-Ebene annotationsgesteuert. Deshalb ist es für uns sehr einfach umsetzbar. Das Grundmuster besagt, dass Produzenten Ereignisse produzieren und dass es ein, oder mehrere Konsumenten für ein Ereignis gibt, die dieses dann eben verarbeiten. Im CDI-Umfeld werden Ereignisse mithilfe des Event-Interfaces definiert. Davon wird eine Instanz einer bestimmten Klasse injiziert und kann dann verwendet werden, um die Benachrichtigung auszulösen. Dabei muss allerdings ein sogenanntes State-Objekt vorhanden sein. Dieses State-Objekt ist in aller Regeln ein POJO, also ein Plain Old Java Object, eine ganz normale Bean. Oder es kann auch so etwas, wie ein String oder ein Double oder ein Integer-Wert sein. Die Event-Klasse verfügt über eine Methode fire(). Und diese Methode löst das Ereignis dann letztlich aus und nimmt das State-Objekt entgegen. Das Ganze sieht aus, wie in diesem Beispiel. Hier wird also ein Event vom Typ Customer injiziert und etwas weiter unten ausgelöst. Man beachte, dass das injizierte Event letztlich eine normale Member-Variable ist, mit der wir auch ganz normal umgehen können. Wenn wir so ein Event konsumieren wollen, dann benötigen wir einen Konsumenten. Ein Konsument verfügt über eine Methode, die über die Observes-Annotation auf Parameterebene verfügt. Das bedeutet, der Konsument definiert in dieser Methode einen Parameter vom Typ des State-Objekts und annotiert diesen einen Parameter. Der Konsument wird, sobald das geschehen ist und er von CDI entdeckt werden kann, automatisch eingebunden. Das sieht dann so aus, wie in diesem Beispiel. Um etwas mehr Kontrolle darüber zu haben, wer welche Ereignisse abfängt, können Produzenten Qualifier definieren. Das bedeutet dann allerdings auch, dass die Konsumenten sämtliche definierten Qualifier besitzen müssen. In diesem Beispiel wird ein Event vom Typ Customer definiert, und es verfügt zusätzlich über den Qualifier Edit. Ein Event-Handler, also ein Konsument, der eingebunden werden soll, muss nun, neben der Observes-Annotation, ebenfalls den Edit-Qualifier mit angeben. Ereignisse haben ein Standardverhalten. Dieses Standardverhalten besagt, dass wenn der Konsument existiert, er benachrichtigt wird. Das Standardverhalten besagt aber auch, dass wenn der Konsument nicht existiert, er erzeugt wird. Dies kann durchaus manchmal auch unerwünscht sein. Deswegen können Sie dieses Verhalten ändern, und zwar auf Ebene des Konsumenten. Es gibt die Möglichkeit, über die notifyObserver-Eigenschaft zu sagen, er soll halt nur eingebunden werden, wenn er bereits existiert. Sehen wir uns einmal an, wie wir dies an einem kleinen Beispiel in der Praxis umsetzen können. Wir sehen hier eine Klasse. Diese Klasse, der TestKontakteProvider, verfügt intern über eine Array-List vom Typ String und in dieser Array-List vom Typ String werden Einträge hinzugefügt. Wir möchten nun, dass interessierte Komponenten benachrichtigt werden können, wenn dieser Array-Liste ein Eintrag hinzugefügt wird. Um dies zu erreichen, definieren wir eine private Member-Variable vom Typ Event, vom Typ String. Event ist aus dem Package javax.enterprise.event, darauf müssen Sie achten. Wir geben dieser privaten Member-Variablen einen Namen, in unserem Fall heißt sie "Event". Nun annotieren wir sie mit der Inject-Annotation und fügen noch den Qualifier Any hinzu, damit wir für CDI ausdrücken, dass jede Event-Implementierung genutzt werden kann. Nun können wir in der Methode add, die wir schon definiert haben, das Event auslösen, sobald ein Name hinzugefügt worden ist. Dies machen wir, indem wir die fire-Methode des Events aufrufen und dabei den entsprechenden Parameter mit übergeben. Damit ist das Werfen des Events beendet. Jetzt müssen wir uns lediglich noch darum kümmern, dass es irgendjemanden gibt, den es interessieren könnte, dass dieses Event geworfen worden ist. Dies machen wir hier anhand einer kleinen Beispielklasse. Wir legen uns also eine neue Java-Klasse an, wir nennen sie "Konsument". Diese Klasse steht unter Verwaltung der CDI, oder ist zumindest für die CDI bekannt. Hier definieren wir eine, gerne auch privat seiende Methode, die eingebunden werden soll, ausgedrückt über die Observes-Annotation, wenn ein Event vom Typ String geworfen wird. Hier machen wir jetzt nichts anderes, als eine kleine Ausgabe und haben damit einen beispielhaften Handler implementiert. Jetzt müssen wir lediglich diese Applikation noch auf dem Server deployen, und wenn wir das gemacht haben, können wir den Server starten und können nach einigen Sekunden die entsprechende Funktionalität nutzen. Und Sie sehen, sobald unserer Liste nun Elemente hinzugefügt werden, wird die entsprechende Ausgabe generiert. Dies sollte Ihnen zeigen, wie einfach es ist, mit Events zu arbeiten. Sie können diese Funktionalität in eigenen Java EE und CDI-Applikationen jederzeit umsetzen.

Java EE 7 Grundkurs

Lernen Sie die Grundlagen der Programmierung mit Java EE 7 verstehen und anwenden.

6 Std. 4 min (44 Videos)
Derzeit sind keine Feedbacks vorhanden...
Hersteller:
Software:
Exklusiv für Abo-Kunden
Ihr(e) Trainer:
Erscheinungsdatum:07.11.2014
Laufzeit:6 Std. 4 min (44 Videos)

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!