我正在阅读" OGSi in Action"在哪里做了一个有趣的评论:
"模块层使用bundle中的元数据来确保在使用它们之前满足所有依赖项。当你想要使用捆绑包时,这种共生关系会产生鸡与蛋的情况;使用捆绑包你必须安装它,但要 安装一个bundle你必须有一个bundle上下文,它只提供给bundle。"
这本书在解释捆绑依赖性解析方面做了很长的篇幅,但是鸡蛋和鸡蛋#34;上面描述的场景还没有真正进一步探讨。要安装捆绑包,需要BundleContext,它仅提供给捆绑包。那么谁创造了第一个" bootstrapping"捆绑?这是否包含在" shell"提供的(使用packageAdmin?)? PackageAdmin有 捆绑getBundle(Class clazz);
和Bundle可以提供BundleContext,但必须首先安装bundle ...等等!! 这是如何工作的?
答案 0 :(得分:1)
请参阅Framework Launching API,它为启动器提供了对系统包的Bundle Context的访问权限,以安装“第一个”包。
答案 1 :(得分:0)
来自 Bundle.getBundleContext()的javadoc:
如果此捆绑包未处于STARTING,ACTIVE或STOPPING状态或 这个包是一个片段包,然后这个包没有效 BundleContext的。如果此包没有,则此方法将返回null 有效的BundleContext。
我不知道这本书的作者在想什么。如果以编程方式安装捆绑包,则通过其他捆绑包的捆绑上下文安装它。
尽管如此,我认为这一段是错误的。这个"鸡肉和鸡蛋"在系统捆绑的情况下可以提出哲学问题。但是,我不认为回答这个不必要的问题会让想要开始使用OSGi的读者有更好的理解。