OSGi热部署容器:Karaf的特性和使用配置

Apache Karaf是一个强大的OSGi容器。它为发布OSGi应用程序提供了支持。java

一个OSGi程序是由一系列OSGi bundles组成的。OSGi bundle 是一个在MANIFEST中带有附加元数据的jar文件。apache

在OSGi中,一个bundle能够依赖于其它的bundles。所以,大部分状况下,在部署一个OSGi应用程序以前,你须要先把这个应用程序须要的其它bundles部署上。缓存

Apache Karaf为咱们提供了一种简单、灵活的方式来配置和发布OSGi应用程序。在Karaf中,使用Apache Karaf feature来实现这种配置。ide

Feature的定义:模块化

a namea versiona optional description (eventually with a long description)a set of bundlesoptionally a set configurations or configuration filesoptionally a set of dependency featuresspa

当你install一个feature的时候,karaf 会install feature中所定义的所有的资源。它会自动地解析和install全部定义的bundles、配置文件以及它所依赖的其它的features(feature中还能够定义features)。设计

Features经过它自定义的XML标签来描述ip

安装好的features会保存在karaf的缓存(cache:在data目录下)中,这样你以前安的features资源在你重启karaf以后仍然会保留。若是你执行了clean并重启karaf或者删除了karaf cache,全部以前安的features资源就会丢失,你就须要再手动安装一遍。为了防止出现这种状况,你能够制定features为boot类型的。ssl

什么是boot features?一个boot feature会被karaf自动安装,即便它没有提早使用feature:install安装。这个配置在etc/org.apache.karaf.features.cfg文件中,文件中有两个属性被用来定义boot features。资源

http://baijiahao.baidu.com/s?id=1600246970563166864&wfr=spider&for=pc

 

Java模块化系统OSGi

https://www.tianmaying.com/tutorial/osgi-kickstart

OSGi中Bundle间的耦合:Export/Import Package与服务

OSGI经过不一样的classloader来加载不一样的bundle,达到隔离bundle的目的,咱们也提到经过Import/Export Package的方式来控制bundle之间“有限地”访问对方的类。

在OSGI里,bundle暴露本身的类(Export)或引用其余bundle的类(Import)的单位是package(就是每一个java代码文件最上头定义的Package),也就是对于bundle来讲,只能将整个package里的类暴露或引用进来,而不是对单个类做暴露或引用,因此,咱们在设计时,应考虑将需暴露出去的类放在一个或几个package里,而将需隐藏起来的类放在其余的package里。

相关文章
相关标签/搜索