B

3

点赞

1

回复

5030

浏览

初次接触OSGI Blueprint

BLUEPRINT简介 看了《 动态的OSGi服务 http://tianmaying.com/tutorial/osgi service 》后,我们知道,由于OSGI服务的动态性,引用OSGI服务需要大量的代码才可以确保正常。可以想象,如果应用使用了大量的OSGI服务的话,直接使用OSGI API开发OSGI应用的方式显然是不合适的。幸好,OSGI规范里为我们提供了很多方便的方式去使用这些OSGI服务,包括Declarative Service(声明式服务DS)、Blueprint、iPojo等等。 下面,我们来了解一下Blueprint。说到Blueprint,我们首先要提及Spring,相信很多java开发人员都会接触过Spring,作为一个成功的依赖注入(DI)实现框架,Spring被十分广泛地应用在很多java项目中。为了适应OSGI的动态环境,spring发展出spring dynamic modules(SpringDM),Blueprint的规范则是来源于SpringDM的进一步发展。目前,Blueprint规范主要有两个实现:Aries blueprint和Gemini blueprint,它们分别来自Apache和Eclipse两个开源组织。我们后续的课程主要基于Aries Blueprint的实现。Blueprint可以象Spring那样,通过XML的方式构建应用,当然也可以通过Blueprint annotation的方式实现同样的目的。由于XML可以和bundle分离,单独部署到servicemix上,所以比annotation的方式更具灵活性,所以我们推荐使用XML的方式。由于Blueprint和spring的渊源,两者在语法方面十分相似,有spring应用经验开发人员会十分轻松地掌握Blueprint。 BLUEPRINT的入门例子:OSGI服务的注册 我们先来看一个blueprint的简单例子demo6,demo6用blueprint的方式实现和demo2_2一样的功能:发布一个ICalculation的OSGI服务。在demo6中,我们去掉了Activator,同样在Manifest.mf也删除了Bundle Activator项--也就是说,我们不需要写activator的代码啦发布OSGI服务了。我们在demo6里写了一个com.ponder.Demo.demo2.contract.ICalculation接口的实现类com.ponder.Demo.demo6.Impl.Calculation。同时,我们在项目的resources下新建了一个OSGI INF/blueprint的文件夹,里面放了一个xml文件demo6bp.xml,这个文档就起和spring的ApplicationContext.xml类似的作用。以下是这个xml的内容: ...

blueprintosgijava

新建主题 记录代码

学员动态

  • t**y在课程作业中回复了老师:老师,我对bug的理...
  • L**9向课程作业中提交了代码
  • S**d向课程作业中提交了代码
  • q**m向课程作业中提交了代码
  • K**务创建了代码片段:毕业真实的版本=+韩...
  • x**1向课程作业中提交了代码
  • C**丶向课程作业中提交了代码
  • l**d创建了代码片段:最新毕业版【神户大学...
  • a**1创建了代码片段:毕业真实版本^|迈阿...
  • r**i创建了代码片段:毕业真实的版本*基督...
  • a**1创建了代码片段:毕业真实版本^|威廉...
  • l**d创建了代码片段:最新毕业版【神户大学...
  • a**1创建了代码片段:毕业真实版本^|普林...
  • a**1创建了代码片段:毕业真实版本^|伍斯...
  • t**y向课程作业中提交了代码
  • q**m向课程作业中提交了代码
  • q**m向课程作业中提交了代码
  • a**1创建了代码片段:毕业真实版本^|罗切...
  • K**务创建了代码片段:毕业真实的版本=+慕...
  • a**1创建了代码片段:毕业真实版本^|布朗...
  • v**g向课程作业中提交了代码
  • q**m在课程中提出了问题:关于scanner部...
  • r**i创建了代码片段:毕业真实的版本*淡马...
  • l**d创建了代码片段:毕业真实版*【中央大...
  • y**n在课程作业中回复了老师:好的 谢谢...
  • C**s向课程作业中提交了代码
  • l**d创建了代码片段:最新毕业版【东京医科...
  • S**d向课程作业中提交了代码
  • l**g向课程作业中提交了代码
  • C**丶向课程作业中提交了代码
  • f**n在课程作业中回复了老师:老师, 这个并不能爬...
  • K**务创建了代码片段:毕业真实的版本=+韩...
  • m**r在课程中提出了问题:请问红圈里的代码是什...
  • K**务创建了代码片段:毕业真实的版本=+韩...
  • K**务创建了代码片段:毕业真实的版本=+韩...
  • K**务创建了代码片段:毕业真实的版本=+韩...
  • a**1创建了代码片段:毕业真实版本^|塔夫...
  • K**务创建了代码片段:毕业真实的版本=+韩...
  • C**丶向课程作业中提交了代码
  • l**d创建了代码片段:最新毕业版【名古屋大...
  • l**d创建了代码片段:毕业真实版*【日本大...
  • K**务创建了代码片段:毕业真实的版本=+海...
  • l**d创建了代码片段:毕业真实版*【大阪电...
  • a**1创建了代码片段:毕业真实版本^|卡内...
  • w**3回复了y**n在课程中的问题:哪的第二种方式?对象...
  • K**务创建了代码片段:毕业真实的版本=+韩...
  • y**n在课程中提出了问题:int a = 10...
  • a**1创建了代码片段:毕业真实版本^|范德...
  • l**d创建了代码片段:毕业真实版*【专修大...
  • K**务创建了代码片段:毕业真实的版本=+伍...
  • C**丶向课程作业中提交了代码
  • a**1创建了代码片段:毕业真实版本^|达特...
  • S**d向课程作业中提交了代码
  • a**1创建了代码片段:毕业真实版本^|印地...
  • a**1创建了代码片段:毕业真实版本^|康奈...
  • K**务创建了代码片段:毕业真实的版本=+帕...
  • y**n向课程作业中提交了代码
  • K**务创建了代码片段:毕业真实的版本=+帕...
  • K**务创建了代码片段:毕业真实的版本=+汉...
  • l**g向课程作业中提交了代码
  • l**d创建了代码片段:毕业真实版*【东北大...
  • K**务创建了代码片段:毕业真实的版本=+韩...
  • l**d创建了代码片段:毕业真实版*【朝日大...
  • v**o向课程作业中提交了代码
  • a**1创建了代码片段:毕业真实版本^|福特...
  • l**d创建了代码片段:最新毕业版【京都产业...
  • l**d创建了代码片段:最新毕业版【龙谷大学...
  • K**务创建了代码片段:毕业真实的版本=+波...
  • v**o向课程作业中提交了代码
  • L**9向课程作业中提交了代码
  • K**务创建了代码片段:毕业真实的版本=+韩...
  • r**i创建了代码片段:毕业真实的版本*马来...
  • K**务创建了代码片段:毕业真实的版本=+弗...
  • y**n向课程作业中提交了代码
  • r**i创建了代码片段:毕业真实的版本*怀特...
  • a**1创建了代码片段:毕业真实版本^|内布...
  • t**y向课程作业中提交了代码
  • v**o向课程作业中提交了代码
  • l**d创建了代码片段:最新毕业版【东京医科...
  • K**务创建了代码片段:毕业真实的版本=+韩...
  • l**d创建了代码片段:最新毕业版【九州大学...
  • q**m向课程作业中提交了代码
  • l**d创建了代码片段:最新毕业版【早稻田大...
  • y**n向课程作业中提交了代码
  • l**d创建了代码片段:最新毕业版【东北大学...
  • S**d向课程作业中提交了代码
  • r**i创建了代码片段:毕业真实的版本*北方...
  • 三**年向课程作业中提交了代码
  • r**6向课程作业中提交了代码
  • v**o向课程作业中提交了代码
  • q**m评论了:a的平方a^2中的 ...
  • w**3回复了y**n在课程中的问题:可以,你可以自己在e...
  • K**务创建了代码片段:毕业真实的版本=+韩...
  • y**n添加了笔记:switch语句中的...
  • K**务创建了代码片段:毕业真实的版本=+韩...
  • K**务创建了代码片段:毕业真实的版本=+韩...
  • K**务创建了代码片段:毕业真实的版本=+韩...
  • y**n在课程中提出了问题:这个可以这样比较的,...
  • 天**君回复了l**g在课程中的问题:欢迎来到天码营学习,...
  • K**务创建了代码片段:毕业真实的版本=+韩...
反馈意见