《深入理解OSGi:Equinox原理、应用与最佳实践》一3.1 Bundle标识

简介: 本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第3章,第3.1节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.1 Bundle标识

在模块层的讲解中,笔者介绍过Bundle的唯一标识是由Bundle-SymbolicName和Bundle-Version标记共同构成的。对于生命周期层,我们依然可以采用Bundle-SymbolicName和Bundle-Version标记来确定唯一的Bundle。不过,基于API使用方便的考虑,在运行期还可以采用其他Bundle标识进行定位,包括:
Bundle ID(Bundle Identifier)。Bundle ID是运行期最常用的标识符,尤其是在Equinox Console的命令中。它是由OSGi框架自动分配的一个长整型数字,在Bundle整个生命周期内(包括Bundle更新、卸载之后)都不会改变,甚至在OSGi框架重启后都能保留下来。Bundle ID是在Bundle安装过程中由OSGi框架根据Bundle安装时间的先后次序,由小到大进行分配的。在代码中可以通过Bundle接口的getBundleId ()方法来获取当前Bundle的ID。
Bundle位置(Bundle Location)。Bundle位置是OSGi容器在Bundle安装过程中分配给Bundle的定位字符串。这个字符串通常是该Bundle的JAR文件地址,但是这并不是强制性的。在一个OSGi容器中,每个Bundle的定位字符串都必须是唯一的,即使Bundle更新时改变了JAR文件的路径,也不会修改这个定位字符串,所以它可以唯一确定一个Bundle。在代码中我们可以通过Bundle接口的getLocation()方法来获取一个Bundle的定位字符串。
Bundle符号名称(Bundle Symbolic Name)。前面介绍过,Bundle的符号名称由开发人员设定,保存于Bundle元数据信息之中。它是静态的信息,在Bundle打包发布的那一刻它就被确定下来,不会因使用了不同的OSGi框架而有所不同(前面的Bundle ID和Bundle Location是由OSGi框架所决定的)。Bundle的版本与符号名称一起可以唯一定位一个Bundle,在代码中可以通过Bundle接口的getSymbolicName()方法获取当前Bundle的符号名称,通过getVersion()方法获取Bundle的版本号。
我们可以写一小段简单的代码,在Equinox框架中运行查看这3个唯一标识,示例如下:

System.out.println("Location:" + bundleContext.getBundle().getLocation());
System.out.println("ID:" + bundleContext.getBundle().getBundleId());
System.out.println("SymbolicName:" + bundleContext.getBundle().getSymbolicName());

输出结果为:

Location: initial@reference:file:../WorkSpaces/equinox/BundleA/
ID: 1
SymbolicName: BundleA
相关文章
|
Android开发
【Android 插件化】VirtualApp 接入 ( 在 VirtualApp 工程下创建 Module | 添加依赖 | 启动 VirtualApp 插件引擎 )(二)
【Android 插件化】VirtualApp 接入 ( 在 VirtualApp 工程下创建 Module | 添加依赖 | 启动 VirtualApp 插件引擎 )(二)
173 0
【Android 插件化】VirtualApp 接入 ( 在 VirtualApp 工程下创建 Module | 添加依赖 | 启动 VirtualApp 插件引擎 )(二)
|
Android开发
【Android 插件化】VirtualApp 接入 ( 在 VirtualApp 工程下创建 Module | 添加依赖 | 启动 VirtualApp 插件引擎 )(一)
【Android 插件化】VirtualApp 接入 ( 在 VirtualApp 工程下创建 Module | 添加依赖 | 启动 VirtualApp 插件引擎 )(一)
135 0
【Android 插件化】VirtualApp 接入 ( 在 VirtualApp 工程下创建 Module | 添加依赖 | 启动 VirtualApp 插件引擎 )(一)
|
容器
《深入理解OSGi:Equinox原理、应用与最佳实践》一3.6 Bundle上下文
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第3章,第3.6节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1175 0
|
Java 容器
《深入理解OSGi:Equinox原理、应用与最佳实践》一3.2 Bundle状态及转换
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第3章,第3.2节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1733 0
《深入理解OSGi:Equinox原理、应用与最佳实践》一3.5 系统Bundle
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第3章,第3.5节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1192 0
《深入理解OSGi:Equinox原理、应用与最佳实践》一2.2 Bundle
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第2章,第2.2节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1396 0
|
Java Spring 容器
《深入理解OSGi:Equinox原理、应用与最佳实践》一2.4 Bundle的组织与依赖
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第2章,第2.4节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1403 0
|
数据可视化 Java API
《深入理解OSGi:Equinox原理、应用与最佳实践》一2.3 描述元数据
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第2章,第2.3节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1348 0