【发布时间】:2011-06-02 12:09:03
【问题描述】:
我刚刚开始听说使用了 OSGi 这个术语(在阅读有关 GlassFish 和 Spring 等常见 Java EE 容器的教程时),但是我一直无法找到一个简单、直接的,对于像我这样的企业新手会理解的 OSGi 是什么的通俗易懂的解释。
有人可以提供这样一个假的解释吗?也许有一些例子甚至代码摘录?
谢谢!
【问题讨论】:
标签: terminology osgi
我刚刚开始听说使用了 OSGi 这个术语(在阅读有关 GlassFish 和 Spring 等常见 Java EE 容器的教程时),但是我一直无法找到一个简单、直接的,对于像我这样的企业新手会理解的 OSGi 是什么的通俗易懂的解释。
有人可以提供这样一个假的解释吗?也许有一些例子甚至代码摘录?
谢谢!
【问题讨论】:
标签: terminology osgi
简单地说,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 工作组中工作。
【讨论】:
以一些反对票为代价;-),我想用我自己的话回答这个问题(以便我可以根据我的理解得到纠正)。
我们将应用程序构建为一组模块,每个模块在功能上相互结合,并与其他模块松散耦合。正如您可能已经知道的那样,这具有许多优点。随着时间的推移,模块化单元已经从函数改进到类,再到包再到部署单元(如 Java 中的 jar 和 .Net 中的程序集)。但是所有这一切都只是在开发期间,一旦部署了应用程序(这是一组模块),服务器仍然将其视为一个巨大的单体应用程序,即在运行时不保留逻辑边界。除了other benefits outlined here
,OSGi 在开发和运行时明确了这些界限我推荐这本优秀的免费书来帮助你入门OSGi in Practice
如果您在 Java 平台上工作,请查看此演示文稿:Why Have The OSGi Specifications Been Based On Java™ Technology?
【讨论】: