`

DS的reference属性解析

阅读更多

 这里是对上一篇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(策略)可选值为:staticdynamic, 静态和动态的意思。如果是静态的话,如果Service重新加载,Component也会重新加载。而dynamic只会调用相应的setService()和unsetService()方法。

 

动态dynamic策略 写道
osgi> register user-service : sample.http.ds.user.cn.UserServiceImpl@19e5e6b
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咯!

 

静态static策略 写道
osgi> register user-service : sample.http.ds.user.cn.UserServiceImpl@18f07f1
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文件结构解析及程序,对3DS文件结构做了详细的描述,并有示例代码(C++)

    3ds 文件解析与显示

    《3ds文件解析与显示》是一篇以C++(VC)和OpenGL为工具,深入探讨3ds文件格式的毕业论文。3ds文件是Autodesk 3D Studio软件中广泛使用的三维模型存储格式,它包含了丰富的几何信息、材质属性以及动画数据。这篇论文...

    3ds 文件的格式详解及源代码

    6. **源代码解读**:在提供的"3DSLoader"源代码中,开发者可能使用VC++(Visual C++)环境,通过解析3ds文件的二进制格式,将其中的数据加载到内存中,创建出3D场景的表示。这涉及到读取文件头、识别块、解码块内容...

    读取3ds文件的源代码

    在这个“读取3ds文件的源代码”中,我们将探讨如何解析和加载3ds文件,以及可能遇到的关键知识点。 首先,3ds文件的结构是基于二进制的,而不是文本,因此读取它需要理解其内部的数据结构。文件通常包含多个块,每...

    DS1820温度传感器解析

    标题和描述均提到了"DS1820温度传感器解析",这暗示着我们的焦点将放在DS1820温度传感器的深入分析上。然而,根据所提供的部分内容,实际讨论的是DS18B20温度传感器,它是由DALLAS公司生产的一种高性能、高精度的...

    ARM最新开发工具DS-5入门解析说明

    ARM DS-5 入门解析说明 DS-5 是 ARM 公司最新主推的开发工具,旨在提供功能强大的调试、仿真、跟踪功能,满足开发者对基于 ARM 内核的芯片的开发需求。下面,我们将从多方面详细介绍 DS-5 的功能和特点。 一、发展...

    3ds Max MAXScript Reference

    - **函数和方法**:MAXScript提供了一系列内置函数和对象的方法,用于操作3ds Max的对象和属性。 2. **MAXScript在3ds Max中的应用**: - **界面定制**:通过MAXScript可以创建自定义菜单、工具栏和面板,实现...

    Python-dsstore:用于解析.DS_Store文件并提取文件名的库

    Python .DS_Store解析器 该存储库包含Apple的.DS_Store文件格式的解析器。 ./samples/目录中包含一个CTF格式的示例文件,您可以使用python3 main.py ./samples/.DS_Store.ctf尝试解析器。 这是我的博客文章,试图...

    DS2100N_DS2400N Reference Manual.pdf

    根据提供的文件信息,可以看出这份手册主要针对的是DS2100N和DS2400N两款设备,它们属于计算机视觉领域的产品。接下来,我们将基于这些信息深入挖掘相关的知识点。 ### 一、产品概述 #### 1.1 产品描述 DS2100N与...

    .3ds模型解析源码

    是一个老外写的,解析.3ds文件,并进行渲染,用opengl做的,可以直接运行,还是不错,可以用来了解.3ds 模型结构

    3DS格式详解及解析源代码

    文件包括: 3ds Format.doc 3DS读取研究.doc 从3DS文件中导入网格数据.doc 源码: 一个完善的读取3DS文件例子.rar 3DS+File+Loader.rar 一款3D Max插件,导出.X文件PandaDirectXMaxExporter.rar

    ds_store-用于Rust的.DS_Store解析器-Rust开发

    生锈的.DS_Store解析器获取库! 在您的Cargo.toml文件中添加类似的内容:[dependencies] ds_store =“ 0.2”用法extern crate ds_store生锈的.DS_Store解析器获取库! 在您的Cargo.toml文件中添加类似的内容:...

    Python-这是一个DSStore文件泄漏利用脚本

    这个库提供了读取和解析.DS_Store文件的功能,可以提取出其中包含的文件路径和属性。例如,以下代码片段展示了如何使用pydsstore库读取.DS_Store文件并获取其中的URL信息: ```python from pydsstore import DS...

    51单片机与DS18B20解析.ppt

    51单片机与DS18B20解析.ppt该文档详细且完整,值得借鉴下载使用,欢迎下载使用,有问题可以第一时间联系作者~

    3DS文件格式分析中文版及解析源代码

    3DS文件格式分析中文版及解析源代码 简介: 1、读取规则 3ds文件的读取规则如下: 字节:直接读取; 字:先读低位字节,后读高位字节,如ed 3c读出后的字为3c ed; 双字:先读低位字,后读高位字,如ed 3c 25 43读出...

    DS_Store 文件泄露

    是一个 .DS_Store 文件泄漏利用脚本,它解析.DS_Store文件并递归地下载文件到本地。 .DS_Store是Mac下Finder用来保存如何展示文件/文件夹 的数据文件(即文件夹的显示属性的,和比文件图标的摆放位置),每个文件夹...

    DS18B20或DS2401搜索ROM 稳定不掉 .rar

    标题中的“DS18B20或DS2401搜索ROM 稳定不掉 .rar”指的是一个关于微控制器编程的项目,涉及到两个特定的数字温度传感器:DS18B20和DS2401。这些传感器通常用于各种环境监控应用,如家庭自动化、温室控制和工业设备...

    canopen协议全套DS301,DS302,DS303,DS306,DS401,DS402,EDS

    本套资料包含了DS301、DS302、DS303、DS306、DS401、DS402以及EDS等关键规范,这些规范详细定义了CANopen网络的结构、功能和行为。 DS301是CANopen的基本规范,它定义了网络层和应用层的协议,包括对象字典、通信...

    3DS文件结构的解析和程序

    解析3DS文件需要对二进制文件处理和数据结构有深入的理解,同时,利用OpenGL或其他图形库来呈现这些信息是实现3D模型在应用程序中显示的关键。随着技术的发展,对3DS格式的支持和解析工具也在不断进步和完善。

    DS918.zip DS918.zip DS918.zip

    标题中的"DS918.zip DS918.zip DS918.zip"表明这是一个与DS918设备相关的压缩文件,可能包含多个版本或更新的软件包。描述中的信息重复了标题,暗示着可能是在强调文件的重要性和重复性,或者可能是上传时的误操作。...

Global site tag (gtag.js) - Google Analytics