blog220120.Eclipse osgi之service

本文以eclipse 4.20为参考.

缘起

OSGi中的service由bundle注册和提供, framework管理, bundle使用.
service注册和使用的大致过程如下,

  • bundle向framework注册service时提供service的相关信息,
    • clazz(s)信息, clazz(s)是service obj所要实现的interface和class. 同时clazz也是client bundle查询该service的主要依据.
    • argService, 可以是service obj本身, 也可以是ServiceFactory obj或ProtoypeServiceFactory obj. 后两者由framework使用, 生成service obj.
    • properties, service携带的properties. clientBundle使用serviceReference可以读取.
  • framework负责serviceRegistry, 接受bundle的注册申请, 生成一个serviceRegistration凭据.
  • 当client bundle需要使用service时, 向framework申请service obj.
  • framework根据clazz和filter信息查询该service, 并生成serviceReference返回给client bundle.
  • client bundle使用serviceReference, 并根据service scope的不同, 进一步得到要使用的service obj.

service按照service scope分做3类,

  • singleton, service只提供一个service obj, 所有client bundles公用该service obj.
  • bundle, service为每一个client bundle提供1个service obj.
  • prototype, service可以为每一个client bundle提供n个service obj.

针对prototype情形, 为了得到不同的service obj, 需使用serviceObjects.getService().

主要接口和类

Bundle

对应bundle. framework使用Bundle obj管理bundle的life cycle.
bundle有6态,

  • uninstalled
  • installed
  • resolved, 已解决dependencies
  • starting
  • stopping
  • active

BundleContext

与Bundle obj绑定的BundleContext是bundle与osgi framework交互的接口界面.
BundleContext obj在bundle start时建立, stop前失效, 确切说, 在bundleActivator.start(ctx)和bundleActivator.stop(ctx)之间是有效的.
与service相关的功能包括,

  • addServiceListener and removeServiceListener
  • getServiceReferences
  • registerService,
  • getServiceObjects
  • getService and ungetService
ServiceRegistration<?> registerService(java.lang
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值