Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Java EE 7: Geschäftsanwendungen

Asynchrone Methoden

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Asynchrone Methoden sind sinnvoll, wenn man nebenläufig arbeiten möchte, aber nicht auf externe Komponenten, wie etwa JMS zurückgreifen kann. Die Java EE 7 bietet mit den Concurrency Utils eine Möglichkeit, dies im Server-Umfeld zuverlässig zu erledigen.

Transkript

Asynchrone Methoden sind immer dann sinnvoll und richtig, wenn man Dinge nicht blockierend ausführen möchte. Vor der Einführung der Java EE7 gab es da keine Möglichkeit zu. Jetzt haben wir die Concurrency UTs für Java EE. In diesem Video werden wir uns damit auseinandersetzen wie wir mit Hilfe der Concurrency UTs eine nebenläufig funktionierende Methode bauen können. Wir werden klären, was Features und Asynchry sites sind und wir werden unsere Applikation so erweitern, dass wir eine Email-Versandfunktionalität bereitstellen, die nebenläufig aufrufbar ist. Asynchrone Methoden haben einen gewaltigen Vorteil gegenüber synchronen Methoden. Sie blockieren den aktuellen Thread nicht. Asynchrone Methoden sind schon seit Javaversion-5 verfügbar und die können entweder eine Rückgabe von Typ Void haben, und dann sind das Fire & Forget Methoden, d.h. die werden nur einfach aufgerufen, und man ignoriert die Rückgabe, oder sie haben eine Rückgabe von Feature auf T damit können dann ein Status und ein Ergebnis abgerufen werden, wenn man sich dafür interessiert. Das Feature auf T signalisiert dem Client, dass eine langlaufende Operation stattfindet. die eigentliche Rückgabe wird dann mit Hilfe einer AsyncResult auf T- Instanz ausgedrückt. Der Status ist dann per Eigenschaft isDone überprüfbar. Und das eigentliche Ergebnis rufen wir auf Ebene der Feature-Instanz mit Hilfe der Methode get ab. Dabei ist zu beachten, dass die get- Methode blockiert, d.h. theoretisch müssen wir noch nicht einmal den Status überprüfen, sondern würden einfach nur die Methode get aufrufen. Um so eine asynchrone Methode aufzurufen, benötigen wir zunächst einmal eine Runnable oder Callable -Implementierung das bedeutet eine Komponente, die in einem externen Thread oder Task laufen kann. Das Ganze wird dann ausgeführt auf der Ebene der Java EE durch den ManagedExecutorService. Dieser wird vom Server bereitgestellt und auch von ihm verwaltet, und es ist auch sehr wichtig, denn normalerweise sind Nebenläufigkeiten bei der Java EE etwas höchst Unwillkommenes, wenn es sogar verpönt ist, denn es kann ja nicht garantiert werden, dass die ausführende Komponente lang genug aktiv bleibt, um den nebenläufigen Thread tatsächlich noch beenden zu lassen. Der ManagedExecutorService räumt dann dieses Problem auf und gewährleistet damit dann die Systemsicherheit und Stabilität. Wir werden nun eine Implementierung vornehmen, bei der wir eine Möglichkeit schaffen werden dass eine Email von einem noch nicht existierenden Web-Frontend versandt werden kann. Diese Versandmöglichkeit wird asynchron gestaltet werden. Wir werden nun im Package com.cm.ejb.interfases ein neues Interface anlegen. Dieses Interface heißt MessageSender und definiert eine einzige Methode. Rückgabetyp dieser Methode ist ein Feature aus dem Java.util.concurrent-Package vom Typ Boolean, und die Methode heißt send und sie nimmt das Parameter ein Betreff eine Nachricht, und ein Empfänger entgegen. Durch die Angabe des Rückgabetyps Featur Boolean drücken wir aus, dass diese Methode asynchron laufen soll. Nun können wir die eigentliche Komponente implementieren. Dies geschieht im Package com.cm.ejb.beans. Hier legen wir eine neue Klasse an und diese Klasse nennen wir MessageSenderBean. und es handelt sich hier um eine Stateless Session Bean und das Remote Interface stellt die gerade eben definierte Schnittstelle MessageSender dar. Wir lassen die Bean die Message Sender-Schnittstelle implementieren, und das bedeutet sie muss eine Methode bereitstellen, nämlich die Methode Send. Innerhalb dieser Methode können wir nun die Email versenden. Dafür müssen wir zunächst einmal die Konfiguration initiieren. Dies machen wir indem wir uns eine Session-Instanz initiieren lassen, was wir über die Ressource-Annotation ausdrücken. Wichtig ist, dass der GNDI- Name dem Namen unserer Konfiguration auf dem Server entspricht. Innerhalb der Methode können wir nun überprüfen, ob der Kunde überhaupt eine Email hat und ein boolsches Fleck definieren, das uns Auskunft darüber gibt ob der Versand als solches erfolgreich war. Die Überprüfung, ob der Kunde überhaupt eine E-Mail-Adresse hat, machen wir anhand seiner Communications-Auflistung. Da muss sich einen Eintrag mindestens mit dem Communicationtyp Email drin befinden. Wenn wir eine E-Mail-Adresse gefunden haben, dann können wir fortfahren. Zunächst einmal erzeugen wir eine Java X-Mail- Message-Instanz vom Typ My Message und wir geben dort die gerade eben erzeugt und referenzierte Mail Session hinein. Nun legen wir einen Try Catch Block an und fangen in Cach-Block die Messaging Exception ab. Eine richtige Fehlerbehandlung würde natürlich ein wenig anders aussehen. Nun können wir den E-Mail-Absender und Empfänger zuweisen. Den Absender definieren wir doch zunächst einmal als eine Konstante in unserer Klasse, hier können Sie natürlich eine gültige E-Mail-Adresse eintragen. Die Methoden setRecipients und setFrom der Mail-Nachricht erlauben es uns einen Empfänger, oder auch mehrere Empfänger einzugeben, sowie den gerade eben angelegten Standardabsender anzugeben. Nachdem wir noch Betreff und Nachricht gesetzt haben, können wir die E-Mail versenden. Dies machen wir mit Hilfe der statischen Methode Send der Transportklasse. Zu guter Letzt wir das boolsche Fleck auf True, wird diese Zeile erreicht, dann war Versand erfolgreich, ansonsten war der Versand nicht erfolgreich. Ein letztes Detail fehlt noch. Wir müssen der Aufrufen in der Komponente signalisieren, ob wir die Operation erfolgreich abgeschlossen haben. Dies machen wir mit Hilfe einer AsyncResult-Instanz vom Typ Boolien und dort übergeben wir das boolsche Fleck Result an die aufgerufene Komponente zurück. In diesem Video haben wir eine asynchrone Methode implementiert. Wir haben sie zunächst auf Ebene eines Interfaces definiert und dann in der Message Sender Bean umgesetzt. Am Ende haben wir die Rückgabe per AsyncResult, dann an den Client zurückgegeben.

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!