karaf分析

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

karaf涉及两个环境变量,分别为KARAF_HOME和KARAF_BASE,KARAF_HOME目录下存放的是启动karaf的必需文件,目录结构如下所示: KARAF_HOME
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实例并启动

猜你喜欢

转载自marsvaadin.iteye.com/blog/1327800
今日推荐