OSGI 学习笔记之一 初识

OSGI - (Open Service Gateway Initiative) OSGI 定义了一个动态的模型系统,帮助你更好地管理你的代码结构,管理代码生命周期,和代码模块之间的相互合作(松散的)。

模块性-代码被分为清晰的功能块,功能块之间有清晰的接口交互。

大家自然会想到面向对象已经具有模块的概念了。但是还是有局限性:

1.低级别的可见性控制。只能对方法,类,包进行控制。但这些都是代码级别的,不是业务级别的。

有时候将接口和实现定义在不同的包里边,这样比较符合代码模块逻辑,但是大家一定有体会,实现的类一般回多暴漏一些方法,来进行一个配置等接口没有要求的方法。

这些多余的方法并不受接口的约束。第三方使用者可能会使用,就会有变更不一致的问题。

还有一种可能就是定义和实现在一个包里,这样可以只对外暴漏接口规定的方法,但是导致代码结构混乱。

然后我们在另一个package

2.易于出错的class path

class path在一定程度上阻碍了java的模块化。因为class path对jar的版本没有概念,它只返回它找到的第一个版本。

3.缺乏部署和管理的支持

OSGI 的架构:

OSGI service platform包括 OSGI framework 和 standard services两个部分。framework是这个系统的运行时环境,提供OSGI的基本功能,而standard services提供一些可重用的通用功能比如Logging和Preferences。

OSGI标准包括三个层,从下到上依次为Module,lifecycle,service

Module 层,封装和共享代码

lifecycle层,运行时的module管理和提供对OGSI底层服务调用的接口。

service层,提供容器来管理module,并且协调module之间的交互。

下边具体说一下每个层:

MODULE 层

这一层定义了OSGI的模块的概念,叫做bundle,这是几个jar和一个额外的metadata。一个bundle包含了你的class文件和他们需要的资源。bundle比普通的jar更强大,因为你可以显式的指定bundle里包含的哪个package是可以对外可见的。也可以显示的指定哪个外部的package是这个bundle需要的。这种显示的定义一个bundle的import和export的package,这样OSGI framwork可以帮我们来检查他们的一致性。

LIFECYCLE层

lifecycle层定义了bundle是如何动态的被安装和管理的。

对外而言lifecycle层提供了让你可以动态的安装卸载,更新,启动,停止的功能。

对内而言lifecycle层让bundle可以获取执行时的上下文,这样bundle可以和OSGI framework去交互,

SERVICE 层

 Service层是接口和实现分离的,service可以随时注册和取消。这样提高了程序的灵活性。

说了这么多,我们到底该怎么用OSGI来编写我们自己的程序呢?

1.把你的程序设计成接口-实现的结构。

2.实现这些接口,和这些接口的使用者。

3.把服务提供者和客户封装到不同的jar里,给每个jar加上合适的metadata。

4.打开OSGI framework。

5.安装和启动你的jar。

 

posted @ 2012-07-10 14:58  mark_xue  阅读(871)  评论(0编辑  收藏  举报