用osgi框架开发第一个Web应用.ppt

上传人:zhu****ei 文档编号:3447690 上传时间:2019-12-14 格式:PPT 页数:27 大小:774.50KB
返回 下载 相关 举报
用osgi框架开发第一个Web应用.ppt_第1页
第1页 / 共27页
用osgi框架开发第一个Web应用.ppt_第2页
第2页 / 共27页
用osgi框架开发第一个Web应用.ppt_第3页
第3页 / 共27页
点击查看更多>>
资源描述
用osgi框架开发第一个web应用,作者:李金峰,什么是bundle?,编写一个很普通的osgi应用,必须首先创建一个plug-in工程,然后编辑其Activator类的start方法,实际我们这样做的本质是为OSGi运行环境添加了一个bundle,一个bundle必须的构成元素如下:MANIFEST.MF:描述了bundle的所有特征,包括名字、输出的类或者包,导入的类或者包,版本号等等.代码:包括Activator类和其它一些接口以及实现,这个和普通的Java应用程序没有什么特殊的区别。资源:当然,一个应用程序不可能没有资源文件,比如图片、properties文件、XML文件等等,这些资源可以随bundle一起存在,也可以以fragmentbundle的方式加入。启动级别的定义:可以在启动前使用命令行参数指定,也可以在运行中指定,具体的startlevel的解释,请参考后面的说明。,框架做了些什么?,目标平台已经为我们准备了N个bundle,它们提供各种各样的服务,OSGi中,这些bundle的名字叫systembundle,就好比精装修的房子,您只需要拎包入住,不再需要自己铺地板,装吊顶了。我们的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/IMPORTpackage的关键字,这样你可以仅仅export出你希望别人看到的包,而隐藏实现的包。并且你可以为它们编上版本号,这样可以同时发布不同版本的包。,启动级别Startlevel,startlevel越大,表示启动的顺序越靠后。在实际的应用环境中,我们的bundle互相有一定的依赖关系,所以在启动的顺序上要有所区别,好比盖楼,要从打地基开始。实际上,OSGi框架最初的startlevel是0,启动顺序如下:将启动级别加一,如果发现有匹配的bundle(即bundle的启动级别和目前的启动级别相等),则启动这个bundle;继续第一步,直到发现已经启动了所有的bundle,且活动启动级别和最后的启动的bundle启动级别相同。停止顺序,也是首先将系统的startlevel设置为0:由于系统当前活动启动级别大于请求的startlevel,所以系统首先停止等于当前活动启动级别的bundle;将活动启动级别减一,继续第一步,直到发现活动启动级别和请求级别相等,都是0。,开发图书索引功能的例子,在浏览器输入框中输入一个字符,就能把字符相关的图书名字都查询出来。这里有三个bundle,分别是:查询响应bundle:WebBundle,服务bundle:QueryServiceImpBundle,服务接口bundle:QueryServiceBundle,Bundle之间的关系,查询响应bundle提供输入要查询字符的页面,接受用户的查询请求,从BundleContext中获取字典服务的Service,调用字典服务的查询接口得到查询结果,并返回结果到页面。服务bundle提供匹配索引的书名。服务接口bundle提供对外接口,配置tomcat端口,改为8080,如下图在VMarguments中输入:-Dorg.osgi.service.http.port=8080,点击Run.,OSGI框架嵌入HTTP服务器,在RunConfigurations的对话框中创建一个新的OSGIFramework的运行配置,在这个配置的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;,验证,点击ValidateBundles,弹出Noproblemsweredetected,验证通过。点击Ok,点击Run,在控制台输入命令SS,输出在运行的Bundle,如下图:,建立QueryServiceBundle,建立接口,在com.li.service.query下建立接口QueryServiceBundle,ExportedPackages,双击MANIFEST.MF,选择Runtime选项,在ExportedPackages右侧点击Add.,如图:,导出包的作用,选择com.li.service.query,点击Ok,保存,导出成功,如下图。导出包的目的是为了其他Bundles调用实现。,建立QueryServiceImpBundle,ImportedPackages,双击MANIFEST.MF,选择Dependencies选项,在ImportedPackages右侧点击Add.,如图:,导入包的作用,选择com.li.service.query,点击Ok,保存,导人成功,如下图。导入包的目的是为了供Bundle内部调用,创建查询服务类QueryServiceImpBundle,如下图:,编写Activator代码,编写Activator代码,在Bundle启动时注册我们提供的查询服务。我们同BundleContext进行服务注册,在WebBundle中会找到这个服务,进行使用,代码如下:,创建WebBundle,创建WebBundle,在src下建立文件page/query.htm,如下图,在WebBundle中引入包,创建WebBundle,在src下建立文件page/query.htm,如下图,建立QueryServlet类,在doGet中调用服务,修改Activator类,调用Servlet类,启动系统,显示,在浏览器中输入:http:/localhost:8080/demo/page/query.htm回车,如下图:,谢谢!,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!