欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

karaf分析

程序员文章站 2022-05-26 23:19:03
...

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

karaf涉及两个环境变量,分别为KARAF_HOME和KARAF_BASE,KARAF_HOME目录下存放的是启动karaf的必需文件,目录结构如下所示: karaf分析
            
    
    博客分类: OSGi osgikaraflog4jeclipsejava 
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集的部署描述符,配置文件如下所示:

 

<features>
    <repository>urn:r1</repository>
    <feature name="f1">
        <config name="c1">
            k=v
        </config>
        <bundle>b1</bundle>
        <bundle>b2</bundle>
    </feature>
    <feature name="f2">
        <feature>f1</feature>
        <bundle>b3</bundle>
    </feature>
</features>
 


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

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