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

新建主题 记录代码

学员动态

  • 1**9在课程作业中回复了老师:感谢老...
  • t**1向课程作业中提交了代码
  • 2**b添加了笔记:if (str.eq...
  • s**8添加了笔记:定义成员变量时,可以...
  • t**1向课程作业中提交了代码
  • 2**b在课程作业中回复了老师:老师,还是报错。。您...
  • k**e在课程中提出了问题:package co...
  • 1**2评论了:...
  • 天**君评论了f**o在课程中的作业:也可以用天码营的前端...
  • 2**b在课程作业中回复了老师
  • f**o在课程作业中回复了老师:自己运行程序测试了,...
  • k**e向课程作业中提交了代码
  • S**S评论了e**1在课程中的作业:输出两次 一次是初始...
  • c**8在课程中提出了问题:我点Java Web...
  • 天**君回复了c**8在课程中的问题:欢迎来到天码营学习,...
  • k**e添加了笔记:final变量的所有...
  • k**e在课程作业中回复了老师:这个方法报...
  • w**3回复了w**7在课程中的问题:read() : 从...
  • e**1向课程作业中提交了代码
  • k**e添加了笔记:如果一个类的方法或者...
  • y**n在课程作业中回复了老师:这里id超出范围的话...
  • c**8在课程中提出了问题:买了Java Web...
  • 蓝**社向课程作业中提交了代码
  • S**S评论了k**e在课程中的作业:不要修改返回值类型 ...
  • S**S回复了y**n在课程中的问题:看下代码答疑。 您看...
  • 2**b在课程作业中回复了老师:嗯嗯 好 今天才刚开...
  • w**7在课程作业中回复了老师:为啥使用String...
  • c**8在课程中提出了问题:实战任务的参考代码怎...
  • 天**君回复了1**9在课程中的问题:欢迎来到天码营学习,...
  • c**3向课程作业中提交了代码
  • T**r评论了:现在应该得心应手了吧...
  • s**k向课程作业中提交了代码
  • y**n在课程作业中回复了老师:谢谢老师...
  • f**o向课程作业中提交了代码
  • z**g添加了笔记:格式化字...
  • k**e向课程作业中提交了代码
  • w**7在课程中提出了问题:package co...
  • 天**君回复了T**r在课程中的问题:欢迎来到天码营学习,...
  • s**k向课程作业中提交了代码
  • T**丶添加了笔记:在实际项目中,我们一...
  • 天**君评论了y**n在课程中的作业:调用postRepo...
  • v**l在课程中提出了问题:git克隆仓库总是认...
  • v**l在课程中提出了问题:好哒 应该是到时候会...
  • S**S回复了c**3在课程中的问题:多看几遍教程中的强制...
  • y**_向课程作业中提交了代码
  • k**e向课程作业中提交了代码
  • v**l在课程中提出了问题:点击右侧的按钮可以拷...
  • 2**b向课程作业中提交了代码
  • c**8在课程中提出了问题:用Eclipse导入...
  • e**1向课程作业中提交了代码
  • S**S回复了c**8在课程中的问题:我的QQ是54905...
  • k**e向课程作业中提交了代码
  • k**e向课程作业中提交了代码
  • c**8完成了课程的作业
  • e**1向课程作业中提交了代码
  • k**e向课程作业中提交了代码
  • 2**b向课程作业中提交了代码
  • S**r添加了笔记:一个浮点数字面量默认...
  • 喵**咪在课程中提出了问题:这个括号里面的内容是...
  • S**r添加了笔记:先声明对象名称,空格...
  • y**n在课程中提出了问题:您看看我的代码吧,很...
  • 2**b向课程作业中提交了代码
  • 2**b在课程作业中回复了老师:恩恩恩恩,明白了。万...
  • S**S评论了y**n在课程中的作业:处理博客不存在的情...
  • k**e向课程作业中提交了代码
  • f**o在课程作业中回复了老师:空格键暂停是不是要通...
  • 天**君回复了v**l在课程中的问题:欢迎来到天码营学习,...
  • 2**b向课程作业中提交了代码
  • k**e向课程作业中提交了代码
  • 2**b在课程作业中回复了老师:老师,我第6条代码不...
  • k**e向课程作业中提交了代码
  • k**e向课程作业中提交了代码
  • S**S评论了f**o在课程中的作业:你做好之后 把 截图...
  • f**o在课程作业中回复了老师
  • 天**君评论了y**n在课程中的作业:LocalDateT...
  • k**e添加了笔记:反射是一种动态获取信...
  • w**7在课程中提出了问题:在程序的20行,用c...
  • w**7在课程中提出了问题:length是什么方...
  • w**3评论了2**b在课程中的作业:花括号前面不用分...
  • k**e添加了笔记:被final修饰的方...
  • f**o在课程作业中回复了老师:如何开启下一节课的作...
  • k**e在课程作业中回复了老师:com.tianma...
  • 2**b在课程中提出了问题:Integer in...
  • 天**君回复了c**8在课程中的问题:directionC...
  • 1**7添加了笔记:接口的继承使用ext...
  • 天**君回复了z**6在课程中的问题:欢迎来到天码营学习,...
  • 2**b向课程作业中提交了代码
  • S**S回复了2**b在课程中的问题:new 一个 值为 ...
  • f**o在课程作业中回复了老师:那个时间间隔按默认2...
  • s**k向课程作业中提交了代码
  • S**r添加了笔记:用包package来...
  • 2**b在课程作业中回复了老师:老师你好,我想请问一...
  • k**e添加了笔记:讲集合的时候,我们说...
  • s**k向课程作业中提交了代码
  • 2**b向课程作业中提交了代码
  • S**r添加了笔记:先声明对象名称,空格...
  • k**e在课程中提出了问题:temp 不能这么声...
  • S**S回复了喵**咪在课程中的问题:这里是个简单的事例。...
  • w**3评论了2**b在课程中的作业:Math.sqrt(...
  • s**k向课程作业中提交了代码
反馈意见