OSGI中blueprint简介


上篇博文我们开始了felix中的一个example编写,原本计划是讲felix中的几个example全部编写一遍,但是随后发现felix的这几个example都差不多,只是略微有些区别,编写来编写去始终都是这几行代码,讲起来也没什么意思,想着还是开始osgi中新的东西的讲解,思考来去,还是从blueprint开始。


blueprint简介

在osgi中服务的使用有多种方式,如使用传统的注册式服务,就是我们之前中example不断使用的使用方式,还是osgi中的声明式服务,还有著名的ipojo等等,但在这里值得花一番笔墨来讲解的应该是blueprint,说到blueprint,务必需要提及一下spring,在个人印象中,spring框架几乎成为了java这么多框架中最为有名的一个,传统上提出的ssh,几乎就只剩下spring一个还非常强力的存活着,而且本身提供的功能也越来越丰富,子项目中springboot也快成为业界微服务一大选择,而在osgi中,spring最初也有所涉及,为spring dm,blueprint产生的规范便是起源于spring dm,随后好像spring dm没有继续发展,但是blueprint却是一直存在目前,Blueprint规范主要有两个实现:Aries blueprint和Gemini blueprint,它们分别来自Apache和Eclipse两个开源组织。我们日后讲的基本都是Apache官网中的blueprint,具体的地址如下:apache blueprint,讲的时候基本不会单独讲解blueprint,会将其他一些东西串起来讲出来,具体到日后讲解其他的时候再说。


blueprint使用

blueprint的使用上有些意思,在resource目录下,需要先创建OSGI-INF/blueprint两级目录,然后在里面建立相关的xml文件,在此xml文件的名字不需要固定,也可以为多个,只要在此目录,均会被加载,个人在编写osgi应用时,一般在此目录下会建立两个xml文件,一个为普通的blueprint.xml用于管理我们的服务,另外一个则是暴露对外的接口,为blueprint-cxf.xml,这个在日后一起讲解出来。现在blueprint大致的用法如下所示,其实与spring配置xml文件区别并不是太大:

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.2.0"xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"></blueprint>

其中,在该xml文件中,可以配置bean、service、command等等,在我们前几次编写的felix example中,
其中多次用到DictionService就可以不再使用注册式服务,而使用blueprint进行相关的配置了,如下所示:

    <bean id="DictionaryService" class="cn.com.service.DictionaryServiceImpl" />

这是最简单的bean的配置,这种配置方法有多种,在此不讲这么多的使用方式,在另一篇文章中,讲了多种service的使用方法,与此类似,有兴趣可以看一下:blueprint service,在此需要讲一下service和bean的区别,两者看上去几乎一模一样,但是却是用了两种不同的配置方法,原因是bean这种是在bundle内部使用,不暴露对外,但是service是一个bundle提供给另外一个bundle使用,比如A interface在A bundle中,A实现类在B bundle中,c Bundle需要使用A interface提供的服务,就可以使用service来配置服务。


配置服务的使用

在我们进行了以上bean的配置之后是需要进行使用这个服务的,Activator中这种启动Bundle中获取服务的方式不再使用,在此使用注入的服务,如下所示:

<bean id="HelloRestService" class="cn.com.service.impl.HelloRestServiceImpl"><property name="dictionaryService" ref="dictionaryService" /></bean>

在程序代码中的使用则是:

public class HelloRestServiceImpl {private DictionaryService dictionaryService;
}

如此即可正常使用,无需如同spring框架需要加上@Inject注解单独注入。


总结

blueprint在使用上,借用infoq的一篇文章来描述一下,Blueprint是针对OSGi的依赖注入解决方案,用法非常类似Spring。当使用服务的时候,Blueprint会马上创建并注入一个代理(Proxy)。对这些服务进行调用时,如果服务在当前不可用的话,将会产生阻塞,直至能够获取到服务或超时。如果一直阻塞下去,那么当前bundle的启动一直会处于STARTING状态,造成服务一直无法正常启动,需要卸载当前bundle处理当前情况。
当然日后如果遇到这种情况,可以具体再进行分析,在此略去不提,本次的blueprint讲解就到这里,具体使用,我们到下一篇博文中再进行讲解。

OSGI中blueprint简介相关推荐

  1. Blueprint简介-Android10.0编译系统(六)

    摘要:Android.bp由Blueprint进行解析翻译,最终通过soong build编译成ninja文件,那么Blueprint是什么呢? 阅读本文大约需要花费10分钟. 文章首发微信公众号:I ...

  2. C++中rdbuf()简介及文件流的概念

    2019独角兽企业重金招聘Python工程师标准>>> C++中rdbuf()简介及文件流的概念 Name:qianghaohao #include <cstring> ...

  3. karaf osgi_在OSGi中为Karaf构建Camel-CXF REST服务–组播和聚合

    karaf osgi 请查看我在Karaf的OSGi中构建普通CXF服务(无Camel)的其他文章 . 这是有关如何 创建一个CXF REST服务 使用骆驼多播(并并行化)传入的请求 来自两个不同服务 ...

  4. 在OSGi中为Karaf构建Camel-CXF REST服务–组播和聚合

    请查看我在Karaf的OSGi中构建普通CXF服务(不使用Camel)的其他文章 . 这是有关如何 创建一个CXF REST服务 使用骆驼多播(并并行化)传入的请求 来自两个不同服务的源数据 汇总响应 ...

  5. ExtJs中Store简介(秘籍)

    ExtJs中Store简介(秘籍) 1.什么store? Store类似于一个本地仓库(即数据存储器),包括有 ArrayStore,DirectStore,GroupingStore,JsonSto ...

  6. Word编辑论文,实现1.题目、摘要、关键词为通栏,正文为双栏 2.首页底端添加通栏脚注,在脚注中写作者简介,并使其实现悬挂对齐效果

    Q1. 如何使题目.摘要.关键词为通栏,而下面开始的正文为双栏? 将光标移动到最后一个关键词后 布局-分隔符-分节符(连续) 将光标移动到正文第一个大标题前 布局-页面设置-文档网格-文字排列-栏数设 ...

  7. 0040__node.js中Express简介

    node.js中Express简介_node express_包小志的博客-CSDN博客

  8. ML与Optimality:最优化理论(GD随机梯度下降/QN拟牛顿法/CG共轭梯度法/L-BFGS/TR置信域/GA遗传算法/SA模拟退火算法)在机器学习中的简介、常用方法、案例应用之详细攻略

    ML与Optimality:最优化理论(GD随机梯度下降/QN拟牛顿法/CG共轭梯度法/L-BFGS/TR置信域/GA遗传算法/SA模拟退火算法)在机器学习中的简介.常用方法.案例应用之详细攻略 目录 ...

  9. 【SAP Abap】X档案:SAP ABAP 中 AMDP 简介及实现方法

    SAP ABAP 中 AMDP 简介及实现方法 0.前言 1.AMDP 简介 1.1 代码下沉(Code Pushdown) 1.2 AMDP 是托管数据库过程的容器 1.3 AMDP 的优缺点 1. ...

最新文章

  1. 21天学通python pdf-21天学通Python PDF百度网盘资源下载
  2. 对一些架构设计原则的反思
  3. China Daily | 技术不是拦路虎:在线音乐教学可完美还原线下场景
  4. mysqlfor循环中出错继续_Python学习笔记(循环)
  5. Hibernate所用15个jar包
  6. python123第九周测验答案2020_知到智慧树2020艺术概论章节测验答案
  7. Linux qt5无法输入中文的解决办法
  8. 全体注意:@live.com 形势不妙,可能三周内被收回
  9. 12. Magento 后台top栏开发
  10. 08. 切勿创建包含auto_ptr的容器
  11. C++ STL常用算法总结
  12. MFC(6)点击按钮弹出新的对话框源码
  13. FishC笔记—14 讲 字符串:各种奇葩的内置方法
  14. 51单片机 Proteus仿真 身高体重测量 HX711 超声波SR-04
  15. 远程服务器批量管理员权限,Win10系统下怎样实现批量远程桌面管理?Win10系统进行批量远程管理的方法...
  16. Android Studio模拟器安装步骤
  17. 设计稿 自动html,简单的登陆页面PSD设计稿来演示转化为HTML页面的全部过程
  18. Windows中命令行收集
  19. 小项目:网易云音乐播放器
  20. mysql js 命令行登录_MYSQL常用命令

热门文章

  1. RPC分布式网络通信框架(三)—— 服务配置中心Zookeeper模块
  2. ACL基本访问控制列表配置
  3. 创建多线程的几种方式
  4. element input限制只能输入数字
  5. C语言高级demo Flappy Bird游戏
  6. 支持指令流水的计算机系统设计与实现【100010365】
  7. 逝者:GIS之父Roger Tomlinson
  8. h5ai界面修改_H5ai修改版,带HTML5视频播放器DPlayer,并支持hls切片播放
  9. Tensorflow模型优化 端侧部署 tflite 量化 稀疏 quantization sparsity
  10. win10 计算机组件,win10 1093哪些组件可以卸载_win10电脑无用组件怎么卸载