




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用osgi框架开发第一个web应用,作者:李金峰,什么是bundle?,编写一个很普通的 osgi应用,必须首先创建一个 plug-in 工程,然后编辑其 Activator 类的 start 方法,实际我们这样做的本质是为 OSGi 运行环境添加了一个 bundle,一个 bundle 必须的构成元素如下: MANIFEST.MF:描述了 bundle 的所有特征,包括名字、输出的类或者包,导入的类或者包,版本号等等. 代码:包括 Activator 类和其它一些接口以及实现,这个和普通的 Java 应用程序没有什么特殊的区别。 资源:当然,一个应用程序不可能没有资源文件,比如图片、properties 文件、XML 文件等等,这些资源可以随 bundle 一起存在,也可以以 fragment bundle 的方式加入。 启动级别的定义:可以在启动前使用命令行参数指定,也可以在运行中指定,具体的 start level 的解释,请参考 后面的说明。,框架做了些什么?,目标平台已经为我们准备了 N 个 bundle,它们提供各种各样的服务,OSGi 中,这些 bundle 的名字叫 system bundle,就好比精装修的房子,您只需要拎包入住,不再需要自己铺地板,装吊顶了。 我们的 bundle 进入 Equinox 环境后,OSGi 框架对其做的事情如下: 读入 bundle 的 headers 信息,即 MANIFEST.MF 文件; 装载相关的类和资源; 解析依赖的包; 调用其 Activator 的 start 方法,启动它; 为其提供框架事件、服务事件等服务; 调用其 Activator 的 stop 方法,停止它;,Bundle 状态,INSTALLED 就是字面意思,表示这个 bundle 已经被成功的安装了 RESOLVED 很常见的一个状态,表示这个 bundle 已经成功的被解析(即所有依赖的类、资源都找到了),通常出现在启动前或者停止后 STARTING 字面意思,正在启动,但是还没有返回,所以您的 Activator 不要搞的太复杂 ACTIVE 活动的,这是我们最希望看到的状态,通常表示这个 bundle 已经启动成功,但是不意味着您的 bundle 提供的服务也是 OK 的 STOPPING 字面意思,正在停止,还没有返回 UNINSTALLED 卸载了,状态不能再发生变更了,Bundle 导入导出 package,每个 bundle 都可以有自己公共的部分和隐藏的部分,每个 bundle 也只能看见自己的公共部分、隐藏部分和其它 bundle 的公共部分。 bundle 的 MANIFEST.MF 文件提供了 EXPORT/IMPORT package 的关键字,这样你可以仅仅 export 出你希望别人看到的包,而隐藏实现的包。并且你可以为它们编上版本号,这样可以同时发布不同版本的包。,启动级别 Start level,start level 越大,表示启动的顺序越靠后。在实际的应用环境中,我们的 bundle 互相有一定的依赖关系,所以在启动的顺序上要有所区别,好比盖楼,要从打地基开始。 实际上,OSGi 框架最初的 start level 是 0,启动顺序如下: 将启动级别加一,如果发现有匹配的 bundle(即 bundle 的启动级别和目前的启动级别相等),则启动这个 bundle; 继续第一步,直到发现已经启动了所有的 bundle,且活动启动级别和最后的启动的 bundle 启动级别相同。 停止顺序,也是首先将系统的 start level 设置为 0: 由于系统当前活动启动级别大于请求的 start level,所以系统首先停止等于当前活动启动级别的 bundle; 将活动启动级别减一,继续第一步,直到发现活动启动级别和请求级别相等,都是 0。,开发图书索引功能的例子,在浏览器输入框中输入一个字符,就能把字符相关的图书名字都查询出来。 这里有三个bundle,分别是:查询响应bundle:WebBundle,服务bundle:QueryServiceImpBundle,服务接口bundle:QueryServiceBundle,Bundle之间的关系,查询响应bundle 提供输入要查询字符的页面,接受用户的查询请求,从 BundleContext 中获取字典服务的Service, 调用字典服务的查询接口得到查询结果,并返回结果到页面。 服务bundle 提供匹配索引的书名。 服务接口bundle 提供对外接口,配置tomcat端口,改为8080,如下图在VM arguments中输入: -Dorg.osgi.service.http.port=8080,点击Run.,OSGI框架嵌入HTTP服务器,在Run Configurations的对话框中创建一个新的OSGI Framework的运行配置,在这个配置的Bundles中选择下面几个Bundle: javax.servlet; mons.logging; org.eclipse.equinox.http.jetty; org.eclipse.equinox.http.servlet; org.eclipse.osgi; org.eclipse.osgi.services; org.motbay.jetty;,验证,点击Validate Bundles,弹出 No problems were detected,验证通过。 点击Ok,点击Run,在控制台输入命令SS,输出在运行的Bundle,如下图:,建立QueryServiceBundle,建立接口,在com.li.service.query下建立接口QueryServiceBundle,Exported Packages,双击MANIFEST.MF,选择Runtime选项,在Exported Packages右侧点击Add.,如图:,导出包的作用,选择com.li.service.query,点击Ok,保存,导出成功,如下图。 导出包的目的是为了其他Bundles调用实现。,建立QueryServiceImpBundle,Imported Packages,双击MANIFEST.MF,选择Dependencies选项,在Imported Packages右侧点击Add.,如图:,导入包的作用,选择com.li.service.query,点击Ok,保存,导人成功,如下图。 导入包的目的是为了供Bundle内部调用,创建查询服务类QueryServiceImpBundle,如下图:,编写Activator代码,编写Activator代码,在Bundle启动时注册我们提供的查询服务。 我们同BundleContext进行服务注册,在WebBundle中会找到这个服务,进行使用,代码如下:,创建WebBundle,创建WebBundle,在src下建立文件page/query.htm,如下图,在WebBundle中引入包,创建WebBundle,在sr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 2608-2025硅砖
- 2025年慈善总会会计考试题库
- 2025年婚姻家庭咨询师初级笔试题库
- 2025年工业安全工程师面试题
- 2025年安全生产安全生产考试题库
- 2025年宁夏安全员考试重点题库及答案
- 2025年树葬行业应用与生态礼仪师考试预测题
- 2025年托育保健医生考试重点题解析
- 2025年山西C类安全员考试答案解析
- 2025年食堂安全管理员笔试冲刺题
- 动漫人物欣赏课件
- 医院新技术、新项目准入申报表
- 项目经理安全目标考核表
- 《HSK标准教程1》第3课课件
- 三级安全教育考试试题及(全)
- 中国古代文学史《第二章:诗经》PPT课件(完整版)
- 云南省地质灾害群测群防手册
- 高级催乳师培训课程讲义
- 第三届韬奋杯全国出版社青编校大赛校对试题(已编辑)
- 关于BT项目主要法律规定
- 银发【2007】246号
评论
0/150
提交评论