© Liashko/Shutterstock.com
Entwickler Magazin
JavaFX und die Welt der Dependency Injections

Entkopplung leicht gemacht

Aus dem Bereich der (Java-EE-)Webanwendungen kennt und schätzt man die Möglichkeiten, die einem von Applikationsservern zur Verfügung gestellt werden. Eine davon ist Dependency Injection (DI). DI wird eingesetzt, um die einzelnen Komponenten zu entkoppeln. Was also liegt näher, als diesen Ansatz auch in einer Clientanwendung zu verwenden? Contexts and Dependency Injection (CDI) ist hier der Standard und bietet den Vorteil, auf der Server- und Clientseite eingesetzt zu werden. Im Idealfall sollten somit die reinen CDI-basierenden Komponenten in beiden Umgebungen lauffähig sein. Natürlich vorausgesetzt, dass keine weiteren Features der EE-Welt verwendet worden sind.

Sven Ruppert


Video: 90 Minutes Live Hacking with JavaFX 8

CDI als auch JavaFX sind mächtige und zukunftsweisende Technologien. Die Verbindung beider bietet dem Entwickler den Zugriff auf eine sehr vielfältige Palette von Möglichkeiten. Wie aber kann diese Symbiose möglichst effizient erreicht werden? Wenn man sich ein wenig mit beiden Technologien auseinandersetzt, stellt man recht schnell fest, dass sie einen eigenen Lebenszyklus besitzen. Diese Zyklen passen nur leider nicht immer zueinander. Die initiale Frage, die sich immer stellt, ist: Welche der Technologien wird als führend in der Initialisierung angenommen? Aber dazu später mehr. Beginnen wir mit den beiden Lebenszyklen.

Das Leben von JavaFX

Der Lebenszyklus von JavaFX ist recht unkompliziert. Hier verweise ich auf das API-Doc [1]. Die Schritte sind:

Erzeugen einer Instanz der ApplikationsklasseAufruf der init()-MethodeAufruf der start(javafx.stage.Stage)-MethodeWarten bis die Applikation beendet werden soll, indem auf eines der beiden Ereignisse gewartet wird: Aufruf von Platform.exit() oder implicitExit, wenn das letzte Fenster der Anwendung geschlossen worden ist.Aufruf der Methode stop()

Die Geburt einer CDI Bean

Bei CDI ist der Prozess über Events gesteuert und kann demnach auch mittels dieser Events beschrieben werden:

BeforeBeanDiscoveryProcessModuleProcessAnnotatedType, ProcessSyntheticAnnotatedTypeProcessInjectionTarget, ProcessProducerProcessInjectionPointProcessBeanAttributesProcessBean, ProcessManagedBean, ProcessSessionBean, ProcessProducerMethod, ProcessProducerFieldProcessObserverMethodAfterBeanDiscoveryAfterDeploymentValidation

CDI in SE-Umgebungen

Um CDI in einer SE-Umgebung zu verwenden, muss lediglich der CDI-Container initialisiert werden. Bei der Verwendung von Weld ist dazu ein Schritt notwendig, wie er in Listing 1 dargestellt ist.

Listing 1WeldContainer weldContainer = new Weld().initialize(); // Fuer die Verwendung in SE-Umgebungenpublic class CDIContainerSingleton { private final static CDIContainerSingleton ourInstance = new CDIContainerSingleton(); private final WeldContainer weldContainer; public static CDIContainerSingleton getInstance() { return ourInstance; } private CDIContainerSingleton() { weldContainer = new Weld().initialize(); } public T getManagedInstance(final Class clazz) { final Instance ref = getInstanceReference(clazz); return ref.get(); } public T getManagedInstance(final AnnotationLiteral literal, f...

Entwickler Magazin
JavaFX und die Welt der Dependency Injections

Entkopplung leicht gemacht

Aus dem Bereich der (Java-EE-)Webanwendungen kennt und schätzt man die Möglichkeiten, die einem von Applikationsservern zur Verfügung gestellt werden. Eine davon ist Dependency Injection (DI). DI wird eingesetzt, um die einzelnen Komponenten zu entkoppeln. Was also liegt näher, als diesen Ansatz auch in einer Clientanwendung zu verwenden? Contexts and Dependency Injection (CDI) ist hier der Standard und bietet den Vorteil, auf der Server- und Clientseite eingesetzt zu werden. Im Idealfall sollten somit die reinen CDI-basierenden Komponenten in beiden Umgebungen lauffähig sein. Natürlich vorausgesetzt, dass keine weiteren Features der EE-Welt verwendet worden sind.

Sven Ruppert


Video: 90 Minutes Live Hacking with JavaFX 8

CDI als auch JavaFX sind mächtige und zukunftsweisende Technologien. Die Verbindung beider bietet dem Entwickler den Zugriff auf eine sehr vielfältige Palette von Möglichkeiten. Wie aber kann diese Symbiose möglichst effizient erreicht werden? Wenn man sich ein wenig mit beiden Technologien auseinandersetzt, stellt man recht schnell fest, dass sie einen eigenen Lebenszyklus besitzen. Diese Zyklen passen nur leider nicht immer zueinander. Die initiale Frage, die sich immer stellt, ist: Welche der Technologien wird als führend in der Initialisierung angenommen? Aber dazu später mehr. Beginnen wir mit den beiden Lebenszyklen.

Das Leben von JavaFX

Der Lebenszyklus von JavaFX ist recht unkompliziert. Hier verweise ich auf das API-Doc [1]. Die Schritte sind:

Erzeugen einer Instanz der ApplikationsklasseAufruf der init()-MethodeAufruf der start(javafx.stage.Stage)-MethodeWarten bis die Applikation beendet werden soll, indem auf eines der beiden Ereignisse gewartet wird: Aufruf von Platform.exit() oder implicitExit, wenn das letzte Fenster der Anwendung geschlossen worden ist.Aufruf der Methode stop()

Die Geburt einer CDI Bean

Bei CDI ist der Prozess über Events gesteuert und kann demnach auch mittels dieser Events beschrieben werden:

BeforeBeanDiscoveryProcessModuleProcessAnnotatedType, ProcessSyntheticAnnotatedTypeProcessInjectionTarget, ProcessProducerProcessInjectionPointProcessBeanAttributesProcessBean, ProcessManagedBean, ProcessSessionBean, ProcessProducerMethod, ProcessProducerFieldProcessObserverMethodAfterBeanDiscoveryAfterDeploymentValidation

CDI in SE-Umgebungen

Um CDI in einer SE-Umgebung zu verwenden, muss lediglich der CDI-Container initialisiert werden. Bei der Verwendung von Weld ist dazu ein Schritt notwendig, wie er in Listing 1 dargestellt ist.

Listing 1WeldContainer weldContainer = new Weld().initialize(); // Fuer die Verwendung in SE-Umgebungenpublic class CDIContainerSingleton { private final static CDIContainerSingleton ourInstance = new CDIContainerSingleton(); private final WeldContainer weldContainer; public static CDIContainerSingleton getInstance() { return ourInstance; } private CDIContainerSingleton() { weldContainer = new Weld().initialize(); } public T getManagedInstance(final Class clazz) { final Instance ref = getInstanceReference(clazz); return ref.get(); } public T getManagedInstance(final AnnotationLiteral literal, f...

Neugierig geworden?


   
Loading...

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