2012-10-24 9 views
6

La specifica OSGi Enterprise Release 5 introduce lo spazio dei nomi osgi.extender. Questo spazio dei nomi rende possibile i bundle che presuppongono l'estensione di estensori come Blueprint o Servizi dichiarativi per modellare questa dipendenza utilizzando l'intestazione Require-Capability.Come dichiarare un requisito sulla capacità di estensione SCR?

Capitolo 135.2 Lo spazio dei nomi di osgi.extender indica che il valore della capacità per ogni estensore specifico deve essere specificato nelle specifiche corrispondenti. Un esempio è dato per Blueprint:

Provide-Capability: osgi.extender; 
    osgi.extender="osgi.blueprint"; 
    uses:="org.osgi.service.blueprint.container,org.osgi.service.blueprint.reflect" 
    version:Version="1.0" 

Tuttavia, il capitolo 112 dichiarativa Servizi Specification non specifica la capacità che un'implementazione SCR fornisce.

Peter Kriens fornisce un esempio in un blog post on Requirements and Capabilities che suggerisce che la capacità di SCR è osgi.component. Suppongo che alla fine questo valore sarà definito correttamente nelle specifiche. Ma fino ad allora non posso usarlo.

Poiché le intestazioni Require-Capability e Provide-Capability sono state introdotte in OSGi Core versione 4.3, il meccanismo è già disponibile nelle implementazioni del framework. Quindi, voglio che i miei bundle esprimano un requisito su SCR in modo che un'installazione SCR possa essere risolta da un repository OBR.

Posso immaginare una soluzione in cui creo un pacchetto vuoto che da una parte fornisce una funzionalità personalizzata e dall'altra richiede un pacchetto di implementazione. Ad esempio:

Provide-Capability: com.example.extender; extender=scr 
Require-Bundle: org.apache.felix.scr; bundle-version=1.6.0 

Qualsiasi pacchetto che include servizi dichiarativi può quindi esprimere un requisito per questa funzionalità. Per esempio:

Require-Capability: com.example.extender; filter:="(extender=scr)" 

questo è un buon modo di fare in modo SCR viene risolto quando schiero bundle che contengono i servizi dichiarativa? C'è un altro modo?

Una buona soluzione a questo problema potrebbe essere una soluzione che può essere applicata anche ad altri bundle legacy che non forniscono funzionalità.

risposta

4

La specifica ha definito lo spazio dei nomi osgi.extender ma le varie specifiche di estensione (Blueprint, DS) devono essere aggiornate per imporre che le implementazioni forniscano la corretta capacità di estensione. Al momento, probabilmente no.

Quindi, per ora, è ora possibile per il pacchetto DS "richiedere" il pacchetto di implementazione di DS da risolvere (o anche installato).

OSGi ha dei lavori in corso per i prossimi aggiornamenti di Blueprint e DS e questi aggiornamenti impongono la capacità di osgi.extender.

+0

Quindi, la soluzione che ho suggerito in realtà non funzionerà? –

+3

Lo farebbe. È anche possibile creare un frammento che ha aggiunto la funzionalità al pacchetto di implementazione di DS. –

+0

Grande, grazie per la tua risposta! –

Problemi correlati