Suche
Dependency Injection in Eclipse RCP mit Apache OpenWebBeans

CDI für Rich Clients

Jakob Korherr

In der Welt der Webentwicklung ist es schon seit einiger Zeit gang und gäbe, ein Inversion of Control und Dependency Injection Framework zu verwenden – Google Guice, Spring DI oder Apache OpenWebBeans sind einige Beispiele. Bei der Rich-Client-Entwicklung musste man bisher jedoch auf diese Features großteils verzichten. Es gab zwar sehr wohl Bestrebungen, die oben genannten Frameworks auch unter Java SE zum Laufen zu bringen, diese kamen aber leider kaum über das Demostadium hinaus. Dieser Artikel beschreibt, wie es möglich war, Apache OpenWebBeans in einem vorhandenen Eclipse-RCP-Projekt zum Laufen zu bringen, und welche Vorteile sich bei der Entwicklung dadurch ergeben haben.

Anfang Dezember 2009 wurde die JSR-299-Spezifikation (Contexts and Dependency Injection for the Java EE platform, oder kurz CDI) finalisiert [1]. Gleich darauf wurden auch schon die ersten Implementierungen erfolgreich releast. Darunter fand sich neben der Referenzimplementierung Weld von JBoss auch eine Realisierung von der Apache Software Foundation, nämlich Apache OpenWebBeans (OWB) [2]. Weiterhin entstanden viele CDI-Extensions-Projekte, die den Standard um verschiedenste Funktionalitäten erweiterten; eines davon wiederum bei Apache, nämlich MyFaces Extensions CDI (oder kurz CODI) [3]. Der Fokus lag dabei klarerweise bei Webapplikationen, da der JSR-299 als klassische Java-EE-Spezifikation entstanden und Apache MyFaces zudem eine Sammlung von JavaServer-Faces-Projekten ist. Jedoch waren Weld und OpenWebBeans von Anfang an bestrebt, auch in einer reinen Java-SE-Umgebung lauffähig zu sein, was beiden durch geschickte Modularisierung auch gelungen ist. So bietet OpenWebBeans unter anderem ein Java SE Sample an, das zeigt, wie man das Framework in einer Java-Swing-Applikation zum Laufen bringen kann. Klugerweise wurde diese Modularisierung auch in vielen CDI-Extensions-Projekten beibehalten, was den Einsatz bestimmter Erweiterungen in einer reinen Java-SE-Umgebung zumindest theoretisch möglich macht.

Das Projekt

Im Rahmen eines Software-Engineering-Studiums an der TU Wien muss ein Softwareprojekt an einem Institut durchgeführt werden. Unserem Projektteam wurde die Entwicklung einer Verwaltungssoftware für eine Kinokette zugeteilt. Grundteile des Projekts waren bereits von Mitarbeitern des Instituts für rechnergestützte Automation in Eclipse RCP entwickelt worden; diese sollten nun adaptiert und weiterentwickelt werden. Da unser Team fast ausschließlich aus Webentwicklern bestand, gefiel uns der Aufbau des Eclipse-RCP-Projekts wenig. Vor allem aber fehlte uns ein Mechanismus für Inversion of Control und Dependency Injection. Aufgrund unserer guten Erfahrungen mit Apache OpenWebBeans sowie MyFaces CODI entschlossen wir uns, zu versuchen, diese Frameworks unter Eclipse RCP lauffähig zu machen.

Geschrieben von
Jakob Korherr
Jakob Korherr
Jakob arbeitet als Softwareentwickler bei IRIAN Solutions in Wien. Gleichzeitig studiert er Software and Information Engineering an der TU Wien. Er ist Apache MyFaces Committer und PMC Member sowie JSF 2.2 Expert Group Member. Jakob bloggt auf http://www.jakobk.com.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.