Apache Karaf和OSGI Bundles

时间:2015-03-19 03:54:01

标签: osgi apache-felix apache-karaf osgi-bundle karaf

在Google上搜索了很多关于Apache Karaf之后,我知道它用于测试和构建OSGI包。我还没弄清楚如何处理Apache Karaf以及如何使用它 我也不太了解OSGI捆绑包的需求。

此外,我也想知道以下疑问的答案:

  1. 用简单的话说阿帕奇卡拉夫是什么意思?
  2. 它解决了什么目的?它可以用来解决日常问题 算法问题?
  3. 我在哪里可以找到关于Karaf的好教程问题
  4. Apache Karaf,Apache Felix和Apache有什么区别 Maven以及它们与OSGI有什么关系?

2 个答案:

答案 0 :(得分:5)

要了解Apache Karaf,您首先应该了解OSGi。

Java应用程序以Jar文件的形式部署为其工件。如果应用程序依赖于其他jar文件,那么这些jar文件必须存在于应用程序的类路径中。应用程序运行时,将根据需要加载和实例化所需的类。

如果您的应用程序部署在任何容器内(例如:像tomcat这样的Web服务器),则容器会遵循一些标准逻辑来加载或初始化您的应用程序。这涉及加载类。要求程序内引用的类必须存在于应用程序的类路径中(例如:war文件的web-inf目录)。 如果容器在战争中没有找到所需的类,它会查询应用程序的父类加载器以找到类文件。 因此,这种方式在使用普通的Java运行时时会出现多个分层类加载器。 这有一个问题,即根据部署的应用程序,多次加载相同的类。

欢迎来到OSGi。 在OSGi中,jar将被称为Bundle。 捆绑包看起来像一个jar,但在manifest.mf文件中有额外的标头。 标头提供有关捆绑包导出/导入的包的信息。 当您的应用程序想要使用任何库jar文件时,您会在manidest的Import-package标头中提到所需的包。当任何其他包想要在您的包中使用包时,您必须使用Export-package公开包报头中。

OSGi运行时查找此类标头并有效处理类加载。因此,一个类只使用它的jar的类加载器只加载一次,你将从烦人的ClassNotFoundExceptions中解救出来。

OSGi是规范。它有一个可以在manifest.mf中使用的标头列表。周期。

Apache Felix和Eclipse equinox是本规范实现的一小部分。

Apache Karaf是一个控制台。控制台有助于与任何应用程序交互。这里,应用程序是OSGi运行时,它是Apache Felix。 Karaf提供了许多与OSGi交互的命令。您可以使用其热部署功能在运行时将新捆绑包部署到OSGi(无需重新启动Karaf)。只需将bundle文件放在deploy文件夹中即可完成。

使用Karaf,您可以看到任何捆绑包暴露的服务和包。 Karaf提供了大量开箱即用的框架,如spring,jetty服务器,日志工具。

使用Karaf,您可以在运行时启动,停止任何捆绑。

因此,总而言之,Karaf只是OSGi运行时的控制台。

你可以编写任何普通的java程序并使用OSGi。您只需要使用bundle activator连接应用程序初始化逻辑。

Apache maven是一个构建工具。有了这个,你可以构建(准备jar工件)任何java项目。

在使用OSGi时,您需要遵循manifest.mf语法。应根据需要导出和导入包。为了帮助构建适当的manifest.mf,有一个''工具。此工具分析您的应用程序的类路径,并使用适当的清单准备最终的OSGi包。

Apache maven利用这个' bnd'带有maven-bundle-plugin的工具。 只需将此插件附加到项目的生命周期目标即可完成。 Maven会为你准备一个包。

答案 1 :(得分:4)

  1. Apache Karaf是一个OSGi容器,它带来运行OSGi-Bundles的基础设施(带有OSGi Manifest的std.Jar),因为Tomcat是一个Web容器,提供运行Web应用程序的基础架构。
  2. 不了解您的日常算法问题,但由于其OSGi性质,它解决了许多其他日常问题。为此,您最好先了解OSGi及其内容。简而言之:
    OSGi可以帮助您解决两个主要问题:高内聚和低耦合。 由于类加载器分离(它不是树的图形),因此可以运行同一工件的多个版本。
    由于服务注册表,它可以有一个类似于体系结构的插件,其中一个应用程序可以监听一个接口(服务)的多个实现
  3. 周围有很多,甚至书籍让你开始你只需要谷歌为它。或者看看Apache Karaf文档和相应的Articles
    • Apache maven:它是一个构建系统,可以在那里管理构建时的依赖关系。
    • Apache Felix:它是一个OSGi框架实现(如Eclipse Equinox)。
    • Apache Karaf:它是在一个OSGi容器中说的,解决了很多基础设施问题,比如:日志记录。易于部署,易于配置,以及更多。对于完整的堆栈,请查看documentation