Frage

im ein Classloader Problem hat. Da im einer ganz osgi newby, hoffentlich ist die Antwort nicht so schwer:)

Ich denke, es hat mit Compile vs. Runtime-Bibliotheken zu tun. in Netbeans 6.7.1 Projekteigenschaften werden die compiletime Libs immer zu den anderen Rubriken propagieren .. also kann ich nicht da unterscheiden.

Beim Kompilieren des FelixHost der nächsten Gläser werden verwendet,

  • Felix.jar
  • osgi-core.jar
  • osgi-compendium.jar
  • osgi.service.obr-1.0.2.jar

Aber beim Laufen, der Rahmen wird eine Implementierung für OBR laden. Das OBR Bundle enthält auch die Schnittstellendefinitionen. Ich denke, das ist, warum es eine Classcast ..

ich will eigentlich die FelixHost zusammen mit OBR arbeiten einige erste zu tun Provisioning ..

Alle Ideen sind willkommen.

War es hilfreich?

Lösung

Ich gehe davon aus, dass durch „FelixHost“ Sie Ihr Projekt verweisen, die den Felix Rahmen kapseln und starten.

Das Problem ist, dass man ein wenig vorsichtig über die Grenze zwischen „OSGi Welt“ und „Nicht-OSGi Welt“ sein. Alles, was Sie auf dem Classpath setzen für FelixHost (dh auch alle Zeitabhängigkeiten in Ihrem Fall kompiliert) lebt im Wesentlichen außerhalb der OSGi Welt, also ist es nicht ratsam, Bundles wie „osgi.service.obr-1.0.2.jar“ zu verwenden, auf diese Weise.

Wie Sie wies darauf hin, wenn der OSGi-Framework auch die „osgi.service.obr-1.0.2.jar“ lädt bündeln Sie in Classcast bekommen, weil Sie im Wesentlichen zwei Versionen der gleichen Klassen (Interfaces) haben.

Eine mögliche Lösung für dieses Problem ist Ihre anfängliche Bereitstellung Logik in ein separates Bündel zu trennen und macht die OBR bezogene Arbeit aus der OSGi Welt . Dann können Sie die Kompilierung Abhängigkeit von FelixHost auf „osgi.service.obr-1.0.2.jar“ entfernen und nur eine Kopie von OBR Schnittstellen geladen haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top