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 (siehe dazu OSGi Wikipediaartikel). Darüber hinaus wird mit dem JSR-291 der Versuch unternommen, OSGi in den Java Standard zu integrieren.
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:
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:
Sun JCP JSR-291 (Dynamic Component Support for Java SE – OSGi R4.1
OSGi Alliance