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

Java EE 7 Grundkurs

Beans deaktivieren

Testen Sie unsere 2013 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Die Anwendung der Alternativannotation deaktiviert Beans innerhalb eines Projekts, wodurch diese in der CDI nicht weiter genutzt werden können.

Transkript

Kennen Sie das auch? Sie arbeiten in einem Projekt, und haben dann von einer bestimmten Klasse verschiedene Implementierungen, die verschiedene Szenarien abdecken, beispielsweise Test, beispielsweise Mock, beispielsweise Live-Betrieb. Es wäre nun schön, diese Alternativen im CDI-Umfeld sinnvoll verwalten zu können. Nun, diese Möglichkeit gibt es, mit Hilfe der Alternative-Annotation. Die Alternative-Annotation wird auf allen Beans von ein- und derselben Art aufgetragen, und sorgt dafür, dass jede Bean, auf der diese Alternative- Annotation sich befindet, nicht sichtbar für CDI ist. Das bedeutet aber nicht, dass sie nicht per CDI verwendet werden kann, sondern das bedeutet lediglich, dass sie so lange nicht sichtbar für CDI ist, bis sie aktiviert worden ist. Wenn die Bean verwendet werden soll, muss sie letztlich in der beans.xml aktiviert werden. Dies geschieht mit Hilfe des "alternatives"-Elements. Das bedeutet für mich als Entwickler, dass ich mehrere Implementierungen von Klassen haben kann, aber sichergestellt ist, dass nur eine einzige dieser Implementierungen verwendet wird. Dies befreit mich dann auch wieder von der Notwendigkeit, Qualifier einzusetzen um Implementierungen voneinander unterscheiden zu können. Sehen wir uns einmal an, wie ich mit Alternativen arbeiten kann. Wir sehen hier eine Klasse Kontaktemanager. Diese Klasse Kontaktemanager definiert ein Injection Point, wo alle Beans, die mit dem Qualifier Test versehen sind, initiiert werden sollen. Das Problem ist, es gibt mehrere Implementierungen. Einmal den Testkontakteprovider, der über den Testqualifier verfügt, und einmal den Mock-Kontakteprovider, der ebenso über den Testqualifier verfügt. Dies würde im Normalfall jetzt dazu führen, dass die Applikation nicht gestartet werden kann. Um dieses Problem zu beseitigen, und letztlich verschiedene Umgebungen abbilden zu können, verwende ich die Alternative-Annotation. Ich notiere die auf beiden Beans, und sobald ich das erledigt habe, sind beide Beans nicht mehr sichtbar für CDI, es sei denn, ich aktiviere eine der Beans explizit. Das mache ich in der beans.xml. Hier habe ich einen Alternatives-Bereich, und hier kann ich eine Klasse hinzufügen, nämlich die Klasse, die jeweils aktiv sein soll. Das kann ich sehr einfach machen, wenn ich beispielsweise den Mock-Provider aktivieren möchte, dann tippe ich den Namen hier oben ein, den kompletten Klassennamen, inklusive Package, klicke "Finish", speichere es, und schon gibt es nur noch eine aktive Implementierung in meinem Projekt, nämlich den Mock-Kontakteprovider. Der ebenfalls mit dem gleichen Qualifier Test versehene Test-Kontakteprovider ist nunmehr nicht aktiv. Das Umschalten geschieht dann wieder in der beans.xml wo ich statt des Mock-Kontakteproviders dann eben den Test- Kontakteprovider eintragen kann. So einfach ist das, mit Alternativen zu arbeiten.

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!