© DrHitch/Shutterstock.com
Shortcuts
CDI

16 Portable Extensions


Die Funktionalität von CDI kann durch Portable Extensions ergänzt werden. Hier wurde darauf geachtet, dass die Ergänzungsbibliotheken portabel sind, also auf einer beliebigen Plattform eingesetzt werden können. Durch eine Extension können u. a. weitere Kontexte, Beans, Interceptoren etc. hinzugefügt werden.

Die Bibliotheken nutzen zu ihrer Initialisierung das seit Java 6 verfügbare Servicekonzept der Sprachplattform sowie das CDI-Eventkonzept. Dadurch kann eine Extension alleine dadurch für eine Anwendung aktiviert werden, indem sie in den Classpath aufgenommen wird, was üblicherweise durch die Platzierung im lib-Ordner der Anwendung geschieht. Eine weitere Konfiguration ist nicht erforderlich.

16.1 Entwicklung eigener Extensions

Extensions sind eine einfache Klassen, die das Interface Extension (javax.enterprise.inject.spi.Extension) implementieren. Die Interaktion mit dem CDI Container geschieht durch Events: Während des Starts der Anwendung feuert der Container eine Serie von Lifecycle Events, u. a.

  • BeforeBeanDiscovery: Beginn der Suche nach Beans im Bean Archive
  • ProcessBean<X>: Nach Erkennung einer Bean
  • AfterDeploymentValidation: Nach Abschluss der Scanphase und Validierung

Vor dem Herunterfahren der Anwendung wird ebenfalls ein Event gefeuert:

  • BeforeShutdown: Nach der Deaktivierung aller Beans und Kontexte der Anwendung.

Neben diesen Events gibt es noch viele weitere, deren Beschreibung den Rahmen dieses Abschnitts sprengen würde. Details finden Sie in der Spezifikation im Abschnitt „Container Lifecycle Events“.

Lifecycle Events werden nur an Extensions ausgeliefert. Diese können sich mithilfe von passenden Observer Methods in den Lifecycle des Containers einklinken, um zusätzliche Operationen auszuführen, oder Beans, Kontexte etc. zu verändern, zu löschen oder hinzuzufügen. Listing 16.1 zeigt einen Ausschnitt einer Extension, die verschiedene Lifecycle Events protokolliert.

public class LifeCycleLogger implements Extension
{
void logLifecycleEvent(@Observes BeforeBeanDiscovery event)
{
LOG.trace("BeforeBeanDiscovery");
}

void logLifecycleEvent(@Observes AfterDeploymentValidation event)
{

Listing 16.1: Extension-Klasse

Die Observer Methods dürfen neben dem Event auch einen Parameter des Typs BeanManager annehmen, um damit programmatisch auf den Container einzuwirken. Listing 16.2 zeigt als Beispiel eine Extension, die am Ende der Initialisierungsphase des Containers solche Beans instanziiert, die mit @StartUp @ApplicationScoped annotiert sind. S...

Shortcuts
CDI

16 Portable Extensions

Die Funktionalität von CDI kann durch Portable Extensions ergänzt werden. Hier wurde darauf geachtet, dass die Ergänzungsbibliotheken portabel sind, also auf einer beliebigen Plattform eingesetzt werden können. Durch eine Extension können u. a. weitere Kontexte, Beans, Interceptoren etc. hinzugefügt werden.

Shortcut Autorenteam


Die Funktionalität von CDI kann durch Portable Extensions ergänzt werden. Hier wurde darauf geachtet, dass die Ergänzungsbibliotheken portabel sind, also auf einer beliebigen Plattform eingesetzt werden können. Durch eine Extension können u. a. weitere Kontexte, Beans, Interceptoren etc. hinzugefügt werden.

Die Bibliotheken nutzen zu ihrer Initialisierung das seit Java 6 verfügbare Servicekonzept der Sprachplattform sowie das CDI-Eventkonzept. Dadurch kann eine Extension alleine dadurch für eine Anwendung aktiviert werden, indem sie in den Classpath aufgenommen wird, was üblicherweise durch die Platzierung im lib-Ordner der Anwendung geschieht. Eine weitere Konfiguration ist nicht erforderlich.

16.1 Entwicklung eigener Extensions

Extensions sind eine einfache Klassen, die das Interface Extension (javax.enterprise.inject.spi.Extension) implementieren. Die Interaktion mit dem CDI Container geschieht durch Events: Während des Starts der Anwendung feuert der Container eine Serie von Lifecycle Events, u. a.

  • BeforeBeanDiscovery: Beginn der Suche nach Beans im Bean Archive
  • ProcessBean<X>: Nach Erkennung einer Bean
  • AfterDeploymentValidation: Nach Abschluss der Scanphase und Validierung

Vor dem Herunterfahren der Anwendung wird ebenfalls ein Event gefeuert:

  • BeforeShutdown: Nach der Deaktivierung aller Beans und Kontexte der Anwendung.

Neben diesen Events gibt es noch viele weitere, deren Beschreibung den Rahmen dieses Abschnitts sprengen würde. Details finden Sie in der Spezifikation im Abschnitt „Container Lifecycle Events“.

Lifecycle Events werden nur an Extensions ausgeliefert. Diese können sich mithilfe von passenden Observer Methods in den Lifecycle des Containers einklinken, um zusätzliche Operationen auszuführen, oder Beans, Kontexte etc. zu verändern, zu löschen oder hinzuzufügen. Listing 16.1 zeigt einen Ausschnitt einer Extension, die verschiedene Lifecycle Events protokolliert.

public class LifeCycleLogger implements Extension
{
void logLifecycleEvent(@Observes BeforeBeanDiscovery event)
{
LOG.trace("BeforeBeanDiscovery");
}

void logLifecycleEvent(@Observes AfterDeploymentValidation event)
{

Listing 16.1: Extension-Klasse

Die Observer Methods dürfen neben dem Event auch einen Parameter des Typs BeanManager annehmen, um damit programmatisch auf den Container einzuwirken. Listing 16.2 zeigt als Beispiel eine Extension, die am Ende der Initialisierungsphase des Containers solche Beans instanziiert, die mit @StartUp @ApplicationScoped annotiert sind. S...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang