上篇文章中,我们开发了一个自定义的Bundle,接着从网络中下载到Spring和Blueprint的Bundle,然后复制到DynamicRuntime项目下。

需要注意的是,这些Bundle并不能在Eclipse自带的Equinox启动管理工具中显示,因为我们并没有將这些Bundle添加到自定义的Target Platform中,接下来我们就来完成这一操作。

一、启动Spring和Blueprint相关Bundle

单击Window=>Preferences菜单,然后单击Plug-in Development=>Target Platform选项,选择我们之前新建的DynamicRuntime,如下图所示:



单击Edit按钮,按照前面文章中提到的方式,把spring 和blueprint目录下的Bundle添加到DynamicRuntime中,如下图:



然后单击Finish按钮即可完成操作,接下来我们要做的是启动Spring和Blueprint相关的Bundle。

单击Run=>Debug Configurations…菜单,单击OSGI Framework下面我们之前的新建的启动项,如下图:



我们需要勾选Spring和Blueprint相关的全部Bundle,然后单击面板上的Validate Bundles按钮,该功能用于校验Bundle是否存在依赖问题,单击后,弹框内容如下:



可以发现Spring相关的Bundle都缺少公共的日志包依赖,普通的Java项目对应的common-logging.jar包,我们可以单击Add Required Bundles按钮,让Eclipse工具自动为我们勾选上依赖的Bundle,然后再次单击Validate Bundles按钮,出现如下弹窗说明不存在依赖问题了:



这是一个非常好的现象,意味着我们可以重新启动Equinox容器了,单击Debug按钮即可,控制台输出日志内容如下:

Hello World!!
十二月 18, 2016 10:32:34 下午 org.eclipse.gemini.blueprint.extender.internal.boot.ChainActivator <init>
信息: Blueprint API detected; enabling Blueprint Container functionality
十二月 18, 2016 10:32:34 下午 org.eclipse.gemini.blueprint.extender.internal.activator.LoggingActivator start
信息: Starting [org.eclipse.gemini.blueprint.extender] bundle v.[2.0.0.M02]
osgi> 十二月 18, 2016 10:32:34 下午 org.eclipse.gemini.blueprint.extender.internal.support.ExtenderConfiguration start
信息: No custom extender configuration detected; using defaults...
十二月 18, 2016 10:32:34 下午 org.springframework.scheduling.timer.TimerTaskExecutor afterPropertiesSet
信息: Initializing Timer

二、通过XML文件配置Bean

到目前为止,我们已经成功使用Blueprint和Spring整合到OSGI中,但是好像还缺点什么,在普通的Java项目中,我们通过ApplicationContext相关子类启动Spring容器,然后加载相关的Bean配置文件。但是在OSGI应用中Spring框架的启动由Blueprint负责,默认情况下会加载META-INF/spring/*.xml文件,并实例化这些配置文件中的Bean。

需要注意的是Gemini Blueprint支持Blueprint风格和Spring风格的Bean配置,接下来我们可以在com.csdn.osgi.common工程的META-INF目录下新建一个spring目录,然后新建一个beans.xml文件,如下图:



然后在beans.xml文件中增加Blueprint风格的Bean配置,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
<bean id="object" class="java.lang.Object"/> <bean id="length" class="java.lang.Integer">
<argument value="4"/>
</bean> <bean id="buffer" class="java.lang.StringBuffer" depends-on="simple">
<property name="length" ref="length"/>
</bean> <bean id="current-time" class="java.lang.System" factory-method="currentTimeMillis" scope="prototype"/> <bean id="list" class="java.util.ArrayList" destroy-method="clear" activation="eager">
<argument ref="length"/>
</bean>
</blueprint>

然后重新启动Equinox容器,控制台中输出日志内容如下:

hello world!
十二月 18, 2016 10:50:57 下午 org.eclipse.gemini.blueprint.extender.internal.boot.ChainActivator <init>
信息: Blueprint API detected; enabling Blueprint Container functionality
十二月 18, 2016 10:50:57 下午 org.eclipse.gemini.blueprint.extender.internal.activator.LoggingActivator start
信息: Starting [org.eclipse.gemini.blueprint.extender] bundle v.[2.0.0.M02]
osgi> 十二月 18, 2016 10:50:57 下午 org.eclipse.gemini.blueprint.extender.internal.support.ExtenderConfiguration start
信息: No custom extender configuration detected; using defaults...
十二月 18, 2016 10:50:57 下午 org.springframework.scheduling.timer.TimerTaskExecutor afterPropertiesSet
信息: Initializing Timer
十二月 18, 2016 10:50:57 下午 org.eclipse.gemini.blueprint.extender.support.DefaultOsgiApplicationContextCreator createApplicationContext
信息: Discovered configurations {osgibundle:/META-INF/spring/*.xml} in bundle [Common (com.csdn.osgi.common)]
十二月 18, 2016 10:50:57 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing OsgiBundleXmlApplicationContext(bundle=com.csdn.osgi.common, config=osgibundle:/META-INF/spring/*.xml): startup date [Sun Dec 18 22:50:57 CST 2016]; root of context hierarchy
十二月 18, 2016 10:50:57 下午 org.eclipse.gemini.blueprint.context.support.AbstractOsgiBundleApplicationContext unpublishContextAsOsgiService
信息: Application Context service already unpublished
十二月 18, 2016 10:50:57 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from URL [bundleentry://9.fwk182531396/META-INF/spring/beans.xml]
十二月 18, 2016 10:50:58 下午 org.eclipse.gemini.blueprint.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor stageOne
信息: No outstanding OSGi service dependencies, completing initialization for OsgiBundleXmlApplicationContext(bundle=com.csdn.osgi.common, config=osgibundle:/META-INF/spring/*.xml)
十二月 18, 2016 10:50:58 下午 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1103899a: defining beans [object,length,buffer,current-time,list]; root of factory hierarchy
十二月 18, 2016 10:50:58 下午 org.eclipse.gemini.blueprint.context.support.AbstractOsgiBundleApplicationContext publishContextAsOsgiServiceIfNecessary
信息: Publishing application context as OSGi service with properties {org.eclipse.gemini.blueprint.context.service.name=com.csdn.osgi.common, org.springframework.context.service.name=com.csdn.osgi.common, Bundle-SymbolicName=com.csdn.osgi.common, Bundle-Version=1.0.0.qualifier}
十二月 18, 2016 10:50:58 下午 org.eclipse.gemini.blueprint.extender.internal.support.DefaultOsgiBundleApplicationContextListener onOsgiApplicationEvent
信息: Application context successfully refreshed (OsgiBundleXmlApplicationContext(bundle=com.csdn.osgi.common, config=osgibundle:/META-INF/spring/*.xml))

日志内容说明Spring框架已经成功启动,并且Bean已经成功创建。

除此之外,Gemini Blueprint还支持Spring风格的Bean配置,例如我们可以將上面的beans.xml文件内容修改成下面的配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
default-lazy-init="true"> <bean id="object" class="java.lang.Object"/> <bean id="length" class="java.lang.Integer">
<constructor-arg value="4"/>
</bean> <bean id="buffer" class="java.lang.StringBuffer" depends-on="simple">
<property name="length" ref="length"/>
</bean> <bean id="current-time" class="java.lang.System" factory-method="currentTimeMillis" scope="prototype"/> <bean id="list" class="java.util.ArrayList" destroy-method="clear" lazy-init="false">
<constructor-arg ref="length"/>
</bean>
</beans>

重新启动Equinox容器也是没有问题的,Spring框架能够正常启动,Bean也能够正常实例化,到此为止,我们已经成功使用Blueprint整合到Spring框架中。

这篇文章暂时就介绍这么多,也到休息时间了,后面的文章中继续介绍如何与Mybatis框架和Spring MVC整合,并开发一个简单的登录功能。如果发现文章内容有不当的地方,希望能够指出来,有任何疑问也可以在评论中提出,转载请注明本文地址!

本文源码下载地址:http://download.csdn.net/detail/rongbo_j/9715778

OSGI企业应用开发(五)使用Blueprint整合Spring框架(二)的更多相关文章

  1. OSGI企业应用开发(八)整合Spring和Mybatis框架(一)

    到目前为止,我们已经学习了如何使用Blueprint將Spring框架整合到OSGI应用中,并学习了Blueprint&Gemini Blueprint的一些使用细节.本篇文章开始,我们將My ...

  2. OSGI企业应用开发(十)整合Spring和Mybatis框架(三)

    上篇文章中,我们已经完成了OSGI应用中Spring和Mybatis框架的整合,本文就来介绍一下,如何在其他Bundle中,使用Mybatis框架来操作数据库. 为了方便演示,我们新建一个新的Plug ...

  3. OSGI企业应用开发(九)整合Spring和Mybatis框架(二)

    上篇文章中,我们完成了在OSGI应用中整合Spring和Mybatis框架的准备工作,本节我们继续Spring和Mybatis框架的整合. 一.解决OSGI整合Spring中的Placeholder问 ...

  4. OSGI企业应用开发(四)使用Blueprint整合Spring框架(一)

    上篇文章中介绍了如何使用独立的Equinox发行包搭建OSGI运行环境,而不是依赖与具体的Eclipse基础开发工具,本文开始介绍如何使用Blueprint將Spring框架整合到OSGI中. 一.开 ...

  5. OSGI企业应用开发(七)细说Blueprint & Gemini Blueprint(二)

    上篇文章介绍了标准的Blueprint 规范与 Gemini Blueprint如何自定义Bean配置文件路径,本文接着上篇文章继续介绍Blueprint的使用. 一.Bean的配置 前面提到过,Ge ...

  6. OSGI企业应用开发(六)细说Blueprint & Gemini Blueprint(一)

    上篇文章介绍了如何使用Blueprint將Spring框架整合到OSGI应用的Bundle中,从上篇文章中我们大概了解了Blueprint与Gemini Blueprint的关系,简单的说,Bluep ...

  7. OSGI企业应用开发(三)Eclipse中搭建Equinox运行环境

    上篇文章介绍了如何在Eclipse中搭建Felix的运行环境,我们需要將Bundle发布到Felix框架的bundle目录下,Felix框架启动时才会自动加载这些Bundle,否则需要在Felix框架 ...

  8. 整合Spring框架和MyBatis框架

    ------------------------siwuxie095                                 整合 Spring 框架和 MyBatis 框架         ...

  9. 整合Spring框架和Hibernate框架

    -------------------siwuxie095                                 整合 Spring 框架和 Hibernate 框架         1.导 ...

随机推荐

  1. Salt-API安装配置及使用

    Python3使用saltstack和salt-api 安装python3 1. tar zxvf Python-3.5.1.tgz 2. cd Python-3.5.1 3. ./configure ...

  2. ajaxsubmit 上传文件 在IE中返回的内容 提示下载文件

    在ajaxSubmit提交表单的时候,如果表单内有文件上传的话,会判断参数是否配置的iframe为false参数,如果没有,会用创建隐藏iframe方式提交表单,如果设定了iframe为false,则 ...

  3. odoo第三方市场 -- 模块推荐

    odoo 除了开源,另一个非常给力的地方就是,强大的第三方应用市场: 你入坑后,会发现非常的好玩,全球还有这么多小伙伴并肩前行,共同成长. 第三方市场有很多不错的模块,当然,好东西,不是完全免费的! ...

  4. Mysql 和 Postgresql 抛开性能的对比

    MySQL/MariaDB的当前版本是5.7.6(MariaDB为MySQL创建者Monty Widenius创建的一个MySQL分支),PostgreSQL的版本是9.4.1. 以下几个方面对比两者 ...

  5. 使用 Redis 共享 Session 会话

    储存模式 1.InProc模式 这是ASP.NET默认的Session管理模式,在应用进程内维护Session. 2.StateServer模式 这是在服务器装了.NET环境后自带的一个StateSe ...

  6. wordpress添加面包屑

    第一步:在functions.php中添加如下代码 // 面包屑导航 function get_breadcrumbs() { global $wp_query; if ( !is_home() ){ ...

  7. solr(三) : 导入数据库表数据

    solr 除了能查询文档中的数据外, 还可以导入数据库中的数据. 也就是说, solr 能查询其他数据库中的数据(solr本身也是一个数据库, 非关系型的). 那接下来就试一下导入mysql数据库中的 ...

  8. lucene 初探

    前言: window文件管理右上角, 有个搜索功能, 可以根据文件名进行搜索. 那如果从文件名上判断不出内容, 我岂不是要一个一个的打开文件, 查看文件的内容, 去判断是否是我要的文件? 几个, 十几 ...

  9. visual studio code 个人设置

    { "vim.disableAnnoyingNeovimMessage": true, "php.validate.executablePath": " ...

  10. 译自如何将Spring Cloud应用程序从Spring Boot 1.2迁移到1.3

    前言 笔者第三个Spring Cloud(版本为Spring Boot 1.2)类项目升级最新版本时遇到不少问题,本文内容是作者翻译Spring Cloud官网一位国外友人文章产生. 原文地址: Mi ...