4

我是 OSGI 框架的新手。我浏览了这些站点并阅读了有关 OSGI 框架的信息。坦白说,我什么都不懂。以下是我的疑惑

  1. OSGi 应该提供模块化。我们不能通过普通的罐子来实现模块化吗?
  2. OSGi 具有动态组件模型是什么意思?
  3. 捆绑包可以安装、启动、停止、更新等。为什么我们要安装捆绑包?为什么我们不能像访问其他普通 jar 一样直接访问?

我完全糊涂了。有人可以回答我吗?如果有可能也举一些例子。

4

5 回答 5

4
  1. 不,JAR 是类的开放容器,不提供运行时封装。见http://www.slideshare.net/bjhargrave/why-osgi
  2. 动态意味着可以在 VM/OSGi 框架运行时更改包的生命周期。也就是说,您无需重新启动系统即可安装/启动/停止/更新/卸载捆绑软件。
  3. 您想要做这些事情来管理捆绑包的生命周期。不必以动态方式使用 OSGi。您可以将其用于模块化和服务,同时仅在启动框架之前预先安装捆绑包。
于 2012-08-24T18:16:55.433 回答
4

我对模块的定义是一个封装单元(即它隐藏了内部细节),它通过契约(即一组预定义的可能交互)与其他模块通信。JAR 文件不是模块,因为它不具备这些属性。没有封装,所有内部实现细节都是可见的,可以从外部访问。没有合同,您只需将 JAR 文件放在类路径中,并希望它提供您想要的功能。

动态意味着可以在运行时安装、升级或卸载 OSGi 包(模块) 。这对于升级正在运行的系统或跨大型网络有效地部署软件非常有用。

必须安装捆绑包,因为在我们使用软件之前总是必须安装它。JAR 文件也必须安装!只是安装方式略有不同,即 JAR 文件被添加到类路径中,而捆绑包是使用install命令安装的(这也可以通过脚本编写或从 API 调用)。OSGi 让我们可以更好地控制这个过程。

于 2012-08-26T06:50:15.730 回答
3

我试图在 OSGi 博客中回答你的第一个问题:http: //blog.osgi.org/2013/08/dear-prudence-cant-we-achieve.html

下周,将回答下一个。

于 2013-08-26T14:07:54.580 回答
2

除了 Bundles 作为真正的模块这一点(在所有其他答案中都已处理)之外,还有一些其他特性使 OSGi 非常强大:

  1. 服务层使您能够在运行时动态连接您的对象。结合声明式服务,您将获得一个非常强大且灵活的编程模型,并具有IOC的所有优点。
  2. Extender Model提供了一种更高层次的IOC,可以为可扩展性创造巨大的收益。
于 2012-08-28T06:41:11.183 回答
1

阅读有关 OSGi 规范的实现可能会有所帮助。

如果您使用过 Eclipse,那么您已经体验过 OSGi 的一些优势,甚至可能不知道。

这是对 Equinox 基础知识的一个很好的描述。

http://www.vogella.com/articles/OSGi/article.html

于 2012-08-24T19:51:53.713 回答