Domanda

Devo fornire un ClassLoader personalizzato? Pensare ad alta voce questo non sembra essere l'approccio giusto perché all'interno del classloader non si conosce la versione richiesta.

È stato utile?

Soluzione

Dato che il meccanismo di caricamento funziona essenzialmente con un URL, suggerirei di farlo prova un gestore URL personalizzato. Logicamente dovrai caricarlo e attivarlo prima di caricare eventuali bundle utilizzando questo gestore, altrimenti penso che dovrebbe funzionare.

Vedi le specifiche del servizio gestori URL " ;, R4 Specifiche core OSGi.

Glassfish sta usando questo approccio per installare bundle webapp tra.

Altri suggerimenti

Una soluzione semplice è quella di creare il proprio bundle bootstrap che fornirà tutti gli altri bundle da un database (o altra posizione). OSGi ti consente di installare bundle da un InputStream arbitrario, quindi dovrebbe essere ragionevolmente facile collegarlo a qualsiasi fonte tu voglia (es. JDBC).

Vedi BundleContext.installBundle () per ulteriori dettagli.

Non dovresti cercare un " callback " attraverso il quale il framework ti avviserà "quando deve caricare una dipendenza richiesta" poiché la gestione automatica delle dipendenze (ala Maven) non fa parte della funzionalità principale di OSGi (sebbene possa essere ottenuta utilizzando servizi come OBR ).

Dai un'occhiata al progetto URL PAX: http://wiki.ops4j.org/ display / paxurl / Documentation

Ciò dimostra la separazione delle preoccupazioni relative al caricamento di un bundle OSGi da come viene archiviato. In teoria, non vedo alcun grande ostacolo all'utilizzo di un database come archivio bundle, anche se non vedo alcun evidente vantaggio.

Per quanto riguarda le versioni dei bundle, è necessario un meccanismo per identificare quali bundle (e versioni) caricare. Memorizzeresti i bundle nel database con le informazioni sulla versione, altrimenti come archiveresti versioni diverse dello stesso bundle?

Puoi sempre scaricarli dal database (o qualsiasi altra cosa) in una posizione locale e quindi installarli dinamicamente in OSGi Framework. Tutto quello che devi dare al framework è il percorso del filesystem del bundle. Naturalmente, dovrai scrivere tutto il codice della colla per questo. D'altra parte, se stai usando Eclipse P2, potresti avere una maggiore flessibilità grazie al provisioning automatico.

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