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

Java EE 7: Geschäftsanwendungen

Managed Bean für die View-Ebene definieren, Teil 2: E-Mail-Versand

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Der E-Mail-Versand ist potentiell blockierend oder kann zumindest länger dauern. Implementieren Sie deshalb eine Komponente, die den Versand als Fire&Forget-Funktion umsetzt und sprechen diese Komponente dann über eine Managed Bean an.

Transkript

Ein E-Mail-Versand ist eine Sache, die durchaus längere Zeit in Anspruch nehmen kann und blockierend sein kann. Aus diesem Grund werden wir in diesem Video eine Managed Bean definieren, die es uns erlaubt von einer View aus heraus den Versand eine E-Mail anzustoßen und wir werden diesen Versand dann in Form des Aufrufs eine asynchrone Komponente umsetzen. Der Aufruf von asynchronen Komponenten oder Methoden erfolgt in einem extra Thread, in einem extra parallelen Thread und zwar mit Hilfe von Runnable- oder Callable-Instanzen. Das Ganze muss dann mit Hilfe einer ManagedExecutorService-Instanz erfolgen und wird über die Java EE selber ausgeführt. Das heißt, wir erzeugen nicht einfach nur ein Runnable oder ein Callable und lassen das von Hand sozusagen einen parallelen Thread laufen, sondern das Ganze läuft über diesen ManagedExecutorService. Der Hintergrund ist, dass die aufrufende Kompetente möglicherweise nur einen ganz kurzen Lebenszyklus hat. Beispielsweise sie ist RequestScoped, dann wird sie verworfen, sobald der Request abgearbeitet worden ist. Und das kann sein, dass es so kurz ist, um die eigentlich lang laufenden Operationen auszuführen. Der ManagedExecutorService übernimmt deshalb die Ausführung und die Sicherheit und die komplette Ausführung der lang laufenden oder potenziell blockierenden Operation ist somit gewährleistet. Wir werden nun im ersten Schritt einmal eine Bean implementieren, den eigentlichen E-Mail-Versand anstößt. Und wir werden danach im zweiten Schritt eine Managed Bean implementieren, mit deren Hilfe wir den E-Mail-Versand als solches dann ausführen können. Das heißt, sie wird als Backing Bean für eine View dienen, wo wir dann Betreff und Nachricht und den Kunden angeben können, dem diese Nachricht zugestellt werden soll. Aus Sicht der Applikation, also der Webapplikation soll der E-Mail-Versand nebenläufig stattfinden. Das bedeutet, dass man das Ganze wie eine Fire-and-Forget Funktionalität umsetzen möchte. Zu diesem Zweck legen wir nun erstmal eine Klasse an, eine Bean. Wir nennen sie MailSender. Und wir annotieren sie mit der ApplicationScoped-Annotation, um sie dann später im Managed Bean Umfeld initiieren zu können. Wir benötigen hier einige Komponenten zum Einen die MessageSender-Komponente, die wir auf Ebene unseres EJB-Projektes bereits definiert haben, die den eigentlichen E-Mail-Versand abbildet. Dann benötigen wir das CustomerDAO, um den Kunden zu identifizieren, an den wir eine Nachricht schicken wollen. Und wir benötigen eine Instanz des ManagedExecutorServices und dann nehmen wir eine Standardinstanz, die im Server deployed ist. Über diesen ManagedExecutorService können wir dann nämlich den Versand asynchron abwickeln. Diese Abwicklung geschieht über die Methode sendMail und diese Methode sendMail nimmt drei Parameter entgegen. Die Nachricht, die versandt werden soll, die Betreffzeile, die versandt werden soll und die ID des Absenders beziehungsweise des Empfängers, der Absender, der sind wir ja selber. Um diesen Versand als solches asynchron umsetzen zu können, definieren wir eine Runnable-Instanz und die implementieren wir ja auch gleich Inline. Abgewickelt wird das Ausführen dieser asynchronen Tätigkeit, dann über den ManagedExecutorService und der stellt uns eine Methode Submit bereit, und da können wir dann den gerade eben definierten Task übergeben. Und der Aufruf dieser Methode Submit sorgt dann dafür, dass das Ganze nebenläufig stattfinden wird. Nun müssen wir noch die Methode Run als solches implementieren. Hier werden wir zunächst einmal die Recipient Angabe auswerten, also die RecipientID Angabe auswerten und den Empfänger bestimmen. Hier wollen wir uns über die CustomerDAO Instanz, die wir uns haben, initiieren lassen und die dort hinterlegte Methode getCustomer. Nun lassen wir uns eine Future-Instanz vom Typ Boolean zurückgeben. Und zwar bekommen wir die von dem MessageSender und dessen Methode Send und hier geben wir die übergebenen Daten, also Betreff, Nachricht und den gerade eben ermittelten Empfänger an. Und können nun das Ganze ausführen und zwar machen wir das über die GET-Methode dieses Features, das ist eine blockierende Methode und mit deren Hilfe können wir die ganze Operation anstoßen. Und erst wenn das Ganze dann abgeschlossen ist, wird überhaupt weiter verfahren. Hier in unserem Fall machen wir nix weiter. Wir lassen das letztlich nur aufrufen und durchlaufen, sollte ein Fehler aufgetreten sein, werden wir den abfangen. Aber ansonsten interessiert uns jetzt hier die Rückgabe als solches auch nicht weiter, normalerweise könnte man die weitergehend auswerten. So, damit haben wir den eigentlichen Nachrichtenversand implementiert. Und was wir nun noch benötigen ist eine Managed Bean, mit deren Hilfe wir das Ganze anstoßen können. Diese Managed Bean legen wir jedenfalls an und zwar wieder im Package com.cm.web.beans und wir nennen sie SendMailBean und sie ist RequestScoped und sie ist benannt. Wir nennen sie MailSender, um sie quasi von View aus leichter erreichen zu können. Hier drin definieren wir zunächst einmal das Outcome, also die Rückgabe der Send-Methode, die wir gleich noch implementieren werden und wir lassen uns unsere gerade implementierte MailSender-Komponente initiieren, damit wir sie nutzen können. Ebenfalls benötigen wir hier eine CustomerDAO Instanz, um für das Frontend den Kunden ermitteln zu können. Das lassen wir uns mit der EJB-Annotation dann auch initiieren, der eigentliche Kunde und seine Kundennummer werden benötigt, sowie Felder für Betreff und Nachricht. Diese Felder lassen wir uns nun mit Gettern und Settern versehen Das machen wir für den Customer, für die CustomerID, für Message und für Subject. Und nun implementieren wir noch zwei Methoden einmal eine Methode mit dem Namen Initialize, die wird aufgerufen, um einen Datensatz, also den Kunden zu initialisieren und als zweites dann gleich die Methode Send darüber wird der Kunde beziehungsweise die Nachricht dann versendet an den Kunden. Die Initialisierung muss nur stattfinden, wenn wir eine CustomerID übergeben bekommen haben. Und dann laden wir Customer Instanz über die Methode getCustomer des CustomerDAOs und damit sind wir hier fertig. Das Einzige, was wir vielleicht noch sicherheitshalber einführen, ist eine Überprüfung, ob der Kunde geladen worden ist, sollte dem nicht so sein, legen wir eine neue Instanz, an die speichern wir nicht, sondern die nutzen wir lediglich dafür, dass es im Frontend dann ein berechenbares Verhalten gibt. So, und zu guter Letzt benötigen wir die bereits angesprochene Methode Send. Die ist vom Rückgabetyp String. Das ist letztlich die eigentliche Mailversand Operation und hier nutzen wie die initiierte MailSender-Instanz und rufen dort die SendMail-Methode auf, die wir vorher definiert haben. Erster Parameter ist die Nachricht, zweiter Parameter ist der Betreff, dritter Parameter ist die ID des Kunden und wir lassen uns nun noch die Rückgabe generieren. Zu diesem Zweck formatieren wir das Outcome, was wir definiert haben und fügen dort die KundenID als Parameter mit ein. Damit nehme ich eine Weiterleitung, auf die Detailseite stattfinden kann und geben dann den so formatierten Text wieder zurück. Damit haben wir eine Managed Bean implementiert, die eine Nachricht senden kann und wir haben den eigentlichen Nachrichten Sendevorgang im Sinne des Aufrufes der MessageSender-Komponente, die ja eine asynchrone Methode Send bereitstellt, implementiert und lassen das Ganze in Form einer Fire-and-Forget Funktionalität laufen, indem wir ein Runnable erzeugen und das Ganze über den ManagedExecutorService dann ausführen lassen.

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!