6月17日是Apache Karaf作为Apache顶级项目。Karaf是个运行时包,包含了一个OSGi框架(Equinox或Felix)、一个命令shell(Felix Gogo)及默认情况下内置的大量实用工具。

虽然Equinox与Felix可以单独使用,但Karaf旨在结合这两个框架出色的OSGi功能,并且保证其开箱即用。比如说,它包含了一个可配置的日志系统(基于Log4J,但针对众多通用的日志系统进行了包装)、通过SSH实现的远程访问、通过ConfigAdmin(源代码位于etc目录中)的配置以及内建的JAAS支持。不仅如此,Karaf还安装了Pax URL的MVN协议,这样就可以从Maven中央仓库(在必要的情况下会自动将其包装为bundle)安装bundle了。

此外,Karaf还提出了特性的概念,所谓特性就是bundle的集合,能以组的形式安装到运行着的OSGi运行时当中。特性包含了对obr、jetty以及spring的支持,做到了开箱即用。这样,如果需要安装多个bundle,但这些bundle之间并没有严格的运行期依赖,那么这种支持就可以大大简化这种情况。

在迁移到Apache Felix项目中前Karaf是ServiceMix Kernel,并且最终成为了Apache的顶级项目。Karaf还加入到了其他框架当中,如Eclipse VirgoEclipseRT packages,提供了预先配置的框架与好用的OSGi bundle,这样在上手使用OSGi运行时时就会比以往更加简单。

http://felix.apache.org/downloads.cgi#framework

http://git.eclipse.org/c/equinox/rt.equinox.framework.git/commit/bundles/org.eclipse.osgi

Karaf作为一款成熟而且优秀的OSGi运行环境以及容器已经被诸多Apache项目作为基础容器,例如:Apache Geronimo, ApacheServiceMix, Fuse ESB,由此可见Karaf在性能,功能和稳定性上都是个不错的选择。

从四个方面对karf进行了分析,分别为karaf的环境变量、启动级别、karaf中出现的新概念和核心技术。

karaf涉及两个环境变量,分别为KARAF_HOME和KARAF_BASE,KARAF_HOME目录下存放的是启动karaf的必需文件,目录结构如下所示: 
lib目录中包含三个文件,分别为karaf.jar、karaf-client.jar和karaf-jaas-boot.jar,这些文件会缺省加入karaf的CLASSPATH中。
etc目录中主要包含了OSGi Framework的选择配置,如使用何种OSGi Framework实现。
system目录中包含了eclipse和felix实现的OSGi Framework实现jar包。

karaf拥有6个启动级别,分别为5、8、10、15、30、40。其启动顺序是先启动数字小的级别。

  • 5级,包含了符合OSGi URL Handlers Service Specification(OSGi Core规范中第11章)的mvn协议和wrap协议。
  • 8级,包含了日志适配器(包含log4j,slf4j,commons-logging等)和日志服务。
  • 10级,包含了规范API、配置管理服务(104)、用户偏好服务(106)。
  • 15级,包含了热部署器。
  • 30级,包含了GShell、Spring DM、JMX等。
  • 40级,包含了GShell的启动器,运行至此级别时GShell转换为可用状态。

karaf设置了两个缺省级别,分别为60和100,60是指当有外部应用部署至karaf时,karaf将会把此应用的启动级别设置为60;100是指karaf启动时会缺省启动到级别100,即100以下的所有bundle都会被启动。 
karaf中引用了feature的概念。feature是符合某个功能特性的bundle集的部署描述符,配置文件如下所示:

  1. <features>
  2. <repository>urn:r1</repository>
  3. <feature name="f1">
  4. <config name="c1">
  5. k=v
  6. </config>
  7. <bundle>b1</bundle>
  8. <bundle>b2</bundle>
  9. </feature>
  10. <feature name="f2">
  11. <feature>f1</feature>
  12. <bundle>b3</bundle>
  13. </feature>
  14. </features>

krarf可以静态的切换OSGi Framework实现,它的实现方法如下所示:

    1. 从配置文件中得到OSGi实现jar包的相对路径
    2. 利用反射机制将此jar包加入到当前ClassLoader
    3. 读取/META-INF/services/org.osgi.framework.launch.FrameworkFactory文件以得到FrameworkFactory的实现类名
    4. 通过反射机制将此类实例化后创建Framework实例并启动

Karaf 依赖equinox and felix,karaf 本Apache的很多项目作为基础框架的更多相关文章

  1. apache基金会开源项目简介

    apache基金会开源项目简介   项目名称 描述 HTTP Server 互联网上首屈一指的HTTP服务器 Abdera Apache  Abdera项目的目标是建立一个功能完备,高效能的IETF ...

  2. Apache部署django项目

    在此之前,我们一直使用django的manage.py 的runserver 命令来运行django应用,但这只是我们的开发环境,当项目真正部署上线的时候这做就不可行了,必须将我们的项目部署到特定的w ...

  3. maven也是apache下的项目

    maven也是apache下的项目,你看maven官网了,域名都在Apache下

  4. 为什么Nginx的性能要比Apache高很多?

    为什么Nginx的性能要比Apache高很多? 这得益于Nginx使用了最新的epoll(Linux 2.6内核)和kqueue(freebsd)网络I/O模型,而Apache则使用的是传统的sele ...

  5. LAMP环境的搭建(四)----Apache下部署项目

    根据前文完成了LAMP基本环境的安装,那么接下来就是部署线上的环境了. yum 安装的apache 目录存在于  /etc/httpd apache最重要的文件就是 httpd.conf.  目录再 ...

  6. 依赖注入(DI)与控制反转(IOC)基础知识

    依赖注入(DI)与控制反转(IOC)基础知识 一.什么是依赖注入? 依赖注入英文是Dependcy Injection简写DI,依赖注入会将所依赖的对象自动交由目标对象使用,而不是让对象自己去获取. ...

  7. 用Apache Ivy实现项目里的依赖管理

    Apache Ivy是一个管理项目依赖的工具. 它与Maven  Apache Maven 构建管理和项目管理工具已经吸引了 Java 开发人员的注意.Maven 引入了 JAR 文件公共存储库的概念 ...

  8. 用Apache Ivy实现项目里的依赖管理 分类: C_OHTERS 2014-07-06 18:11 564人阅读 评论(0) 收藏

    Apache Ivy是一个管理项目依赖的工具. 它与Maven  Apache Maven 构建管理和项目管理工具已经吸引了 Java 开发人员的注意.Maven 引入了 JAR 文件公共存储库的概念 ...

  9. ubuntu下配置Apache+mod_wsgi+Django项目(个人测试)

    经过了一个星期的摸索,查找资料以及实验,我搭建的环境基本能用(还有就是Django后台的静态文件加载的问题) 这里面只是介绍一下我的过程,因为对应Apache还不是很熟练,特别是配置文件.只能供大家参 ...

随机推荐

  1. ASP.NET MVC 中使用 AjaxFileUpload 插件时,上传图片后不能显示(预览)

    AjaxFileUpload 插件是一个很简洁很好用的上传文件的插件,可以实现异步上传功能,但是在 ASP.NET MVC中使用时,会出现上传图片后不能正确的显示的问题,经过仔细排查,终于找到原因,解 ...

  2. Ov

  3. dell N1500 安全配置

    http://www.dell.com/Support/Article/us/en/19/HOW10832 Setting a management IP address A reachable IP ...

  4. WinDbg调试CPU占用高的问题 试验+实战 《第七篇》

    一.High CPU试验 1.示例代码 static void Main(string[] args) { Console.Clear(); Console.WriteLine("到命令行下 ...

  5. JS与JQ倒计时的写法

    页面需要制作一个倒计时的功能:然后度娘了一遍,找到两种写法,原生JS与JQ 的,经过测试原生JS在IE可能会有不刷新的现象所以结合了一个大神的JQ写法修改好了一个. 原生JS写法: HTML: < ...

  6. ios开发经典语录锦集

    原文链接: iPhone开发经典语录集锦 前言:iPhone是个极具艺术性的平台,相信大家在开发过程中一定有很多感触,希望能写出来一起交流,所以开了这个帖子,以后还会维护. 如果大家和我一样有感触的话 ...

  7. ASP.NET的SEO:目录

    ASP.NET的SEO:基础知识 ASP.NET的SEO:Global.asax和HttpModule中的RewritePath()方法--友好的URL ASP.NET的SEO:正则表达式 ASP.N ...

  8. 十、Struts2结果集

      十.Struts2结果集                         1.Struts.xml配置文件 result元素:指定动作类的动作方法执行完后的结果视图. 属性: name:字符串,与 ...

  9. BF算法和KMP算法(javascript版本)

    var str="abcbababcbababcbababcabcbaba";//主串 var ts="bcabcbaba";//子串 function BF( ...

  10. pm2 开机自启动如何弄?

    1.使用pm2启动node :# pm2 start /home/wwwroot/web.js --watch 2.dump这些进程列表:# pm2 save 3.生成自启动脚本:# pm2 star ...