Beinahe axiomatisch lässt sich der Nachweis erbringen, dass saubere Architekturen nicht ohne Dependency Injection auskommen. Architekturen, die Dependency Injection realisieren, lassen sich leicht selber bauen oder sind als Frameworks in großer Vielfalt mit jeweils unterschiedlichen Fokus umgesetzt. Komplizierter wird es, wenn man Modularisierung in großen, heterogenen Teams betreibt. Hier muss man für die einzelnen Module ein Dependency- und Lifecyclemanagement etablieren und technisch unterstützen. OSGi ist ein speziell für Java entwickelter Standard, der das leistet.
Offene OSGi Implementierungen gibt es reichlich. Die momentan populärste ist vielleicht Eclipse Equinox, nicht zuletzt weil die Eclipse IDE und Eclipse RCP auf dieser Implementierung basiert. Es ist aber nicht die einzige wie folgende Tabelle zeigt:
| Produkt | Beschreibung |
|---|---|
| Eclipse Equinox | große Popularität, weit verbreitet, Basis für Eclipse RCP und Eclipse IDE und ProSyst Open Source mBedded Server |
| Apache Felix | |
| FUSE ESB 4 | OSGi kompatible ESB Implementierung |
| Knopflerfish | offener OSGi Kernel mit prof. Support für kommerzielle Produkte |
| Newton Project |
Java EE EJB und OSGi
Laut EJB Spezifikation erfolgt die Modularisierung auf Basis der EJB Komponenten und ist damit eher fachlich getrieben. Der EJB Container ist aus diesem Grund praktisch nicht mit OSGi zu verheiraten. Generell sind zwei Ansätze denkbar, es dennoch zu versuchen:
Java EE Webtier und OSGi
Für Java EE Webcontainer sind zufällig OSGi konforme Lösungen möglich. Im Java EE Webcontainer gibt es keine spezifizierte fachliche Modularisierung, zusätzlich genießen Servlets in ihrer Umgebung wesentlich mehr Rechte als die Beans im EJB Container (der Classpath ist bekannt und kann untersucht werden, Leserechte für Ressourcen der Webanwendung). Auch hier kann man zwei Ansätze unterschieden:
Referenzen
Sun JCP JSR-291 (Dynamic Component Support for Java SE – OSGi R4.1)
OSGi Alliance
Server-Side Equinox