




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
OSGIl OSGI(Open Service Gateway Initiative)技术 面象java的动态模型系统 OSGi规范的核心组件是OSGi框架 OSGi服务平台提供在多种网络设备上无需重启的动态改变构造的功能。l OSGI架构 运行环境:是java环境的规范 模块:定义类的装载策略 生命周期管理:增加了能够被动态安装、开启、关闭、更新和卸载的bundles 服务注册:提供了一个面向bundles的考虑到动态性的协作模型l Eclipse初识OSGi Eclipse-run-Run Configurations-OSGi Framework 选中OSGi Framework,右键new,去掉所有勾选的bundles,然后通过查找关键字osgi找到并选中 然后点击Run,在控制台可以看到 输入:ss表示环境已经正常l OSGi HelloWorld 在eclipse中创建一个Plug-in工程 也就是说建立一个标准的OSGi bundle工程 输入bundle相关的元素信息n Plug-in ID指的是Bundle的唯一标识,在实际项目中可以采用类似java的包名组织策略来保证标识的唯一性n Plug-in Version指的是Bundle的版本n Plug-in Name指的是Bundle的更具有意义的名称n Plug-in Provider指的是Bundle的提供商n 剩下最关键的就是Activator部分了,这里填入自己的一个类名就可以了,在工程建立时eclipse会自动建立这个类 打开自动生成的代码,可以看到此类中有两个方法start和stop;其中start方法是在Bundle被启动的时候调用的,stop是在Bundle被停止的时候调用的 然后分别在这两个方法中各输入一句话 运行n Run Configuration,选中当前工程和最初选择的OSGI的jar包,将其它所有不需要的bundle去掉n 设置当前工程的Auto-Start属性为falsen 最后点击Run,在Console中出现“osgi”,表示我们已经成功启动了第一个OSGi应用n 在osgi提示符下输入ss,然后回车,可以看到如下图n 此时我们的自己开发的bundle已经被安装并完成了解析,但是没有启动,接下来输入start 1(其中1代表ss查看到的id),我们会看到”HelloWorldBundle started!”被输出了,通过ss可以看到HelloWorld_1.0.0的state变为Active,说明已成功启动n 然后输入stop 1,同样能够输出“HelloWorldBundle stopped!”,同时再用ss查看,HelloWorld_1.0.0的state又变回RESOLVED.l OSGI的Bundle中内嵌使用http服务 首先看看在OSGi中怎么使用内嵌的jetty容器n Run Configuration中只选中“org.eclipse.osgi”和“org.eclipse.equinox.http.jetty”,然后点击Add Required Bundles即可n 默认的Jetty监听的端口为80,可又通过指定运行参数 org.osgi.service.http.port 来修改围住端口,例如要想使用8080端口,可又切换到 Arguments页(不修改也可以):n 启动浏览器,输入:http:/localhost或者http:/localhost:8080看到如下界面表示运行成功 创建一个简单的osgi的bundle,由于要结合http服务,需要添加依赖包:找到MANIFEST.MF,切换到Dependencies页面,在Imported Packages里添加如下三个包 javax.servlet javax.servlet.http org.osgi.service.http eclipse有一个内嵌的HttpService的实现,它位于包“org.osgi.service.http”下,一旦这个service所在的osgi bundle启动了,就会有一个内嵌的http容器被启动,这个service就会被注册。默认地址为:http:/localhost,端口为80,可以通过指定参数“org.osgi.service.http.port”参数在运行的时候修改默认端口。 想要提供我们自己定义的http服务,就需要将我们的服务(servlet或其它html页面)注册到这个HttpService中去,这里主要用到HttpService的两个注册方法:registerResources(String alias, String name, HttpContext context)用来注册诸如表态页面等等registerServlet(String alias, Servlet servlet,Dictionary initparams, HttpContext context) 用来注册servlet类 实现n 在src目录下新建一个目录web,在web下新建test.html文件n 在src目录下创建一个servlet: PrintNameServlet.在servlet中注入BundleContext的引用n 将页面和servlet注册到HttpService中,假如在我们的bundle一运行,这些http页面就可用,那么,我们可又在Activator里注册服务。n 启动bundle,访问:http:/localhost:8080/osgi/test.htmll 应用布署 创建独立的Equinox环境n 在硬盘上创建一个osgi_demo目录n 从Eclipse的Plugins目录复制org.eclipse.osgi.xxxxxx.jar到新建目录n 修改jar包的名称为:equinox.jar。n 然后在相同的目录下编写一个run.bat,其内容为:Java jar equinox.jar consolen 运行run.bat,如果出现osgi的提示,则说明启动已经成功。输入ss命令回车后,这个时候会看到只有一个Active状态的system bundle 导出各Bundle工程为jarn 打开DictQueryWeb,打开MANIFEST.MF,选择Runtime页签,设置classpathn 添加bin;lib/easymock.jar;lib/junit.jarn 选择build页签,选择其中Binary Build里面的lib目录,bin目录和META-INF目录n 选中DictQueryWeb工程,export,选择Deployable plug-ins and fragementsn 导出之后就可以在plugins目录中看到DictQueryWeb_1.0.0.jar这个bundle了 安装各个Bundle到Equinox中n 在osgi_demo文件夹中创建一个目录,然后将第二步导出的四个Bundle复制到此目录下。n 将Eclipse的plugins目录中把我们所需要的javax.servlet_2.5.0.v200910301333, mons.logging_1.0.4.v201005080501, org.eclipse.equinox.http.jetty_2.0.0.v20100503, org.eclipse.equinox.http.servlet_1.1.0.v20100503, org.eclipse.osgi.services_3.2.100.v20100503, org.mortbay.jetty.server_6.1.23.v201004211559, org.mortbay.jetty.util_6.1.23.v201004211559文件复制到bundles目录下n 两种方法将Bundle安装到Equinox中u 运行run.bat,在osgi中输入:Install reference:file:bundles/DictQuery_1.0.0.jaru 安装完后state为installedu 依次启动javax.servlet;mons.logging;org.eclipse.osgi.service;org.mortbay.jetty;org.eclipse.equinox.http.servlet和org.eclipse.equinxo.http.jetty, 然后启动我们自己开发的bundleu 最后输入exit退出系统,以后只需要双击run.bat就可以完成系统的启动u 或者在osgi_demo目录下创建configuration目录,在configuration目录下创建config.ini文件,文件内容如下:osgi.noShutdown=trueosgi.bundles=reference:file:bundles/ javax.servlet.jarstart, reference:file:bundles/ orglogging.jarstart。Osgi.bundles.defaultStartLevel=4运行Java jar equinox.jar configuration configuration consolel Declarative Service版本实现 下载org.eclipse.equinox.ds.jar包放于eclipse的plugins目录下,重新启动eclipse 重构服务发布实现n 在前面的例子中我们都是通过在BundleActivator中主动注册服务来提供服务。这里有重构两个bundle的代码n 去掉Activator:删除LocalDictQuery和RemoteDictQuery工程下的Activator类,并且修改MANIFEST.MF文件,去掉其中的Bundle-Activatorn 创建Component配置,在工程中创建OSGI-INF目录,在该目录下创建component.xml文件,内容如下:这个是LocalDictQuery Bundle中component.xml,RemoteDictQuery Bundle的component.xml是类似的写法,只是implementation的class有所不同。另外我们不在RemoteDictQuery bundle的MANIFEST.MF中加入Component的设置,我们只希望系统中有一个DictQuery服务n 在MANIFEST.MF引用component配置:Service-componen
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乙烯-醋酸乙烯共聚乳液(VAE)装置操作工抗压考核试卷及答案
- 碳九石油树脂装置操作工职业技能考核试卷及答案
- 光纤熔接接头抗潮气测试工艺考核试卷及答案
- 矿灯和自救器管理工质量追溯知识考核试卷及答案
- 动画制作员数字化技能考核试卷及答案
- 高尔夫球童上岗考核试卷及答案
- 医学影像技术专业试题及答案
- 安全生产知识2023新规要点及标准试卷
- 应变能力面试题库及答案
- 银行职员日常考试题库及答案
- 家政服务行业互联网+平台商业模式创新与盈利模式研究报告
- GSP药品经营质量管理规范培训
- 网吧网管硬件技术培训手册
- 拆炉机管理制度
- 生猪疫病防控课件
- 学校“1530”安全教育记录表(2024年秋季全学期)
- 老年贫血患者的护理课件
- 刑事拘留申请书
- 个人向企业正式借款合同
- 2025部编版五年级上册《道德与法治》教学工作计划
- 催收话术培训
评论
0/150
提交评论