基于Equinox的OSGI4的单独部署与基本应用

    大家如果关注eclipse的话应该会注意到,目前eclipse的底层插件体系架构已经改成了OSGI的插件结构。OSGI就是“开放服务网关协议”,OSGI官方称是面向服务的系统架构,也可以理解为面向组件的架构,系统中每一个组件或者一个模块称之为bundle,这也是OSGI里的概念模型。更多的OSGI的介绍,大家可以Google一下或baidu一下。

 

    本人接触OSGI时间不长,没有过多的深入,也是初涉OSGI,不过也是非常看好目前这一架构的,相信应该是后期软件开发的潮流吧。今天主要是记录下如何部署一个单独的OSGI系统,一来便于自己以后速查,二来也希望可以给初学者一个Best Practice。

 

    我这里以eclipse3.4的plugin目录下的org.eclipse.osgi_3.4.0.v20080605-1900.jar为例,其实这个jar包就是OSGI4的完整实现,eclipse官方称为Equinox,我们将其复制并改名为equinox.jar,呵呵。或者你也可以到equinox的官方网站下载最新的jar包。随后我们在同目录下建立一个bat文件,如下:

 

java -jar equinox.jar -console -Declipse.ignoreApp=true -Dosgi.noShutdown=true

 

    保存然后双击该bat文件,会出现:osgi>的提示符,这表示OSGI已经启动成功了。接着输入:

 

osgi>ss

 

    会出现如下内容:


Framework is launched.

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.4.0.v20080605-1900

 

    我们可以看到有一个bundle已经启动了。然后我们就可以很方便的部署和卸载(完全动态)一个个bundle了。我们随便从eclipse的plugin目录中copy一个bundle到该目录,比如org.eclipse.osgi.services_3.1.200.v20071203.jar,然后在OSGI的控制模式下输入如下命令:

 

osgi>install reference:file:org.eclipse.osgi.services_3.1.200.v20071203.jar

 

    会看到系统提示如下:

 

Bundle id is 1

 

    表示OSGI框架自动为该bundle分配了一个唯一的ID,然后再输入ss命令查看如下:

 

Framework is launched.

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.4.0.v20080605-1900
1       INSTALLED   org.eclipse.osgi.services_3.1.200.v20071203

 

    结果列表中的State表示bundle的状态,我们可以看到刚刚部署的services为INSTALLED,表示该bundle处于已经被安装的状态,但是还没有启动,接着我们来启动该bundle。

 

osgi>start 1

 

    使用start命令来启动刚安装的bundle,其后的1参数表示该bundle的唯一ID,如果没有出现错误(因为启动bundle时OSGI框架会校验该bundle的相关信息),接着输入ss再次查看,会出现如下结果:

 

Framework is launched.

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.4.0.v20080605-1900
1       ACTIVE      org.eclipse.osgi.services_3.1.200.v20071203

 

    这样,我们的bundle就已经正式运行了。同样,我们也可以动态的停止或卸载某一个bundle,使用stop命令停止bundle,如下:

 

osgi>stop 1

 

    然后再ss查看结果:

 

Framework is launched.

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.4.0.v20080605-1900
1       RESOLVED    org.eclipse.osgi.services_3.1.200.v20071203

 

    这时我们看到刚刚的bundle处于RESOLVED状态,该状态表示bundle已经处于被解析完毕状态,可以启动或已经停止了。被停止的bundle是处于非服务状态的,然后我们也可以卸载该bundle,卸载后该bundle将不能够再使用和管理了,必须重新安装。如下:

 

osgi>uninstall 1

 

    然后,再ss查看如下:

 

Framework is launched.

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.4.0.v20080605-1900

 

    发现已经没有了刚才的bundle,即完全从OSGI中被移除了,除非我们重新安装,重新安装后,其ID将会被重新分配,而不是之前的1了,比如我们再次安装。

 

osgi> install reference:file:org.eclipse.osgi.services_3.1.200.v20071203.jar

 

    然后再ss查看状态如下:

 

Framework is launched.

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.4.0.v20080605-1900
2       INSTALLED   org.eclipse.osgi.services_3.1.200.v20071203

 

    可以看到其ID已经变成了2,而不是之前的1了。

 

    这基本上就是OSGI的bundle的基本管理命令,更多的命令可以输入help来获取帮助。当然,看懂这必须得熟悉OSGI框架的基本结构和应用模式。希望以后也可以和大家一起探讨OSGI的开发和部署等各个方面:-)

你可能感兴趣的:(eclipse,框架,Google,osgi)