I "componenti" sono definiti in modo meno formale rispetto ai servizi.
Un servizio è qualsiasi oggetto registrato nel registro del servizio OSGi e può essere consultato utilizzando i relativi nomi di interfaccia. L'unico prerequisito è che un servizio dovrebbe implementare alcune interfacce ... qualsiasi interfaccia. Ad esempio, potrei registrare un oggetto eseguibile sotto l'interfaccia java.lang.Runnable
e i client potrebbero cercarlo usando quel nome di interfaccia.
Un "componente" tende ad essere un oggetto il cui ciclo di vita è gestito, solitamente da un framework di componenti come Servizi dichiarativi (DS), Blueprint o iPOJO. Vedi this page sul Wiki della comunità OSGi per una discussione sui diversi framework di componenti disponibili.
Un componente può avere una delle seguenti caratteristiche, in combinazione o da soli:
- Un componente può essere iniziato e fermato; questa sarebbe considerata una componente "attiva", sebbene sia anche un termine informale. Un componente che non ha bisogno di essere avviato o arrestato è chiamato passivo.
- Un componente può pubblica come come un servizio OSGi.
- Un componente può associare a o consumare servizi OSGi.
In generale, l'utilizzo di un framework di componenti è il modo più semplice per lavorare con i servizi OSGi poiché il framework gestirà l'associazione ai servizi che si desidera utilizzare. Ad esempio, potresti dire che il tuo componente "dipende da" un particolare servizio, nel qual caso il componente verrà creato e attivato solo quando quel servizio sarà disponibile e sarà distrutto anche quando il servizio non sarà disponibile.
fonte
2012-01-16 22:32:33
potresti fornire un esempio di un componente che non è un servizio? – santiagozky
@santiagozky Certo. Si supponga di voler scrivere un componente server che si trova su socket e risponde alle richieste su TCP/IP. All'avvio del componente, apre il socket e crea i thread necessari per servire i client. Quando si ferma, chiude il thread (s) e presa. Un altro esempio: un componente che crea una GUI utilizzando Swing, SWT o JavaFX. Nessuno di questi componenti di esempio sono i servizi stessi, sebbene possano * utilizzare * servizi pubblicati da altri componenti. –
@neal, grazie. Lo capisco adesso. – santiagozky