【问题标题】:some doubts related to osgiosgi相关的一些疑惑
【发布时间】:2012-08-20 06:42:11
【问题描述】:

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

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

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

【问题讨论】:

  • 我保证我不会刻薄,但 OSGi 提供的功能仅在最佳实践 Java 架构的上下文中才有意义。 OSGi 是一种用于构建架构良好的 Java 应用程序的强大工具。如果没有这个目标和一组命令,模块化、组件生命周期和“JVM 中的 SOA”概念就没什么可看的了。
  • @chad:我认为你在那里做得很好 - 一点也不刻薄:)

标签: eclipse-plugin osgi


【解决方案1】:

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

下周,下周再回答。

【讨论】:

    【解决方案2】:

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

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

    这里很好地描述了 Equinox 的基础知识。

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:
          1. 没有。 JAR 是类的开放容器,不提供运行时封装。见http://www.slideshare.net/bjhargrave/why-osgi
          2. 动态意味着可以在 VM/OSGi 框架运行时更改包的生命周期。也就是说,您无需重新启动系统即可安装/启动/停止/更新/卸载包。
          3. 您想要执行这些操作来管理捆绑包的生命周期。不必以动态方式使用 OSGi。您可以将其用于模块化和服务,同时仅在启动框架之前预先安装捆绑包。

          【讨论】:

            猜你喜欢
            • 2015-02-04
            • 1970-01-01
            • 1970-01-01
            • 2015-06-07
            • 1970-01-01
            • 2022-01-21
            • 1970-01-01
            • 2012-01-29
            • 1970-01-01
            相关资源
            最近更新 更多