OSGi Bundle安装Bootstrapping

时间:2014-05-11 14:27:04

标签: osgi

我正在阅读" OGSi in Action"在哪里做了一个有趣的评论:

"模块层使用bundle中的元数据来确保在使用它们之前满足所有依赖项。当你想要使用捆绑包时,这种共生关系会产生鸡与蛋的情况;使用捆绑包你必须安装它,但要 安装一个bundle你必须有一个bundle上下文,它只提供给bundle。"

这本书在解释捆绑依赖性解析方面做了很长的篇幅,但是鸡蛋和鸡蛋#34;上面描述的场景还没有真正进一步探讨。要安装捆绑包,需要BundleContext,它仅提供给捆绑包。那么谁创造了第一个" bootstrapping"捆绑?这是否包含在" shell"提供的(使用packageAdmin?)? PackageAdmin有 捆绑getBundle(Class clazz);

和Bundle可以提供BundleContext,但必须首先安装bundle ...等等!! 这是如何工作的?

2 个答案:

答案 0 :(得分:1)

请参阅Framework Launching API,它为启动器提供了对系统包的Bundle Context的访问权限,以安装“第一个”包。

答案 1 :(得分:0)

来自 Bundle.getBundleContext()的javadoc:

  

如果此捆绑包未处于STARTING,ACTIVE或STOPPING状态或   这个包是一个片段包,然后这个包没有效   BundleContext的。如果此包没有,则此方法将返回null   有效的BundleContext。

我不知道这本书的作者在想什么。如果以编程方式安装捆绑包,则通过其他捆绑包的捆绑上下文安装它。

尽管如此,我认为这一段是错误的。这个"鸡肉和鸡蛋"在系统捆绑的情况下可以提出哲学问题。但是,我不认为回答这个不必要的问题会让想要开始使用OSGi的读者有更好的理解。