OSGI开发(一)

OSGi(Open Service Gateway Initiative)技术是Java动态化模块化系统的一系列规范。
OSGI 优势很多,比如,可以动态地安装、卸载、启动、停止不同的应用模块,而不需要重启容器。你的应用可以在同一时刻跑多个同一个模块的实例。
缺点也比较明显,osgi的入门门槛在java众多技术中算是比较高的,学习成本相对高。通俗来讲,就是osgi框架过于复杂,不好入手。所以,项目中引入osgi并不一定会让开发变得容易。但是,在系统规模变大后却会成为开发效率的强大推动力。

为了加强理解和总结所学,写了关于osgi的一部分教程,后续如果加深了理解,再继续补充。
在这里先分享一下我大致的学习历程:
1. 学习osgi入门概念,推荐:不可错过的OSGi入门学习资源
2. 下载apache-felix,选择一个镜像并下载其中的apache-felix-karaf-1.6.0.zip
3. 过一遍apache的教程,并且实际操作这9个Example
4. 下载并学习osgi规范,osgi.core-4.3.0.pdf下载osgi.cmpn-4.3.0.pdf

下面看看基于apache-felix框架的实例Example1,通过实例来了解osgi开发的必备知识。

Example1

Bundle的元数据信息定义在manifest.mf ,这个文件是必须的。如下图所示:
这里写图片描述
(1) Bundle-Name: 定义该 Bundle 的名称,注意该名称只供人工阅读
(2) Bundle-Description: 对该Bundle的描述
(3) Bundle-Vendor: 给出该 Bundle 的发行者信息
(4) Bundle-Version:标记该Bundle的版本信息
(5) Bundle-Activator: 在Bundle启动和停止的时候会去 调用该类的start()和stop()方法
(6) Import-Package: org.osgi.framework
需要注意的是:确保manifest.mf 结束后回车,否则最后一行将被忽略。

此外,还有一些其他常用的标记,这里不一一累述,详情参见文档
osgi规范https://osgi.org/download/r4v43/osgi.core-4.3.0.pdf

接下来,创建一个文件Activator.java,
创建一个Activator类实现BundleActivator, ServiceListener接口。
在start方法中将自身添加进监听列表context.addServiceListener(this);
实现serviceChanged来监听事件的变化。
其中ServiceEvent有四种值,分别为:

  • MODIFIED :当注册的服务被改动时
  • MODIFIED_ENDMATCH:注册服务的属性已经修改,新的属性不再匹配侦听器的过滤器
  • REGISTERED :当服务被注册时
  • UNREGISTERING :当服务被卸载

这里写图片描述

进入karaf控制台,执行如下命令,就会安装了该Bundle
这里写图片描述
执行list,得到如下图所示。这里可以看到我们在manifest.mf文件中定义的
Bundle-Name:Service listener example,此时bundle的状态为install
这里写图片描述
再启动该bundle,会调用我们定义的start()方法。
这里写图片描述
执行list,得到如下,此时bundle的状态改变为Active
这里写图片描述
执行stop,会调用stop方法
这里写图片描述
再执行list查看,发现此时的状态变成了resolved
这里写图片描述
执行uninstall,再list查看,发现该bundle的相关信息已经查不到,说明被卸载了。
这里写图片描述

前面步骤主要展示了osgi的生命周期,结合下图理解。
这里写图片描述

下一节讲如何注册服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值