Domanda

im avere un problema ClassLoader. Dal momento che im piuttosto un newby OSGi, si spera che la risposta non è così difficile:)

Io penso che abbia a che fare con Compile vs librerie di runtime. in NetBeans 6.7.1 proprietà del progetto, le librerie compiletime sono sempre propagate alle altre categorie .. quindi non posso differenziare lì.

Quando si compila il FelixHost i prossimi vasi sono utilizzati

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

Ma quando si esegue, il quadro caricherà un'implementazione per OBR. Questo pacchetto OBR contiene anche le definizioni di interfaccia. Penso che questo sia il motivo per cui c'è un ClassCastException ..

Io in realtà voglio il FelixHost a collaborare con OBR fare qualche iniziale provisioning ..

Tutte le idee sono benvenute.

È stato utile?

Soluzione

Presumo che per "FelixHost" si fa riferimento al progetto che sta incapsulando e lanciando il quadro Felix.

Il problema è che bisogna essere un po 'attenti al confine tra "mondo OSGi" e "mondo non OSGi". Tutto ciò che si mette sul classpath per FelixHost (cioè anche tutti compilazione dipendenze temporali nel tuo caso) è essenzialmente al di fuori del mondo OSGi vivendo, quindi non è consigliabile utilizzare fasci come "osgi.service.obr-1.0.2.jar" in questo modo.

Come lei ha sottolineato, se il quadro OSGi carica anche il "osgi.service.obr-1.0.2.jar" bundle si otterrà in ClassCastException perché si deve essenzialmente due versioni delle stesse classi (interfacce).

Una possibile soluzione a questo problema è quello di separare la logica di provisioning iniziale in un fascio separata e fare l'OBR lavoro correlati dall'interno del mondo OSGi . Quindi è possibile rimuovere la dipendenza di compilazione di FelixHost su "osgi.service.obr-1.0.2.jar" e hanno una sola copia di interfacce OBR caricati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top