2013-11-28 9 views
5

Ich habe vor kurzem angefangen zu studieren OSGi. Ich lese, dass man bundles(which are normal java classes) erstellen kann und sie in einem anderen Bundle von dynamically installing/uninstalling beliebigen Bundle verwenden kann.Unterschied zwischen OSGi-Bundle und normalen .JAR-Dateien Verwendung

Aber ich kann nicht den Unterschied zwischen einer normalen .JAR Dateiverwendung in jeder Java-Klasse und zwischen der Verwendung eines bundle zu verstehen scheinen.

Kann jemand plz mir helfen, es zu klären? Danke.

Antwort

16

Es gibt im Grunde keinen Unterschied. Ein JAR ist ein Bündel und ein Bündel ist ein JAR, die Formate sind identisch. Ein nützliches Bundle erfordert jedoch OSGi-Metadaten in seinem Manifest, sodass ein OSGi-Framework die Sichtbarkeit von Klassen zwischen Bündeln verwalten kann. Eine JAR ohne diese Metadaten würde nur unsichtbare Klassen enthalten, könnte keine Klassen von anderen Bundles sehen, noch könnte sie in irgendeiner Weise gestartet werden. Der Manifest-Header Import-Package gibt an, welche Pakete für das Bundle sichtbar gemacht werden sollen, und das Export-Package definiert die Pakete im Bundle, die für andere sichtbar gemacht werden sollen. Andere Header bieten zusätzliche Funktionen.

Mit dem traditionellen Klassenpfad ist alles gemeinsam und global, wobei die gleiche Klasse auf dem Klassenpfad zweimal nicht markiert ist, man wird einfach ignoriert. Der Hauptunterschied zu OSGi besteht darin, dass eine JAR-Datei jetzt nur noch privat ist. Durch das Hinzufügen von Metadaten im Manifest wird es zu einem Bundle, das sicher mit anderen Bundles geteilt werden kann. OSGi stellt sicher, dass Verstöße im Voraus erkannt werden.

+0

Löschen. Danke :) – Amrit

+0

Kann also ein Bündel anstelle eines Jar in einer JavaEE-Anwendung verwendet werden? – adbdkb

+1

Ja, es ist eine normale JAR. In einer JavaEE-App fungiert sie jedoch als JAR und nicht als Paket. –

Verwandte Themen