osgi学习参考资料.docx

上传人:b****8 文档编号:23826232 上传时间:2023-05-21 格式:DOCX 页数:11 大小:276.67KB
下载 相关 举报
osgi学习参考资料.docx_第1页
第1页 / 共11页
osgi学习参考资料.docx_第2页
第2页 / 共11页
osgi学习参考资料.docx_第3页
第3页 / 共11页
osgi学习参考资料.docx_第4页
第4页 / 共11页
osgi学习参考资料.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

osgi学习参考资料.docx

《osgi学习参考资料.docx》由会员分享,可在线阅读,更多相关《osgi学习参考资料.docx(11页珍藏版)》请在冰豆网上搜索。

osgi学习参考资料.docx

osgi学习参考资料

OSGI

●OSGI(OpenServiceGatewayInitiative)技术

Ø面象java的动态模型系统

ØOSGi规范的核心组件是OSGi框架

ØOSGi服务平台提供在多种网络设备上无需重启的动态改变构造的功能。

●OSGI架构

Ø运行环境:

是java环境的规范

Ø模块:

定义类的装载策略

Ø生命周期管理:

增加了能够被动态安装、开启、关闭、更新和卸载的bundles

Ø服务注册:

提供了一个面向bundles的考虑到动态性的协作模型

●Eclipse初识OSGi

ØEclipse->run->RunConfigurations->OSGiFramework

Ø选中OSGiFramework,右键new,去掉所有勾选的bundles,然后通过查找关键字osgi找到

并选中

Ø然后点击Run,在控制台可以看到

Ø输入:

ss

表示环境已经正常

●OSGiHelloWorld

Ø在eclipse中创建一个Plug-in工程

也就是说建立一个标准的OSGibundle工程

Ø输入bundle相关的元素信息

⏹Plug-inID指的是Bundle的唯一标识,在实际项目中可以采用类似java的包名组织策略来保证标识的唯一性

⏹Plug-inVersion指的是Bundle的版本

⏹Plug-inName指的是Bundle的更具有意义的名称

⏹Plug-inProvider指的是Bundle的提供商

⏹剩下最关键的就是Activator部分了,这里填入自己的一个类名就可以了,在工程建立时eclipse会自动建立这个类

Ø打开自动生成的代码,可以看到此类中有两个方法start和stop;其中start方法是在Bundle被启动的时候调用的,stop是在Bundle被停止的时候调用的

Ø然后分别在这两个方法中各输入一句话

Ø运行

⏹RunConfiguration,选中当前工程和最初选择的OSGI的jar包,将其它所有不需要的bundle去掉

⏹设置当前工程的Auto-Start属性为false

⏹最后点击Run,在Console中出现“osgi>”,表示我们已经成功启动了第一个OSGi应用

⏹在osgi>提示符下输入ss,然后回车,可以看到如下图

⏹此时我们的自己开发的bundle已经被安装并完成了解析,但是没有启动,接下来输入start1(其中1代表ss查看到的id),我们会看到”HelloWorldBundlestarted!

”被输出了,通过ss可以看到HelloWorld_1.0.0的state变为Active,说明已成功启动

⏹然后输入stop1,同样能够输出“HelloWorldBundlestopped!

”,同时再用ss查看,HelloWorld_1.0.0的state又变回RESOLVED.

●OSGI的Bundle中内嵌使用http服务

Ø首先看看在OSGi中怎么使用内嵌的jetty容器

⏹RunConfiguration中只选中“org.eclipse.osgi”和“org.eclipse.equinox.http.jetty”,然后点击"AddRequiredBundles"即可

⏹默认的Jetty监听的端口为80,可又通过指定运行参数org.osgi.service.http.port来修改围住端口,例如要想使用8080端口,可又切换到"Arguments"页(不修改也可以):

⏹启动浏览器,输入:

http:

//localhost或者http:

//localhost:

8080看到如下界面表示运行成功

Ø创建一个简单的osgi的bundle,由于要结合http服务,需要添加依赖包:

找到MANIFEST.MF,切换到Dependencies页面,在ImportedPackages里添加如下三个包

✧javax.servlet

✧javax.servlet.http

✧org.osgi.service.http

Øeclipse有一个内嵌的HttpService的实现,它位于包“org.osgi.service.http”下,一旦这个service所在的osgibundle启动了,就会有一个内嵌的http容器被启动,这个service就会被注册。

默认地址为:

http:

//localhost,端口为80,可以通过指定参数“org.osgi.service.http.port”参数在运行的时候修改默认端口。

Ø想要提供我们自己定义的http服务,就需要将我们的服务(servlet或其它html页面)注册到这个HttpService中去,这里主要用到HttpService的两个注册方法:

registerResources(Stringalias,Stringname,HttpContextcontext) 

用来注册诸如表态页面等等

registerServlet(Stringalias,Servletservlet, Dictionaryinitparams,HttpContextcontext)用来注册servlet类

Ø实现

⏹在src目录下新建一个目录web,在web下新建test.html文件

⏹在src目录下创建一个servlet:

PrintNameServlet.在servlet中注入BundleContext的引用

⏹将页面和servlet注册到HttpService中,假如在我们的bundle一运行,这些http页面就可用,那么,我们可又在Activator里注册服务。

⏹启动bundle,访问:

 http:

//localhost:

8080/osgi/test.html

●应用布署

Ø创建独立的Equinox环境

⏹在硬盘上创建一个osgi_demo目录

⏹从Eclipse的Plugins目录复制org.eclipse.osgi.xxxxxx.jar到新建目录

⏹修改jar包的名称为:

equinox.jar。

⏹然后在相同的目录下编写一个run.bat,其内容为:

Java–jarequinox.jar–console

⏹运行run.bat,如果出现osgi的提示,则说明启动已经成功。

输入ss命令回车后,这个时候会看到只有一个Active状态的systembundle

Ø导出各Bundle工程为jar

⏹打开DictQueryWeb,打开MANIFEST.MF,选择Runtime页签,设置classpath

⏹添加bin;lib/easymock.jar;lib/junit.jar

⏹选择build页签,选择其中BinaryBuild里面的lib目录,bin目录和META-INF目录

⏹选中DictQueryWeb工程,export,选择Deployableplug-insandfragements

⏹导出之后就可以在plugins目录中看到DictQueryWeb_1.0.0.jar这个bundle了

Ø安装各个Bundle到Equinox中

⏹在osgi_demo文件夹中创建一个目录,然后将第二步导出的四个Bundle复制到此目录下。

⏹将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目录下

⏹两种方法将Bundle安装到Equinox中

◆运行run.bat,在osgi>中输入:

Installreference:

file:

bundles/DictQuery_1.0.0.jar

◆安装完后state为installed

◆依次启动javax.servlet;mons.logging;org.eclipse.osgi.service;org.mortbay.jetty;org.eclipse.equinox.http.servlet和org.eclipse.equinxo.http.jetty,然后启动我们自己开发的bundle

◆最后输入exit退出系统,以后只需要双击run.bat就可以完成系统的启动

◆或者在osgi_demo目录下创建configuration目录,在configuration目录下创建config.ini文件,文件内容如下:

osgi.noShutdown=true

osgi.bundles=

reference\:

file\:

bundles/javax.servlet.jar@start,reference\:

file\:

bundles/org……logging.jar@start

Osgi.bundles.defaultStartLevel=4

运行

Java–jarequinox.jar–configurationconfiguration–console

●DeclarativeService版本实现

Ø下载org.eclipse.equinox.ds.jar包放于eclipse的plugins目录下,重新启动eclipse

Ø重构服务发布实现

⏹在前面的例子中我们都是通过在BundleActivator中主动注册服务来提供服务。

这里有重构两个bundle的代码

⏹去掉Activator:

删除LocalDictQuery和RemoteDictQuery工程下的Activator类,并且修改MANIFEST.MF文件,去掉其中的Bundle-Activator

⏹创建Component配置,在工程中创建OSGI-INF目录,在该目录下创建component.xml文件,内容如下:

这个是LocalDictQueryBundle中component.xml,RemoteDictQueryBundle的component.xml是类似的写法,只是implementation的class有所不同。

另外我们不在RemoteDictQuerybundle的MANIFEST.MF中加入Component的设置,我们只希望系统中有一个DictQuery服务

⏹在MANIFEST.MF引用component配置:

Service-component:

OSGI-INF/component.xml

⏹修改servlet

删除BundleContext为参数的构造器,增加对HttpService和QueryService的引用

⏹在DictQueryWeb工程下创建OSGI-INF目录,并在该目录下创建component.xml文件:

⏹完成重构就可以启动系统了,在RunConfiguration中引用org.eclipse.equinox.dsbundle,并且设置这个bundle的startlevel为2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 交通运输

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1