jsp597任务调度器的设计与实现-qkp论文_第1页
jsp597任务调度器的设计与实现-qkp论文_第2页
jsp597任务调度器的设计与实现-qkp论文_第3页
jsp597任务调度器的设计与实现-qkp论文_第4页
jsp597任务调度器的设计与实现-qkp论文_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEii太原理工大学毕业论文(设计)作者:(三号楷体)学号:(三号楷体)系部:计算机科学与工程系专业:(三号楷体)(方向):(三号楷体)题目:(三号楷体)(内容过长可分两行)指导老师(姓名)(职称/学位)提交日期2011年5月15日注:本模板中红色字体为文章格式注释,请自行删除;此封面的楷体为GB_2312楷体;论文题目太原理工大学毕业论文(设计)Page1摘要任务调度是大型J2EEweb应用中常见的工作。开发者希望以指定的间隔时间执行各类操作,并完成一些无需用户输入的任务。Java中可有无数方法来做到这一点,但是在web应用中却并没有这方面的统一标准。当许多开发人员参与同一个项目,并且以各自不同的方式来实现任务调度时,就可能产生很大问题。内存和同步问题就是必须首先考虑的两件事。事实上,一些开发者试图调用操作系统层面的任务调度机制,如Unix平台上的cron。这种编程实践也许并不是太坏,但它将直接导致可移植性被抛到九霄云外。该程序是一个用java.swing编写的一个窗口小程序。(包括主窗体和弹出窗体)包含一个菜单栏有一个任务列表区域用于显示进行中的任务的信息,其中可以对任务进行选中有三个按钮(添加任务,结束任务,查看状态,)添加任务按钮:弹出一个新的窗口进行任务的创建包括(任务名称,选择任务执行方式,任务量,确定,取消)创建好之后任务开始按所选执行方式执行。结束任务按钮:所选择的的任务结束执行,删除任务列表中对应的任务信息。查看状态:显示出所选任务的执行状态,(最好可以实现对任务进行修改)。当任务执行完毕之后弹出一个提示窗口,然后在任务列表中清空对应的信息。关键词:任务调度可移植性,Java.swing

AbstractTaskschedulingisalargecommonworkofJ2EEwebapplications.Developerswanttospecifythetimeintervaltoperformvariousoperations,andcompletesometaskswithoutuserinput.InJavabuttherearecountlesswaystodothis,butinthewebapplicationisnouniformstandardinthisfield.Whenmanydeveloperstoparticipateinthesameproject,andintheirdifferentwaystoimplementthetaskscheduling,canmakeabigproblem.Memoryandsynchronizationproblemisthemustfirstconsiderthetwothings.Infact,somedevelopersaretryingtoinvoketheoperatingsystemleveltaskschedulingmechanism,suchasthecronUnixplatforms.Thiskindofprogrammingpracticesmaynotbesobad,butitwilldirectlyleadtoportabilityisthrowntotheoutsideofthecloudnineTheprogramisaintheJavaswingtowriteasmallprogramwindow.(includingthemainformsandpop-upform)containsamenubarisusedtodisplayalistoftasksforthetaskofinformation,inwhichthetaskscanbeselectedtohavethreebuttons(addtaskstoendthetask,tocheckthestatus,):addtasksbuttonpopupanewwindowforthecreationoftasksincluding(taskname,taskexecutionmodechoice,quota,sure,cancel)createdafterthestartaccordingtotheselectedtaskexecution.Endtaskbutton:endoftheselectedtaskexecution,deletethecorrespondingtaskinthetasklistinformation.Checkthestatus:showstheselectedtaskexecutionstatus,modified)(bestcanrealizethetask.AfterwhenthetaskhasbeencompletedBringupapromptwindow,andthenclearthecorrespondinginformationinthetasklist.Keywords:Quart;chedulingportability;java.swing

目录第一章绪论1.1Java语言的出现自从1946年世界上第一台电子计算机问世以来,计算模式的发展经历了三个阶段:集中计算模式、分散计算模式和网络计算模式。Internet的出现,为在网络计算模式下的科学计算和信息处理提供了良好平台。然而,要充分利用网络计算模式的功能与效益,平台的运行环境是个制约因素,而Java语言和Java技术则是解决这一问题的最佳途径。1991年,SUN公司的JameGosling,BillJoe等人试图为电视、烤箱等家用电器开发一种交互式的软件系统,这种应用需要的是那种小而可靠的系统,它能够移植,并且实时性好,适用于网络分布环境。流行的C++是自然的选择。不过,开发过程中遇到的许多难以克服的困难使他们意识到必须彻底解决问题了,最终,开发成功了一个名为Oak的软件,此中蕴藏着Java的原型,当时,并未引起人们的注意。1994年下半年,随着Internet的迅猛发展,环球信息网WWW的快速增长,促进了Java语言研制的进展,使得它逐渐成为Internet上倍受欢迎的开发与编程语言。1995年5月Java正式问世,一些著名的计算机公司纷纷购买了Java语言的使用权,如Microsoft、IBM、Netscape、Novell、Apple、DEC、SGI等。因此,Java语言被美国著名杂志PCMagazine评为1995年十大优秀科技产品(计算机类仅此一项入选)之一,随之大量出现了用Java编写的软件产品,受到工业界的重视与好评,认为“Java是八十年代以来计算机界的一件大事”。微软总裁比尔·盖茨在认真观察了一段时间后,确认“Java是长时间以来最卓越的程序设计语言”,并确定微软整个软件的开发战略从PC单机时代向以网络为中心的计算时代转移,而购买Java则是他的重大战略决策的实施部署。因此,Java的诞生必将对整个计算机产业发生深远的影响,对传统的计算模型提出了新的挑战。SUNMicrosystem公司的总裁ScottMcNealy认为:Java对Internet和WWW开辟了一个崭新的时代。有人预言:Java将成为网络上的“世界语”,今后,用其他语言编写的软件统统都要用Java语言来改写。1.1.2Java语言的主要特点Java语言是一种适用于网络编程的语言,它的基本结构与C++极为相似,但却简单得多。它集成了其它一些语言的特点和优势,又避开了它们的不足之处。它的主要特点如下:2.1简单性Java与C++相比,不再支持运算符重载、多级继承及广泛的自动强制等易混淆和较少使用的特性,而增加了内存空间自动垃圾收集的功能,复杂特性的省略和实用功能的增加使得开发变得简单而可靠。简单化的另一个方面是Java的系统非常小,其基本解释和类支持部分只占40KB,附加的基本标准库和线程支持也只需增加175KB。因此,Java应用软件能在相当小的系统之上独立工作。2.2平台独立性这是Java最吸引人的地方。由于它采用先编译成中间码(字节码),然后装载与校验,再解释成不同的机器码来执行,即“Java虚拟机”的思想,“屏蔽”了具体的“平台环境”特性要求,使得只要能支持Java虚拟机,就可运行各种Java程序。2.3面向对象的技术面向对象(O-O)的技术是近年来软件开发中用得最为普遍的程序设计方法,,它通过把客观事物进行分类组合、参数封装、用成员变量来描述对象的性质、状态,而用方法(成员函数)来实现其行为和功能。O-O技术具有继承性、封装性、多态性等众多特点,Java在保留这些优点的基础上,又具有动态联编的特性,更能发挥出面向对象的优势。多线程多线程机制使应用程序能并行执行,Java有一套成熟的同步原语,保证了对共享数据的正确操作.通过使用多线程,程序设计者可以分别用不同的线程完成特定的行为,而不需要采用全局的事件循环机制,这样就很容易实现网络上实时的交互行为。动态性Java的设计使它适合于一个不断发展的环境。在类库中可以自由地加入新的方法和实例变量而不会影响用户程序的执行。并且Java通过接口来支持多重继承,使之比严格的类继承具有更灵活的方式和扩展性。安全性Java有建立在公共密钥技术基础上的确认技术.指示器语义的改变将使应用程序不能再去访问以前的数据结构或是私有数据,大多数病毒也就无法破坏数据.因而,用Java可以构造出无病毒、安全的系统。Java语言除上述主要特点外,还有高性能、分布性、强大性、解释性、可移植性等,此处不再赘述。Java的发展Java自正式问世以来已经历了四年的历程,时间虽短,发展极快。一年一度在美国旧金山召开的世界JavaOne语言开发者大会(JavaOneDeveloperConference)盛况空前正说明了这一点。四年中每年的JavaOne大会,既是了解Java最新技术动态、应用成果和下一步发展趋势的最好场所,又是推动下一年Java快速发展的重要动力。首届JavaOne大会于1996年召开,各届简况如下:1996年5月29-31日,第一届,出席会议者6500余人,来自工业界的超过一半。有人评价说:“这是近年计算机界最光辉的一次盛会”。工业界相当看好Java语言,认为它的使用将会引起一场软件革命:从软件的设计风格、设计方法、设计目标到设计过程,都会产生彻底的变革,“甚至会改变此星球的生活方式”。1997年,第二届,出席会议者10000人。Java的追随者不断增加,应用开发迅速起步。1998年3月24-27日,第三届,出席会议者14000余人(注册人数),注册门票售价1195美元,否则1395美元,即使如此,仍有不少人不惜工本,挤入会场。本次会议除了软件巨头微软未参加会议外,几乎所有的计算机公司都参加了。展厅内设300多个展台,先后举行了90场专题讨论会,每场参加的人数从千人至五六千人不等。会议的主题是:通过Java的培训来带动Java软件的开发和技术研究,从而发展生产力,获取高额利润,提高生活质量,推动信息产业的进步。会议展出的内容大致如下:Java开发工具软件,如:JMF、JDK、SymantecVisualCafe、JavaDynamicManagementKit、JFC、JNDI、JavaStudio等;企业信息管理解决方案软件,如:EJB(EnterpriseJavaBeans);基于Java技术的信息家电,如:机顶盒、Java电话等;个人信息综合服务(Java戒指)、社会信息综合查询亭(Kiosk);电子商务软件、智能卡、JavaCardAPI等;网络计算环境下的Java服务器软件、远程方法调用(RMI)、基于Java技术的移动计算设备;JMS(JavaMessageService)用于出版、票据订阅的软件;JOS(JavaOS)、基于Java技术的NC和JavaStation。1999年6月15-18日,第四届,出席会议者达20000人,300多家厂商参展,举办400多场技术讲座,555名演讲者慷慨陈词,精彩纷呈。这次大会的主要特点是:Java框架结构被梳理清晰本次JavaOne大会上,Sun公司的一个重大举措就是公布了Java平台的最新架构。重新定义的Java平台以Java2为核心,由面向企业和服务器市场的企业版Java2(J2EE)、面向传统PC客户机市场的标准版Java2(J2SE)和面向信息电器等后PC终端设备市场的Micro版Java2(J2ME)三大部分组成。其中,J2EE包括EnterpriseJavaBeans(EJB)、JavaServerPages&JavaServlets、JavaMailAPI和JavaMassageService组成。而J2ME则是原有的PersonalJava、EmbeddedJava、JavaCard以及刚刚推出的Kjava组成。虽然新框架结构中的内容都是已有的,但这样重新定义和组合,使得Java平台的概念简单化,从而变得易于理解,更适合于进行市场推广。2)重点放在企业平台随着Internet的飞速发展,企业计算模式正摒弃C/S结构而采用Web-Browser结构,此即瘦客户端/胖服务器、大容量数据库的3层或N层体系结构。由于Java的特点,使得它在开发服务器端的应用程序方面有着得天独厚的优势,面向服务器端的J2EE为当今逐渐流行的N层体系结构提供了一个标准的Java计算平台:界面一致、工具简易、丰富、Web页面互联便捷,从而能大大加速和简化各种应用系统的开发。3)加速后PC时代的进程计算机的发展创造了Internet,但是计算机现在却不是访问Internet的唯一方式。正在出现的信息化、智能化的消费类电子产品打破了PC作为信息终端的垄断地位,成为人类进入Internet的新门户。信息终端的多元化预示着所谓后PC(post-PC)时代的到来。消费类的信息终端量大面广,是典型的瘦客户机,其本身的资源和能力不能与PC相比,但必须更加智能化,并对服务器端的管理提出了更高的要求。而Java平台恰恰满足了这种要求。本次大会推出的Kjava虚拟机能运行在16以上的微处理器上,占用内存少,人们可以随心所欲,在资源有限的设备上方便地开发出各种各样的应用,直接运行在不同的消费类或其它电子设备上;而Jini的出现为Java网络连接提供了公共标准,使得任何Java设备都可以连入网络中被自动识别,并可充分利用网络上已有的各种资源。大力推进Jini的发展是Sun公司加速后PC时代进程的一项重要策略。4)应用系统异彩纷呈与上届大会一样,展出内容有:应用工具、应用系统、信息家电等。特别在实时系统开发方面,以IBM为首开发出了应用于工业实时环境的Java嵌入系统,展现出Java在工业领域的广阔应用前景。Java语言的出现和发展,得到了IT业界的青睐,它像一面大旗,凝聚了世界众多的厂商与Sun公司一道,结成了对抗微软垄断的联盟。许多知名厂商纷纷购买Java许可证,目前已有90多万个软件开发商加入了Java阵营,1亿个Java最终用户,几千种Java应用软件产品,1500余种Java书籍(自Java问世4年来,平均每天出版一本)。这真是IT业界的盛事!IBM公司提出“高举Java大旗,全力以赴”的口号,它在全世界的11个国家有28个实验室,集聚了2500余名技术人员,全天侯24小时进行全方位开发;芯片巨人Intel提出“抓住时机,占领Java阵地”!决心使Intel芯片系统成为开发Java应用运行的最佳平台;Novell则宣称“Java是Novell的未来,未来是服务器端Java的市场”;作为Java发明者的Sun公司,坚持“保卫Java大旗,发展Java之路”的方针,通过对Java的“研究椘拦罈构造棽馐詶推广”的过程,从而占领市场。此外,HP、Oracle、Apple、Sybase、Netscape、Informix、3Com、Motorola等公司均是Sun的坚强同盟。在我国,Java的引进与开发起步早,发展水平基本与世界同步。目前,Sun公司已在中国建成了由5个授权中心、20多个Internet/IntarnetJava解决方案中心和10所Java大学、若干培训中心组成的三级结构。全面推动Java在中国的普及、应用、研究、开发,培养了数以十万计的Java开发人员。此外,Sun还牵头成立了中外软件厂商的开发联盟。在中国,Java的开发可以说是“人才济济,成果累累”。如清华大学王克宏教授带领的课题组面向全国,自96年开始举办了多期Java培训班和讲座,开设了数期本科生、研究生Java课程,出版了“Java系列丛书”10余册,承担了国家“九五”攻关项目“基于Java技术的交互式远程教学系统”,并与日本就Java开发进行了国际合作,成绩斐然;东大阿派下属的宝钢东软软件技术研究中心是国内是首屈一指的Java研发骨干企业,该中心从95年起就开始了Java的研发,目前,已掌握了PersonalJava的核心移植技术,并成功地将JVM移植到汽车导航平台。此外,他们还开发出支持Jini协议的即插即用网络打印机软件,以及一套Jini信息家电网络的可视化演示环境,完成了基于JavaBeans的组件化软件开发及运行支持环境等多项成果;在台湾,22家知名计算机公司成立了“Java联盟”,并在台北建立了“Java开发中心”,新竹建立了“Java语言实验室”;在香港,举行了全岛Java杯比赛,掀起了学习Java的热潮。Java的浪潮汹涌澎湃,席卷全球!1.2Java中任务调度以及意义在系统开发过程中,很多用户的使用习惯是提交数据之后在较短时间内可以得到系统的结果反馈。然而有很多任务有时需要处理大量数据和计算工作,当用户提交数据之后再启动计算,不仅耗时长,而且也消耗大量系统资源,影响系统中其他用户使用。比如应用系统中的工资计算,不仅需要读取大量的数据信息,而且经常定时从某些外部接口导入数据,同时经常需要周期性计算。2Java调度机制在Java2StandardEdition里从1.3版本以后提供了java.util.Timer,java.util.TimerTask类来完成简单的时间任务调度,并在JavaStandardEdition5.0版本里得到完善和增强。TimerTask类扩展了Runnable接口,是一个抽象类。该类扩展了Runnable接口,能在线程中执行,具有线程执行能力。Timer类提供了三类调度任务方式,分别为调度单次任务、一定时间间隔周期性任务、固定执行率任务调度。第一类:单次任务调度,任务仅被调度执行一次。schedule(TimerTasktask,longdelay)函数控制调度器在delay指定的时间长度(单位微秒)之后调度任务准备执行,而schedule(TimerTasktask,Datetime)函数控制调度器在time指定的时刻点调度任务进入处理器准备执行。第二类:固定时间间隔周期调度,每隔一定时间间隔周期调度执行任务。schedule(TimerTasktask,longdelay,longperiod)函数控制调度器在delay指定的时间长度之后开始第一次任务调度,每隔period时间长度(单位微秒)后周期性地调度执行一次。schedule(TimerTasktask,DatefirstTime,longperiod)函数控制调度器在firstTime指定的时刻点开始第一次任务调度,每隔period时间长度(单位微秒)后周期性地调度执行一次。第三类:固定执行率调度。sheduleAtFixedRate(TimerTasktask,longdelay,longperiod)函数、scheduleAtFixedRate(TimerTasktask,DatefirstTime,longperiod)和第二类调度函数相似。不同点在于:任务调度以后处理器不一定马上执行,可能存在一定延迟。第二类调度方式是在延迟的时间之后加上period时间再调度执行,而第三类则是从开始时间点计算调度时间,当任务延迟之后调度任务在达到时间点后就马上执行。3任务调度示例下面我们将以一个周期性间隔调度执行任务为例,讲解Timer调度任务执行。在开发应用系统过程中,我们碰到一个问题:系统存在一个需求,要求对很多数据要进行综合查询。在综合查询前需要把所有数据准备出来,这些数据来源于一百多个表。我们把这个数据准备过程写成一个存储过程,然后扩展TimerTask对该存储过程进行调用。在Timer中对该存储任务进行调度执行,让它在午夜系统使用率较低的时候执行该任务。1.3任务调度在面向对象编程方法的优势传统的结构化程序设计(StructuredProgramming)是一种强调功能抽象化和模块化的编程方法,它把解决问题的过程看作是一个处理单位。这就是说结构化程序设计中,模块是对功能的抽象,而每一个模块都是一个处理单位,并有输入和输出。而面向对象的程序设计(ObjectOrientedProgramming,OOP)是一种以对象为基础,以事件来驱动对象执行的程序设计技术。OOP把计算过程看作为对象的分类过程加上其状态变化的过程,也就是将一个应用程序逐步划分成相互关联的多个对象,并且建立起与这些对象相互关联的事件过程,通过对象对所发生的事件产生响应,并执行相应的事件过程以引发对象状态的改变,从而最终达到完成计算的目的。与结构化程序设计不同,面向对象的程序设计综合了功能的抽象和数据的抽象,它把解决问题的过程看作是一个对象分类演绎的过程。在OOP中,对象(Object)是一个包括数据和方法(操作)的并被封装起来的整体,它是对数据和功能的抽象和统一,而对象就包含了模块的概念。面向对象设计是一种全新的程序设计方法,它从根本上改变了传统的程序设计模式。其基本思想是:通过建立与具体实际应用相对应的对象,并通过这些对象的组合来创建具体的应用程序。这种设计方法给程序设计带来了许多良好特性,一般说来有以下几点:(1)模块性:对象是一个功能和数据独立的单元,它们之间只能通过对象认可的方式来进行通信,并可以较为自由地为其他对象所调用。(2)封装性:这一特性为信息的隐藏提供了具体的实现手段,用户不必清楚对象内部的细节,只需了解其功能即可。(3)继承性:这一特性为代码的共享提供了一种非常有效的方法,从而可以避免重复的代码设计,实现对象的可重用性。这一特性也是面向对象程序设计技术最本质的特征。(4)可靠性:对象实现了抽象和封装,从而使得其中出现的错误限制在对象的内部,因而不会向外部传播,同时也易于检查和维护。(5)可扩充性:面向对象系统可以通过继承机制不断扩充其对象的功能,而不会影响原系统的运行。(6)连续性:虽然面向对象的程序设计语言在编程模式上相差很大,但它并没有摒弃传统的做法,它不仅采用了传统程序设计语言的语言元素,而且利用它们来模拟建立对象,从而使得一个熟悉传统程序设计语言的编程者能够很快掌握面向对象设计的规律。第二章可行性分析研究系统的研究目标整个软件生命周期中,开发所占的时间和费用都很小。后期维护工作一般要占整个生命周期的80%以上,所以系统分析很重要。系统的研究内容1.综述任务调度器在实际使用中的目的与功能;2.深入了解实现任务调度器需要的相关技术;3.熟练掌握多任务之间调度的流程,加深对时间片的理解;4.深入分析设计实现任务调度器的关键技术与编写语言。系统预期实现的功能查看任务任务在开始执行的时候,查看正在执行的任务。删除任务如果任务中有一些任务不需要了,可以删除任务添加任务在需要其他任务可以随时添加任务。数据库技术的现状和发展数据库技术是数据管理的最新技术,是计算机科学的重要分支。十余年来,数据库管理系统已从专用的应用程序包发展成为通用的系统软件。由于数据库具有数据结构化、最低冗余度、较高的程序与数据独立性、易于扩充、易于编制应用程序等优点,较大的信息系统都是建立在数据库设计之上的。因此,不仅大型计算机及中小型计算机,甚至微型机都配有数据库管理系统。数据库是60年代末出现的一门计算机软件技术,到现在虽然只有三十多年的历史,但在理论和时间上都得到了和很大的发展。现在,数据库是数据处理的主要工具,是管理信息系统(MIS)的核心部分。数据库系统是当今计算机信息系统的核心,是计算机技术和应用发展的关键。传统的数据库系统旨在处理永久、稳定的数据,强调维护数据的完整性和一致性。数据库理论与技术的发展极其迅速,其应用日益广泛,在当今的信息社会中,它几乎无所不在。数据库只是存放数据的仓库,如何把数据库中的数据转化为人们的有用信息,则必须建立数据库系统。数据库系统为我们提供了一种把与我们的工作和生活紧密相关的信息集合在一起的方法,它还提供了在某个集中的地方,存储和维护这些信息的方法。数据库系统主要由三大部分组成:数据库管理系统(DBMS:它是专门负责组织和管理数据信息的程序)、数据库应用程序(它使我们能够获取、显示和更新由DBMS存储的数据)、数据库(按一定的结构组织在一起的相关数据的集合)[2]。数据库系统是计算机信息管理系统的最重要的组成部分之一,随着时代的发展,数据库技术的应用越来越广泛。一般来说,DBMS和数据库应用程序都驻留在同一台计算机上并在同一台计算机上运行,很多情况下两者甚至结合在同一个程序中,以前使用的大多数数据库系统都是用这种方法设计的,但是随着DBMS技术的发展,目前的数据库系统正向客户/服务器(B/S)模式发展。客户/服务器数据库将DBMS和数据库应用程序分开,从而提高了数据库系统的处理能力。数据库应用程序运行在一个或多个用户工作站(客户机)上,并且通过网络与运行在其他计算机上(服务器)的一个或多个DBMS进行通信[2]。2.5数据库系统的选择原则我们知道数据库的选择原则主要是:1.数据库系统采用易于集成的,开放的技术。2.产品质量优异,可靠性高,适于长期运行,能支持关键应用。3.数据安全,保密型高。4.能提供分布式数据库功能。5.支持多种开发环境,软件开发容易。6.扩充性和升级能力强。随着计算机技术和软件技术的飞速发展,数据库产品日益繁多,当前市场产品云集,各有特色。其中,使用java创建数据库应用程序常用到的产品有spring、Access、InterBase、Oracle和SQLServer2000等。而在本次的工资管理系统中,我主要采用的是SQLSERVER2000。MicrosoftSQLServer2000是Microsoft公司开发的大型关系数据库。MicrosoftSQLServer2000简称为SQLServer2000。SQLServer2000数据库的特点是,功能强大、使用方便、可伸缩性好、与相关组件集成度高。可在运行各种Windows操作系统的不同机器和大型多服务器等多种平台使用,可运行在Windows98/NT/2000/XP等多种操作系统下。2.5数据库系统的选择原则 我们知道数据库的选择原则主要是:1.数据库系统采用易于集成的,开放的技术。2.产品质量优异,可靠性高,适于长期运行,能支持关键应用。3.数据安全,保密型高。4.能提供分布式数据库功能。5.支持多种开发环境,软件开发容易。6.扩充性和升级能力强。随着计算机技术和软件技术的飞速发展,数据库产品日益繁多,当前市场产品云集,各有特色。其中,使用java创建数据库应用程序常用到的产品有spring、Access、InterBase、Oracle和SQLServer2000等。而在本次的工资管理系统中,我主要采用的是SQLSERVER2000。MicrosoftSQLServer2000是Microsoft公司开发的大型关系数据库。MicrosoftSQLServer2000简称为SQLServer2000。SQLServer2000数据库的特点是,功能强大、使用方便、可伸缩性好、与相关组件集成度高。可在运行各种Windows操作系统的不同机器和大型多服务器等多种平台使用,可运行在Windows98/NT/2000/XP等多种操作系统下。第三章任务调度的实现在Java应用中,大多数任务是以一种"防止用户长时间等待"的方式完成的。在Google搜索这样的例子中,减少等待时间对用户体验来说至关重要。异步任务的一种解决方案是在用户提交后生成一个线程(来处理异步任务),但这也不能解决那些需要以一定时间间隔重复运行任务、或在每天的指定时间运行任务的情况。让我们从一个数据库报表的例子来看看任务调度能如何帮助改善系统设计。报表可能是错综复杂的,这取决于用户所需数据的种类,以及是否需要从一个或多个数据库收集大量数据。用户可能需要很长时间来运行这样的"按需"报表。因此,我们向这个报表示例中添加任务调度机制,以便用户可以安排在任何他们需要的时间生成报表,并以PDF或其他格式在email中发送。用户可以让报表在每天的凌晨2:22,系统正处于低负荷时运行;也可以选择只在特定时间运行一次。通过在报表应用中加入任务调度,我们可以为产品添加一项有用的功能,并改善用户体验。幸运的是,有一个强大的开源解决方案可以让我们以标准的方式在web应用(或任何Java应用)中实施任务调度。以下示例展示了在web应用中,如何使用Quartz来创建一个任务调度框架。这个示例还使用了StrutsActionframework插件,以便在web应用启动时初始化任务调度机制。Struts是最常见的MVC框架,为大多数开发人员所熟悉。当然除此之外还有许多框架可以协助在web应用中实现MVC模式。启动时初始化任务调度器我们首先要做的是建立一个Struts插件,让它在容器启动时创建我们的任务调度器。在以下例子中,我们选择Tomcat作为web应用容器,不过这些示例在其他容器中也应当可以运行。我们要创建一个Struts插件类,并在struts-config.xml中加入几行代码以使之可以工作。这个插件有两个可配置的初始化参数:startOnLoad指定是否要在容器启动时立即启动任务调度器,而startupDelay指定启动任务调度器之前的等待时间。启动延时很有用,因为我们可能需要首先执行一些更重要的初始化步骤。此外还可以使用listener机制,以更复杂的方式来通知SchedulerPlugIn何时启Scheduler。<PLUG-INclassName="SchedulerPlugIn"><SET-PROPERTYproperty="startOnLoad"value="false"/><SET-PROPERTYproperty="startupDelay"value="0"/></PLUG-IN>我们要创建的是一个实现Struts插件接口org.apache.struts.action.PlugIn的单子类SchedulerPlugIn。Struts会按照配置文件中出现的顺序初始化各个插件。要特别注意的是init()方法中的代码,在此我们初始化了所需的Quartz对象,并得到Scheduler。我们的任务信息就要提交到此org.quartz.Scheduler对象,后者将在随后讨论。Scheduler对象由Quartzservlet根据其配置初始化,就像Struts初始化它的ActionServlet类一样。3.2主要内容基本内容某个系统要求通过定时任务来驱动系统的数据处理,因此需要该系统具备定时任务管理功能。当某个定时任务被调度时,定时器将要触发与该定时任务关联的可执行的程序。基本要求需求分析与概要设计。给出各功能模块及数据库表概要设计。任务表编辑功能。任务表数据通过界面添加、修改、删除。可以指明任务的定时规则:按照指定循环执行的时间(月,天,日,时,分,秒,周)和循环次数。基本要求只要求完成任务类型为“过程任务”的定时任务调度。定时任务表中的数据保存在数据库中;定时任务时间的一种表示方法:名称类型备注月整形最大12日整形用的是24时计时法时整形分整形秒整形星期整形任务的调度功能。当到达某个任务约定好的时间时,调度器将调度该任务,并记录该任务的调度时间。任务可分为单任务、任务组。可以将一组有执行顺序的任务归为一个任务组。对于组内有执行顺序的任务,要按照标记的执行次序进行;即前一任务结束,再进行下一任务。多线程的任务调度。不同的任务或任务组应该并行被执行,因此对于不同的定时任务,调度器需要启动独立的线程进行任务的执行。测试与代码调优。对各个功能模块进行全面的测试及代码调优,完成测试报告。扩展要求定时任务类型为“SQL过程”。当到达某个任务约定好的时间时,调度器将调度与该定时任务关联的是一条(组)SQL语句。当定时任务的调度规则发生变更时,调度器应立即按新的调度规则执行。3.3需求分析1、调度器主要的功能模块,负责完成对任务的自动调度。要根据任务编辑器里的任务和数据库里任务的时间进行相应任务的提取和调度并记下调度时间;2、任务编辑器主要完成对任务表数据通过界面添加、修改、删除。可以指明任务的定时规则:按照指定循环执行的时间(月,天,日,时,分,秒,周)和循环次数。3、数据库(任务及其时间)记录任务,和时间,帮助调度器完成根据时间对任务的自动调度。4、任务组的编写编写需要调度的任务,如:一些exe执行文件,数据库操作语句(要自行编写相应的数据库)。3.4概要设计调度器流程图2、模块图3、数据库Task(Taskno,Tasktime,Taskpath)TaskGroup(Taskno,Tasktime,Taskpath1,Taskpath2,Taskpath3)4、任务组编写(sql程序)填写sql语句填写sql语句确认确认添加任务添加任务第四章系统设计代码主窗体主要执行代码/** *调度的任务 */ privateList<Job>jobs=newArrayList<Job>(); /** *表格数据模型 */ privateDefaultTableModelmodel; privateTimertimer=newTimer(); /** *Launchtheapplication. */ publicstaticvoidmain(String[]args){ EventQueue.invokeLater(newRunnable(){ publicvoidrun(){ try{ MainWindowframe=newMainWindow(); frame.setVisible(true); }catch(Exceptione){ e.printStackTrace(); } } }); } /** *Createtheframe. */ publicMainWindow(){ super("Swing任务调度器"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置屏幕居中 Dimensiondimension=Toolkit.getDefaultToolkit().getScreenSize(); intwidth=800; intheight=500; intx=(int)((dimension.getWidth()-width)/2); inty=(int)((dimension.getHeight()-height)/2); setBounds(x,y,width,height); // contentPane=newJPanel(); contentPane.setBorder(newEmptyBorder(5,5,5,5)); contentPane.setLayout(newBorderLayout(0,0)); setContentPane(contentPane); JMenuedit=newJMenu("操作"); JMenusystem=newJMenu("系统"); add=newJMenuItem("添加任务"); del=newJMenuItem("删除任务"); view=newJMenuItem("查看任务"); edit.add(add); edit.add(del); edit.add(view); add.addActionListener(newBtnActionListener(this)); del.addActionListener(newBtnActionListener(this)); view.addActionListener(newBtnActionListener(this)); exit=newJMenuItem("退出"); system.add(exit); exit.addActionListener(newBtnActionListener(this)); JMenuBarbar=newJMenuBar(); bar.add(edit); bar.add(system); setJMenuBar(bar); JPaneltop=newJPanel(); contentPane.add(top,BorderLayout.NORTH); top.setLayout(newFlowLayout(FlowLayout.CENTER,5,5)); addBtn=newJButton("添加任务"); addBtn.addActionListener(newBtnActionListener(this)); top.add(addBtn); delBtn=newJButton("删除任务"); delBtn.addActionListener(newBtnActionListener(this)); top.add(delBtn); viewBtn=newJButton("查看任务"); viewBtn.addActionListener(newBtnActionListener(this)); top.add(viewBtn); JPanelcenter=newJPanel(); contentPane.add(center,BorderLayout.CENTER); center.setLayout(newBorderLayout(0,0)); model=newDefaultTableModel(Constants.colnums,0); table=newJTable(model); //行高度 table.setRowHeight(30); JScrollPanescrollPane=newJScrollPane(table); center.add(scrollPane,BorderLayout.CENTER); //定时任务监控已经完成的任务,2秒钟执行一次 timer.schedule(newTimerTask(){ @Override publicvoidrun(){ intindex=0; for(Iterator<Job>it=jobs.iterator();it.hasNext();){ Jobj=it.next(); model.setValueAt(j.getTotalCount()-j.getCurrCount(),index,5); index++; if(j.getTotalCount()==j.getCurrCount()){ //取消执行 j.cancel(); //从表格中删除 JOptionPane.showMessageDialog(null,"任务["+j.getName()+"],执行完毕!","提示信息",JOptionPane.INFORMATION_MESSAGE); //移除 it.remove(); CommonUtils.delModelByName(j.getName(),model); } } try{ SwingUtilities.invokeAndWait(newRunnable(){ @Override publicvoidrun(){ table.updateUI(); } }); }catch(Exceptione){ e.printStackTrace(); } } },0,2000); }主界面任务监听/***主界面时间处理*/publicclassBtnActionListenerimplementsActionListener{ privateMainWindowmainWindow; publicBtnActionListener(MainWindowmainWindow){ super(); this.mainWindow=mainWindow; } @Override publicvoidactionPerformed(ActionEvente){ if(e.getSource()==mainWindow.getAddBtn()||e.getSource()==mainWindow.getAdd()){//新增 opDialog(0,null); }elseif(e.getSource()==mainWindow.getDelBtn()||e.getSource()==mainWindow.getDel()){ intindex=mainWindow.getTable().getSelectedRow(); if(index==-1){//删除 JOptionPane.showMessageDialog(null,"请选择要删除的任务!","错误信息",JOptionPane.ERROR_MESSAGE); }else{ Vector<String>vector=(Vector<String>)mainWindow.getModel().getDataVector().get(index); mainWindow.getModel().getDataVector().remove(index); mainWindow.getTable().updateUI(); //取消选中 mainWindow.getTable().clearSelection(); //移除任务队列中的数据 CommonUtils.removeFromJobList(mainWindow.getJobs(),vector.get(0)); } }elseif(e.getSource()==mainWindow.getViewBtn()||e.getSource()==mainWindow.getView()){//查看 intindex=mainWindow.getTable().getSelectedRow(); if(index==-1){ JOptionPane.showMessageDialog(null,"请选择要查看的任务!","错误信息",JOptionPane.ERROR_MESSAGE); }else{ Vector<String>vector=(Vector<String>)mainWindow.getModel().getDataVector().get(index); Stringname=vector.get(0); Jobjob=CommonUtils.getJobByName(mainWindow.getJobs(),name); opDialog(1,job); } }elseif(e.getSource()==mainWindow.getExit()){//退出 System.exit(0); } } /** *打开对话框0:add,1:查看 * *@paramtype */ privatevoidopDialog(inttype,Jobj){ ManagerDialogdialog=newManagerDialog(mainWindow,type,j); dialog.setModal(true); dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); dialog.setVisible(true); }}删除任务调度中的数据 /** *删除表格中指定的数据 * *@paramname */ publicstaticvoiddelModelByName(Stringname,DefaultTableModelmodel){ @SuppressWarnings("unchecked") Vector<Object>vector=model.getDataVector(); for(Iterator<Object>it=vector.iterator();it.hasNext();){ Vector<String>tmp=(Vector<String>)it.next(); if(tmp.get(0).equals(name)){ it.remove(); } } } /** *移除数据 * *@paramjobs */ publicstaticvoidremoveFromJobList(List<Job>jobs,Stringname){ for(Iterator<Job>it=jobs.iterator();it.hasNext();){ Jobj=it.next(); if(j.getName().equals(name)){ //停止任务 j.cancel(); it.remove(); } } } /** *根据任务名称获取Job * *@paramjobs *@paramname *@return */ publicstaticJobgetJobByName(List<Job>jobs,Stringname){ for(Iterator<Job>it=jobs.iterator();it.hasNext();){ Jobj=it.next(); if(j.getName().equals(name)){ returnj; } } returnnull; } /** *字符串转换成日期 * *@paramstr *@return *@throwsParseException */ publicstaticDateparseStringToDate(Stringstr)throwsParseException{ SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); returndateFormat.parse(str); } publicstaticStringparseDateToString(Datedate){ SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); returndateFormat.format(date); }}第五章系统测试软件测试是软件开发过程的重要组成部分,是用来确认一个程序的品质或性能是否符合开发之前所提出的一些要求。软件测试的目的,第一是确认软件的质量,其一方面是确认软件做了你所期望的事情,另一方面是确认软件以正确的方式来做了这个事件。第二是提供信息,比如提供给开发人员或程序经理的反馈信息,为风险评估所准备的信息。第三软件测试不仅是在测试软件产品的本身,而且还包括软件开发的过程。如果一个软件产品开发完成之后发现了很多问题,这说明此软件开发过程很可能是有缺陷的。因此软件测试的第三个目的是保证整个软件开发过程是高质量的。软件质量是由几个方面来衡量的:一、在正确的时间用正确的的方法把一个工作做正确。二、符合一些应用标准的要求,比如不同国家的用户不同的操作习惯和要求,项目工程中的可维护性、可测试性等要求。三、质量本身就是软件达到了最开始所设定的要求,而代码的优美或精巧的技巧并不代表软件的高质量。四、质量也代表着它符合客户的需要。做软件测试,最重要的一件事就是从客户的需求出发,从客户的角度去看产品,客户会怎么去使用这个产品,使用过程中会遇到什么样的问题。只有这些问题都解决了,软件产品的质量才可以说是上去了。 5.2测试计划测试计划是测试人员管理测试项目,在软件中寻找Bug的一种有效的工具。测试计划主要有两个作用:一是评判团队的测试覆盖率以及效率,让测试工作很有条理的逐步展开;二是有利于与项目经理、开发人员进行沟通。有了测试计划之后,他们就能够知道你是如何开展测试工作的,他们也会从中提出很多有益的意见,确保测试工作顺利进行。总之,有了测试计划可以更好的完成测试工作,确保用户的满意度。对本系统进行有效性测试,运用黑盒测试的方法,验证系统是否满足需求规格说明书列出的需求。主要是对各个窗体的进行单元测试

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论