karaf分析
程序员文章站
2022-05-26 23:19:03
...
从四个方面对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集的部署描述符,配置文件如下所示:
<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实现,它的实现方法如下所示:
- 从配置文件中得到OSGi实现jar包的相对路径
- 利用反射机制将此jar包加入到当前ClassLoader
- 读取/META-INF/services/org.osgi.framework.launch.FrameworkFactory文件以得到FrameworkFactory的实现类名
- 通过反射机制将此类实例化后创建Framework实例并启动