1、摘要 I 摘 要 关键字: 摘要 II Abstract Keywords: 目录 III 目 录 摘 要 . I Abstract .II 第一章 引言 . 5 1.1 论文目的及方法 . 5 1.2 研究背景 . 5 1.3 国内外 研究现状 . 5 1.4 论文主要内容 . 7 1.5 论文的组织安排 . 7 第二章 EJB及 Web Service概述 . 9 2.1 EJB. 9 2.1.1 EJB概述 . 9 2.1.2 BOAT中为何要使用 EJB . 9 2.1.3 BOAT系统中的 EJB组件 .10 2.1.4分布式计算技术的比较 . 11 2.1.5 对 BOAT中 EJ
2、B技术的思考 .12 2.2 Web Service 技术 .12 2.2.1 Web Service 概述 .12 2.2.2 Web Service 的访问 .13 2.2.3 Web Service 的创建 .14 2.2.3 Service Message .14 2.2.4 Web Service 在本项目中的应用 .15 2.3 本章小结 .16 第三章 BOAT系统 .17 3.1 BOAT 系统介绍 .17 3.1.1 BOAT系统从何而来 .17 3.1.2 BOAT系统架构 .17 3.1.3 BOAT开发平台及工具 .19 3.2 APM系统简介 .20 3.2.1 AP
3、M简介以及与 BOAT的关系 .20 3.2.2 APM主要开发技术与它的影响 .20 3.2.3 BOAT中调用 Web Service .21 3.3 本章小结 .24 第四章 数据库设计 .25 4.1 BOAT 系统的数据库规范化设计 .25 4.1.1 数据库的规范化设计的原因 .25 4.1.2 表设计中的第一范式( 1NF) .25 4.1.3 表设计中的第二范式( 2NF) .25 4.1.4 表设计中的第三范式( 3NF) .26 4.1.5 Guid与自增量 .26 4.2 BOAT 数据库的存储过程( Store Procedure) .27 4.2.1为何 BOAT采用
4、存储过程 .27 4.2.2 BOAT数据库中的触发器 .28 4.3 BOAT 数据库中的视图( View) .28 目录 IV 4.3.1创建视图 .28 4.3.2 视图的限制 .29 4.4 BOAT 系统的 Audit Log 设计 .30 4.4.1 Audit Log 的设计需求 .30 4.4.2 Audit Log 的数据获取 .30 4.4.3 Audit Log 的用户接口 .30 4.4.4 Audit Log 的用户显示层设计 .32 4.5 表结构设计 .33 4.5.1 辅助列的设计 .33 4.5.2 起同步作用列的设计 .34 4.6 本章小结 .35 第五章
5、 BOAT系统主要功能的实现 .36 5.1 BOAT 中的功能包 BackofficeJar .36 5.1.1 BackofficeJar中的主要功能 .36 5.1.2 BackofficeJar中的邮件类 .36 5.2 用 JFreeChart 实现图形报表的功能 .36 5.2.1 JFreeChart简介 .36 5.2.2 JFreeChart应用举例 .37 5.2.3 HelperEJB在生成图形中作用 .38 5.3 邮件提醒机制的实现 .39 5.3.1 BOAT中 CSR工作分配邮件 .39 5.3.2 BOAT中信息提供和帮助邮件 .39 5.4 Ant 编译 .4
6、0 5.4.1. build.xml中的元素 .40 5.4.2. 经过 Ant编译后 BOAT的结构 .40 5.5 本章小结 .41 第六章 总结 .42 6.1 工作内容 .42 6.2 工作总结 .42 6.3 工作体会 .42 6.4 名词解释: .43 参考文献 .44 附录 Trigger代码 .45 5 第一章 引言 1.1 论文目的及方法 一个大型的 Web应用系统可以拥有很多的组成部分,也可以涉及到很多的技术,根据需求开发人员可以套用或设计不同的模式将各个部分和技术组合起来,从而最终实现一个应用系统。本文的目的 之一就是通过对 BOAT系统全面的阐述,来说明一个新的 Web
7、应用模式:利用 Web Service来调用其它应用的数据服务。本文的目的之二就是说明数据库设计的重要性,因为所有的的应用的设计和实现都是基于数据的,所以成熟可靠的数据库表结构是非常重要的。 本文阐述目的的方法是通过自己在 BOAT系统实际开发过程中参与设计的体会,以及对自己所做实际开发工作的经历的总结而完成的。 1.2 研究背景 自 2000年以来,随着 B/S架构被引入企业平台的开发, Java一直是平台开发的主流技术。随着时间的推移, J2EE的各种技术也是 层出不穷,从 EJB + Struts到 Spring Hibernate,再到 EJB3.0的出现,各种第三方组件更是数不胜数。
8、在 J2EE的技术标准不断推出新的框架的同时, .Net技术由于它更低的开发难度以及前台界面控件的强大功能而受到开发者的青睐。 由于这两种技术的并存,而且各有各的优点,由于 J2EE对 Request、 Response和 Session这样的对象的充分关注可以让开发者很好的对整个系统的流程进行控制,从而更利于系统整体架构的良好设计,而 .Net在这点上相对逊色。所以当不同部门之间的工具平台整合和互 用的时候就会发现问题,两种技术的设计理念区别还是很大的,所以会有 Web Service的出现用于不同系统之间的互用,在这个求同存异的世界,用哪种技术并不是最关键的, .NET和 J2EE都是专注
9、在企业级应用上,相反随着时间的推移如何保证一个平台数据的可用性和结合性才是最重要的。 就本文中的 BOAT系统来说,它存在于当地爱立信的客户支持部已经 5年之久,它的前台界面一直有人负责更新和升级,甚至整个系统除数据库以外的架构都已经换过,所以数据库以上的更新是一直存在的,并且这种更新与旧系统的运行是同时的,所以这次项目要保 证在数据库现有数据结构不变得情况下更别的平台整合。 而对于这个将要重用的新的系统 (APM),所要做的是设计它的数据库结构和它的访问层以便它不仅可以作为其本身的数据库系统,同时也很好的被 BOAT所使用 。在这一点上就可以把它看作一个小的分布式系统,项目中的一个重要任务就
10、是通过对旧系统逻辑层和演示层以及新系统的数据层的设计和改进来达到跨平台业务逻辑的调用和不同系统的统一管理。 综上所述, .NET和 J2EE在企业级应用上的地位已经不容置疑,这两种技术在一个企业内并存的现象也是不可避免。而如今在各个企业级平台之间的数 据重用和逻辑重用的这种需求,特别在一个企业内的相关平台之间,也已经越来越明显。虽然它们之间的关系谈不上分布式系统环境,但是在一定程度上已经有了互相协作,互相更新的行为,有了一定的依赖关系。而这种关系最关键的就是取决于数据库结构的设计。本文以 BOAT为主要系统,以 EJB调用 Web Service为技术基础, APM平台的数据库设计为底层支持,
11、讲述了如何组建一个可协作可重用其他数据 Web企业级管理系统,从而达到协作管理的效果。 1.3 国内外研究现状 现今,许多企业已经为他们的以存在的系统或者数据库投入了很多的资金 和人力,因为更好的技术出现而舍弃旧的系统是不符合成本效益规则的,如何找到一条更符合成本效益的道路来优化企业的EIS(Enterprise Infromation System 企业信息系统 ), SOA(Service Oriented Architecture)的概念就成为了最好的解决方案。 Web Service作为这个概念的一项技术,已经月来越成熟,它通过一些协议和已有的技术6 (XML, Web Service
12、s Description Language (WSDL), Simple Object Access Protocol (SOAP), Universal Description, Discovery, Integration(UDDI)来实现 SOA这个概念。它通过在旧系统上构建可供不同系统使用的 web组件,使旧系统的功能整合到如今的复杂多样化的计算环境中,你可以提供一个尽可能简单的服务,由订阅者去决定如何使用,这种方式非常符合成本效益的规则,用最低的成本来做到新旧的结合,而且已经被广泛使用 1。 至于 Web service未来会充当何种角色,也同样由它的特性所决定,云计算最近作为一个
13、新名词进入大家 的视野,微软和 Google都推崇这种概念,虽然方式不一样,但是有一种未来大家是可见的,就是将来网上充斥的不再是信息,而是各种各样的服务。这种服务通过什么提供,就是存在于 Internet上的各个网络单元通过 Web Service提供的,它将成为未来的主流技术。 不知道什么时候网上出现各种各样关于 EJB性能差的说法,虽然 EJB已经渐渐淡出历史舞台,但如果要使用 J2EE提供一个成熟的解决方案, EJB将会一个选择,因为 EJB的容器 (如 JBOSS)自动提供了对象池和缓存池。如果你的解决方案需要承受大量的并发访问,没有 缓存池更本不可能达到用户要求。所以一个无状态的 S
14、ession Bean的性能肯定要强于一个框架中的普通 Java Bean。而随着 EJB技术进入 3.0阶段,它在更框架相比在数据持久性上面的不足也得到了加强。 EJB3.0的很多新特性是通过 JAVA SE5.0来实现的。这里就要谈到 JAVA SE 5.0,它所提供的许多特性,其中最有趣的一点就是标注 (Annotation)的功能。以前的 JAVA语言都是命令格式的,比如 a.b(),表示让类 a做事情 b,但是很多时候只是需要对某个对象做一些注解,比如对某个类标记为可持 续化的Serializable。这只是一个标记,为了以后的处理提供说明,本身不需要做任何操作。 在 Deploy
15、的时候, 提供了很多说明的 XML文件,比如部署描述文件,里面说明了引用的 EJB的名字,接口, 以及当前 EJB的 Transaction Type等等信息。所有这些信息都是说明性的,而不是命令性的。用来对某个对象的某个属性坐一段说明。因此,有一个非常有趣的想法,能不能通过对 JAVA语言的扩展,结合标注和命令这两者的优点 ? 这也是有一个专家组在 JCP的组织内完成的, JSR规范的编号是 JSR 175,为 JAVA SE 5.0支持标注(Annotation)的功能。这个规范为 EJB3.0 的简化实现提供了一些基本的支持,也是最关键的支持。标注可以有自己的属性,也可以定义自己的持续时
16、间,表示这段信息是否保存到源代码中,还是一直持续到Class中,或者一直保持到运行时间。标注有自己的缺省值。大多数情况下,无须说明就可以推算出来这个对象的行为。 但是现在随着 Swing框架的流行,统计数据显示, EJB的受欢迎程度在降低, EJB3.0也不可能完全抛弃 EJB2.0完全重新设计,它势必要达到对 EJB2.0的 最大兼容。而且不管是 EJB2.0还是 3.0,它们最大的优势都是分布式部署,而 J2EE的企业级应用向来关心的是数据本身,并不是分布式,或者说更本用不到分布式部署,在这一点上 EJB就失去了它的效用,在 BOAT系统中继续使用 EJB就相当于继续使用一个组件,因为先前
17、建立的 EJB已经建立了一个组件模型,如果再要实现什么新功能,只要依照原来的组件模型模仿就行了。如果要重新设计 BOAT系统,现存的组件模型的 EJB完全可以被 Spring这个轻量级框架所取代 2。但是现阶段在这个项目中最重要的不是用更先进的技术重新实现 BOAT ,而是新增功能,并使BOAT系统可以很好的使用外部数据库,所以 EJB在 BOAT中会继续存在。 所以结合这两种技术,现在一个 Web企业级应用如果采用 J2EE作为解决方案,那么它的主流的架构将会是这样的,底层是由数据库存储实现的持久层,数据库之上是 EJB的模型类包括所有的业务逻辑,在EJB类之上建立的是 Web Servic
18、e层,在这层之上建立的框架动作层,它可以是 struts动作或者是 spring动作,也就是通常所说的控制用于决定显示层的显示,再之上就是显示层,它们由 JSP页面组成。这种架构中最主要的创新就 是中间的 Web Service层,它不但可以将自己系统本身由 EJB组成的业务逻辑和数据库访问作为服务提供给控制层,而且同样可以把这种服务提供给外界的订阅者,而订阅者只要知道它们所需要的 Web Service的 WSDL描述即可,同时 Web Service层还可以提供数据的验证、错误处理以及数据对象的缓存 (Caching),这种缓存是可以通过代码完全控制,缓存数据避免任何不必要的 数据库 访问
19、,可 以在本地缓存一个会话 bean方法调用返回结果,这样就大大提高了数据访问的速率,从而提供系统的整体性能。在 Web Service层的错误处理中隐藏了与 EJB相关的系统异常。与 API相关的系统异常,比如RemoteException, EJBException都在 WSManager中被捕获然后作为一个非 EJB的相关异常 (比如一个自定7 义的业务代理异常 )通过 Web服务端点重新抛出给客户端。应用级的异常仍然被传递给 Web服务端点,然后由 Web服务端点通过 SOAP消息发送给调用 Web服务的客户端。 Web Service层在提供服务的同时,当然也可以从其它的服务提供者
20、(Service Provider)处获得服务。这样看来,新加入的这个层起到了内部以及外部通信的作用。在未来的面向服务的趋势中,这种结构将会越来越受到欢迎。 1.4 论文主要内容 论文所讨论的系统是在爱立信客户支持部内使用的工作平台,整个部门的运作也依赖于它,所以就此系统地位而言是相当重要的。虽然这个系统已经存在很长时间,但是随着客户需求的不断变化,开发技术的不断改进,需要的维护和功能加强和更新也越来越多。我在这个项目中的任务是对代码进行优化,必要时重新开发 ,在这次开发过程中,也遇到了一些特殊的问题,如两个不同系统之间的交互等引起的问题。因此本文基于 BOAT系统,就本人所参加的工作,结合各
21、项工作所采用的技术和方法,从以下方面对 BOAT系统和我所承担的开发工作进行了讨论: (1) 探讨了 EJB以及 Web Service在 BOAT系统中的重要作用 EJB是 JAVA技术 中 服务 器端软件构件的 技术 规范和平台支持,这是站在软件组件的角度去看。在软件产业中,基于组件的 技术 是当前的热点,虽然这个管理系统并不是最新的管理系统,就 EJB2.0来说,所采用的技术也不是非常先进,但是本文站在一个当时开发这个系统的角度解释为何采用 EJB,这个技术对后续的二期开发有何好处。另外,为了促进不同平台之间的合作以及数据重用( BOAT与 APM),本文还详细讨论了 BOAT系统中新引进的 Web Service技术,并且讨论了在 Java环境中调用远程 Web Service的实际开发过程。 (2) 探讨了数据库设计对于一个 Web管理系统的重要性及实现 数据库在应用程序的重要位置是任何人无法否认的。数据库的设计也有数据库设计的规则,如常常所见的第一范式、第二范式、第三范式甚至于到第五范式。这些都属于理论上的内容,仅仅凭借一时的空想是完全不可能做到数据库的优良设计。在我们的项目中通过对需求的详细分析,在通过 SQL 2000 DBMS最大程度的结合实际,结合用户的业务规则来进行数据库的设计。但是在本文中强调的那些设计数据 库的