Folgende Punkte kommen während der Entwicklung modularer Anwendungen mit OSGi immer wieder hoch.

  1. Naming & Versioning
  2. Package Design
  3. “Import Package” vs. “Require Bundle”

1. Naming & Versioning

Überlegen sie sich ein durchgängiges sprechendes Naming und Versionierungskonzept für ihre Bundles. Schreiben sie dieses unbedingt nieder und achten Sie auf die Einhaltung der Regeln. Selbst Bei kleinen Projekten kommt es sehr schnell dazu, dass man den Überblick verliert über seine Bundles. Das gilt natürlich auch für die Services selber. Diese sollten genauso konsistent benannt werden wie alles andere.

2. Package Design

Machen Sie sich frühzeitig Gedanken über ihre Package Strukturen. OSGi nutzt die Package Strukturen um Service Interfaces für andere Bundles zur Verfügung zu stellen. Stellen Sie unbedingt sicher, dass die Service Interfaces immer in anderen Packages als die Implementierung liegen.

Beispiel

bundle.service >> Service Interfaces

bundle.service.implementation >> Service implementations

Denken sie daran, dass der Inhalt des exportierten Packages nach außen Sichtbar und vor allem nutzbar für andere wird.

Gerade im OSGi Umfeld kommt dem Package mehr Aufmerksamkeit zu als mancher gewohnt ist. Weitere Infos zu Packages und deren Aufgabe findet man unter http://www.osgi.org/blog/2011/08/package-as-contract.html

3. “Import Package” vs. “Require Bundle”

Abhängigkeiten zwischen bundles sollten so spärlich wie möglich eingesetzt werden. Sollte man einen Service benötigen, steht man vor der Wahl die entsprechenden Packages mit import package zu importieren oder gleich das komplette Bundle mit require bundle an sich zu binden. Wenn möglich sollte unbedingt nur das importiert werden, was auch wirklich benötigt wird. Daher, wenn möglich import package verwenden. Die Kopplung die durch require bundle entsteht ist wesentlich stärker und sollte nur in Ausnahmefällen verwendet werden.

 

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">

About The Author

andreas