当我开始做更多与 OSGi 相关的事情时,我相信我会理解其中的区别,但我认为这是一个很好的问题,因为我从几个快速的谷歌搜索中并不清楚。如果有人有一个清晰、简洁的答案……</p>
2 回答
一个不精确的类比:Equinox 是引擎,Virgo 是汽车。
Equinox 是来自 Eclipse 项目的运行时(替代实现包括 Felix(来自 Apache)和 Knopflerfish)。
Virgo 使用 Equinox 作为其核心,但提供了在生产中使用它所需的许多东西。Virgo 基本上是捐赠给 Eclipse Foundation 的 SpringSource dm Server 项目,所以它显然对 Spring 的所有东西都有强大的支持。存在许多类似的产品(Karaf (ServiceMix) 以及众多 Java EE 应用服务器)。
OSGi 运行时通常是一个非常小的(运行时)环境,仅足以启动/提供 OSGi 框架。像 Virgo 这样的产品以一致的、经过测试的方式提供常见的生产/企业功能,并且通常包括远程 shell 访问、Web 应用程序支持、安全性等。
您可以直接使用运行时,根据需要添加每个功能,但是虽然这对于资源受限的系统可能很有用,但通常需要付出很多努力才能获得很少的回报(当然除了教育之外)。
从技术上讲,Equinox 是 OSGi 框架,而 Virgo 是容器。容器位于框架之上并添加功能。与之竞争的技术是 Felix 和 Karaf,它们是 Apache 软件基金会 OSGi 框架 (Felix) 和容器 (Karaf)。ASF 产品与 Eclipse 基础产品之间的区别主要在于 Eclipse 产品是 OSGI 4.2 规范的参考实现。
Virgo“子系统”参考实现确实是对捆绑集的协调部署的重大改进。在 Karaf 中,他们使用“功能”部署机制。“子系统”和“功能”部署机制之间的主要区别在于,在子系统中,您可以隔离特定的库集并防止它们的包在定义的子系统之外使用。借助功能,其他库可以使用的所有包都可以在容器范围内使用。