OSGi:Apache Felix 和 Apache Karaf 有啥区别?

Posted

技术标签:

【中文标题】OSGi:Apache Felix 和 Apache Karaf 有啥区别?【英文标题】:OSGi: What are the differences between Apache Felix and Apache Karaf?OSGi:Apache Felix 和 Apache Karaf 有什么区别? 【发布时间】:2010-12-09 09:17:00 【问题描述】:

Apache Karaf 是Apache Felix 的子项目。它被定义为“一个轻量级的 OSGi 容器”。

我不明白什么时候应该使用重量级,什么时候使用轻量级。他们的网站对此没有过多解释。

【问题讨论】:

【参考方案1】:

“轻量级 OSGi 容器”标签将 Karaf 与功能更丰富的 OSGi 容器进行对比,不是与 Felix。

引用 Guillaume Nodet(Karaf 的作者)from here:

Felix 只是 OSGi 核心运行时。 Karaf 通过添加其他功能(例如控制台、SSH 远程处理机制、文件部署器等)来提供基于 Felix 的“分发”。

在这个 Karaf 架构图中,Felix(或其他 OSGi 实现 - 目前还支持Equinox)是 OSGi 盒子,其他盒子是 Karaf 添加的功能:

因此,除非您有 Karaf 无法满足的特定需求(需要访问底层实现),否则使用它通常是有意义的,因为它提供了更多“开箱即用”。

【讨论】:

任何 OSGi 容器的一个很好的特性是您可以只选择您需要的包并将它们部署到您的容器中。所以我的建议是首先构建你的应用程序,然后选择你需要的东西。 “只需安装整个平台,因为它功能丰富”的建议听起来有点像回到巨大的 Java EE 应用程序服务器。现在我并不是说 Apache Karaf 有那么大,我只是在说明你可以而且应该只部署你真正需要的东西。 在我看来这个答案是不完整的,因为它没有提到在应用程序中嵌入 Felix 的用例(不需要使用诸如 Karaf 之类的容器)——例如提供插件能力 - 这是我对以下链接的解释。我错了吗? (我不是专家。)链接:felix.apache.org/documentation/subprojects/…【参考方案2】:

@马塞尔 Karaf 不像 Java EE 服务器那样单一或庞大。这是一个非常苗条和极简的实现。它是一个核心产品,除了基本的控制台、文件加载以便您可以实际读取配置文件等之外没有太多功能。它的最新 zip 文件是 19.1 MB。是的。小的。它可以轻松地在小型设备上运行并在嵌入式中工作。

您可能想到的更像是使用 Karaf 作为核心/内核的 ServiceMix。但它在其完整配置中包含 CXF、ActiveMQ、Camel 和其他库。即使这样,它们也有最小、中等和全尺寸。

真的,对于 99% 的项目,直接从 Felix 开始而不使用 Karaf 是没有意义的。

【讨论】:

【参考方案3】:

目前,有三种流行的开源 OSGi 容器:

  - Equinox. It is the modular Java runtime at the heart of the Eclipse IDE,
  - Knopflerfish, Is an open source implementation of the OSGi R3 and OSGi R4 specifications. 
  - Apache Felix. Is the open source OSGi container from the Apache Software Foundation.

http://www.javaworld.com/article/2077837/java-se/java-se-hello-osgi-part-1-bundles-for-beginners.html

Apache 项目维护一个名为 Felix 的通用 OSGi 容器。 这里用作 ServiceMix 和

ServiceMix 和 Karaf 的主要区别在于 ServiceMix 捆绑了一堆其他的集成组件——ActiveMQ 消息代理、Camel 路由引擎和其他一些东西

根据:http://kevinboone.net/osgitest.html

【讨论】:

以上是关于OSGi:Apache Felix 和 Apache Karaf 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

OSGi 容器 - Equinox 与 Apache Karaf 中的 Apache Felix

用于焊接 cdi 的 Apache felix 和 org.osgi - 违反约束

OSGi 捆绑包未启动:缺少要求 osgi.wiring.package; > &(osgi.wiring.package=org.apache.felix.dm)

在 Apache Felix OSGI 中安装和运行 Web 管理控制台

org.osgi.framework.storage.clean=onFirstInit 在 Apache Felix OSGi 实现的上下文中是啥意思?

Apache Felix 和 Apache Tomcat 有啥区别