搜索

1.4. OSGi 服务

download PDF

1.4.1. 概述

OSGi 服务是一个 Java 类或服务接口,其服务属性定义为名称/值对。服务属性区分有同一服务接口的服务提供程序。

OSGi 服务由其服务接口定义语义,它作为服务对象实施。服务的功能由它实施的接口定义。因此,不同的应用程序可以实施相同的服务。

服务接口允许捆绑包通过绑定接口而不是实现交互。服务接口应尽可能少地指定一些实施详情。

1.4.2. OSGi 服务 registry

在 OSGi 框架中,服务层使用发布、查找和绑定服务模型提供 第 1.5 节 “OSGi 捆绑包” 与所含组件之间的通信。服务层包含一个服务 registry,其中:

  • 服务提供商在框架中注册服务,供其他捆绑包使用
  • Service requesters 查找服务并绑定到服务供应商

服务归所有,在捆绑包内运行。捆绑包在一个或多个 Java 接口下将服务的实施注册到框架服务 registry。因此,该服务的功能可供框架控制下的其他捆绑包使用,其他捆绑包可以查找并使用该服务。使用 Java 接口和服务属性执行查找。

每个捆绑包都可以使用其接口及其属性的完全限定名称在服务注册表中注册多个服务。捆绑包使用带 LDAP 语法的名称和属性来查询服务 registry。

捆绑包负责运行时服务依赖关系管理活动,包括发布、发现和绑定。捆绑包还可适应与捆绑包绑定的服务动态可用性(arrival 或 departure)带来的变化。

事件通知

服务接口由捆绑包创建的对象实施。捆绑包可以:

  • 注册服务
  • 搜索服务
  • 当其注册状态更改时接收通知

OSGi 框架提供了事件通知机制,因此服务请求者可以在服务 registry 中的更改时收到通知事件。这些更改包括发布或检索特定服务以及何时注册、修改或取消注册服务。

服务调用模型

当捆绑包想要使用服务时,它会查找该服务并以普通 Java 调用形式调用 Java 对象。因此,服务上的调用是同步的,并在同一线程中发生。您可以使用回调进行更异步处理。参数作为 Java 对象引用传递。对于 XML,不需要 marshall 或中间规范格式。OSGi 为服务不可用问题提供了解决方案。

OSGi 框架服务

除您自己的服务外,OSOS 框架还提供以下可选服务来管理框架的操作:

  • 软件包管理服务- 允许管理代理通过检查共享软件包的状态来定义用于管理 Java 软件包共享的策略。它还允许管理代理刷新软件包,并根据需要停止和重启捆绑包。此服务使管理代理可以在卸载或更新捆绑包时对任何共享软件包做出决定。

    该服务还提供刷新从上次刷新后删除或更新的软件包,并明确解析特定捆绑包的方法。此服务也可以在运行时跟踪捆绑包之间的依赖关系,允许您查看哪些捆绑包会受到升级的影响。

  • 启动级别服务- 允许管理代理控制捆绑包的启动和停止顺序。该服务为每个捆绑包分配一个启动级别。管理代理可以修改捆绑包的启动级别,并设置框架的活跃启动级别,这将启动并停止适当的捆绑包。只有起始级别低于(或等于)的捆绑包,这个活跃的启动级别可以活跃。
  • URL 处理程序服务- 动态地使用 URL 方案和内容处理程序扩展 Java 运行时,支持任何组件提供额外的 URL 处理程序。
  • 权限管理员服务- 启用 OSGi 框架管理代理以管理特定捆绑包的权限,并提供所有捆绑包的默认值。捆绑包可以具有一组用于验证是否有权执行特权代码的权限。您可以通过实时更改策略以及为新安装组件添加新策略来动态操作权限。策略文件用于控制可运行哪些捆绑包。
  • 条件权限管理员服务- 在检查权限时,使用权限扩展 Permission Admin 服务,可在特定条件为 true 或 false 时应用。这些条件决定了权限应用到的捆绑包选择。设置后会立即激活权限。

在 OSGi 服务 平台版本 4 规范中对 OSGi 框架服务进行详细介绍,请参阅 OSGi 联盟网页上 发布的 4 下载页面

OSGi Compendium 服务

除了 OSGi 框架服务外,OSOS 联盟还定义了一组可选的、标准化的编译服务。OSGi 编译服务为日志记录和首选项等任务提供 API。在 OSGi 联盟 Web 站点上 版本 4 下载页面 的 OSGi 服务平台 Service Compendium 中介绍了这些服务。

Configuration Admin compendium 服务类似于中央中心,可保留配置信息并将其分发给关注方。Configuration Admin 服务指定部署捆绑包的配置信息,并确保捆绑包在激活时接收这些数据。捆绑包的配置数据是一个名称值对列表。请参阅 第 1.2 节 “Apache Karaf 架构”

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.