What is the difference between OSGi Components and Services

一世执手 提交于 2019-11-28 15:58:46

问题


Under OSGi, what are the main differences between Components vs Services? As I understand it, all Services must be Components, but not all Components must be services.

What are the benefits of using one over the other with sample use cases?


回答1:


"Components" are less formally defined than services.

A service is any object that is registered in the OSGi Service Registry and can be looked up using its interface name(s). The only prerequisite is that a service should implement some interface... any interface. For example I could register a runnable object under the java.lang.Runnable interface, and clients could look it up using that interface name.

A "component" tends to be an object whose lifecycle is managed, usually by a component framework such as Declarative Services (DS), Blueprint or iPOJO. See this page on the OSGi Community Wiki for a discussion of the different component frameworks available.

A component may have any of the following features, in combination or alone:

  • A component may be started and stopped; this would be considered an "active" component, though that is also an informal term. A component that doesn't need to be started or stopped is called passive.
  • A component may publish itself as an OSGi service.
  • A component may bind to or consume OSGi services.

In general, using a component framework is the easiest way to work with OSGi services because the framework will manage the binding to the services that you want to consume. For example you could say that your component "depends on" a particular service, in which case the component will only be created and activated when that service is available -- and also it will be destroyed when the service becomes unavailable.




回答2:


EDIT: See Neil Bartlett's answer, I've answered quite specifically wrt Declarative Services but it's more subtle than I've stated incorrectly here.

In short: Components are consumers of services not providers, Services are an extension of Components registring as service providers.

A component has a lifecycle (de/activate and modify), service dependency management (un/bind).

A service is an extension of a component; via the service registry, it offers it's services to other bundles etc by publishing implemented interfaces and properties.

The use-case for Services is obvious, the typical cases for using Components is needing management of lifecycle, configuration or service dependencies, but not needing/wanting to publish the Component for inter-bundle usage.



来源:https://stackoverflow.com/questions/8886430/what-is-the-difference-between-osgi-components-and-services

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!