前面已经讲了开发环境的准备,接下来来讲讲本次web应用的设计。
由于是演示用途,所以业务很简单,提供一个联系人的添加页面,添加的内容包含联系人的姓名和手机号,每点击一次添加就保存到服务端并从服务端重新读取联系人列表返回。
在设计OSGI的web应用时,如何划分模块成为了一个重要的课题。下面是几种可能的形式:
显然,这跟在非OSGI的环境是一样的,就是把整个应用直接作为模块使用,对于开发而言没有什么区别(只是要注意对文件系统路径的处理);热部署时整个应用将被重载
web层是一个独立的模块,其余的内容(即service和dao)划分为一个独立的模块
这种做法是一种粗糙的模块划分,优点是对spring和hibernate等框架bundle的集成将变得轻松,因为在一个大的bundle里,不用担心classloader引起的类加载的问题
缺点也很明显,模块化的程度太低了,并且热部署时还是会引起整个应用被重载
- 传统的3层结构,分别是web层、service层和dao层(看情况有时在web层和service层之间可以多一层facade层)
web层是一个独立的模块;service层和dao层则有两种模块划分的形式
(1)接口定义和实现放在一个模块
不推荐此类模块定义,这样使得修改模块的实现后进行部署时,由于上层的模块依赖于该层,导致发生了依赖解析,从而导致连串的重载。例如,web层是依赖于service层的,而service层是依赖于dao层的,假如service的实现发生了变化那么service必须重新update和refresh,这时web bundle会因此受牵连。
(2)接口定义和实现划分为2个模块
为了解决依赖解析引起的连串效应,这里将接口和实现分开,这样依赖关系就发生了一些微妙的变化了。
web bundle依赖于service接口bundle,service实现bundle依赖于service接口bundle,service接口bundle依赖于dao接口bundle,dao实现bundle依赖于dao接口bundle。这时只要接口的定义没有发生改变,对实现的修改将是独立的,不会对其它的bundle造成任何的影响,因为它是依赖链条的最后一环。
将根据不同的业务对模块进行划分,比如上面讲到的联系人业务,它会有一个ContactService和ContactDao的定义,那么这就是与它的业务息息相关的内容,可以将它们划为一个模块。
这里也涉及到3种不同的形式:
(1)service的接口和实现以及dao的接口和实现都在一个模块下
这种划分实际上就是上面讲的将非web层作为一个bundle,但是这里是以业务作为粒度进行划分,所以每个业务都有一个自己的bundle。
这种形式的优点是spring进行AOP、事务、ORM的调用都很简单,因为都在一个bundle里
缺点则是由于细分了业务模块,每个业务模块都需要进行重复的配置(即AOP、事务等的配置)
(2)service的接口和实现为一个bundle,dao的接口和实现为一个bundle
优点是使得service和dao间的互访实现模块化控制,service的修改不会影响到底层
缺点对dao实现进行修改还是会影响到service
(3)serivce的接口为一个bundle,service实现为一个bundle,dao接口为一个bundle,dao实现为一个bundle
对各个层的实现进行修改都不会影响到依赖。这是最好的方式;
但是缺点也显而易见,因为bundle将变得非常的多,维护是一个大问题。
Note:(2)和(3)同样会使得配置变得重复,因为各个模块对spring的配置都是独立的
我最终的选择:
通过对上面的各种可行的情况的分析,我选择了传统的分层结构的方式中的(2),这样即能够保证对service和dao实现的修改不会影响到各层间的依赖,也降低了对spring的重复配置
如图所示:
系统的结构设计到此结束
- 大小: 19.8 KB
分享到:
相关推荐
"基于OSGi和Spring开发Web应用" OSGi(Open Service Gateway Initiative)是一种面向服务的框架,能够提供动态模块部署和管理的能力。Spring 是一个轻量级的J2EE开发框架,特点是面向接口编程和非侵入式的依赖注入...
**基于OSGi的Web应用开发**是现代软件开发中的一种技术实践,它允许开发者构建模块化、可扩展和可维护的Web应用。OSGi(Open Service Gateway Initiative)是一种开放的标准,提供了一种服务导向的、模块化的Java...
综上所述,基于OSGi和Spring开发Web应用不仅能够充分利用OSGi的模块化优势和Spring的依赖注入机制,还能借助dmServer和SpringSource应用平台等工具,实现更加高效、灵活和可靠的企业级应用开发。
总的来说,基于OSGi和Spring的Web应用开发结合了两者的优点:OSGi提供了模块化和动态部署的能力,而Spring则带来了方便的依赖管理和服务注册。通过Spring-DM,开发者可以在OSGi环境中享受到Spring的便利,构建更灵活...
在基于OSGi的Web应用开发平台中,权限管理涉及到用户、角色和资源的控制。传统的权限管理通常采用固定的角色-权限模型,但在自适应设计中,系统需要根据用户的行为、环境或者业务需求动态调整权限分配。这通常通过...
将OSGi与Web容器整合,可以实现更加灵活和模块化的Web应用开发和部署。 **1. OSGi Bundle放入Web容器中运行** 这是通过像Equinox的Servlet Bridge这样的技术实现的,它充当了一个桥梁,让OSGi Bundle可以在传统的...
在基于OSGi和Spring的Web应用开发中,通常会将业务逻辑、服务接口和Web层分别封装在不同的模块中。根据压缩包子文件的文件名称,我们可以推测这些文件可能代表了这样的模块结构: 1. `...
本教程旨在通过一个具体的示例来介绍如何使用OSGi框架开发一个简单的Web应用。这个示例应用能够计算两个数字的和或乘积,并展示了OSGi bundle的动态部署特性。 #### 二、项目背景及目标 **背景:** OSGi (Open ...
在OSGi环境下开发Web应用的好处在于,我们可以独立更新和管理各个组件,避免了传统的Web应用中常见的类加载冲突问题,同时也简化了依赖管理。通过使用Equinox这样的强大框架,我们可以更好地利用OSGi的优势,实现...
### 基于OSGi和Spring开发企业级Web应用 #### OSGi与Spring结合的重要性 ...综上所述,将OSGi和Spring结合起来使用,可以有效地解决企业级应用开发中面临的许多挑战,是一种值得推广的技术方案。
基于 OSGi 和 Spring 开发 Web 应用
在本文中,我们将深入探讨如何基于VirgoServer进行Spring Osgi Web开发,这是一个涉及OSGi容器、Spring框架和Web应用程序的集成技术。首先,我们需要确保拥有正确的开发环境和工具,包括Spring Tool Suite (STS),...
这些工具可以将OSGi环境集成到Tomcat中,允许OSGi bundles作为Web应用的一部分运行。 Apache Felix WebConsole是一个基于Web的管理界面,可以用来管理和控制OSGi环境。你可以将其作为一个OSGi bundle部署到Tomcat中...
1、自己开发的OSGi Web Console,适用于实现了OSGi规范的Equinox、Felix等...2、展示了如何把OSGi框架作为一个组件嵌入到现有的未基于OSGi开发的Web应用当中,在Web应用中可获取OSGi中的Service以增加应用的灵活性。
6. **开发和部署**: 使用这些jar文件,开发者可以按照博客"OSGi环境下建立Web工程的Hello World"中的步骤,创建并部署OSGI兼容的Web应用。这通常涉及编写bundle的MANIFEST.MF文件来声明导出和导入的包,以及如何配置...
Web示例工程是使用OSGi技术构建的一个具体应用,通常包括了如何在OSGi环境中部署和运行Web应用程序的实例。 在OSGi框架中,Equinox是Eclipse基金会提供的一个实现,它是OSGi规范的主要实现之一,广泛应用于服务器端...