Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Java EE 7: Geschäftsanwendungen

Nachrichten versenden

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Viele Applikationen sollen Dinge im Hintergrund ausführen: Mit JMS 2.0 steht dafür ein leistungsfähiger und dennoch einfach zu benutzender Dienst zur Verfügung.

Transkript

Wenn Ihre Applikation Dinge, in den Hintergrund verlagern möchte, also Tätigkeiten, die beispielsweise langlaufend sind oder die einfach nichts mit der normalen Tätigkeiten zu tun haben, dann können Sie dafür den Java Message Service benutzen. In diesem Video werden wir uns mit dem Java Message Service auseinandersetzen und wir werden unsere Applikation dahingehend erweitern, dass die Kunden, die am heutigen Tage Geburtstag haben, in eine Message Queue eingestellt werden. JMS, also der Java Message Service liegt seit der Java EE 7 in Version 2.0 vor. Das ist die erste neue Version seit mehr als zehn Jahren. JMS erlaubt es uns Asynchrone Nachrichten zu versenden. Das bedeutet, der Sender stellt eine Nachricht in eine Queue ein und ein Empfänger eine MessageDriven Bean empfängt die Nachricht. Das erlaubt es uns Sender und Empfänger voneinander zu entkoppeln, denn der Sender interagiert nicht direkt mit dem Empfänger, sondern diese Interaktion findet nur mittelbar über die Queue statt, bei der der Empfänger benachrichtigt wird. Der Empfänger einer derartigen Nachricht ist, wie bereits erwähnt, eine MessageDriven Bean. Das ist eine spezielle Bean, die als Empfänger von JMS-Nachrichten implementiert wird, indem sie das MessageList in einem Interface bereitstellt. So eine MessageDriven Bean kann verschiedene Arten von Nachrichten bearbeiten und verarbeiten. Das können dann Texte, Objekte oder binäre Inhalte sein. So eine MessageDriven Bean und der Sender arbeiten dabei mit einer Queue. Die Queue ist eine Nachrichtenschlange und die funktioniert nach dem FiFo-Prinzip. "First In", "First Out", das bedeutet die Nachricht, die man zuerst einstellt, kommt auch zuerst beim Empfänger an. So eine Queue kann direkt im Application Server oder auf Ebene einer EJB-Komponente deklariert werden. Im Produktiveinsatz wird man das Ganze sicherlich auf Ebene des Application Servers machen. Wir für unseren Zweck werden uns mit einer Deklaration auf Ebene einer EJB-Komponente begnügen. Der Client kann dann die Queue anhand ihres JNDI-Namen, referenzieren und eine Nachricht in die Queue einstellen. Und genau das werden wir nun implementieren. Wir werden die Kunden, die am heutigen Tage Geburtstag haben, in eine Queue einstellen und wir werden eine MessageDriven Bean implementieren, die dann die entsprechenden Nachrichten verarbeiten kann und dann später weitere Operationen darauf vornehmen kann. Hier in unsere Birthday Notification Bean werden wir nun zunächst einmal eine JMS-Destination definieren, das bedeutet, dem Namen einer JMS-Messaging Queue. Wir machen dies mit Hilfe der JMSDestinationDefinition-Annotation und bei dieser JMSDestinationDefinition-Annotation geben wir ein oder mehrere JMSDestinations an. Wie gesagt, das Ganze macht man nur auf die Art und Weise in einer Testumgebung, in einer produktiven Umgebung wird man das Ganze über den Application Server konfigurieren. So eine JMSDestinationDefinition verfügt immer über mindestens zwei Parameter, nämlich den Namen, also den JNDI-Namen, der Queue, den man anlegen möchte, diesen Namen sollte man sich sehr genau merken. Und die Interface Namen dieser Parameter wird in unserem Fall mehr oder weniger immer den Wert "javax.jms.Queue" haben. Damit haben wir grundsätzlich diese jms.Queue schon einmal definiert und wie können sie nun benutzen. Für die Benutzun benötigen wir eine JMS-Context Instanz. Diese JMS-Context Instanz lassen wir uns injizieren. Und zwar per Inject-Annotation, denn die befindet sich schon im Umfeld, beziehungsweise wird von Server schon bereitgestellt. Und wir benötigen eine Destination, Destination repräsentiert dann den Endpoint, also den Namen der Queue, die wir ansprechen wollen. Das machen wir mit Hilfe einer Destination Instanz. Und das ist quasi das Ziel, wo wir hinschreiben wollen. Das Ganze lassen wir uns mit Hilfe der Resource-Annotation injizieren und hierbei referenzieren wir die von uns oben gerade definierte Message Queue. Und haben nun alles beisammen, was wir benötigen, um eine Nachricht zu versenden. Diesem Versand erledigen wir in einer Vorschleife, in der wir alle Customer durchlaufen. Und wir benutzen nun hier den Kontext, den wir uns haben initiieren lassen, erzeugen ein Producer, mit der wir die Nachricht versenden können und rufen dessen Send-Methode auf und lassen das Ganze an unsere Destination versenden. Und was wir versenden lassen ist im Grunde einfach nur der Kunde, so wie wir ihn gerade aus der Liste genommen haben. Damit haben wir nun den Versand einer Nachricht an eine Message Queue erledigt und können uns nun der Implementierung des Empfängers der Nachricht widmen. Der Empfänger ist eine ganz normale Java Klasse. Diese Java Klasse legen wir an im Package "com.cm.ejb.jms". Und wir nennen Sie "BirthdayNotificationsReceiver". Und es handelt sich hierbei um eine Implementierung des MessageListener Interfaces aus dem JavaX JMS-Package. Die Implementierung erfordert, dass wir die Methode Onmessage bereitstellen und in dieser Methode werden wir dann die Nachricht verarbeiten. Bevor wir dies jedoch tun, annotieren wir die Klasse, darüber hinaus noch mit der MessageDriven-Annotation. Und diese MessageDriven-Annotation erlaubt es uns oder sie erfordert es sogar, dass wir eine Activation-Config bereitstellen, und damit legen wir fest, auf welche JMS-Queue diese Komponente hört. Und das machen wir mit Hilfe einer ActivationConfigProperty und die verfügt über zwei Attribute, nämlich PropertyName. Und PropertyName ist in diesem Fall Destination, also das Ziel. Und PropertyValue und das ist der Name, der JNDI-Name unserer Queue, die wir vorhin angelegt haben und der muss natürlich wieder korrekt eingegeben werden, sonst kann keine Bindung stattfinden. Achten Sie, ja, also genau auf Groß- und Kleinschreibung und stellen Sie sicher, dass wirklich das drinsteht, was Sie erwarten. Nachdem wir nun also auch die MessageDriven-Annotation hinzugefügt haben, können wir die eigentliche Methoden-Implementierung angehen. Und die ist zum Glück nicht sonderlich kompliziert. Zunächst einmal überprüfen wir, ob die eingehende Nachricht vom Typ ObjectMessage. ObjectMessage repräsentiert nämlich eine Nachricht, die ein Objektgraphen beinhaltet und wir haben, ja, den Customer einfach an die Queue gesendet, also ist dort ein Objekt drin und nun holen wir uns die Instanz unseres Kunden dort wieder heraus. Und das machen wir mit Hilfe der Methode getBody. Und hier können wir nun angeben, dass wir ein Body von Typ des Customers erwarten. Es kann dabei zu einer Exception kommen, deswegen kapseln wir das in einem Try Catch Block. Nun haben wir in der empfangenen Komponente die Nachricht verarbeitet, beziehungsweise den Nachrichteninhalt ausgelesen und können uns nun der eigentlichen Weiterverarbeitung widmen. Dies könnte beziehungsweise das Senden einer E-Mail sein. In diesem Video haben wir uns damit auseinandergesetzt, was JMS ist. Wir haben eine Message Queue aufgebaut und wir haben diese Message Queue in unsere Birthday Notification Bean, dann auch mit Inhalten versehen, nämlich mit einem Benutzer, der am heutigen Tag Geburtstag hat oder genauer genommen mit jedem Benutzer, der am heutigen Tag Geburtstag hat. Das Aufbauen der Message Queue erfolgte mit Hilfe der JMSDestinationDefinitions-Annotation. Ebenfalls haben wir ein MessageListener implementiert, das ist also quasi die Gegenseite. Dies haben wir gemacht, indem wir zum einen eine MessageDriven-Annotation auf Ebene dieser Klasse notiert haben und sie damit im Beziehung gesetzt haben zu der Message Queue, die wir definiert haben und wir haben das MessageListener Interface in Form der Methode Onmessage implementiert und lesen dort dann den Nachrichtenpilot, also den Inhalt der Nachricht aus.

Java EE 7: Geschäftsanwendungen

Verfolgen Sie, wie eine komplette Business-Applikation unter dem Einsatz des gesamten Java-Enterprise-Techologiestacks ensteht.

5 Std. 2 min (39 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

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!