http://www.blogjava.net/JetGeng/archive/2011/07/10/354034.html
1 概述
Blueprint 使用手记 Jet Geng
July 10, 2011
Blueprint 是 OSGi Service Platform Enterprise Specification 标准的一 部分。很多最佳实践中也都推荐在应用程序中使用他。最近在项目中用他 来发布和应用服务。感觉效果不错。所以就有了这篇使用手记!欢迎各位 看官拍砖!
2 配置环境
我们在前期找到了两个 Blueprint 的实现:一个是 Apache 的 aries,另 外一个就是 Eclipse 的 Gemini。最后选择了 Gemini。做出这样的决定出于 两点考虑:
• Blueprint的标准就是由Spring提出。
• Gemini的初始代码由Srping所捐献。 下面我就简单介绍一下环境的配置过程:
• 从http://eclipse.org/gemini/ 下载 Gemini 的合适的版本。我们 采用的是 1.0.0M1。并解压到路径 A
• 从http://static.springsource.org/downloads/nightly/milestone-download. php下载 spring-osgi-2.0.0.M1-with-dependencies。并解压到路径 B。 他里面包括了 Gemini 所依赖的 bundle。说白了也就是 SpringFrame- work。
• Eclipse 中新建一个 Target Platform。把上述的路径 A和 B 加入到新 建的 Target Platform 中去。(直接在 preference 页的 target platform页中勾选就可以了)
• 选择新建的 Target Platform 为当前活动的 Platform。 3 启航
个人理解 Gemini 就是 OSGi 世界中的 IOC。既然是一个 IOC 框架,那 我们就从创建一个 Bean 开始吧!

3.1    创建一个 Bean 首先我们来看一下我们要存入 Container 中的 POJO。
Listing 1: POJOWillInContainer.java
package org.gunn.gemini.demo;
import org.slf4j.Logger; import org.slf4j.LoggerFactory; /**
* This pojo will create by blueprint container * @author Jet Geng * */
public class POJOWillInContainer { private Logger logger =
}
LoggerFactory.getLogger(POJOWillInContainer.class); private String name ;
private String age;
public void setName(String name) { logger.info("the new name is:" + name); this.name = name;
}
public void setAge(String age) { logger.info("the new age value is:" + age); this.age = age;
}
这个超级简单的一个 POJO,我们如何通过 Gemini 来创建他呢?我们通过 一个简单的配置文件。具体如下。
Listing 2: pojoconfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
    <bean id="myPOJO" class="org.gunn.gemini.demo.POJOWillInContainer" >
        <property name="name" value="JetGeng"/>
        <property name="age" value="32"/>
    </bean>
</blueprint>

用过 spring 的兄弟,第一眼就能看明白这个配置文件说的是什么。其实就 是创建了一个 bean。到这里,我们所需要做的工作其实就已经完成了。下 面就可以通过 Debug 来启动了。
3.2    运行 Blueprint 容器 首先把 pojoconfig.xml 文件放到 project path/OSGi INF/blueprint 目录
下。或者在 MANiFEST.MF 文件中通过如下语句进行指定。 Blueprint-Bundle: config/account-data-context.xml, config/osgi-*.xml
更多内容参考http://www.eclipse.org/gemini/blueprint/documentation/ reference/1.0.0.RC1/html/app-deploy.html中的 8.2 Blueprint Manifest Configuration Comparison。好了,我们可以启动我们的应用程序了。为了 能够让 blueprint 顺利的跑起来,我们必须要把 blueprint 相关 bundle 以及 他所依赖的 bundle 都加入到运行时中。 按照上图配置后,点击运行。我们
Figure 1: Debug 配置

将在控制台得到如下内容。

控制台中的黑色行显示我们的 POJO 已经被 BlueprintContainer 创建
 
了,并且设定了相关属性。
.
这个部分的全部代码已经放到了 git://github.com/jetgeng/OSGi.git 中了。 感兴趣的筒子可以 down 下来玩玩。

Blueprint 使用手记相关推荐

  1. AM335X的汇编语言与c语言,X86汇编语言学习手记 -- 汇编和C协同

    X86汇编语言学习手记(3) 2004年12月 在X86汇编语言学习手记(1)(2)中,可以看到栈(Stack)作为进程执行过程中数据的临时存储区域,通常包含如下几类数据: 局部变量 函数调用的返回地 ...

  2. 结巴分词和自然语言处理HanLP处理手记

    手记实用系列文章: 1 结巴分词和自然语言处理HanLP处理手记 2 Python中文语料批量预处理手记 3 自然语言处理手记 4 Python中调用自然语言处理工具HanLP手记 5 Python中 ...

  3. 大叔手记(17):大叔2011年读过的书及2012年即将要读的书

    前言 2011年是大叔最累的一年(基本上都是晚上12点以后睡觉,早上6点30分起),读得书也是异常的多,一方面要保持自己的技术在最前列,另外方面技术管理和项目管理方面的东西也要进一步进阶,2011年读 ...

  4. webpack入门学习手记(一)

    本人微信公众号:前端修炼之路,欢迎关注. 之前用过gulp.grunt,但是一直没有学习过webpack.这两天刚好有时间,学习了下webpack.webpack要想深入研究,配置的东西比较多,网上的 ...

  5. flask学习笔记之blueprint

    blueprint的作用 blueprint最主要的是解决路由的问题 创建blueprint的步骤 创建blueprint 注册blueprint 最简代码示例 创建blueprint from fl ...

  6. Blueprint代码详细分析-Android10.0编译系统(七)

    摘要:Blueprint解析Android.bp到ninja的代码流程时如何走的? 阅读本文大约需要花费18分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Andro ...

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

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

  8. 【手记】解决启动SQL Server Management Studio 17时报Cannot find one or more components...的问题

    [手记]解决启动SQL Server Management Studio 17时报Cannot find one or more components...的问题 参考文章: (1)[手记]解决启动S ...

  9. ELK菜鸟手记 (三) - X-Pack权限控制之给Kibana加上登录控制以及index_not_found_exception问题解决

    ELK菜鸟手记 (三) - X-Pack权限控制之给Kibana加上登录控制以及index_not_found_exception问题解决 参考文章: (1)ELK菜鸟手记 (三) - X-Pack权 ...

最新文章

  1. jackson (json、xml的序列化与反序列化)
  2. Use Standard Controllers
  3. 娓娓道来Promise
  4. UESTC_酱神寻宝 2015 UESTC Training for Dynamic ProgrammingProblem O
  5. IPv6的地址表达形式
  6. dell i5-3567禁用触摸板和Fn多媒体快捷键
  7. 黄杏元《地理信息系统概论》考研复习考点精讲(一)
  8. 垃圾邮件过滤技术发展现状及展望
  9. win11输入法繁体字切换简体字——记录
  10. 8cm等于多少像素_PPT尺寸你们都设置成多少(我问的不是分辨率像素,而是长、高尺寸)?...
  11. 百度地图精准定位,自定义marker,自定义信息弹出窗口。
  12. OPPO加入连接标准联盟董事会;BOSE为领克09汽车打造Centerpoint环绕声音响系统 | 全球TMT...
  13. 大咖云集,从1到N,第十二届中国IDC产业年度大典集锦
  14. Apache PHP 的gzip压缩输出的实现方法
  15. java 为什么双亲委派_双亲委派机制及使用原因是什么?
  16. go语言工作目录都有什么?GOPATH下的目录结构
  17. java读取 png_JAVA如何操作PNG图片
  18. API接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等] item_get - 根据ID取商品详情
  19. 后端接口重定向_Java访问重定向接口
  20. 解决mysql的配置文件my.ini不起作用

热门文章

  1. Django框架搭建
  2. Python+OpenCV人脸识别技术详解
  3. ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车前进实验调试
  4. 使用Redis 实现消息队列
  5. 【Qt】创建线程程序示例
  6. 【Qt】QModbusClient类
  7. arcgis怎么用python重新排序,使用ArcGIS脚本工具将点数据进行排序并编号
  8. 网络编程--sockaddr 与 sockaddr_in
  9. 每天一道LeetCode-----某个数在递增序列第一次和最后一次出现的位置
  10. 学习笔记-----C++模板类中友元函数重载输出运算符时提示无法解析的外部符号解决方案