标签:layer primary 提高效率 创建 rem detail 瓶颈 命名 背景
获取项目源文件,技术交流与指导联系Q:1225467431
摘 要
随着计算机技术的不断发展,许多企事业单位的管理都实现了办公自动化,这种自动化管理方式不仅管理简单,而且效率非常高。为了更好的对电信各个站点的工作状态的监测,特做本系统。
本文所阐述的系统是使用了Java中的jcifs;jfreechart;JSPservlet;quartz等技术进行开发,并且使用Oralce作为数据库服务器管理后台数据的管理信息系统。
系统采用管理员和用户两种方式登录,分别进行管理,网页的动态数据传递通过JSPservlet技术实现,并用quartz()方法来控制数据抓取频率。首先通过jcifs技术从远程主机上抓取cpu、内存、硬盘以及oracle数据,然后存入服务器Oracle数据库中,最后通过jfreechart技术将数据以图表的形式在网页上显示出来。通过网页上的图表信息可以分析出电信各个站点的具体情况,更好的监测、管理整个电信系统。
关键词:电信; 性能监测系统; jcifs; jfreechart; JSPservlet;
ABSTRACT
As computer technology are developing steadily, many enterprises and institutions in the management of office automation, both this automation management and efficiency is not only a very high. in order to better for the site of the work of the monitoring of state, doing this system.
Elaborated by the system is used in java jcifs ; jfreechart ; jspservlet ; quartz and technology for development and use oralce as the database server management background data management information system.
The system uses the administrators and users to log in two ways, and the movement of data transmission by jspservlet technology, and quartz ( ) approach to data capture frequency. the first jcifs technology from the remote unit grab the cpu and memory, the hard disk and oracle data and then stored in servers oracle database, the final through jfreechart technical data on a chart on pages of the show on the website. by the information.
Keywords :telecom; performance monitoring system; jcifs; jfreechart; jspservlet;
目 录
绪论1
1程序开发的技术基础2
1.1 J2EE技术介绍 2
1.2 J2EE三大框架的介绍 3
1.2.1 Mvc介绍 3
1.2.2 Struts介绍 4
1.2.3 Hibernate介绍 4
1.2.4 Spring技术 6
1.3 FLEX 介绍 7
1.3.1 FLEX来源和原理 7
1.3.2 FLEX的优点 8
1.3.3 Flex中mxml的性能问题 8
1.4 Ajax介绍 9
1.5 JavaScript介绍 10
1.6 Oracle介绍 10
1.7 Hessian介绍 11
1.8 P6SPY、SQL Profiler介绍 11
1.9 运行环境 12
1.9.1 软件环境 12
1.9.2 硬件环境 13
2总体设计14
2.1 系统分析 14
2.1.1 系统的名称、目标 14
2.1.2 数据字典 14
2.2 系统总体设计 16
2.3 模块功能设计 17
2.3.1 监测机器管理模块 17
2.3.2 用户管理模块 17
2.3.3 监测数据模块 18
3系统功能实现19
3.1登录模块 19
3.2用户管理模块 21
3.3监测机器管理模块 23
3.4数据管理模块 25
3.5数据采集模块 28
3.6数据显示模块 31
3.7作业调度模块 33
4系统测试36
结束语38
致 谢39
参考文献40
绪论
目的
本电信性能监测系统主要是为了实现电信公司对远程计算机的各项性能数据的监测,取出数据并以图文的形式显示结果。
背景
a.本系统名为电信性能监测系统。
b.本系统中国电信提出需求,中软国际实训班炽梦团队开发,为中国电信内部使用,开发地点为中软国际无锡国家软件外包园基地。
使用范围
客户需求者,本项目设计人员、编码人员以及测试人员。
任务概述
1)目标
本软件是为了解决中国电信对远程计算机系统的CPU和硬件等各项性能数据的监测,取得各系统的数据从而进行分析而设计制作,且电信内部计算机加入监测系统后同样可以对其进行监测,原则上电信内部的所有电脑都可以进行检测。公司内以管理员身份登入的计算机可以对其他计算机进行监测,公司内部其他计算机可以被管理员加作为外部电脑进行远程监测,该软件为炽梦开发小组九名成员共同研究开发,并无抄袭行为。
2)用户的特点
本软件的最终用户为电信公司监测部门的普通员工及其管理员,管理员和普通员工只需有基本Windows操作技能,而维护人员则需本科以及以学历,要求其有专业维护系统的能力,熟悉jcifs,jfreechart,JSPServlet,mysql,oracle,quartz,tomcat等技术。
3)假定和约束
假定使用该软件的人员能够熟练使用电脑及电脑相关软件。
该软件只供电信公司内部人员使用。
1 程序开发的技术基础
1.1 J2EE技术介绍
随着Internet和企业计算从90年代以来的逐步发展,HTTP、XML和Java平台逐渐演变成为针对客户机计算的标准,这些新兴技术推动了在服务器端封装商业逻辑的应用设计以及电子商务的推广。由众多知名厂商共同制定的J2EE(Java2PlatformEnterpriseEdition)平台规范则为企业开发新应用提供了统一的标准。
J2EE是各厂商共同发起的,并得到广泛认可的一个工业标准。它利用了Java2平台的技术优势,为企业提供系统整体解决方案的开发、部署和管理等相关问题的一套完整的体系结构。J2EE技术的基础就是Java2平台,J2EE不仅加强了该平台中的许多优点,如:“编写一次、到处运行的特性、存取数据库的JDBCAPI、CORBA技术的支持等之外,还提供了对业务逻辑封装的EJB(EnterpriseJavaBeans)组件技术、支持HTTP访问的Servlets和JSP,以及XML的全面支持,另外它还定义了关于事务管理的JTA和JTS接口,及保证消息传递的JMS服务等。
图1显示了一个J2EE平台的基础架构。首先,它定义了前端的接入访问支持,如:支持HTTP的Servlets和JSP,以及远程访问模式RMI。而J2EE架构中的核心就是EJB组件(即企业级JavaBean),通过EJB组件化技术将企业系统的实际业务逻辑进行封装。在平台的后端,J2EE标准定义了各种基础的服务,包括数据库访问支持的JDBC、事务管理的接口JTS、对象命名服务JNDI、消息传递的JMS服务以及访问其他组件的接口等。这些基础的服务将一个企业的已有系统有机地集成到J2EE平台中,然后通过前端的多种接入手段提供给最终用户。
图 1 J2EE平台基础架构
1.2 J2EE三大框架的介绍
J2EE三大框架即Struts、Hibernate和Spring。在本项目的架构上就采用了这三大框架,并将其整合,其优秀的扩展性和可维护性的简单,松耦合给开发节省了很多不必要的精力。
1.2.1 Mvc介绍
MVC(Model-View-Controller)是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。
视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Macromedia Flash和象XHTML,XML/XSL,WML等一些标识语言和Web services.
模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。例如它可能用象EJBs和ColdFusion Components这样的构件对象来处理数据库。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据,可以减少代码的重复性。
控制器:控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后确定用哪个视图来显示模型处理返回的数据。[1]
总结MVC的处理过程,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。流程如下图所示:
图 2 MVC流程图
1.2.2 Struts介绍
Struts是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework。Struts就是在JSP Model2的基础实现了MVC设计模式的WEB Framework。采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。
Struts框架可分为以下四个主要部分,其中三个就和MVC模式紧密相关:
1、模型(Model),本质上来说在Struts中Model是一个Action类(这个会在后面具体讨论),开发者通过其实现商业逻辑,同时用户请求通过控制器(Controller)向Action的转发过程是基于由struts-config.xml文件描述的配置信息的。
2、视图(View),View是由与控制器Servlet配合工作的一整套JSP定制标签库构成,利用View层可以快速建立应用系统的界面。
3、控制器(Controller),本质上是一个Servlet,将客户端请求转发到相应的Action类。
4、一堆用来做XML文件解析的工具包,Struts是用XML来描述如何自动产生一些JavaBean的属性的,此外Struts还利用XML来描述在国际化应用中的用户提示信息的(这样一来就实现了应用系统的多语言支持)。下图即是Struts的MVC流程图。
图3 Struts的MVC应用流程图
1.2.3 Hibernate介绍
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。下面对这五的核心接口分别加以介绍。
Session接口:Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSesion对象称为用户session。
SessionFactory接口:SessionFactroy接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
Configuration接口:Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。
Transaction接口:Transaction接口负责事务相关的操作。它是可选的,可发人员也可以设计编写自己的底层事务处理代码。
Query和Criteria接口:Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。[2]
图4为Hiberante框架的应用流程图。详细描绘出了5大接口在某个具体阶段的作用。
图4 Hiberante框架的应用流程图
1.2.4 Spring技术
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
图5 Spring框架图
组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:
核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
Spring 框架的功能可以用在任何 J2EE 服务器中,大多数功能也适用于不受管理的环境。Spring 的核心要点是:支持不绑定到特定 J2EE 服务的可重用业务和数据访问对象。毫无疑问,这样的对象可以在不同 J2EE 环境 (Web 或 EJB)、独立应用程序、测试环境之间重用。[3]
1.3 FLEX 介绍
Flex是近几年刚出现的富客户端新技术,它强大的页面展示能力,以及与J2EE的无缝结合,使它的应用被普及推广。
本项目中,在客户管理模块中的动态数据分析方面,就用到了此技术。它将繁多的各个会员各个时间的身体状况的动态数据采用图表对比的方式显示出来,使管理层能够清晰的看到数据的走向、以前和现在的不同,为将来计划安排的实施打好坚实的基础。
1.3.1 FLEX来源和原理
大名鼎鼎的Macromedia Flash是强大的矢量动画编辑工具,在做动画起家之后,Flash一直在谋求rich internet application(ria富客户端)的霸主地位,最有影响的是,已经推出了面向对象的编成脚本actionscript2.0,并且建立起类似于java swing的类库和相应component(组件)。Flex是通过java或者.net等非Flash途径,解释.mxml文件组织components,并生成相应的.swf文件。Flex的component和flash的component很相似,但是有所改进增强。 Flex 是 Macromedia(现已被Adobe公司收购)发布的presentation server(展现服务),它是java web container或者.net server的一个应用,根据.mxml文件(纯粹的xml描述文件和actionscript)产生相应得.swf文件,传送到客户端,由客户端的flash player或者shockwave player解释执行,给用户以丰富的客户体验。图6为它的工作流程图。[4]
图6 Flex应用流程图
1.3.2 FLEX的优点
传统的WEB开发,在表现层次受到非常大的约束,Flex技术不仅轻松解决了所有表现层的技术问题,让客户感受前所未有的WEB应用体验.更主要的是,基与FLASH AS3.0 的纯面向对象和组件的构架,让BS结构表现层的开发层次分明,结构完整协调.在提供强大华丽表现的同时,大大节约维护成本。它美化了客户端的视觉效果,增强的用户的体验性,更生动的控件使得web应用程序增加了适用性,在RIA(rich internet application)发展中,flex技术的使用至关重要。
1.3.3 Flex中mxml的性能问题
一直以来无论是直觉还是逻辑推理都觉得Flex应用是比传统JSP应用更节约资源的,但一直没有真凭实据。最近在网上找到一份来自Macromedia的性能报告,它用JSP和Flex分别做了一个购物站点的测试,实现了同样的功能。报告称: 两个应用程序需要相似的网络带宽和服务器内存,但Flex应用程序对服务器 CPU 处理循环的需要明显较少。一般JSP 应用程序的服务器端负载直接取决于用户交互动作(例如,当用户跳转至新页面或者提交数据至服务器进行处理时)的数量,而 Flex 应用程序的负载取决于向服务器请求应用程序或提交数据请求的并行用户的数量。简而言之就是Flex应用对CPU的占用更少。图7为JSP和MXML的比较结果。[5]
图7 JSP、MXML对比图
1.4 Ajax介绍
AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。
本项目中在查询方面,比如输入会员姓名、教练姓名等难以记住的信息时,用户只要输入会员姓名中的任何一个字,则系统会显示包含此字的所有会员,为管理员减少不必要的工作,增加客户体验。
传统的web应用允许用户填写表单(form),当提交表单时就向web服务器发送一个请求。服务器接收并处理传来的表单,然后返回一个新的网页。这个做法浪费了许多带宽,因为在前后两个页面中的大部分HTML代码往往是相同的。由于每次应用的交互都需要向服务器发送请求,应用的响应时间就依赖于服务器的响应时间。这导致了用户界面的响应比本地应用慢得多。
与此不同,AJAX应用可以仅向服务器发送并取回必需的数据,它使用SOAP或其它一些基于XML的web service接口,并在客户端采用JavaScript处理来自服务器的响应。因为在服务器和浏览器之间交换的数据大量减少,结果就能看到响应更快的应用。同时很多的处理工作可以在发出请求的客户端机器上完成,所以Web服务器的处理时间也减少了。
Ajax应用程序的优势在于:
(1)通过异步模式,提升了用户体验。
(2)优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用。
(3)Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载。
1.5 JavaScript介绍
Javascript是一种由Netscape的LiveScript发展而来的脚本语言,主要目的是为了解决服务器终端语言,比如Perl,遗留的速度问题。当时服务端需要对数据进行验证,由于网络速度相当缓慢,只有28.8kbps,验证步骤浪费的时间太多。于是Netscape的浏览器Navigator加入了Javascript,提供了数据验证的基本功能。
本项目中在用户登陆模块,样式设计方面,动态菜单展示、日历控件等都用了大量的JavaScript,可见其功能之强大。
它的出现使得网页和用户之间实现了一种实时性的、动态的、交互性的关系,使网页包含更多活跃的元素和更加精彩的内容。 运行用Javascript编写的程序需要能支持Javascript语言的浏览器。Netscape公司 Navigator 3.0以上版本的浏览器都能支持 Javascript程序,微软公司 Internet Explorer 3.0以上版本的浏览器基本上支持Javascript。Javascript短小精悍, 又是在客户机上执行的,大大提高了网页的浏览速度和交互能力。 同时它又是专门为制作Web网页而量身定做的一种简单的编程语言。
1.6 Oracle介绍
ORACLE是以高级结构化查询语言(SQL)为基础的大型关系数据库,通俗地讲它是用方便逻辑管理的语言操纵大量有规律数据的集合。是目前最流行的客户/服务器(CLIENT/SERVER)体系结构的数据库之一。
在本项目中,后台数据的管理即为Oracle数据库,它高速的性能、良好的移植性给开发带来的很大的帮助。
它的特点如下所示:
(1)ORACLE7.X以来引入了共享SQL和多线索服务器体系结构。这减少了ORACLE的资源占用,并增强了ORACLE的能力,使之在低档软硬件平台上用较少的资源就可以支持更多的用户,而在高档平台上可以支持成百上千个用户。
(2)提供了基于角色(ROLE)分工的安全保密管理。在数据库管理功能、完整性检查、安全性、一致性方面都有良好的表现。
(3)支持大量多媒体数据,如二进制图形、声音、动画以及多维数据结构等。
(4)提供了与第三代高级语言的接口软件PRO*系列,能在C,C++等主语言中嵌入SQL语句及过程化(PL/SQL)语句,对数据库中的数据进行操纵。加上它有许多优秀的前台开发工具如POWERBUILD、SQL*FORMS、VISIA、BASIC等,可以快速开发生成基于客户端PC平台的应用程序,并具有良好的移植性。
(5)提供了新的分布式数据库能力。可通过网络较方便地读写远端数据库里的数据,并有对称复制的技术。
1.7 Hessian介绍
Hessian:Hessian是一个由Caucho Technology开发的轻量级二进制RPC协议。它使用一种定制的串行化技术来实现跨网络发送Java对象。除了对Java支持外,Hessian还提供对于例如PHP,Python,C++和C#等其它语言的实现支持。它们使用一种专利对象串行化机制。它们能够串行化Hibernate对象,但是对集合对象执行“惰式”加载。而且集成了webService的优点:跨防火墙工作良好。[6]
在本项目中的动态数据展示就采用Hessian进行Flex客户端与J2ee服务端的通信机制,中性的二进制数据传输,使Flex端可高速的远程调用服务端的方法,就象这个方法在本地一样。详细介绍,请参见4.2章。
优点:开发简单方便,hessian采用自己特定的序列化规则,不受制于jdk版本。
1.8 P6SPY、SQL Profiler介绍
P6Spy 是一个可以用来在应用程序中拦截和修改数据操作语句的开源框架。通过 P6Spy可以对 SQL 语句进行拦截,相当于一个 SQL 语句的记录器,这样可以用它来做相关的分析,比如性能分析。P6Spy 用 Log4J 来记录 JDBC 调用的日记信息。
简单地讲,P6Spy的架构原理可以认为是一个代理(Proxy),它只做了一层对 JDBC 驱动的拦截,然后转发出去,这样的设计与实际的应用程序没有任何的耦合性,除了在配置中将驱动程序改成 P6Spy 的拦截驱动外,程序其他地方并不需要做任何的改变。这层拦截器除了可能会给系统带来略微的性能下降外,对程序其他方面没有任何的影响。而相对于这一点点的性能下降,在开发环境中对于开发人员来说是无法感觉到,相比它所带来的好处,完全可以忽略不计。下图为P6Spy 对数据库进行拦截监控的处理过程:
图8 P6SPY工作流程图
SQL Profiler 是一个由 Jahia.org 提供的基于 P6Spy 引擎的快速剖析工具,用来统计 SQL 查询语句以便了解哪里是性能瓶颈,在哪里创建索引或者采取相应的办法才能提高效率,并且能根据 SQL 查询语句的情况帮你生成合适的索引脚本。
这个小工具可以实时地显示数据库查询的情况,通过集成的 SQL 解析器,在访问大多数表与列上面建立统计分析,并生成索引脚本。当然,其它的信息也会进行收集和显示,比如:单个数据库请求的时间、一类请求的时间以及所有请求的时间。因此,可以有效地通过视图的排序来检测数据的性能问题所在。这个工具对于大量的需要进行分析的请求是非常有用的,而不是人工一个个地去做分析。当你需要知道比如对相同的表和列进行访问但是采用不同的查询值时,这种分组的查询可以用建立在 ANTLR 上的 SQL 解析器进行分析。[7]
1.9 运行环境
1.9.1 软件环境
表 1 软件环境
|
名称 |
版本 |
语种 |
操作系统 |
Windows |
Server2003 |
简体中文 |
操作系统的附加功能 |
SP2 |
3 |
简体中文 |
数据库平台 |
oracle |
9i |
简体中文 |
应用平台 |
tomcat |
6.0 |
简体中文 |
客户端软件 |
MS IE |
6.0 |
简体中文 |
1.9.2 硬件环境
表 2 硬件环境
服务器 |
最低配置 |
推荐配置 |
应用和数据库服务器 |
1CPU:P4 2.0G |
1CPU:P4 2.8G |
Mem:1G |
Mem:2G |
|
HD:40G |
HD:120G |
2 总体设计
2.1 系统分析
2.1.1 系统的名称、目标
本电信性能监测系统主要是为了实现电信公司对远程计算机的各项性能数据的监测,取出数据并以图文的形式显示结果。
本软件是为了解决中国电信对远程计算机系统的CPU和硬件等各项性能数据的监测,取得各系统的数据从而进行分析而设计制作,且电信内部计算机加入监测系统后同样可以对其进行监测,原则上电信内部的所有电脑都可以进行检测。公司内以管理员身份登入的计算机可以对其他计算机进行监测,公司内部其他计算机可以被管理员加作为外部电脑进行远程监测。
图9 主模块图
如上图所示,本系统分为三个主功能,分别为监测机器管理模块.用户管理模块和监测数据模块,以此实现相应的功能。
2.1.2数据字典
数据字典是关于数据库中数据的描述,即元数据,而不是数据本身。数据本身将存放在物理数据库中,由数据库管理系统管理。数据字典有助于这些数据的
进一步管理和控制,为设计人员和数据库管理员在数据库设计、实现和运行阶段控制有关数据提供依据。
本系统的表和字典的介绍如下:
(1) 机器表host
机器表,此表用于存放检测机器的相关信息
表 3 机器表
字段名 |
数据类型 |
字段长度 |
字段约束 |
默认值 |
备注 |
mechid |
number |
10 |
Primary key |
1 |
/ |
ip |
varchar |
16 |
Not null |
0.0.0.0 |
主机ip地址 |
username |
varchar |
20 |
Not null |
/ |
用户名 |
pwd |
varchar |
20 |
Not null |
/ |
密码 |
status |
number |
1 |
Not null |
/ |
状态 |
(2) 用户表users
用户表,此表用于存放检测用户的相关信息
表 4 用户信息表
字段名 |
数据类型 |
字段长度 |
字段约束 |
默认值 |
备注 |
userid |
number |
10 |
Primary key |
/ |
/ |
usename |
varchar |
20 |
Not null |
/ |
用户名 |
pwd |
varchar |
20 |
Not null |
/ |
密码 |
power |
number |
10 |
Not null |
/ |
权限 |
(3) 处理器表cpu
处理器表,此表用于存放从检测机器上抓取过来的处理器信息
表 5 处理器表
字段名 |
数据类型 |
字段长度 |
字段约束 |
默认值 |
备注 |
cpuid |
number |
10 |
Primary key |
/ |
/ |
cpuuse |
varchar |
20 |
Null |
/ |
Cpu使用率 |
time |
varchar |
40 |
Null |
/ |
时间 |
mechid |
number |
10 |
Foreign key |
/ |
/ |
(4)内存表memory
内存表,此表用于存放从检测机器上抓取过来的内存信息
表 6 内存表
字段名 |
数据类型 |
字段长度 |
字段约束 |
默认值 |
备注 |
memid |
number |
10 |
Primary key |
/ |
/ |
memuse |
varchar |
20 |
Null |
/ |
内存使用率 |
memfree |
varchar |
20 |
Null |
/ |
内存空闲 |
mempage |
varchar |
20 |
Null |
|
内存页面数 |
time |
varchar |
40 |
Null |
/ |
时间 |
mechid |
number |
10 |
Foreign key |
|
/ |
(5) 硬盘表harddisk
硬盘表,此表用于存放从检测机器上抓取过来的硬盘信息
表 7 硬盘表
字段名 |
数据类型 |
字段长度 |
字段约束 |
默认值 |
备注 |
hardid |
number |
10 |
Primary key |
/ |
/ |
harduse |
varchar |
20 |
Null |
/ |
硬盘使用率 |
hardfree |
varchar |
20 |
Nul l |
/ |
硬盘空闲 |
time |
varchar |
40 |
Nul l |
/ |
时间 |
mechid |
number |
10 |
Foreign key |
/ |
/ |
(6) 数据库表oracle
数据库表,此表用于存放从检测机器上抓取过来的数据库信息
表 8 数据库表
字段名 |
数据类型 |
字段长度 |
字段约束 |
默认值 |
备注 |
oraid |
number |
10 |
Primary key |
|
|
oraslt |
varchar |
20 |
Null |
/ |
查询缓冲命中率 |
orart |
varchar |
20 |
Null |
/ |
重试率 |
orauser |
varchar |
20 |
Null |
/ |
用户会话数 |
time |
varchar |
40 |
Null |
/ |
时间 |
2.2 系统总体设计
本系统通过B/S模式实现机器管理、用户管理和监测数据三大模块。
图 10 系统总体层次设计
2.3 模块功能设计
2.3.1监测机器管理模块
监测机器管理模块,可以实现对机器的添加、删除和查看,在添加机器部分,需要输入机器的ip地址、用户名和密码,数据库中也会同步更新相应的信息,添加成功之后显示结果,删除机器部分做类似的操作, 而在实现查看功能时系统会从数据库中提取数据,从而显示结果。
图 11 监测机器管理模块
2.3.2 用户管理模块
用户管理模块,可以实现对用户的添加、删除和查看,在添加用户部分,需要输入用户的帐号、密码和权限,数据库中也会同步更新相应的信息,添加成功之后显示结果,删除用户部分做类似的操作, 而在实现查看功能时系统会从数据库中提取用户信息,从而显示结果。
图 12 用户管理模块
2.3.3监测数据模块
监测数据模块,首先系统会通过网络获取性能数据,进行数据库的更新,可以根据需求显示监测的cpu数据、memory数据、disk数据、oracle数据。
图 13 监测数据模块
3 系统功能实现
3.1登录模块
主要功能:判断用户输入的用户名和密码是否合法,并判断用户名是否存在,密码是否正确。
系统登录界面:
图 14 登陆界面
图 15 登录管理模块类图
类User的属性操作说明
getUserId() //获取用户ID
setUserId () //缓存用户ID
getUserName() //获取用户名
getPassWord() //获取用户密码
setUserName() //缓存用户名
setPassWord() //缓存用户密码
类LoginServlet的属性操作说明
check_user();
类UserMgr的属性操作说明
add_user(); //添加用户
update_user(); //修改用户
delete_user(); //删除用户
view_user(); //查看用户
表 9 登录模块信息表
模块名称 |
LOGIN(登录模块) |
功能描述 |
验证用户名和密码合法性,判断用户名是否存在,密码是否正确 |
主要方法 |
check()//验证用户合法性 check_user() //验证用户是否存在 |
数据结构
|
String username String password |
补充说明 |
|
图 16 登录管理模块时序图
登录管理模块的时序图展示内容说明:用户输入用户名和密码后,页面提交到UserServlet进行处理,验证权限,登陆成功后进入主页面。
3.2用户管理模块
主要功能:用户的管理,包括增加,删除,修改,查看,权限的设置。
下图为用户管理界面:
图 17 添加用户界面
图 18 用户管理模块类图
类User的属性操作说明
getUserId() //获取用户ID
setUserId () //缓存用户ID
getUserName() //获取用户名
getPassWord() //获取用户密码
setUserName() //缓存用户名
setPassWord() //缓存用户密码
类UserMgr的属性操作说明
add_user(); //添加用户
update_user(); //修改用户
delete_user(); //删除用户
view_user(); //查看用户
类UserServlet的属性操作说明
doPost();
表 10 用户管理模块信息表
模块名称 |
USER(用户管理模块) |
功能描述 |
增加用户,删除用户,修改用户,查看用户,用户权限的设置 |
主要方法 |
check_user() //验证用户是否存在 add_user() //添加用户 update_user() //修改用户 delete_user() //删除用户 view_user() //查看用户 |
数据结构
|
String username String password Int power |
补充说明 |
|
图 19 用户管理模块时序图
用户管理模块的时序图展示内容说明:用户登陆成功后,验证为管理员用户后可以对用户进行增删改的操作,并更新数据库,再将更新过的数据展示给管理员。
3.3监测机器管理模块
主要功能:监测机器的管理,包括增加,删除,修改,查看。
下图为增加监测机器界面:
图 20 增加监测机器界面
图 21监测机器管理模块类图
类Mech的属性操作说明
getMechId() //获取机器ID
setMechId () //缓存机器ID
getIp() //获取主机IP
setIp() //缓存主机IP
getUsernNme() //获取主机名
getPassWord() //获取主机密码
setUserName() //缓存主机名
setPassWord() //缓存主机密码
类MechMgr的属性操作说明
add_mech(); //添加主机
update_ mech (); //修改主机
delete_ mech (); //删除主机
view_ mech (); //查看主机
类MechServlet的属性操作说明
doPost();
表 11 监测机器管理模块信息表
模块名称 |
MECH(监测机器管理模块) |
功能描述 |
增加机器,删除机器户,修改机器,查看机器. |
主要方法 |
check_mech() //验证机器是否存在 add_ mech () //添加机器 update_ mech () //修改机器 delete_ mech () //删除机器 view_ mech () //查看机器 |
数据结构
|
String ip String username String password |
补充说明 |
|
图 22 监测机器管理模块时序图
监测机器管理模块的时序图展示内容说明:管理员可以添加一台机器进行监测,也可以删除被监测机器,普通用户只能对机器进行监测。
3.4数据管理模块
主要功能:数据的管理,包括增加,删除,修改,查看。
图 23 数据管理模块类图
类Data的属性操作说明
getId() //获取主机ID
setId() //缓存主机ID
getCpuUse () //获取主机cpu使用率
setCpuUse () //缓存主机cpu使用率
getMemUse() //获取主机内存使用率
setMemUse () //缓存主机内存使用率
getMemFree() //获取主机内存空闲率
setMemFree() //缓存主机内存空闲率
getMemPage () //获取主机内存页数
setMemPage () //缓存主机内存页数
getHardUse() //获取主机硬盘使用率
setHardUse() //缓存主机硬盘使用率
getHardFree() //获取主机硬盘空闲率
setHardFree() /缓存主机硬盘空闲率
getOraSlt() //获取主机oracle查询缓存命中率
setIpOraSlt() //缓存主机oracle查询缓存命中率
getOraRt () //获取主机oracle重试率
setOraRt() //缓存主机oracle重试率
getOraUser () //获取主机oracle用户会话数
setOraUser() //缓存主机oracle用户会话数
类DataMgr的属性操作说明
add_data(); //添加数据
update_ data (); //修改数据
delete_ data (); //删除数据
view_ data (); //查看数据
类DataServlet的属性操作说明
doPost();
表 12 数据管理模块信息表
模块名称 |
DATAMANAGER(数据管理模块) |
功能描述 |
增加数据,删除数据,修改数据,查看数据 |
主要方法 |
add_ data () //添加数据 update_ data () //修改数据 delete_ data () //删除数据 view_ data () //查看数据 |
数据结构
|
String ip //主机IP String cpuuse //cpu使用率 String memuse //内存使用率 String memfree //内存空闲率 String mempage //内存页数 String hduse //硬盘使用率 String hdfree //硬盘空闲率 String oraslt //查询缓存命中率 String orart //重试率 String orauser //用户会话数 String time //保存时间 |
补充说明 |
|
图 24 数据管理模块时序图
3.5数据采集模块
主要功能:链接到目标主机,定时监测主机并从目标主机上采集所需的数据文件,然后从数据文件中提取相应的数据保存到数据库中。
图 25 数据采集模块类图
类ReadFile的属性操作说明
getCpu() //获取cpu数据文件
getMem() //获取内存数据文件
getHard() //获取硬盘数据文件
getOrac() //获取oracle数据文件
类ArrayRead的属性操作说明
array() //遍历监测机器
execute() //遍历执行
类Ping的属性操作说明
getIPState() //验证机器连接状态
类ResolveData的属性操作说明
reData() //从数据文件中解析出相关数据
类DataMgr的属性操作说明
add_data(); //添加数据
update_ data (); //修改数据
delete_ data (); //删除数据
view_ data (); //查看数据
类Data的属性操作说明
getId() //获取主机ID
setId() //缓存主机ID
getCpuUse () //获取主机cpu使用率
setCpuUse () //缓存主机cpu使用率
getMemUse() //获取主机内存使用率
setMemUse () //缓存主机内存使用率
getMemFree() //获取主机内存空闲率
setMemFree() //缓存主机内存空闲率
getMemPage () //获取主机内存页数
setMemPage () //缓存主机内存页数
getHardUse() //获取主机硬盘使用率
setHardUse() //缓存主机硬盘使用率
getHardFree() //获取主机硬盘空闲率
setHardFree() /缓存主机硬盘空闲率
getOraSlt() //获取主机oracle查询缓存命中率
setIpOraSlt() //缓存主机oracle查询缓存命中率
getOraRt () //获取主机oracle重试率
setOraRt() //缓存主机oracle重试率
getOraUser () //获取主机oracle用户会话数
setOraUser() //缓存主机oracle用户会话数
表 13 数据采集模块信息表
模块名称 |
DATAGET(数据采集模块) |
功能描述 |
从目标主机上采集所需的数据文件,提取相应的数据保存到数据库中 |
主要方法 |
getCpu() //获取cpu数据文件 getMem() //获取内存数据文件 getHard() //获取硬盘数据文件 getOrac() //获取oracle数据文件 reData() //解析数据文件 |
数据结构
|
SmbFile datafile //获取的数据文件 SmbFileInputStream in //建立文件输入流 BufferedReader br //设置文件缓冲 |
补充说明 |
|
图 26 数据采集模块时序图
数据采集模块的时序图展示内容说明:服务器通过作业调度定时对被监测机器的数据进行采集,取得数据后存入数据库。
3.6数据显示模块
主要功能:根据要求从数据库中提取相应的数据,生产图表保存在计算机中,并显示在页面上。
如下图为性能监测显示图:
图 27 监测显示图
图 28 数据显示模块类图
类DrawChart说明
drewCpu() //画出cpu使用的线图
drewMem() //画出内存使用的饼图
drewHard() //画出硬盘使用的饼图
drewOrac() //画出oracle使用的柱状图
类DataMgr的属性操作说明
add_data(); //添加数据
update_ data (); //修改数据
delete_ data (); //删除数据
view_ data (); //查看数据
类Data的属性操作说明
getId() //获取主机ID
setId() //缓存主机ID
getCpuUse () //获取主机cpu使用率
setCpuUse () //缓存主机cpu使用率
getMemUse() //获取主机内存使用率
setMemUse () //缓存主机内存使用率
getMemFree() //获取主机内存空闲率
setMemFree() //缓存主机内存空闲率
getMemPage () //获取主机内存页数
setMemPage () //缓存主机内存页数
getHardUse() //获取主机硬盘使用率
setHardUse() //缓存主机硬盘使用率
getHardFree() //获取主机硬盘空闲率
setHardFree() /缓存主机硬盘空闲率
getOraSlt() //获取主机oracle查询缓存命中率
setIpOraSlt() //缓存主机oracle查询缓存命中率
getOraRt () //获取主机oracle重试率
setOraRt() //缓存主机oracle重试率
getOraUser () //获取主机oracle用户会话数
setOraUser() //缓存主机oracle用户会话数
表 14 数据显示模块信息表
模块名称 |
DATASHOW(数据显示模块) |
功能描述 |
验证用户名和密码合法性,判断用户名是否存在,密码是否正确 |
主要方法 |
drawCpu() //画出cup曲线图 drawMem //画出内存饼图 drawHard() //画出硬盘饼图 drawOrac() //画出oracle柱状图 |
数据结构
|
DefaultPieDataset chart DefaultCategoryDataset char JFreeChart chartpie JFreeChart chartCategory TimeSeries series TimeSeriesCollection linechar |
补充说明 |
|
图 29 数据显示模块时序图
数据显示模块的时序图展示内容说明:用户提交要查看的数据,根据用户的请求从数据库中取出数据画出相应的图片展示给用户。
3.7作业调度模块
主要功能:定时监测数据,并且采集数据,更新到数据库中,生成最新图表显示在页面中。
图 30 作业调度模块类图
类QuartzTrigger的属性操作说明
Task() //启动作业调度
类ArrayRead的属性操作说明
array() //遍历监测机器
execute() //遍历执行
表 15 作业调度模块信息表
模块名称 |
TIGGER(作业调度模块) |
功能描述 |
验证用户名和密码合法性,判断用户名是否存在,密码是否正确 |
主要方法 |
task() //作业调度 |
数据结构
|
SchedulerFactory schedulerFactory Scheduler scheduler JobDetail jobDetail SimpleTrigger simpleTrigger |
补充说明 |
|
图 31 作业调度模块时序图
作业调度模块的时序图展示内容说明:作业调度类QuartsTrigger定时调用ArrayRead类来采集数据。
4 系统测试
功能测试(FVT)
目的:对电信性能监测系统进行全面测试
内容:对系统的业务操作进行各种可能性流程测试
重点:权限测试、数据正确性测试
表 16 用户登录模块测试用例
所属模块 |
用户登录 |
||
测试负责人 |
祝夏卿 |
||
功能A描述 |
登录 |
||
用例目的 |
确保用户可以成功登陆 |
||
前提条件 |
用户存在 |
||
输入/动作 |
期望的输出/相应 |
实际情况 |
|
异常值:不输入用户名,密码。 |
不通过。错误提示页面“username Can’t be null” |
不通过。错误提示页面“username Can’t be null” |
|
异常值:用户名不存在 |
不通过。错误提示页面”username or Password Error” |
不通过。错误提示页面”username or Password Error” |
|
异常值:用户名正确,密码错误 |
错误提示页面”username or Password Error” |
错误提示页面”username or Password Error” |
|
用户名和密码的字符长度限制在16位以内 |
超出16位就不能再输入字符 |
超出16位就不能再输入字符 |
表 17 数据采集模块测试用例
所属模块 |
数据采集 |
||
测试负责人 |
祝夏卿 |
||
功能A描述 |
采集数据 |
||
用例目的 |
确保系统能够稳定的采集到有效数据 |
||
前提条件 |
服务器开启 |
||
输入/动作 |
期望的输出/相应 |
实际情况 |
|
在远程机器未连接状态下,调度数据采集 |
测试出机器未连接,跳过此机器,采集下一台机器 |
控制台显示 连接超时 |
|
在远程机器连接状态下,调度数据采集,但是系统的连接数据中用户名或密码不正确 |
报出用户名或密码不正确 |
控制台显示 用户名或密码错误 |
|
在远程机器连接状态下,但是没有要采集的文件,或者文件没有共享,调度数据采集 |
能够连接上机器,找不到远程数据文件 |
控制台显示 无法找到文件 |
|
在远程机器连接状态下,但文件数据没有更新,调度数据采集 |
能够判断出数据没有更新,不采集该数据,以免重复 |
控制台显示 数据重复,略过 |
表 18 数据显示模块测试用例
所属模块 |
数据显示 |
||
功能A描述 |
数据图表显示 |
||
用例目的 |
数据能完整的以图表显示出来 |
||
前提条件 |
服务器应经开启,数据应经采集 |
||
测试负责人 |
祝夏卿 |
||
输入/动作 |
期望的输出/相应 |
实际情况 |
|
典型值:点击查看已经存在数据的IP号 |
图表完整显示,没有错误 |
图表完整显示,没有错误 |
|
异常值:点击查看没有采集数据的IP号 |
没有图表显示 |
没有图表显示 |
|
异常值:点击查看错误的IP号 |
没有图表显示 |
没有图表显示” |
结束语
历经一个多月的设计和实现,从最初的需求探索到总体设计,从详细设计到系统测试,经历了一个软件工程的全部流程。从中也明白了在项目的每个阶段中所要做的事情,需要注意的问题,以及风险后果等等。
在最初的需求探索阶段,由于开始没有做好,项目做到三分之一的时候,才发现需求与所要求的对不上,只好返工重新做,做了许多无用功。但是也积累了宝贵的经验,体会到了需求分析在软件工程体系中的重要地位。
在设计阶段,吸取了公司的项目开发的经验,获取了更高的效率和更高的质量。并且有工程师的悉心指导,帮助我们打通所有的技术难关。主要让我了解到了jcifs、quartz、jfreechart和struts、spring等技术,虽然整个系统中基本上没有用到三大框架,但是还是相对之前的书本上的东西,还是有一定深入的理解。
最终,此管理系统业已全部完成。在整个设计当中,体会最深的就是团队合作。团队的默契是项目成功的根基。没有好的沟通就无法理解你和队友之间的接口,无法掌握项目的进度等等,总之,团队是一个项目成功的关键所在。
致 谢
回首论文的写作过程,得到了许多人的帮助,特别是师长、同学、室友和远方的家人,他们在论文的完成过程中给予了我许多的教诲、帮助和鼓励。每当在写作中遇到困难的时候,是他们从方法上和精神上给予我支持,令我克服每个困难,我在心底里备受鼓舞。我本性是一个很不上进的人,却有幸得到这许多爱护,内心着实惶恐不安,借此机会,向他们表示我由衷的感激之情!
首先,我要感谢我的导师何璘琳老师。本设计和论文都是在她的悉心指导和严格要求下业已完成,从课题选择、方案论证到具体设计,无不凝聚着何璘琳老师的心血和汗水。从设计的开题到论文的排版,这些大大小小的事,她总能从繁忙的工作中抽出时间来来指导我、帮助我,有时把吃饭的时间都错过了,使我深受感动、受益匪浅。在此向何璘琳老师表示深深的感谢和崇高的敬意。
其次要感谢两年来教过我的各位任课老师。不积跬步何以至千里,本设计能够顺利的完成,也归功于各位任课老师的认真负责,使我能够很好的掌握和运用专业知识,并在设计中得以体现。正是有了他们的悉心帮助和支持,才使我的毕业论文工作顺利完成,在此向东华理工大学软件学院软件工程的全体老师表示由衷的谢意。感谢你们两年来的辛勤栽培。
感谢两年来一直与我并肩作战的同学们,在这两年的时光中,与你们在一起使我学到了很多,也因与你们在一起而快乐,给我留下了美好的回忆。
感谢我的室友们,杨龙,袁颖,老皋,两年来有你们的朝夕陪伴,才让我的生活摇曳多姿;在最后的毕业论文奋战中,正是由你们的支持与陪伴,让我坚强奋进,感谢你们!
感谢我的父母和家人!在我求学的过程中,在我迷茫困顿中,始终地关爱我,指引我,包容我,感谢你们!
感激你们,感谢你们走进我的生命,感谢你们让我的生活充满温馨的师生情、亲情和友情!
参考文献
[1]孙卫琴.精通Struts:基于MVC的Java Web设计与开发
[2]孙卫琴.精通Hibernate Java对象持久化技术详解 电子工业出版社
[3]李刚.整合STRUTS+HIBERNATE+SPRING应用开发详解
[4]Adobe,翻译:刘刚. Flex中文帮助
[5]Alex. Rich.Internet.Applications.with.Adobe.Flex and Java
[6]良格格.Spring开发指南 电子工业出版社
[7]夏昕,曹小刚.深入浅出Hibernate 电子工业出版社
[8] Adobe.使用ActionScript 3.0 组件
[9] Adobe. ActionScript 3.0 语言和组件参考
[10]佚名. Flex + LCDS + Java 入门教程
[11]高守传. 精通SQL——结构化查询语言详解
[12] Bruce Eckel. Thinking in java (第4版)
[13](美)沃尔斯,(美)布雷登巴赫. Struts in Action
[14]萨师煊,王姗. 数据库系统概论第二版.高等教育出版社
标签:layer primary 提高效率 创建 rem detail 瓶颈 命名 背景
原文地址:https://www.cnblogs.com/mujawfm/p/12824812.html