- 浏览: 102603 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
Tom.X:
http://osgia.com
OSGI下的web应用开发(5) -
xiaohei520104:
楼组辛苦了,关于OSGi web的demo资料很少,非常感谢你 ...
OSGI下的web应用开发(5) -
shenwu33:
为什么我的server下面 没有eclipseRT
OSGI下的web应用开发(1) -
zhaoweisgz:
谢谢你的共享~
基于virgo环境的OSGI+Maven的web开发代码下载(spring+hibernate+GWT) -
zrz_1989:
楼主我想请教您个问题,如果将项目移植到OSGi平台上,对于we ...
OSGI下的web应用开发(7)
上节讲了如何对web应用进行大体的模块划分,现在开始进入正题,对本次应用进行开发。
首先需要知道应用最终有几个模块,如图
一共分为7个bundle,其中5个bundle上一节已经讲过了,为了让整个系统能够真正的运行起来,还需要domain bundle和datasource bundle。
domain bundle是将所有的域对象定义到一个模块中,这样可以被其余的任何模块进行访问,它是被除了datasource bundle外的所有模块所访问的,这里省略连接线;
datasource bundle是将datasource进行配置并以OSGI服务的方式发布,如果其它的模块需要直接访问datasource的时候,就引入该模块。
That‘s it!让我们开始进入开发!
Note:后面所有用到的bundle都可以到这个地址下载
http://ebr.springsource.com/repository/app/
这个是spring提供的庞大的第三方bundle的库,方便我们索取,不然就需要我们自己通过修改第三方的jar包将其变成一个bundle,这在有些时候是很可怕且繁琐且容易出错的操作!
除了Web bundle,其余的bundle都将是一个Spring DM Bundle,所以会spring的bundle project方式进行开发。
DataSource Bundle的开发
建议在spring perspective下进行开发,这也是STS的默认perspective,如图所示。
(1)新建一个Bundle Project,点击菜单new>>project,进入下图的对话框
选择Bundle Project,然后点击Next,进入下图
输入project名,这里推荐使用顶层的包名作为项目名,便于查找维护项目。然后点击Next,进入下图
symbolic-name会默认使用项目名,这里不需要做改变了,bundle name可以自行修改,只是用于描述而已。
Bundle version默认是1.0.0,也可以不用改。Modle Type不用选择,记得勾选Enable Bundle Classpath Container,这样才能引用其它的bundle进行import关联。target runtime也不需要管它,再次点击Next
这里的class输出目录不需要做改变,默认就可以了,然后点击Finish,project 建立。
由于Datasource bundle只是配置一个可用的数据源并将它作为OSGI服务发布,所以这个工程下是没有源代码的,只有配置文件。项目的结构图如下
项目默认会在src目录中生成META-INF目录,和MANIFEST.MF文件。为了让bundle成为一个spring bundle,我们需要在META-INF目录下创建spring目录,这样virgo server就能认出这个bundle是一个spring-powered bundle。
一般在spring目录下会有两个文件,一个是appContext.xml文件,另一个则是osgi-context.xml文件。其中appContext.xml文件用于配置当前bundle内定义的所有的bean,然后通过osgi-context.xml文件进行服务的发布或者引用。
(1)appContext.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" xmlns:p="http://www.springframework.org/schema/p"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" p:driverClassName="com.mysql.jdbc.Driver" p:url="jdbc:mysql://localhost:3306/test?autoReconnect=true" p:username="root" p:password="111111" init-method="createDataSource" destroy-method="close" /> </beans>
这里定义了datasource的bean。
(2)osgi-context.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" xmlns:osgi="http://www.springframework.org/schema/osgi" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <osgi:service ref="dataSource" interface="javax.sql.DataSource"/> </beans>
这里将定义好的datasource bean作为OSGI服务发布。
(3)MANIFEST.MF
我们还需要对此文件进行相应的配置才能让bundle正常发布运行,通过STS我们可以很方便的对这个文件进行编辑,尽量不要自己手动使用文本编辑该文件,因为它有很多格式限制。
如图
MANIFEST.MF打开后的编辑界面共有4个标签,分别Overview,Dependencies,Runtime, MANIFEST.MF
其中Overview就是对bundle的大致描述,比如可以编辑bundle-symbolic name(即ID),还有version等信息;
Dependencies则是用于配置import的依赖关系
Runtime则是用于设置export和bundle classpath的内容
而MANIFEST.MF则是最终生成的内容的文本内容,即文件的真面目。
上图是dependencies的内容,可以看到有3个panel,分别是Import Package,Import Bundle和Import Library,每个panel都有4个按钮,Add,Download,Remove和Properties。
其中Import Bundle和Import Library是virgo server提供的,与Require-Bundle的头信息是不一样的,这两个内容实际上是为了简化Import Package,因为你可能会使用一个bundle中很多的package,
如果你一个个引入就很繁琐,你可以直接对整个bundle进行引入,当virgo遇到这个头信息时会将它自动拆解到Import Package中,所以这3个Import最终都会变成Import Package中的内容。所以Import Library是对一些bundle进行引入,而不用每个bundle来引入,这需要使用后缀名为.libd的文件来引入。spring本身提供了一个.libd文件用来引入整个spring库。
请记住,Import Bundle的内容和Import Library的内容最终还是会变成Import Package中的内容,所以跟OSGI中的Require-Bundle是不一样的。
4个按钮的作用分别是:
1)Add
用来添加可以查找到的package,bundle或者library
那么它是查找哪个位置的呢?它是查找virgo server的目录下的repository目录的,这里是用于存放virgo server运行时相关的bundle的地方,所以如果你有新的bundle(不管是第三方的还是自己的)需要引用,你需要将它bundle放置到repository目录中的某个子目录中(这个目录默认有两个子目录,一个是ext,一个是usr,推荐将bundle都放入ext中,或者重新配置usr的读取属性再放入usr中,这个内容将在后面如何操作virgo server的章节中详细介绍)。
2)Download
如果你没有需要的bundle,那么可以通过download去下载你需要的,不过不推荐在这里下载,这个按钮可以不管。
3)Remove
有添加就肯定可以移除,这个按钮就是用于移除你不需要的依赖引入。
4)Properties
这个按钮是用于编辑某个import的版本的范围和是否是optional的(即解析的时候是否忽略这个依赖的检查)
在Datasource bundle中,我们需要引入图中的package才能正常使用此bundle
(3.3)Runtime
如图,有2个panel,一个是Exported Packages,一个是Classpath
其中Exported Packages是用于曝露该bundle内的package给其它bundle进行import的,classpath panel则是设置Bundle-Classpath这个头信息的,它的内容是可以排序的,编辑的内容是属于本bundle内的目录路径或者是jar包。
Exported Packages中的4个按钮
1)Add
曝露bundle内的package
2)Remove
可增加就可以删除
3)Properteies
用于编辑曝露的package的版本
4)Caclculate Uses
跟import中的uses指令有关系的
这里Datasource bundle不需要配置任何的export
(3.4)MANIFEST.MF标签
通过上面的配置生成最终的内容如下图
至此,Datasource Bundle的开发就完成了。
这里附上当前项目的源代码
- net.georgezeng.test.datasource.zip (6.2 KB)
- 下载次数: 343
评论
我创建Bundle Project工程后,没有这个依赖库。谢谢。
也碰到相同的问题 等待中。。。。。
我创建Bundle Project工程后,没有这个依赖库。谢谢。
An Import-Package could not be resolved. Caused by missing constraint in bundle <net.georgezeng.test.datasource_1.0.0>
constraint: <Import-Package: org.apache.commons.dbcp; version="[1.2.2.osgi,1.2.2.osgi]">
An Import-Package could not be resolved. Caused by missing constraint in bundle <com.springsource.org.apache.commons.dbcp_1.2.2.osgi>
constraint: <Import-Package: org.apache.commons.pool; version="[1.3.0,2.0.0)">
我加了 这个后 org.apache.commons.pool;version="[1.4.0,1.4.0]",重新部署了,也还是错误的,错误信息: Resolver report:
An Import-Package could not be resolved. Caused by missing constraint in bundle <net.georgezeng.test.datasource_1.0.0>
constraint: <Import-Package: org.apache.commons.dbcp; version="[1.2.2.osgi,1.2.2.osgi]">
An Import-Package could not be resolved. Caused by missing constraint in bundle <com.springsource.org.apache.commons.dbcp_1.2.2.osgi>
constraint: <Import-Package: org.apache.commons.pool; version="[1.3.0,2.0.0)"> 怎么回事 ?
可能需要具体分析了,你可以加到这个群150023448交流一下
An Import-Package could not be resolved. Caused by missing constraint in bundle <net.georgezeng.test.datasource_1.0.0>
constraint: <Import-Package: org.apache.commons.dbcp; version="[1.2.2.osgi,1.2.2.osgi]">
An Import-Package could not be resolved. Caused by missing constraint in bundle <com.springsource.org.apache.commons.dbcp_1.2.2.osgi>
constraint: <Import-Package: org.apache.commons.pool; version="[1.3.0,2.0.0)">
我加了 这个后 org.apache.commons.pool;version="[1.4.0,1.4.0]",重新部署了,也还是错误的,错误信息: Resolver report:
An Import-Package could not be resolved. Caused by missing constraint in bundle <net.georgezeng.test.datasource_1.0.0>
constraint: <Import-Package: org.apache.commons.dbcp; version="[1.2.2.osgi,1.2.2.osgi]">
An Import-Package could not be resolved. Caused by missing constraint in bundle <com.springsource.org.apache.commons.dbcp_1.2.2.osgi>
constraint: <Import-Package: org.apache.commons.pool; version="[1.3.0,2.0.0)"> 怎么回事 ?
可以呢,如果实在不行你可以在eclispe里的virgo插件的server面板中选择Repository标签,然后在那里直接下载到virgo的库里
发表评论
-
手把手教会你开发动态web项目(4)
2016-03-12 10:50 652本文将会讲解如何使用IntelliJ来进行debug ... -
手把手教会你开发动态web项目(3)
2016-03-12 10:23 600本章讲述如何进行业务 ... -
手把手教会你开发动态web项目(2)
2016-03-12 09:45 554这一章主要讲项目的结构。 1. 项目使用gradle进行管 ... -
手把手教会你开发动态web项目(1)
2016-03-11 16:34 901框架终于搭建得差不多了,现在分享一下如何利用此框架进行动态 ... -
基于virgo环境的OSGI+Maven的web开发代码下载(spring+hibernate+GWT)
2012-05-16 20:54 8905由于很多朋友在使用我的上一个版本的web开发遇到了非常多的问题 ... -
关于新版本的STS安装新virgo插件的问题
2012-02-28 21:30 6926新的sts已经没有spring dm server tool的 ... -
virgo server使用指南(2)
2011-10-22 15:47 6332这个章节来看看virgo server的目录结构,如有错漏请 ... -
virgo server使用指南(1)
2011-08-27 10:23 9718virgo server的前身是spring dm serve ... -
OSGI下的web应用开发(7)
2011-07-23 12:52 7170现在我们要进入最后一 ... -
OSGI下的web应用开发(6)
2011-07-23 10:04 3586这一节进入Service Interface Bundle和S ... -
OSGI下的web应用开发(5)
2011-07-22 19:04 7647这一节将对Dao Interface Bundle 和 D ... -
OSGI下的web应用开发(4)
2011-07-22 17:28 3745接下来开发Domain Bundle这个模块。这个Bundle ... -
OSGI下的web应用开发(2)
2011-07-21 13:28 5275前面已经讲了开发环境 ... -
OSGI下的web应用开发(1)
2011-07-20 21:33 10031本文将详细的展示OSGI下如何开发一个基于spring的web ... -
OSGI心得体会
2011-07-14 16:13 15056l 什么是模块化 与 ... -
OSGI知识小计(3)- bundle的总结
2011-04-26 20:37 59(1)bundle的identifier 在 ... -
OSGI知识小计(2)
2011-04-24 17:15 32(1)OSGI framework的类搜索顺序: 如 ... -
OSGI知识小计(1)
2011-04-22 21:03 71今天学习了OSGI的一些入 ... -
如何安装OSGI的模块(How to install bundle into OSGI Container)
2011-04-20 00:16 64今天开始学习OSGI的知识 ...
相关推荐
基于OSGi的Web应用开发系列(全).pdf基于OSGi的Web应用开发系列(全).pdf基于OSGi的Web应用开发系列(全).pdf基于OSGi的Web应用开发系列(全).pdf基于OSGi的Web应用开发系列(全).pdf基于OSGi的Web应用开发系列(全).pdf...
基于OSGi和Spring开发Web应用
基于OSGi和Spring开发Web应用
基于OSGi和Spring开发Web应用的博文对应的代码
行业分类-设备装置-基于OSGi的Web应用开发平台权限管理自适应设计方法.zip
基于OSGi和Spring开发Web应用教程 教程
开发一个简单的 OSGi Web 应用实例,如何进行OSGI开发的 实例有利于入门着进行使用
基于 OSGi 和 Spring 开发 Web 应用
1、自己开发的OSGi Web Console,适用于实现了OSGi规范的Equinox、Felix等...2、展示了如何把OSGi框架作为一个组件嵌入到现有的未基于OSGi开发的Web应用当中,在Web应用中可获取OSGi中的Service以增加应用的灵活性。
基于OSGi和Spring开发企业级Web应 目前OSGi和Spring已经受到了广泛的关注,如果我们将OSGi和Spring结合,更能充分发挥二者各自的特长,同时更好地满足企业级应用开发的需求。
我转载的博客“OSGi环境下建立Web工程的Hello World ”中列出的jar,结合博客“OSGi环境下建立Web工程的Hello World ”开发应用。
Spring DM 1.1.x最大特性便是它可以支持在其中部署WEB应用我使用后感觉这是个很酷特性我甚 至觉得用这种方式开发基于OSGi WEB...使用Spring DM进行WEB应用开发人来说成功地配置却不是件容易事,文档详细讲解了相关配置
辛苦研究了一个多月,终于搭建成了一个可用于实际应用开发的OSGI-WEB框架,采用OSGi+SpringMVC+Spring+Hibernate+Virgo技术,鉴于此类技术架构甚少,特提供出来供大家参考。 使用步骤: 一、下载STS搭建Osgi开发...
包括OSGI的相关书籍及网页: OSGi R4服务平台核心规范中译本 Spring OSGI入门 modular java OSGI原理与最佳实践 ...基于 OSGi 和 Spring 开发 Web 应用 基于 OSGi 的面向服务的组件编程 探索 OSGi 框架的组件运行机制
是一本适合新接触OSGI开发学习的一本很好的书,本书介绍了Equinox, Spring-DM和Felix这三个常用的OSGi容器的使用、开发、以及WebApplication的开发部署;介绍了OSGi的规范和Core Framework和Layer。包含书中的用例源...