OSGi R4服务平台核心规范 :第六章 Framework API(1)

 由  满江红开放技术研究组织 发布

版权说明

本文档版权归原作译者所有。 在免费、且无任何附加条件的前提下,可在网络媒体中自由传播。

如需部分或者全文引用,请事先征求作译者意见。

如果本文对您有些许帮助,表达谢意的最好方式,是将您发现的问题和文档改进意见及时反馈给作者。当然,倘若有时间和能力,能为技术群体无偿贡献自己的所学为最好的回馈。

本文档可从http://www.redsaga.com获取最新更新信息

6.1. org.osgi.framework

OSGi框架包。规范版本:1.3。

如果bundle需要使用这些包,那么在它的manifest中的Import-Package必须要列出使用的包名称,例如:

Import-Package: org.osgi.framework;version=1.3

6.1.1. 要点

  • AdminPermission – 描述调用者对bundle的管理操作或者获取信息的权限。[p.120]
  • AllServiceListener – 服务事件监听器。[p.123]
  • Bundle – 框架中已经安装的bundle。[p.123]
  • BundleActivator – bundle启动和停止的定制化。[p.136]
  • BundleContext – 框架中bundle执行的上下文环境。[p.137]
  • BundleEvent – 框架描述bundle的生命周期改变的事件。[p.148]
  • BundleException – 描述bundle的生命周期中发生的意外的框架异常。[p.149]
  • BundleListener – 描述bundle事件监听器。[p.150]
  • BundlePermission – 描述bundle访问或者提供一个bundle,接收或者附加片断的权限。 [p.151]
  • Configurable – 支持一个配置对象。[p.152]
  • Constants – 定义了OSGi环境中属性名称、服务属性名称和Manifest头标属性名称的标准。[p.153]
  • Filter – 基于RFC 1960*based的过滤器。[p.167]
  • FrameworkEvent – 框架产生的事件。[p.168]
  • FrameworkListener – 框架事件的监听器。[p.170]
  • FrameworkUtil – 框架的实用类。[p.170]
  • InvalidSyntaxException – 一种框架异常。[p.171]
  • PackagePermission – bundle导入或者导出包的权限。[p.172]
  • ServiceEvent – 描述服务的生命周期改变的来自框架的事件。[p.173]
  • ServiceFactory – 在OSGi环境下允许服务定制的方法。[p.175]
  • ServiceListener –服务事件监听器。[p.176]
  • ServicePermission – 描述了bundle注册或者获取一个服务的权限。[p.176]
  • ServiceReference – 对一个服务的引用。[p.177]
  • ServiceRegistration – 一个已经注册的服务。[p.179]
  • SynchronousBundleListener – 一个同步的bundle事件监听器。[p.180]
  • Version – bundle和包的版本标记。[p.181]

6.1.2. public final class AdminPermission extends BasicPermission

描述调用者对bundle进行特殊的管理操作或者是获取bundle敏感信息的权限。所有的操作权如下:

http://assets.osgi.com.cn/article/7289398/0.png

通配符“*”表示所有的操作。

权限描述是一个过滤器表达式。表达式具有以下参数描述:

  • signer – 用于给一个bundle签名特异名称链(Distinguished Name chain)。根据过滤表达式规则,在DN中不能匹配通配符,虽然在DN链的定义中可以匹配。
  • location – bundle的位置。
  • id – 指定bundle的bundle ID。
  • name – bundle的符号名称。

6.1.2.1. public static final String CLASS = “class”

class操作(值为“class”)
Since 1.3

6.1.2.2. public static final String EXECUTE = “execute

execute操作(值为“execute”)
Since 1.3

6.1.2.3. public static final String EXTENSIONLIFECYCLE = “extensionLifecycle”

extensionLifecycle操作(值为“extensionLifecycle”)
Since 1.3

6.1.2.4. public static final String LIFECYCLE = “lifecycle”

lifecycle操作(值为“lifecycle”)
Since 1.3

6.1.2.5. public static final String LISTENER = “listener”

listener操作(值为“listener”)
Since 1.3

6.1.2.6. public static final String METADATA = “metadata”

metadata操作(值为“metadata”)
Since 1.3

6.1.2.7. public static final String RESOLVE = “resolve”

resolve操作(值为“resolve”)
Since 1.3

6.1.2.8. public static final String RESOURCE = “resource”

resource操作(值为“resource”)
Since 1.3

6.1.2.9. public static final String STARTLEVEL = “startlevel”

startlevel操作(值为“startlevel”)
Since 1.3

6.1.2.8. public static final String RESOURCE = “resource”

resource操作(值为“resource”)
Since 1.3

6.1.2.10. public AdminPermission( )

创建一个匹配所有bundle的所有的操作的AdminPermission对象,等同于AdminPermission(”*”,”*”)

6.1.2.11. public AdminPermission( String filter, String actions )

filter 过滤器表达式,拥有键signer,location,id,和name。如果值为“*”那么可以匹配所有的bundle。
actions 操作,可以为:class, execute, extensionLifecycle, lifecycle, listener, metadata, resolve, resource或者startlevel。通配符“*”表示所有的操作。
创建一个新的AdminPermission对象。这个构造器只能用于创建一个即将检查的权限。

例如:



当在过滤表达式中使用signer ,那么signer的值不能为特殊的字符(’*’, ‘(’, ‘)’)。

如果参数值为null,则等同于“*”。

6.1.2.12. public AdminPermission( Bundle bundle, String actions )

bundle 一个bundle
actions class, execute, extensionLifecycle, lifecycle, listener, metadata, resolve, resource, startlevel
创建一个新的AdminPermission对象,由必须检测Permission对象的代码使用。
Since 1.3

6.1.2.13. public boolean equals( Object obj )

obj 使用这个对象来进行比较
确定两个AdminPermission对象是否相等
Returns 如果两个AdminPermission对象相等返回true,否则返回false

6.1.2.14. public String getActions( )

返回表示AdminPermission对象的操作的范式字符串。 通常返回的顺序如下: class, execute, extensionLifecycle, lifecycle, listener, metadata, resolve,resource, startlevel
Returns 表示AdminPermission对象操作的范式字符串。

6.1.2.15. public int hashCode( )

返回对象的哈希值
Returns 对象的哈希值

6.1.2.16. public boolean implies( Permission p )

p 询问的权限
确定对象是否蕴含了指定的权限。如果指定的Permission构建时没有关联到bundle,那么方法的调用会抛出异常。 如果指定权限是AdminPermission,并且满足以下条件:

* 这个AdminPermission对象的过滤器和指定Permission对象的bundle ID,bundle符号名称,bundle位置和bundle签名DN链匹配,或者

* 过滤器为“*”

而且满足条件:AdminPermission对象的操作中包括了指定的Permission对象的操作。那么返回true。

特例:如果指定的Permission对象通过使用“*”过滤器来构建,那么如果AdminPermission对象的过滤器是“*”而且它的操作中包含了指定Permission的操作。
Returns 如果AdminPermission对象中隐含指定Permission对象,那么返回true,否则返回false。
Throws RuntimeException – 如果指定Permission对象没有使用bundle来构建或者是使用了“*”

6.1.2.17. public PermissionCollection newPermissionCollection( )

返回一个适合于存储AdminPermission对象的PermissionCollection对象。
Returns 一个新的PermissionCollection对象。

6.1.3. public interface AllServiceListener extends ServiceListener

一个服务监听器。

AllServiceListener是一个监听器接口,bundle开发人员可以实现这个接口。

框架可以通过BundleContext.addServiceListener方法来注册一个AllServiceListener对象。当注册、修改或者正在处理取消注册一个服务,就会通过一个ServiceEvent对象来调用AllServiceListener对象。

发送给AllServiceListener对象的ServiceEvent对象是已经过滤了的,使用的过滤器是在注册监听器时指定的过滤器。如果Java运行环境支持权限控制,那么还有附加的过滤。只有当定义监听器的bundle具有适当ServicePermission权限来获得服务,其中获得服务是使用了至少一个注册服务的类,那么这样才会把ServiceEvent发送给监听器。

和普通的ServiceListener不一样的是,AllServiceListener对象接收所有的ServiceEvent对象,而不管来自监听器所在bundle的包是否等于来自注册服务bundle的包。这也就是说,如果在检索服务对象时,监听器不会广播服务对象到任何相关的服务接口。
See Also ServiceEvent[p.173] , ServicePermission[p.176]
Since 1.3
查看评论