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

Java EE 7 Grundkurs

Bean-Discovery-Modus

Testen Sie unsere 2018 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Der Bean-Discovery-Modus regelt in CDI das Suchverhalten nach Beans. Dabei stehen mehrere unterschiedliche Modi zur Verfügung. Das Vorhandensein einer entsprechenden Datei ist Voraussetzung für die Aktivierung von CDI.

Transkript

In diesem Video werden Sie lernen, wie Sie CDI aktivieren können und was "Bean Discovery" ist. Lassen Sie uns zunächst aber darüber reden, wie wir CDI tatsächlich aktivieren und einsetzen können. Grundsätzlich ist es so, dass CDI 1.1 von allen Java EE 7-fähigen Servlet-Containern "out of the box" unterstützt wird. Jedoch ist CDI für eine Applikation immer erst dann aktiviert, wenn es innerhalb dieser Applikation eine Datei "beans.xml" gibt. Wenn CDI aktiviert ist, können Sie die Inject-Annotation verwenden, um festzulegen, wo per CDI eine Komponente injiziert werden soll. Wir werden dies im Folgenden einmal für eine kleine Webapplikation machen. Diese Webapplikation verfügt über mehrere Komponenten, die fest miteinander verdrahtet sind. Wir werden für diese Applikation CDI aktivieren und die feste Verdrahtung der Komponenten aufheben. Die Webapplikation, die Sie hier sehen können, besteht aus drei Komponenten: einem Servlet mit dem Namen "NamenServlet", dessen Aufgabe darin besteht, eine Komponente, nämlich den "KontakteManager", zu verwenden, um die Namen, die dieser KontakteManager aus einer referenzierten Komponente, dem "KontakteProvider" ausliest, auszugeben. Im Moment sind die Komponenten fest miteinander verdrahtet. Das heißt, sie können im Konstruktor vom NamenServlet erkennen, dass es eine Instanzierung einer neuen KontakteManager-Instanz gibt. Analog können Sie im Konstruktor des KontakteManagers erkennen, dass hier eine neue KontakteProvider-Instanz erzeugt wird. Dies soll per CDI und Injection ersetzt werden. Damit dies funktionieren kann, muss zuerst die CDI-Unterstützung für dieses Projekt im Eclipse aktiviert werden. Aus diesem Grund führen wir im Projekt-Explorer einen Rechtsklick auf den Namen des Projektes aus, klicken [auf] "Properties" und wählen dann den Knoten "Projects Facets" auf der linken Seite aus. Nun können wir hier die Option CDI aktivieren. Wir sollten sicherstellen, dass die Version 1.1 ausgewählt ist. Durch den Link "Further configuration available" gelangen wir noch zu einem weiteren Teil-Wizard, mit dem wir festlegen können, ob eine Datei "beans.xml" dem Projekt hinzugefügt werden soll. Wir bestätigen dies und bestätigen auch das Hinzufügen von CDI und schon ist CDI für unser Projekt aktiviert. Damit CDI jetzt funktionieren kann, müssen wir lediglich noch an den geeigneten Stellen sagen, dass wir Komponenten injizieren wollen. Fangen wir im KontakteManager an. Hier entfernen wir das Schlüsselwort "final" von der Deklaration der Variablen "kontakteProvider". Der Hintergrund ist, dass die Erzeugung von diesem KontakteProvider nun nicht mehr im Konstruktor stattfinden wird, sondern durch CDI gesteuert, stattfinden wird. Wir fügen nun die Inject-Annotation hinzu, indem wir "Inject" schreiben und dann Strg+Space drücken, damit das korrekte Import automatisch generiert werden kann. Anschließend können wir den KontakteManager-Konstruktor entfernen. Analog gehen wir im Servlet vor. Hier entfernen wir ebenfalls das Schlüsselwort "final" von der Deklaration des KontakteManagers. Wir annotieren den KontakteManager mit der Inject-Annotation und entfernen aus dem Konstruktor die Referenzierung und Instanzierung des KontakteManagers. Nun überlassen wir es CDI, die Komponenten zu instanzieren. Wenn Sie einen Blick auf die Datei "beans.xml" werfen, werden Sie feststellen, dass hier ein sog . "Bean Discovery Mode" deklariert ist Der Standardwert dieser generierten Datei ist "annotated". Damit wird CDI nicht direkt funktionieren können. Jedenfalls nicht ohne, dass wir unsere Klassen noch mit weiteren Annotationen versehen. Aus diesem Grund wechseln wir auf den schon bei Java EE 6 und CDI 1.0 vorgegebenen Wert "all" zurück, speichern, und haben CDI jetzt mitgeteilt, dass es explizit selber nach allen benötigten Komponenten suchen soll. Damit sind wir hier mit der Applikation fertig und können uns dem Thema "Discovery Mode" etwas intensiver widmen. Der bereits angesprochene Bean Discovery Mode regelt, wie Beans innerhalb von Java-Applikationen per CDI gesucht werden. Dabei stehen verschiedene Modi zur Auswahl. Wir haben in der Webapplikation eben den Modus "all" eingestellt, bei dem alle Typen innerhalb von Java-EE-Applikationen im Klassenpfad für Injektionen herangezogen werden. Der Modus "annotated", der standardmäßig eingestellt war, sorgt dafür, dass nur Typen, die eine CDI-Annotation besitzen für Injektion herangezogen werden. Der Modus "none" sorgt dafür, dass CDI deaktiviert ist. Sie können diesen Modus explizit in der Datei "beans.xml" setzen. Hier gibt es mit Java EE 7 ein Attribut "bean-discovery-mode" auf Ebene des Bean-Wurzelknotens. Alternativ können Sie auch eine leere Datei "beans.xml" oder eine Datei "beans.xml" ohne weiterführende Versionsangabe verwenden. In diesem Fall haben Sie keine Notwendigkeit, ein Bean Discovery Modus anzugeben. Der Bean Discovery Modus hat in diesem Fall immer den Wert "all". Derartige Archive werden explizite Bean-Archive genannt. Wenn die Datei "beans.xml" ein Versions-Attribut besitzt und dieses Versions-Attribut den Wert 1.1 hat, dann muss explizit die Angabe eines "bean-discovery-mode"-Attributs vorhanden sein. Dies ist bei einer "beans.xml" ohne Versionsangabe und bei einer "beans.xml" mit Versionsangabe 1.0 nicht zwingend nötig. Der Standardwert für Bean Discovery lautet in diesem Fall "annotated". Ein derartiges Archiv wird auch implizites Bean-Archiv genannt. Das bedeutet, dass alle Komponenten, die per CDI benutzt werden sollen, explizit mit einer CDI-Lebenszyklus-Annotation versehen sein müssen. Die "beans.xml"-Datei befindet sich üblicherweise für Webapplikation im Ordner "WEB-INF" oder im Ordner "WEB-INF/classes/META-INF" oder für Nicht-Web-Applikationen im Ordner "META-INF". In diesem Fall handelt es sich meistens um EJB-Module oder JAR-Archive. Dies soll es dann auch schon zum Thema "CDI aktivieren und Bean Discovery" gewesen sein. Wir haben besprochen, wie wir eine Applikation für CDI aktivieren können. Wir haben die Inject-Annotation einer Applikation hinzugefügt und wir haben beleuchtet, was es mit Bean Discovery auf sich hat.

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...
 

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!