Abhängigkeitsinjektion in OSGI-Umgebungen

Zuerst etwas hintergrund:

Arbeite ich an einigen webapp-Prototyp-code, basierend auf Apache Sling die OSGI-basiert und läuft auf Apache Felix. Ich bin noch relativ neu in OSGI-obwohl ich denke, dass ich verstanden haben die meisten Konzepte, die von jetzt. Aber was mich verwirrt ist, dass ich nicht in der Lage zu finden ein "volle" dependency injection (DI) Frameworks. Ich habe erfolgreich eingesetzt rudimentäre DI mit Deklarativen Services (DS). Aber mein Verständnis ist, dass DS verwendet werden, um Referenz -- wie mache ich das? -- OSGI-registrierte Dienste und Komponenten zusammen. Und für die, die es funktioniert gut, aber ich persönlich nutze DI-frameworks wie Guice Draht gesamten Objekt-Graphen zusammen und legen Sie Objekte auf die richtigen Bereiche (denken @RequestScoped oder @SessionScoped zum Beispiel). Aber keiner von der OSGI-spezifische frameworks habe ich mir angeschaut, scheinen für dieses Konzept.

Habe ich begann zu Lesen über OSGI-Blaupausen und iPOJO aber diese Rahmenbedingungen scheinen sich mehr Gedanken über die Verdrahtung von OSGI-services zusammen als mit der Bereitstellung einer full-DI-Lösung. Ich muss zugeben, ich habe nicht getan, alle Proben noch, so mein Eindruck könnte falsch sein.

Eine Erweiterung zu Guice, ich habe experimentierte mit Peaberry, aber ich fand die Dokumentation sehr schwer zu finden, und während ich mich für den basic-DI arbeiten, eine Menge von guice-servlet-advanced-Funktionalität (automatische Injektion in filtern, servlets, etc) hat überhaupt nicht funktioniert.

So, meine Fragen sind die folgenden:

  1. Wie deklarative Leistungen vergleichen "traditionelle" DI wie Guice oder Spring? Tun Sie dasselbe problem zu lösen oder sind Sie darauf ausgerichtet, die verschiedenen Probleme?
  2. Alle OSGI-spezifische Lösungen, die ich bisher gesehen habe, fehlt das Konzept der scopes für DI. Zum Beispiel, Guice + guice-servlet hat die request-scoped Abhängigkeiten, die macht das schreiben von web-Anwendungen wirklich sauber und einfach. Habe ich nur übersehen, dass in den docs oder sind diese Bedenken nicht abgedeckt durch eines dieser frameworks?
  3. Sind JSR 330 und OSGI-basierten DI-zwei verschiedene Welten? iPOJO zum Beispiel bringt seine eigene Anmerkungen und Felix SCR Anmerkungen zu sein scheinen eine völlig andere Welt.
  4. Hat jemand Erfahrung mit dem Bau von OSGI-basierten Systemen und DI? Vielleicht auch einige Beispiel-code auf github?
  5. Hat jemand Verwendung verschiedener Technologien wie Guice und iPOJO zusammen oder ist das nur eine verrückte Idee?

Sorry für die ziemlich lange Frage.

Jedes feedback wird sehr geschätzt.


Updates

Gültigkeitsbereich Injektion: scoped-Injektion ist ein nützlicher Mechanismus, um Objekte aus einer bestimmten Lebenszyklus automatisch injiziert. Denken Sie zum Beispiel, einige Ihrer code stützt sich auf eine Hibernate-session-Objekt, das erstellt wird, als Teil der einen servlet-filter. Durch das markieren einer Abhängigkeit der container wird automatisch neu erstellen Sie das Objekt graph. Vielleicht gibt es nur verschiedene Ansätze?

JSR 330 vs DS: von allen hervorragenden Antworten, die ich sehen, dass diese sind zwei verschiedene Dinge. Stellt sich noch die Frage, wie man mit Bibliotheken von Drittanbietern und frameworks, die Verwendung JSR 330 Annotationen beim Einsatz in einer OSGI-Kontext? Was ist ein guter Ansatz? Läuft ein JSR 330-container innerhalb des Pakets?

Ich Schätze Ihre Antworten, Sie waren sehr hilfreich!!!

Kommentar zu dem Problem
Im Gegenteil: Danke für eine gut formulierte (und daher "lange") Frage 🙂 Kommentarautor: DerMike

InformationsquelleAutor der Frage ilikeorangutans | 2012-06-22

Schreibe einen Kommentar