一、第一个OSGi 程序- HelloWorld
1、打开Eclipse File -> New -> Plug-in Project
2、输入Activitor的package名 可以参考Eclispe的提供的Templates,进行创建
3、继承BundleActivator接口,可以在bundle启动start与停止stop时执行操作
4、Run Run configuration 或者 Debug Congfiguration,选择需要运行的Bundle
5、配置Debug/Run Configuration 选择OSGi Framework -> New 在Bundles中选择如下bundle org.eclipse.osgi org.eclipse.equinox.console org.apache.felix.gogo.runtime org.apache.felix.gogo.command org.apache.felix.gogo.shell 点击 Debug/Run
二、How ? 创建HelloWorld Activator
1、有两个空的方法——start 和stop。其中,start 方法是在Bundle 被启动的时候调用的,stop 是在Bundle被停止的时候调用的
public class HelloWorld implements BundleActivator {
private static Log log = LogFactory.getLog(HelloWorld.class);
@Override
public void start(BundleContext arg0) throws Exception {
log.info("OSGi Platform: Hello World! ");
}
@Override
public void stop(BundleContext arg0) throws Exception {
log.info("OSGi Platform : Bye!");
}
}
三、What?: OSGi 概述—bundle
OSGi 并不是一个虚拟的概念, bundle 是OSGi 的物理实现, 形式是一个普通的JAR文件,只是其META-INF中manifest.mf中描述了一些标准的模块信息
OSGi 是什么?每个Bundle都是一个个体, 体现了模块化的概念. 每个bundle都包含了
Code,包括 Activator 类和其它一些接口以及实现,这个和普通的 Java 应用程序没有什么特殊的区别。
Resources,一个应用程序不可能没有资源文件,比如图片、properties 文件、XML 文件。这些资源可以随 bundle 一起存在,也可以以 fragment bundle 的方式加入
metadata.(manifest 文件中描述的所有特征),包括名字、输出的类或者包,导入的类或者包,版本号等等,参见Manifest.mf 文件 还有启动级别start level 的定义 每个Bundle 基于OSGi框架运行, OSGi为每个bundle 都创建一个ClassLoader Manifest文件:
还有启动级别start level 的定义
每个Bundle 基于OSGi框架运行, OSGi为每个bundle 都创建一个ClassLoader
Manifest文件:
四、What?: OSGi 概述—OSGi框架
自己开发的bundle 需要借助于OSGi 框架equinox才能运行,equinox 做了什么?
- 读入 bundle 的 headers 信息,即 MANIFEST.MF 文件;
- 装载相关的类和资源;
- 解析依赖的包;
- 调用其 Activator 的 start 方法,启动它;
- 为其提供框架事件、服务事件等服务;
- 调用其 Activator 的 stop 方法,停止它;
五、What?: OSGi 概述—bundle 交互
以Package方式交互
通过Export-Package对外提供Package的代码
通过Required-Bundle指定依赖的bundle
通过Import-Package使用其它Package的代码
以服务方式交互
底层的服务注册与发现服务机制(服务的发布,查收,绑定)
六、What? OSGi 应用
OSGi应用可以看作是由一系列相互依赖的Bundle构成的集合
七、Why?传统开发带来的问题
八、Why? Bundle 导入导出 package
九、Why? OSGI 体系结构
十、Why?—OSGi三层架构-生命周期管理
十一、How? 使用Service(服务)-开发一个真正的应用
十二、How? Example : OSGiDemo
十三、How? 应用部署
十四、How? 应用部署-编写脚本并使用配置文件config.ini
十五、 Spring DM(Spring Dynamic Modules)
十六、Spring DM Demo- Hello World
十七、Spring DM Demo-Service
十八、Fragment bundle – 附属于某个bundle的片段bundle
十九、Eclipse Project - Gemini.blueprint
Gemini Blueprint是OSGI Alliance借鉴了Spring Dynamic Modules 的思想,为OSGI制定的依赖注入(DI)规范,而Gemini Blueprint的前生是Spring DM,它即兼容之前的Spring DM,又实现了Blueprint规范