知识大全 基于OSGi和Spring开发Web应用
Posted 知
篇首语:上下观古今,起伏千万途。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 基于OSGi和Spring开发Web应用相关的知识,希望对你有一定的参考价值。
基于OSGi和Spring开发Web应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
作为一个新的事实上的工业标准 OSGi 已经受到了广泛的关注 其面向服务(接口)的基本思想和动态模块部署的能力 是企业级应用长期以来一直追求的目标 Spring 是一个著名的 轻量级 J EE 开发框架 其特点是面向接口编程和非侵入式的依赖注入 将 OSGi 和 Spring 结合能充分发挥二者各自的特长 更好地满足企业级应用开发的需求 Spring 开发组织在 年发布了将 OSGi 和 Spring 结合的第一个版本 Spring DM 本文通过一个简单实例 介绍如何利用 Spring DM 开发基于 OSGi 和 Spring 架构的 Web 应用 同时探讨其中用到的关键技术及其基本思想
开发一个简单的OSGi Web应用实例
一个简单的 Web 应用
我们写一个简单的 Web 应用 l 计算两个数字的和或乘积 如下图所示
图 一个简单例子
为了体现 OSGi bundle 的动态部署能力 我们写两个 service bundle 其中一个计算两个数字的和(称为 add bundle) 另外一个计算两个数字的积(称为 multiply bundle) 当我们点击 Compute 按钮的时候 如果此时 add bundle 被部署 则页面将返回两个数字的和 否则如果此时 multiply bundle 被部署 则页面将返回两个数字的积 开发环境准备
下载 Eclipse
获取所有 OSGi Equinox 和 Spring 的插件 如下图所示:
打开 Eclipse 设置 target platform 为上述插件集合
基本模块设计
该应用主要包含两个层次: 服务层和 Web 层 Web 层基于 Spring MVC 实现 包含处理 Web访问相关的 bundle(本例中只有一个) 服务层包含处理数字计算的 bundle 本例中包含一个声明服务接口的 pute interface bundle 和两个实现该服务接口的 bundle add bundle 和 multiply bundle 基本模块结构如下图所示
图 基本框架
模块程序实现
Step 实现 Service Layer
服务层的三个 OSGi bundle 实现完毕之后如下图所示
图 服务层
其中 zxnpute 是声明服务接口的 bundle zxnpute add和 zxnpute multiply 是实现了服务接口的两个 bundle
zxnpute
声明一个 Compute 接口 其中包含一个接口方法 puteNums() 如下图所示
图 服务层接口 bundle
zxnpute add
bundle zxnpute add 的基本程序结构如下图所示
图 接口实现 bundle add
在该 add bundle 中 添加一个Add类 实现Compute接口 如下图所示
图 接口实现代码 Add 类
注意到我们在 META INF 下建了一个 spring 目录 并且添加了一个 puteAdd context xml 文件 系统启动时 Spring 将利用该xml文件创建一个 bean 实例 并把该 bean 输出为一个 OSGi service 如下图所示
图 Spring 声明文件 puteAdd context xml
该xml文件中 osgi : service是 Spring DM 输出 OSGi service 的标记 其中的 interface属性标明了该 service 实现的服务接口
zxnpute multiply
按照与add bundle 同样的方法 实现 multiply bundle 如下图所示
图 接口实现代码 Multiply 类
类似的 添加一个 puteMultiply context xml 输出 OSGi service 如下图所示 图 Spring 声明文件 puteMultiply context xmlStep 实现 Web LayerWeb 层只包含一个 bundle zxn example web 采用 Spring MVC 和 OSGi 构建 基本程序结构如下图所示
图 Web Layer 程序结构
ComputeControler java 该JAVA类实现了 springframework web servlet mvc Controller 是本 web应用中核心的 servlet 负责接受并处理 web 请求 该类调用 ComputeServiceRef 的方法实现业务逻辑 该类关键的方法是 handleRequest(…) 如下图所示
图 核心 servlet 类
ComputeServiceRef java 该 JAVA 类负责引用部署的 service bundle 完成最终计算 其中的 puteService 由 Spring 根据 OSGi 中实际部署的 service 进行注入 本例中 实际部署的 service 可能是 add bundle 或者 multiply bundle
需要特别注意的是 此处体现了 Spring DM 的动态特性 OSGi 的动态部署能力使得 Spring 的动态服务注入成为可能
图 服务消费类
HTTPContextResgistry java 该 JAVA 类负责在 OSGi 环境中配置和注册 HTTP 服务 其关键方法为 bean 初始化时调用的 init( ) 方法
图 在 OSGi 环境中注册 HTTP 服务
该 init 方法中 第六行的 getHTTPService(…) 调用 OSGi 的 ServiceTracker 来获取 OSGi环境中注册的 HTTP 服务的引用 如下图所示
图 使用 ServiceTracker 获取 HTTP 服务
puteWeb context xml 该 xml 文件主要用于配置 HTTPContextResgistry bean 类 以及导入对 Compute 服务接口的引用 标记 osgi : reference 用于声明要导入的服务接口 其 interface 属性标明了该接口的定义 本例中为 zxnpute Compute 接口
图 Spring 声明文件 导入服务接口
puteWeb Dispatcher xml 该 xml 文件用于配置 ComputeControler bean类
图 Spring 声明文件 配置核心 servlet 类
运行程序 以往开发 J EE 应用通常需要将应用服务器的 runtime 集成到开发环境中才能进行程序调试 非常麻烦 基于 OSGi 的应用完全可以脱离应用服务器运行 这使得程序开发和调试变得非常容易 直接在 Eclipse 中调试运行就可以 我们在 Eclipse 中将程序运行起来 如下图所示 图 运行 OSGi 程序
从上图中看到 我们同时选择部署了 add bundle 和 multiply bundle 利用 OSGi console 察看如下 图 察看部署的 OSGi bundle
当 OSGi 环境中同时部署有多个服务接口的实现 bundle 时 OSGi 会选择一个默认的 bundle提供服务 本例中 Spring 会默认注入 add bundle 我们通过 web 访问 l 页面 图 访问页面
点 Compute 按钮之后 结果页面如下 图 访问结果
可以看出 是 add bundle 提供了计算服务 下面我们通过命令 <stop > 来停止 add bundle的服务 图 停止 add bundle
图 add bundle 状态变为 RESOLVED
重新访问 l 页面 结果得到的是两个数字的乘积 可以看出 是 multiply bundl 提供了计算服务 如下图所示 图 再次访问页面
小结
cha138/Article/program/Java/JSP/201311/19601相关参考
基于JSF技术的WEB应用开发 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 开发基于Java技
知识大全 基于ASP.NET MVC框架开发Web论坛应用程序[1]
基于ASP.NETMVC框架开发Web论坛应用程序[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
知识大全 基于ASP.NET MVC框架开发Web论坛应用程序[3]
基于ASP.NETMVC框架开发Web论坛应用程序[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
知识大全 基于ASP.NET MVC框架开发Web论坛应用程序[2]
基于ASP.NETMVC框架开发Web论坛应用程序[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
知识大全 用struts+spring+hibernate组装web应用
其实就算用Java建造一个不是很烦琐的web应用程序也不是件轻松的事情当为一个应用程序建造一个构架时有许多事情需要考虑从高层来说开发者需要考虑怎样建立用户接口(userinterfaces)?在哪
知识大全 用Spring Web Flow和Terracotta搭建Web应用
用SpringWebFlow和Terracotta搭建Web应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起
Spring-OSGI1.0M3中文手册 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 关于he
知识大全 Spring集成XFire开发Web Service
Spring集成XFire开发WebService 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
基于Eclipse开发轻量级Spring插件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 摘要
开发基于Web的CSS设计器 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!