# OSGI - Anfängerfragen



## Kr0e (14. Jul 2011)

Hallo,

ich hab vor ein paar Tagen angefangen, mich in OSGi einzuarbeiten. Ich muss schon sagen, dass das eine wirklich tolle Sache ist...

Jetzt nach den ersten Testprojekten, wollte ich mal ein erstes "etwas" größeres Projekt(Mit mehr als nur einem Bundle ) versuchen. Dabei kommen mir ein paar Fragen:

1. Wenn ich z.B. per DS eine Abhängigkeit zu einem Service erstelle, wie wirkt sich das auf die Startbarkeit des Bundles aus ? Ich hab das mal probiert, aber iwie ließ mein Bundle sich dennoch starten, ohne mir eine Fehlermeldung auszugeben, z.B. das es vom Service XY keine Impl. gibt zur Zeit.... 

2. Die Begriffe Cardinality und Policy in der XML Component Definition sind mir auch noch etwas unklar... 

3. eher eine Stil-Frage: Man kann ja Dependencies zu bestimmen Paketen aber auch zu ganzen Bundles herstellen. Frage: Wann sollte man das eine bzw. das andere nutzen ? Bzw. ist die Abhängigkeit zu Paketen vlt "unschön" oder andersrum ?

4. Wie kann man mit OSGi eine Anwendung später dann erstellen ? Ich würde gerne rein OSGi verwenden ohne direkt eine Eclipse RCP zu benutzen, oder ist eine Eclipse RCP ohne zusätzliche Bundels in etwa das, was ich brauche ? Ich bin iwie z.T. noch verwirrt, da mir hier noch der ÜBerblick fehlt. Oder empfehlt ihr generell Eclipse RCP ?

Gruß,

Chris


----------



## xerberuz (14. Jul 2011)

Das Bundle startet sobald alle Abhängigkeiten des Bundles aufgelöst sind. Also alle Packages und Bundles die im Manifest stehen. Der Service wird allerdings erst aktiviert wenn dessen Abhängigkeiten aufgelöst sind.
Cardinality gibt die Menge an. Also mindestens einen, genau einen, ...
Policy dynamic: nachdem der Serivce aktiviert wurde bekommst du trotzdem neue zugewiesen. static: Wenn der Service aktiv ist behälst du erstmal die die du hast und bekommst keine neuen
Abhängigkeit zu Paketen ist zu bevorzugen. Wobei das eine ewige Streitfrage bleibt ;-) Es ist manchmal auch sinnvoll direkt an Bundles gebunden zu sein.
Im Prinzip ist RCP nicht notwendig für eine Anwendung. Lediglich das OSGi Framework. Also Equinox, Felix,... . RCP ist eben nur sinnvoll wenn deine Applikation auf RCP aufbauen soll. Du kannst auch andere Frameworks nutzen.


----------



## Kr0e (14. Jul 2011)

Danke vielmals!


----------



## Wildcard (14. Jul 2011)

3. package imports sind allgemein flexibler und erstmal zu bevorzugen. Require Bundle wird aber durchaus auch verwendet. Es macht die Sache etwas einfacher zu verwalten und es gibt Fälle wo man mit import-package an Grenzen stößt (zB bei split packages)

4. Hängt von der Art der Applikation ab. Für einen Desktop Client ist oft RCP zu bevorzugen weil unglaublich viel Funktionalität mitkommt. Wenn die Anwendung möglichst klein sein soll ist RCP nicht so das richtige, so ab 5 MB ist zwar möglich, aber mit mehr Funktionalität können es auch schnell mal 100 MB werden.
Hier ein paar typische Beispiele für Eclipse RCPs:
Eclipse RCP examples


----------

