42 votes

Quelle est la différence entre les composants et les services OSGi ?

Sous OSGi, quelles sont les principales différences entre les composants et les services ? Si je comprends bien, tous les services doivent être des composants, mais tous les composants ne doivent pas être des services.

Quels sont les avantages d'utiliser l'un plutôt que l'autre, avec des exemples de cas d'utilisation ?

63voto

Neil Bartlett Points 12330

Les "composants" sont moins formellement définis que les services.

Un service est tout objet qui est enregistré dans le registre des services OSGi et qui peut être recherché à l'aide de son ou ses noms d'interface. La seule condition préalable est qu'un service doit implémenter une interface... n'importe quelle interface. Par exemple, je pourrais enregistrer un objet exécutable sous l'interface java.lang.Runnable et les clients peuvent la rechercher en utilisant le nom de cette interface.

Un "composant" tend à être un objet dont le cycle de vie est géré, généralement par un cadre de composants tel que Declarative Services (DS), Blueprint ou iPOJO. Voir cette page sur le wiki de la communauté OSGi pour une discussion sur les différents cadres de composants disponibles.

Un composant peut présenter l'une des caractéristiques suivantes, en combinaison ou seul :

  • Un composant peut être a commencé y arrêté Il s'agirait d'une composante "active", bien que ce terme soit également informel. Un composant qui n'a pas besoin d'être démarré ou arrêté est appelé passif.
  • Un composant peut publier en tant que service OSGi.
  • Un composant peut lier à o consommer Services OSGi.

En général, l'utilisation d'un framework de composants est le moyen le plus simple de travailler avec les services OSGi, car le framework gère la liaison avec les services que vous voulez consommer. Par exemple, vous pouvez dire que votre composant "dépend" d'un service particulier, auquel cas le composant ne sera créé et activé que lorsque ce service est disponible -- et il sera également détruit lorsque le service devient indisponible.

7voto

earcam Points 4587

EDIT : Voir la réponse de Neil Bartlett, j'ai répondu de manière assez spécifique par rapport aux services déclaratifs mais c'est plus subtil que ce que j'ai dit incorrectement ici.

En bref : les composants sont des consommateurs de services et non des fournisseurs, les services sont une extension des composants qui s'enregistrent comme fournisseurs de services.

Un composant a un cycle de vie (de/activate and modify), la gestion des dépendances des services (un/bind).

Un service est une extension d'un composant ; via le registre de services, il offre ses services à d'autres bundles, etc. en publiant les interfaces et les propriétés mises en œuvre.

Le cas d'utilisation des services est évident, les cas typiques d'utilisation des composants sont la nécessité de gérer le cycle de vie, la configuration ou les dépendances de services, mais pas la nécessité ou la volonté de publier le composant pour une utilisation inter-bundle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X