OSGi-开发环境的建立和HelloWorld(04)
1 OSGi开发环境的建立
1.1 Equinox是什么
从代码角度来看,Equinox其实就是OSGi核心标准的完整实现,并且还在这个基础上增加了一些额外的功能(比如为框架增加了命令行和程序执行的入口)。我们在之前入门篇讲解的都东西其实都是OSGi核心标准的一小部分。其实它的核心就是一个jar包,这个jar包既能执行(作为标准Java包的特性),也是一个bundle(Manifest里面含有OSGi bundle特有的元数据)。
我们能够利用Equinox项目的代码来运行一个实实在在的OSGi框架,框架启动后,你就可以将你开发好bundle放到里面运行。
1.2 下载Equinox
Equinox在http://download.eclipse.org/equinox上有官方下载,里面列出了各个版本供我们选择:
在这里,我们使用3.7版本的Equinox,下载好以后放在一个单独的文件夹下(这里我的路径是D:\develop-tools):
1.3 从命令行启动框架
如果启动这个框架的话,有了上面的jar包就足够了,我们进入命令行输入如下命令:java –jar org.eclipse.osgi_3.7.2.v20120110-1415.jar -console ,然后就会进入Equinox的控制台:
如果出现osgi>的提示符,就说明启动成功了。
Equinox的控制台的部分基本命令如下(区分大小写):
install [URL] | 将URL表示的bundle安装到框架中 |
uninstall [bundleID] | 将id=bundleID的bundle卸载 |
start [bundleID] | 启动一个bundle |
stop [bundleID] | 停止一个bundle |
refresh [bundleID] | 刷新bundle |
update [bundleID] | 更新bundle 的内容 |
ss | 简单显示所有bundle的状态 |
status | 展示安装的bundle和注册的服务 |
headers [bundleID] | 展示bundle 的manifest中的元数据 |
1.4 在Eclipse中建立开发环境
1.4.1 设置
进入Eclipse的window-->preferences-->Plug-in Development-->Target Platform:
初始状态只有一个Runing Platform, 点击“Add…”按钮来增加一个我们自己的的platform,进入如下界面:
选择默认的第一个就好,点击next;
再点击这里的“Add…”;
选择Directory;
选择你的Equinox的jar包所在的路径,然后点击finish,回到刚才的界面:
这时候你就会发现里面多出来了你刚刚设置的路径,路径后面描述的“1 plug-ins available”则就是说的我们放置的Equinox的jar包。
继续点击finish,回到最开始的界面:
这时候多出来了一个新的target platform,勾选上,然后确定。
1.4.2 启动
打开菜单项Run->Run configurations…,在OSGi Framework项中,新建一个Run configuration:
点击run按钮
Eclipse的控制台中也出现来了osgi的提示符,说明你已经成功启动了。
你可以试试刚才讲的那些命令,看看能输出些什么(比如上图中我输入了ss)。
1.4.3 新建一个project
打开新建project的界面,选择Plug-in Project:
然后输入project的名字,TargetPlatform处选择an OSGi framework->Equinox或者standard都行,点击下一步:
这里实际上是对bundle的Manifest文件的设置,其中的ID就是Bundle-SymbolicName,Version就是bundle的版本号,下面还能决定是否定义BundleActivator,点击finish就创建了一个project:
至此,开发环境已经建立完毕(这个project只是为了演示怎么建立,不会在接下来的内容中用到,可删之)。
2 HelloWorld
现在可谓是万事具备,只欠Helloworld了。为了将OSGi框架的三个层次都涵盖到,这个Helloworld可能会比其他你见到的OSGi Helloworld程序要复杂一点点。如果对代码中的一些API感到生疏,记得回到之前的入门篇中找到对应的内容,这样对你理解代码会有帮助。里面的关键代码已经用黄色高亮显示。(出于篇幅考虑,代码中的import语句都省略)
2.1 HelloWorld的定义与实现
首先我们创建一个工程HelloWorld,在这个工程里面,我们创建一个包含sayHello方法的接口,准备作为服务接口:
然后,对这个接口进行实现:
了将这个接口暴露出来,我们需要在MANIFEST文件中加入如下条目:
接下来,为了把这个服务注册到框架中,我们定义了一个Activator:
为这个HelloImpl传入了"Hello, OSGi"的字符串 为了让这个Activator能够工作,需要在MANIFEST文件中做如下定义:
Bundle-Activator: com.yangw.helloworld.activator.Activator
2.2 获得并执行SayHello服务
创建一个工程HelloClient,创建一个叫HelloUser的BundleActivator,其中的start方法会获得接口为Hello的服务对象,并且通过这个对象来调用sayHello方法:
为了获得Hello这个接口的定义,我们还需要在MANIFEST文件中import Hello所在的package:

2.3 HelloWorld程序的流程
下图表示了这几个类的各个功能的相互依赖关系,整个关系从Hello接口的定义开始;然后到Hello接口被实现,得到HelloImpl;再到Activator将HelloImpl注册为框架中的一个服务,再到HelloUser通过与框架交互得到刚才注册的服务,并且使用这个服务从而输出字符串;最后一个可选流程是当我们stop org.serc.helloworld这个bundle的时候,程序会将之前注册的服务注销掉。
2.4 程序的执行
通过上面的工作,我们得到了两个自己定义的bundle: org.serc.helloworld org.serc.helloworld.client 现在打开Run configurations界面,我们会看见Bundles标签里面多出来了这两个bundle:
run 即可,使用ss,start stop等命令即可看到效果
OSGi-开发环境的建立和HelloWorld(04)的更多相关文章
- OSGi开发环境的建立
1 OSGi开发环境的建立 1.1 Equinox是什么 从代码角度来看,Equinox其实就是OSGi核心标准的完整实现,并且还在这个基础上增加了一些额外的功能(比如为框架增加了命令行和程序执行的入 ...
- 【CC2530入门教程-01】IAR集成开发环境的建立与项目开发流程
[引言] 本系列教程就有关CC2530单片机应用入门基础的实训案例进行分析,主要包括以下6部分的内容:1.CC2530单片机开发入门.2.通用I/O端口的输入和输出.3.外部中断初步应用.4.定时/计 ...
- 关于xampp集成开发环境的建立与初步认识
针对于xampp集成开发环境的建立主要分大步骤: 1.把xampp的压缩包压缩到一个盘中,比如c盘:然后点击中间的那个图标开始安装,由于这个软件是配置基本已经OK了,故可以直接next ...
- LNMP虚拟机开发环境配置--vagrant+virtualbox+ubuntu14.04
工作一直用的是别人打包好的虚拟机开发环境,感觉确实很酷.所以准备自己配个开发环境,为之后自己开发一些有趣的东西做准备. ok,开始~~~ 一.安装软件 vagrant和virtualbox 此处需注意 ...
- QT开发环境的建立以及QTE4.6.3、tslib1.4的移植过程
1.首先是建立Linux开发环境1.1.在windowsXP下安装博创公司提供的虚拟机软件VMware Workstation,版本为VMware-workstation-full-7.0.1-227 ...
- Android JNI编程(一)——JNI概念以及C语言Dev-C++开发环境搭建、编写HelloWorld
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:JNI是什么呢? JNI:JNI是JavaNative Interfac ...
- python--基础学习(一)开发环境搭建,体验HelloWorld
python学习之前 最近想用python写爬虫,由于之前没接触过,所以从零开始,找了技术博文大概了解下基础. 印象比较深的是"python你不去认识它,可能没什么,一旦你认识了它,你就会爱 ...
- WinCE5.0开发环境的建立
目前WinCE5.0的开发工具主要有以下几种:Platform Builder5.0.EVC4.0+SP4.Visual Studio2005.其中Platform Builder主要用于定制WinC ...
- RN开发-Linux开发环境搭建(Ubuntu 12.04)
1.首先安装JDK 2.安装Android开发环境 3.安装node.js 3.1 官网下载 : node-v6.9.1-linux-x64 3.2 添加环境变量 sudo vi /etc/profi ...
随机推荐
- 原创:Docker在云家政的应用 谢绝复制粘贴内容
我们公司目前大规模使用了Docker,目前除了数据库应用,其他所有应用都在Docker容器内运行,下面我就Docker在公司的应用做一些分享.. 首先我介绍一下公司的背景,公司属于中小型创业公司,服务 ...
- win10 永久激活 命令行方式
现在我们可以看下当前系统的激活状态,查看方法"WIN+R"打开运行对话框,输入命令slmgr.vbs -xpr,点击确定,这样可以查看到当前系统的激活信息.大家可以发现,虽然小编系 ...
- SpringMVC参数绑定(从请求中接受参数)
参数绑定(从请求中接收参数) 1)默认类型: 在controller方法中可以有也可以没有,看自己需求随意添加. httpservletRqeust,httpServletResponse,httpS ...
- 线性代数-矩阵-【1】矩阵汇总 C和C++的实现
矩阵的知识点之多足以写成一本线性代数. 在C++中,我们把矩阵封装成类.. 程序清单: Matrix.h//未完待续 #ifndef _MATRIX_H #define _MATRIX_H #incl ...
- maven 搭新建成之后 无法创建 src/main/java 目录解决
maven项目创建后 创建 src/main/java 和 src/main/test 会报错,目录已存在 打开build path 界面 src/main/java 和 ...
- Dom-创建标签
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python专题-异常处理(基础)
之前在学习python的时候有整理过python异常处理的文章,不够简单也不够完整,所以决定再整理一篇,算做补充. http://www.cnblogs.com/cmt110/p/7464748.ht ...
- Java基础精选,你答对了几道?
没有技术深度是大多程序员的一种常态. 但是当你成为一个资深的工程师的时候,很多公司并不希望你还是那样平庸,没有深度.虽然你会纳闷,我就算有深度你们也不一定用得上呀?然而到了这个级别的人需求量并不像初中 ...
- java代码块的理解
最近在复习java基础,在看到java代码块的时候,忽然发现自己貌似对于java代码块一无所知,于是赶紧对着一些资料实战演练了一把. 对于java代码块,不难根据名称看出其实就是一些java语句的集合 ...
- 自己编写服务启动脚本(一):functions文件详细分析和说明
本文目录: 1.几个显示函数2.action函数3.is_true和is_false函数4.confirm函数5.pid检测相关函数 5.1 checkpid.__pids_var_run和__pid ...