www.paper.edu
基于 Spring+zk 的 WebDisk 系统研究
胡桂娇,王更生
华东交通大学计算机科学与技术,南昌(330013)
E-mail:guijiaohu@163
摘 要: 存储资源作为信息的载体, 对可管理性、 安全性及便捷性都有着极高的要求。 目前, 一些企业和政府机构缺乏足够的人力和物力来管理自己的存储系统, 这使得网络硬盘及文件 管理系统(WebDisk)在这个领域有着很大的现实意义和市场需求。本文首先对 WebDisk 系统的实际意义做了简单阐述;然后介绍了系统的主要功能模块、特点及系统结构;接着重 点介绍了 j2ee 企业级架构、AOP 面向方面编程、IOC 容器及当前流行的 Ajax 等应用于 WebDisk 中的关键技术;最后,在结合以上技术分析的基础上,利用开发工具对 WebDisk 作了实践研究。 关键词:网络硬盘,J2EE,面向方面技术,IOC,Ajax,负载均衡
1 引言
今天的企业和政府机构都在大量的使用 IT 系统,对 IT 系统的依赖越来越大,IT 系统 的使用导致存储爆炸性的增长, 对存储资源管理变得越来越重要。 用户越来越担心自己数据 的安全,使用的便利性等,但又缺乏足够的技术资源或资金投入维护自身的存储系统。这使 用户越来越多地担心自己的存储系统的管理, 而不能将注意力高度集中在制造产品或提供服 务等核心业务上面[1]。 WebDisk 是网络形式的文件管理系统,亦即网络硬盘。最主要的特点是,用户随时随地 都可以管理他的文件,不管他是在家中、单位或其它任何地方,只要你连接到因特网,就可 以管理你存储在远程 WebDisk 系统上的文件,就如同管理存储在本地的文件一样,甚至还 可以和其他人共享他的文件[2]。
2 系统主要功能及特点
WebDisk 存储管理系统,采用 J2EE 技术架构,和独特的负载均衡技术,保证系统的高 度可扩展性、灵活性和系统整体性能[3];可跨越具体的硬件平台、操作系统、文件系统、网 络环境;基于 WEB、WEB Folder、客户端的三种访问方式。WebDisk 的核心功能是文件传 输,策略定制和管理。 文件传输:文件及文件夹上传、下载。 策略定制: 断点续传、基于策略的自动化传输。 管理:系统管理、空间管理、用户管理、用户组管理、传输任务队列管理。 附加功能 :影音文件在线播放、图片文件在线浏览。断点续传、基于策略的自动化传输。
-1-
www.paper.edu
3 系统拓扑结构
图1
WebDisk 系统结构
WebDisk 应用服务器负责处理 WebDisk 的业务逻辑,如,上传文件时,它负责文件转储到 存储设备上,并将文件名,文件大小等信息写入数据库服务器。数据库服务器存储系统元数 据,包括 WebDisk 系统的用户信息,目录列表,文件列表文件名,文件大小,上传时间等。 在系统中,数据库的负载并不重,但如果出于高可用性考虑,可以采用“容错”的 HA 方案, 或是 Cluster 的 HA 方案。存储设备上存储所有上传的文件[4]。
4 系统架构
图2
WebDisk 系统结构
spring framework网络系统参数
WebDisk 服务器端为分层结构:用户界面层(UI)、应用业务层、数据层。对应的软 件架构如下:
-2-
www.paper.edu
图3
WebDisk 软件架构图
认证授权模块(Authenticatio/Authorization):用户登入登出,检查用户权限。 工作空间模块(Workspace):对工作空间进行新增、修改、删除、查询等管理。 系统状态模块(Status):对工作空间、组、用户等进行分级别的状态查看。 系统参数模块(SysParameter):对整个系统的进行初始化操作。 日志模块(Log):记录分级别地进行系统日志记录,并提供查询。 组模块(Group):新增、修改、删除、查询等管理组的操作。
5 系统关键技术
5.1 基于 J2ee 的分层企业级设计
WebDisk服务器端为分层结构:用户界面层(UI)、应用业务层、数据层。 用户界面层采用基于事件、组件化、Rich Client 方式与 AJAX 的最新技术,使用户操作 更具便捷性[5]。在这一层中采用开源框架 Z
K(),保证了开发质量,减 少了开发量,降低了开发难度。在业务层和用户界面层之间,采用 AOP 技术,实现用户授 权、系统日志、业务操作的事务管理等面向切面的方法。这样,既保持了结构清晰简 洁,又大大减少开发任务量。业务层采用 Spring 框架的 IOC 容器来管理所有业务层对象的 生命周期。数据层采用 ORM 工具 Hibernate 来简化对象/关系映射转化。
5.2 AOP 技术
AOP(Aspect-Oriented-Programming)面向方面编程是由 GregorKiczales 在 1997 年提出的 一个全新的编程技术,为开发者提供了一种描述横切关注点的机制,并能够自动地将这些横 切关注点织入到面向对象的软件系统中,从而实现了横切关注点的模块化[6]。方面是 AOP 的核心,就是把对一个可能横切不同的多个对象的关注点模块化,这些模块化单元就叫“方 面”。通过划分“方面”代码,横切关注点变得容易处理。开发者可以在编译时更改、插入或 除去系统的“方面”,甚至重用系统的“方面”。在系统中,日志及安全性拦截等功能贯穿整个 系统的多个模块,我们将这种行为称为“横切关注点”。下面是几个主要概念: 连接点(Join point)也就是运用程序执行过程中需要插入切面模块的某一点。连接点主要强调 的是一个具体的“点”概念。 这个点可以是一个方法、 一个属性、 构造函数、 类静态初始化块, 甚至一条语句。
-3-
www.paper.edu
切入点指一个或多个连接点,可以理解成一个点的集合 增强(Advice)定义切面中的实际逻辑(即实现),比如日志的写入的实际代码,或是安全检查 的实际代码。换一种说法增强(Advice)是指在定义好的切入点处,所要执行的程序代码。 是用来实现对连接点进行拦截,从而在连接点前或后加入自定义的切面模块功能 <bean id="logInterceptor" class="com.business.LogInterceptor"> //定义的 <property name="logManager" ref="logManager"/> </bean> <bean <property name="advice"> <ref local="logInterceptor"/> </property> <property name="patterns"> <list> //下面是定义的连接点集合 <value>.*save.*</value> <value>.*add.*</value> <value>.*del.*</value> ……………….. </list> </property> </bean> 这个是对 save,delete,add 等方法进行拦截的,只要目标对象得到这个通知就可以对其 进行拦截,下面 spaceManager 目标对象得到了通知 <beanid="spaceManager" class="ansaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager" ref="transactionManager"/> <property name="target" ref="spaceManagerTarget"/> <property name="transactionAttributes"> <props> ………………. </props> </property> <property name="preInterceptors"> <list> <ref local="logAdvisor"/> </list> </property> </bean> 拦截的日志如图 //加载一个通知
id="logAdvisor"
class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> //增强或通知
-4-
www.paper.edu
图 4 日志
5.3
IOC 技术
IOC 是一种新的设计模式, IOC 模式, 即 系统中通过引入实现了 IOC 模式的 IOC 容器,
即可由 IOC 容器来管理对象的生命周期、依赖关系等,从而使得应用程序的配置和依赖性 规范与实际的应用程序代码分开。 其中一个特点就是通过文本的配件文件进行应用程序组件 间相互关系的配置,而不用重新修改并编译具体的 Java 代码。BeanFactory 提供了一种先进 的配置机制来管理任何种类 bean(对象),这种配置机制考虑到任何一种可能的存储方式。 <beans> <bean id="userDao" class="com.dao.userDao"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <bean id="loginManagerTarget" class="com.business.LoginManagerImp"> <property name="userDao" ref="u
serDao"/> </bean> <bean id="spaceDao" class="com.dao.spaceDao"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <bean id="spaceManagerTarget" class="com.business.SpaceManagerImp"> <property name="spacedao" ref="spaceDao"/> </bean> </beans> 下面是怎么使用 bean 首先通过 ApplicationContext 对象得到配置文件上下文, private static ApplicationContext ctx ctx = new ClassPathXmlApplicationContext("../l"); 然后创建上下文中的 bean 对象 LoginManager= Bean("loginManager",LoginManager.class);
5.4 页面无刷新技术 Ajax
Ajax( A synchronous JavaScript And XML 的缩写),其定义为:Ajax 并不是一门新的语言 或技术,它实际上是几项蓬勃发展的技术以新的方式强大组合而成的,其中:使用 XHTML 和 CSS 标准化呈现,使用 DOM 实现动态显示和交互,使用 XML 和 XSTL 进行数据交换与 处理,使用 XMLHttpRequest 对象进行异步数据读取,使用 JavaScript 绑定和处理所有数据。 XM LH ttp Request 是 Ajax 引擎中最核心的技术,在微软 IE 下它是 XMLHTTP 组件的一个
-5-
www.paper.edu
对象。通过这个对象,Ajax 可以像桌面应用程序一样只同服务器进行数据层面的交换,而 不用每次都刷新界面, 也不用每次将数据处理的工作都提交给服务器来做。 这样既减轻了服 务器的负担又加快了响应速度、缩短了用户等待的时间。本系统中,采用 Ajax 的开源框架 ZK。 ZK 是事件驱动的,基于部件的使 Web 用户界面成为富客户端的框架。ZK 包含了一个 基于 AJAX 的事件驱动的引擎,一个 XUL 和 XHTML 的富客户端界面部件集,和一种叫做 ZUML 的标记语言(ZK 用户界面标记语言)。用 ZK,你能用富特性的 XUL 和 XHTML 部件表现你的应用程序, 并且在被用户动作触发的事件上操作它们, 就象你做了多年的桌面 应用程序一样。不同于其他多数的框架,AJAX 是在 ZK 中是幕后的技术。部件内容的同步 和排序的事件是被 ZK 引擎自动地处理的。 你的用户能够得到和桌面应用一样的响应和交互 性,并且你的开发过程会和桌面应用程序一样的简单[7]。
5.5 独特的负载均衡技术
当用户发起一个请求时,DNS 服务器根据用户提供的域名,以轮叫(Round Robin)的 方式为其分配一个应用服务器 IP,使客户端与该应用服务器直接建立通讯连接。应用服务 器从元数据数据库中获得最新的服务器状态表, 并将其中负载最轻的服务器信息返回给客户 端。 客户端与负载最轻的应用服务器建立点对点的联系, 并将作业交给的这一应用服务器[8]。
5.6 三种独特的访问方式
浏览器方式
图 5 浏览器方式
-6-

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。