web-dev-qa-db-fra.com

Quelle est la différence entre les composants et 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 par rapport à l'autre avec des exemples de cas d'utilisation?

40
empire29

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

Un service est tout objet enregistré dans le registre de service OSGi et pouvant être recherché à l'aide de son ou ses noms d'interface. La seule condition préalable est qu'un service implémente une interface ... n'importe quelle interface. Par exemple, je pourrais enregistrer un objet exécutable sous le Java.lang.Runnable interface, et les clients pourraient le rechercher en utilisant ce nom d'interface.

Un "composant" a tendance à ê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 des différents cadres de composants disponibles.

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

  • Un composant peut être démarré et arrêté ; cela serait considéré comme une composante "active", bien qu'il s'agisse également d'un terme informel. Un composant qui n'a pas besoin d'être démarré ou arrêté est appelé passif.
  • Un composant peut se publier lui-même en tant que service OSGi.
  • Un composant peut se lier à ou consommer les services OSGi.

En général, l'utilisation d'une infrastructure de composants est la façon la plus simple de travailler avec les services OSGi, car l'infrastructure gère la liaison aux services que vous souhaitez utiliser. Par exemple, vous pourriez dire que votre composant "dépend" d'un service particulier, auquel cas le composant ne sera créé et activé que lorsque ce service sera disponible - et il sera également détruit lorsque le service deviendra indisponible.

59
Neil Bartlett

EDIT: Voir la réponse de Neil Bartlett, j'ai répondu de manière très spécifique aux services déclaratifs mais c'est plus subtil que je ne l'ai dit incorrectement ici.

En bref: les composants sont des consommateurs de services et non des fournisseurs, les services sont une extension de l'enregistrement des composants en tant que fournisseurs de services.

Un composant a un cycle de vie (désactiver/activer et modifier), la gestion des dépendances de service (annuler/lier).

Un service est une extension d'un composant; via le registre des services, il offre ses services à d'autres bundles, etc. en publiant des interfaces et des propriétés implémentées.

Le cas d'utilisation des Services est évident, les cas typiques d'utilisation des Composants nécessitent une gestion du cycle de vie, de la configuration ou des dépendances de service, mais n'ont pas besoin/de vouloir publier le Composant pour une utilisation inter-bundle.

7
earcam