Apache Karaf 和 OSGI 包

Apache Karaf and OSGI Bundles

在谷歌上搜索了很多 Apache Karaf 之后,我了解到它用于测试和构建 OSGI bundles.I 我仍然没有弄清楚 Apache Karaf 可以做什么以及如何使用它 我也不太明白对 OSGI 包的需求。

此外,我还想知道以下疑惑的答案:

  1. 简单来说,Apache karaf 到底是什么?
  2. 解决什么用途?可以用来解决日常问题吗 算法问题?
  3. 我在哪里可以找到关于 Karaf 的很好的教程问题
  4. Apache Karaf、Apache Felix 和 Apache 之间有什么区别 Maven 以及它们与 OSGI 有什么关系?
  1. Apache Karaf 是一个 OSGi 容器,为 运行 OSGi-Bundles(带 OSGi 清单的标准 Jar)提供了基础设施,因为 Tomcat 是一个 Web 容器,为 运行 提供了基础设施] 网络应用程序。
  2. 不知道您的日常算法问题,但由于它的 OSGi 特性,它解决了许多其他日常问题。为此,您最好看一下 OSGi 及其内容。简而言之:
    OSGi 可以帮助您解决两个主要问题,即高内聚和低耦合。 由于类加载器分离(它是图而不是树),可以 运行 同一工件的多个版本。
    由于服务注册表,可以有一个类似架构的插件,其中一个应用程序可以侦听一个接口(服务)的多个实现
  3. 周围有很多,甚至是入门书籍,您只需要 google 就可以了。或者看看 Apache Karaf 文档和相应的 Articles
    • Apache maven:这是一个构建系统,用于管理构建时的依赖项。
    • Apache Felix:它是一个 OSGi 框架实现(类似于 Eclipse Equinox)。
    • Apache Karaf:如 1 中所述。一个 OSGi 容器,解决了很多基础结构问题,例如:日志记录。易于部署、易于配置等等。再次查看完整堆栈,请查看 documentation

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

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

如果您的应用程序部署在任何容器内(例如:像 tomcat 这样的 Web 服务器),那么容器会遵循一些标准逻辑来加载或初始化您的应用程序。这涉及加载 classes。程序中引用的 classes 必须出现在应用程序的 class 路径中(例如:war 文件的 web-inf 目录)。 如果容器在 war 中找不到所需的 classes,它会参考应用程序的 parent classloader 来定位 class 文件。 因此,在使用正常 java 运行时时,这种方式会出现多个分层 classloader。 这有一个问题,即根据部署的应用程序多次加载相同的 class。

欢迎使用 OSGi。 在 OSGi 中,一个 jar 将被称为 Bundle。 一个 bundle 看起来像一个 jar,但在其 manifest.mf 文件中有额外的 headers。 headers 提供了有关捆绑包 exported/imported 哪些包的信息。 当您的应用程序想要使用任何库 jar 文件时,您在 manidest 的 Import-package header.When 中提到了所需的包,任何其​​他包想要在您的 bundl 中使用包,您必须使用 [= 公开包45=] header.

OSGi 运行时会查找此类 header 并有效地处理 class 加载。因此,class 将仅使用其 jar 的 classloader 加载一次,并且您将从恼人的 ClassNotFoundExceptions 中解脱出来。

OSGi 是规范。它有一个 header 的列表,可以在 manifest.mf 中使用。期间.

Apache Felix 和 Eclipse equinox 是该规范的少数实现。

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

使用 Karaf,您可以查看任何包公开的服务和包。 Karaf 提供了许多开箱即用的框架,如 spring、码头服务器、日志实用程序。

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

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

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

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

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

Apache maven 使用这个 'bnd' 工具及其 maven-bundle-plugin。 只需将此插件附加到项目的生命周期目标即可。 Maven 会为您准备一个包。