如何根据其符号名称检索Bundle?

时间:2011-11-02 09:16:58

标签: java osgi

BundleContext的文档说它可以让你

  • 获取Framework中安装的软件包列表。
  • 获取捆绑包的Bundle对象。

但是,没有getBundle(String symbolicName)方法,只有getBundle(long id)(和不合适的getBundle(String location)。当然,可以调用getBundles()并迭代返回的数组,但有更好的方法吗?

2 个答案:

答案 0 :(得分:7)

我认为迭代getBundles()数组很好。也许它根本不存在,因为符号名称不能唯一地标识一个包。也许getBundles(String symbolicName) ...

来自OSGi服务平台核心规范,第4版,版本4.3:

  

3.6.2 Bundle-SymbolicName

     

Bundle-SymbolicName清单标头是必填标头。该   捆绑包符号名称和捆绑包版本标识唯一捆绑包。这个   并不总是暗示这对在框架中是独一无二的   在某些情况下,同一个捆绑包可以多次安装在   相同的框架,请参阅第89页的分发标识符。

推荐的第89页(实际上是第95页):

  

4.4.1捆绑标识符

     

[...]

     

尽管该对是唯一的,但可以安装相同的捆绑包   多次org.osgi.framework.bsnversion框架   启动属性设置为多个。

答案 1 :(得分:2)

我从未见过如何做到这一点的例子。但是有PackageAdmin服务,也许你想看看这个,但它似乎已被弃用了。替换包org.osgi.framework.wiring似乎没有提供这样的方法。

并澄清:你有一个Bundle实例的目的是什么?