【问题标题】:What is OSGi and what are some examples of its use?什么是 OSGi,有哪些使用示例?
【发布时间】:2011-06-02 12:09:03
【问题描述】:

我刚刚开始听说使用了 OSGi 这个术语(在阅读有关 GlassFish 和 Spring 等常见 Java EE 容器的教程时),但是我一直无法找到一个简单、直接的,对于像我这样的企业新手会理解的 OSGi 是什么的通俗易懂的解释。

有人可以提供这样一个假的解释吗?也许有一些例子甚至代码摘录?

谢谢!

【问题讨论】:

    标签: terminology osgi


    【解决方案1】:

    简单地说,OSGi 是 Java 的动态模块系统。它定义了安装、卸载、更新、启动和停止模块的方法。这些模块称为捆绑包,但最简单的形式实际上是带有特殊清单的 Java jar 文件。无需停止或重新启动 Java VM,即可安装、卸载模块等。

    OSGi 框架以安全的方式管理所描述的包的生命周期和包之间的依赖关系。一个包需要说明它导出和导入哪些 Java 包。 import 和 export 语句可以标注版本信息,这样你甚至可以在同一个 Java VM 中拥有同一个包的多个版本。

    OSGi 联盟是指定 OSGi 框架和许多附带服务的组织,例如用于管理配置数据、设备访问等。

    这只是一个非常基本的概述。 OSGi 远不止这些。 请查看https://www.osgi.org/resources/architecture/(OSGi 架构介绍)和https://www.osgi.org/resources/where-to-start/(OSGi 联盟推荐的大量链接和进一步阅读)。

    2021 年 7 月更新
    截至 2021 年,OSGi 联盟将所有资源和工作转移到了 Eclipse 基金会。它继续在新成立的 OSGi 工作组中工作。

    【讨论】:

    • 哇!!这是问题的最佳答案。谢谢
    • 我看到的关于 OSGI 的最简单的解释,应该在 osgi.org 的首页上,这样人们就可以在 2 分钟内了解通常需要一天的时间。当项目在官方网站上有营销页面和 PDF 页面时,这是令人沮丧的,而要理解我们只需要这样一个很好的总结。谢谢你!
    【解决方案2】:

    以一些反对票为代价;-),我想用我自己的话回答这个问题(以便我可以根据我的理解得到纠正)。

    我们将应用程序构建为一组模块,每个模块在功能上相互结合,并与其他模块松散耦合。正如您可能已经知道的那样,这具有许多优点。随着时间的推移,模​​块化单元已经从函数改进到类,再到包再到部署单元(如 Java 中的 jar 和 .Net 中的程序集)。但是所有这一切都只是在开发期间,一旦部署了应用程序(这是一组模块),服务器仍然将其视为一个巨大的单体应用程序,即在运行时不保留逻辑边界。除了other benefits outlined here

    ,OSGi 在开发和运行时明确了这些界限

    我推荐这本优秀的免费书来帮助你入门OSGi in Practice

    如果您在 Java 平台上工作,请查看此演示文稿:Why Have The OSGi Specifications Been Based On Java™ Technology?

    【讨论】:

    • 感谢 akr 和 Pangea 抽出时间来解决这个问题。我想我开始“明白”了。听起来 OSGi 是一个用于制作 JAR PnP 的强大框架——是吗?!?最后一件事-有人可以为我提供一些捆绑包(“服务”)的具体示例以及它们可能会做什么吗?谢谢大家!
    • @Zac 您可以在this tutorial 中找到一些关于 OSGi、如何使用捆绑软件以及如何创建或使用服务的信息。在我看来这是相当不错的。
    • 它是在今天的产品中使用,还是主要是正在开发和推出阶段的标准?我看到了与主要应用程序服务器相关的术语(例如 Weblogic)——他们是在使用它还是仍处于测试阶段?
    猜你喜欢
    • 1970-01-01
    • 2011-12-21
    • 2012-01-14
    • 1970-01-01
    • 2011-05-04
    • 2019-03-13
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    相关资源
    最近更新 更多