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.Activator2.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 ... 
随机推荐
- c#中的interface abstract与virtual介绍
			abstract 与virtual : 方法重写时都使用 override 关键字,interface中的方法和abstract方法都要求实现 interface用来声明接口1.只提供一些方法规约, ... 
- jquery插件封装
			HTML <!DOCTYPE html> <html> <head> <title></title> <style> .page ... 
- BotVS开发基础—2.7 指标MA
			代码 #计算一小时 MA5均线 # 时间 2017-06-29 00:00:00 -2017-06-30 00:00:00 1小时 实盘级Tick # 平台 OCKCoin BTC def main( ... 
- spring基于注解进行注入(个人记录)
			spring的Bean基于注解进行配置,再结合自动装配属性,也就DI,其实说白了就相当于初始化的时候给对象赋初值. 配置文件的过程有些麻烦,记录一下. 基于注解进行配置: 1.在application ... 
- 介绍下Python的两个标准库 os 和 sys
			import sysprint(sys.path) #python 2 中报错 ....,打印的是绝对路径(***\\python\\lib\\site-packages# 第三方库,后退一级为标准库 ... 
- Tomcat会话保持之session server
			author:JevonWei 版权声明:原创作品 Tomcat会话保持之session server 拓扑图 环境 tomcatA 172.16.253.108 tomcatB 172.16.253 ... 
- Varnsih调用多台后端主机
			author:JevonWei 版权声明:原创作品 Varnsih调用多个后端主机 环境 Varnish 192.168.198.139 图片服务端 192.168.198.120 程序服务端 192 ... 
- ROS学习记录(一)————创建简单的机器人模型smartcar
			这是我在古月居上找的(http://www.guyuehome.com/243),但直接运行的话,没办法跑起来,我也是查了好多博客和日志,才实现最后的功能的,所以,记录下来,以备后用吧,也欢迎其他和我 ... 
- Springboot与Thymeleaf模板引擎整合基础教程(附源码)
			前言 由于在开发My Blog项目时使用了大量的技术整合,针对于部分框架的使用和整合的流程没有做详细的介绍和记录,导致有些朋友用起来有些吃力,因此打算在接下来的时间里做一些基础整合的介绍,当然,可能也 ... 
- 最近做了一个通达OA的大料:20170905最新版本破解可改单位名称,无限制安装
			最近做了一个通达OA的大料:20170905最新版本破解可改单位名称,无限制安装 用户约七十家,总体不错,修改了两次注册授权文件,完美使用中 可联系麦枫http://www.mfsun.com管理员Q ... 
