这里是对上一篇blog: http://winseclone.iteye.com/blog/1786637 的补充。说明DS声明服务XML中reference节点属性的作用。
这里reference的几个属性cardinality和policy是比较难理解的。
cardinality(基数),该属性是DS为啥这么牛逼的真正所在之一。该属性控制Service数量的上下限,达到这个下限后该Component才可用。
这里说一下“上限”,假设选的是0..1或1..1,就算你的运行时注册了n个Service,框架也只会选择其中一个!至于真正使用那个,不是很确定!所以最好不要这样用!
- 0..1: optional and singular, "zero or one"
- 1..1: mandatory and singular, "exactly one"
- 0..n: optional and multiple, "zero to many"
- 1..n: mandatory and multiple, "one to many" or "at least one"
上限是1的情况下,找到一个Service后就被break了!所以,在这种“基数”的配置下,不推荐注册多个Service。如果需要运行时替换服务,首先stop原来的服务插件,然后再start新服务的插件。
在0..1或1..1的策略下,也不推荐在Component(Helper)的插件同时绑定一个Service实现,不利于服务的替代!
policy(策略)可选值为:static和dynamic, 静态和动态的意思。如果是静态的话,如果Service重新加载,Component也会重新加载。而dynamic只会调用相应的setService()和unsetService()方法。
activate sample.http.ds.UserHelper@48cbd6
osgi> ls
All Components:
ID State Component Name Located in bundle
1 Active sample.http.ds.UserHelper sample.http(bid=41)
2 Active sample.http.en.userService sample.http.ds.user.en(bid=44)
3 Active sample.http.cn.userService sample.http.ds.user.cn(bid=45)
osgi> stop 45
register user-service : sample.http.ds.user.en.UserServiceImpl@406c4
unregister user-service : sample.http.ds.user.cn.UserServiceImpl@19e5e6b
注意: 这里的顺序!先register后再unregister!所以原来的UserHelper需要进行修改才行,不然,动态变更后,service就变成null咯!
activate sample.http.ds.UserHelper@1526a45
osgi> ls
All Components:
ID State Component Name Located in bundle
1 Active sample.http.ds.UserHelper sample.http(bid=41)
2 Active sample.http.en.userService sample.http.ds.user.en(bid=44)
3 Active sample.http.cn.userService sample.http.ds.user.cn(bid=45)
osgi> stop 45
deactivate sample.http.ds.UserHelper@1526a45
unregister user-service : sample.http.ds.user.cn.UserServiceImpl@18f07f1
register user-service : sample.http.ds.user.en.UserServiceImpl@5c8c05
activate sample.http.ds.UserHelper@1ecade2
从上面两个从Console命令窗口中的可以看到,dynamic策略在Service注册后,不会deactivate钝化Component。而static策略会先钝化Component后在unregsiter注销Service。
相关推荐
3DS文件结构解析及程序,对3DS文件结构做了详细的描述,并有示例代码(C++)
DS1820温度传感器解析
毕业论文,详细描述了 3ds 文件的结构,已经怎么用 C++(VC) 借助 OPENGL 进行渲染和 应用
DS2100N_DS2400N Reference Manual.pdf
Python .DS_Store解析器 该存储库包含Apple的.DS_Store文件格式的解析器。 ./samples/目录中包含一个CTF格式的示例文件,您可以使用python3 main.py ./samples/.DS_Store.ctf尝试解析器。 这是我的博客文章,试图...
3ds Max 8.0 MAXScript Reference
是一个老外写的,解析.3ds文件,并进行渲染,用opengl做的,可以直接运行,还是不错,可以用来了解.3ds 模型结构
文件包括: 3ds Format.doc 3DS读取研究.doc 从3DS文件中导入网格数据.doc 源码: 一个完善的读取3DS文件例子.rar 3DS+File+Loader.rar 一款3D Max插件,导出.X文件PandaDirectXMaxExporter.rar
生锈的.DS_Store解析器获取库! 在您的Cargo.toml文件中添加类似的内容:[dependencies] ds_store =“ 0.2”用法extern crate ds_store生锈的.DS_Store解析器获取库! 在您的Cargo.toml文件中添加类似的内容:...
51单片机与DS18B20解析.ppt该文档详细且完整,值得借鉴下载使用,欢迎下载使用,有问题可以第一时间联系作者~
是一个 .DS_Store 文件泄漏利用脚本,它解析.DS_Store文件并递归地下载文件到本地。 .DS_Store是Mac下Finder用来保存如何展示文件/文件夹 的数据文件(即文件夹的显示属性的,和比文件图标的摆放位置),每个文件夹...
3DS文件格式分析中文版及解析源代码 简介: 1、读取规则 3ds文件的读取规则如下: 字节:直接读取; 字:先读低位字节,后读高位字节,如ed 3c读出后的字为3c ed; 双字:先读低位字,后读高位字,如ed 3c 25 43读出...
此代码为读取3ds文件的源代码,这是我从工作积累来的,希望对各位有所帮助。
canopen协议全套DS301,DS302,DS303,DS306,DS401,DS402,EDS
DS-5是ARM最新主推的开发工具,配合DSTREAM仿真器,可以进行功能强大的调试、仿真、跟踪功能。
很全面的3ds文件格式分析,自己写3ds模型加载程序可以参考
DS18B20温度传感器手册DS18B20温度传感器手册DS18B20温度传感器手册DS18B20温度传感器手册DS18B20温度传感器手册DS18B20温度传感器手册DS18B20温度传感器手册DS18B20温度传感器手册DS18B20温度传感器手册DS18B20温度...
3ds 文件的格式详解, 详细说明了3ds文件的组织结构,及其每个块所对应的含义, 还附加了对这个文件的解读的源代码VC环境下的
3ds Max制作赛车动画流程解析.doc3ds Max制作赛车动画流程解析.doc3ds Max制作赛车动画流程解析.doc3ds Max制作赛车动画流程解析.doc3ds Max制作赛车动画流程解析.doc3ds Max制作赛车动画流程解析.doc
IBM DS系列中低端存储部件更换手册 IBM DS系列中低端存储部件更换手册 IBM DS系列中低端存储部件更换手册 IBM DS系列中低端存储部件更换手册 IBM DS系列中低端存储部件更换手册 IBM DS系列中低端存储部件更换手册 ...