2015-03-19 98 views
0

在Apache Karaf上搜索了很多东西之后,我了解到它用于测试和构建OSGI包。我还没弄清楚如何处理Apache Karaf以及如何使用它。 I也不太了解OSGI包的需求。Apache Karaf和OSGI Bundle

而且我也想知道答案的我下面疑惑:

  1. exacltly是什么阿帕奇karaf在简单的话?
  2. 它解决了什么目的?它可以用于解决日常的 算法问题吗?在Karaf
  3. 我在哪里可以找到好的教程的问题入手
  4. 是什么的Apache Karaf,Apache的菲利克斯和Apache Maven的 以及它们是如何与OSGI的区别?

回答

3
  1. 的Apache Karaf是OSGi容器将运行OSGi的捆绑(标准罐使用OSGi清单)的基础设施,Tomcat是一个Web容器使运行网络应用程序的基础设施。
  2. 不知道你的日常算法问题,但它解决了许多其他日常问题,因为它的OSGi本质。为此,你最好看看OSGi和它是关于什么的。简而言之:
    OSGi可以帮助您解决两个主要问题,即高内聚和低耦合。 由于类加载器分离(它是一个图形而不是树),可以运行相同工件的多个版本。
    由于服务注册表有可能有一个像体系结构的插件,其中一个应用程序可以监听一个接口(服务)的多个实现
  3. 有很多附件,甚至图书让你开始你只需要谷歌它。或者看看在Apache Karaf文件和相应的Articles
    • 的Apache Maven的:这是一个构建系统它的存在来管理您的依赖关系的构建时间。
    • Apache Felix:这是一个OSGi框架实现(如Eclipse Equinox)。
    • Apache Karaf:就像OSGi容器中说的那样,它解决了很多基础结构问题,例如:日志记录。易于部署,易于配置以及更多。再次完整的栈,看看在documentation
4

要了解的Apache Karaf,你应该先了解OSGi的。

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

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

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

OSGi运行时查找这样的头并有效地处理类加载。所以,一个类只会使用它的jar的类加载器加载一次,并且您将从恼人的ClassNotFoundExceptions中解救出来。

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

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

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

随着卡拉夫,你可以看到服务,包通过任何捆绑暴露。 Karaf提供了很多开箱即用的框架,比如spring,jetty server,logging utilities。

随着卡拉夫你可以启动,在运行时停止任何捆绑。总之,Karaf只是OSGi运行时的控制台。

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

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

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

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