《XX电网公司 企业级 资产管理系统 概要设计说明书.doc》由会员分享,可在线阅读,更多相关《XX电网公司 企业级 资产管理系统 概要设计说明书.doc(78页珍藏版)》请在三一办公上搜索。
1、广东电网公司企业级资产管理系统概要设计说明书广东电网公司深圳市康拓普信息技术有限公司二零一零年六月修订记录版本修订说明作者审核审核日期V1.0概要设计说明书许久歌、夏成文、王杨、单俊、柯庭、肖威、李寿荣所有权声明:深圳市康拓普信息技术有限公司版权所有 不得复制Copyright 2009 by Shenzhen Comtop Information Technology Co., Ltd.目 录1系统概述11.1名词解释11.2系统的上下文联系21.3系统的物理部署结构31.4系统的技术体系结构41.5系统的功能体系结构51.6子系统概述51.7系统主要场景描述81.7.1新增场景81.7.2
2、查询场景91.8关键的设计概念101.8.1系统采用技术简介101.8.2系统中的J2EE应用模式191.8.3系统应用的字符编码211.8.4表单验证241.8.5工作流应用开发241.8.6系统主要设计模式282系统出错处理设计352.1后台处理机制352.2页面端处理机制363权限验证机制374子系统的说明374.1项目管理374.1.1前期与立项说明374.1.2项目进度管理说明404.1.3服务确认说明414.1.4质量安全管理说明434.1.5决算转资说明444.1.6资料管理说明444.1.7查询统计说明464.1.8统计决策与支持464.2物资管理474.2.1主数据管理484
3、.2.2需求管理484.2.3采购管理494.2.4储运管理514.2.5查询统计说明534.3资产管理544.3.1基础数据管理544.3.2资产台帐管理554.3.3资产建设管理564.3.4输网资产变更管理584.3.5资产退役管理584.3.6工单管理594.3.7实体关系604.3.8设计考虑的因素604.4财务管理604.4.1固定资产管理604.5服务合同管理624.5.1服务合同管理说明624.6服务合同付款管理634.6.1服务合同付款管理说明634.7接口说明644.7.1概述644.7.2子系统构架644.7.3代码目录结构644.7.4实体关系644.7.5设计考虑的因
4、素645软件重用645.1第三方软件使用说明645.1.1水晶报表(Crystal Report)655.1.2Webi655.1.3fusionchart665.1.4水晶报表应用功能描述665.2重用库组件使用说明675.3新组件功能说明701 系统概述在南网公司的统一部署下,广东电网公司于2007年启动了“创先”工作。而广东电网作为全国最大的省级电网,地域辽阔,资产庞大,在现有的电力体制环境下,对于如何有效地经营和管理资产,实现企业资产使用的可靠性、使用效率、使用寿命和成本支出的综合平衡,是对广东电网生产经营能力的一种考验,也是创建先进水平省级供电企业所需重点突破的核心内容。但是,公司资
5、产管理一直沿用传统的基于职能部门分工的“条块化”、“分段式”管理模式,资产管理观念薄弱,从而导致在资产管理过程中出现了管理目标不明确、不统一,评估与考核体系不科学、不健全,资产管理组织不协调,管理链条和信息割裂等现象,形成了资产管理的职能和信息条块壁垒,突出表现在资产管理粗放、使用效率不高、生命较短、资产实物管理与价值管理脱节等,管理手段的滞后,制约了公司实现国际领先的战略目标。因此,必须对现有的资产管理模式进行管理变革,引入先进的资产管理理念和现代化资产管理手段,通过信息系统支撑资产全生命周期管理体系的建设,全面提升公司资产管理水平。企业级资产管理系统依据广东电网公司企业级资产管理信息系统功
6、能规范及实施方案的要求,通过对资产的规划设计、设备采购、工程建设、生产运营、退役报废等全生命周期进行全过程综合管理,实现项目管理、物资管理、财务管理、生产管理四大业务的横向融合,以及省公司、地市供电局、县级供电局等的纵向贯通,实现资产使用的可靠性(Reliability)、使用效率(Efficiency)、使用寿命(Lifespan)和全生命周期成本(Life Cycle Cost)的综合最优,落实资产全生命周期管理体系的资产管理策略、业务流程、组织架构、评估考核等关键要素,为科学高效的现代化资产全生命周期管理体系建设及目标的实现提供信息系统支持。1.1 名词解释缩写描述设计模式提供了设计不同
7、系统、不同应用时经常发生的问题的解决方案,向编程人员提供特定问题的可依据的方法蓝图。J2EE全称是Java 2 Platform Enterprise Edition,它是由sun公司领导、各厂商共同制定并得到广泛认可的工业标准。 XMLXML(Extensible Markup Language),一种扩展性标识语言。MVC模式MVC是ModelViewController的简写。Model 代表的是应用的业务逻辑(通过JavaBean,ActionForm实现)。 View 是应用的表示面(由JSP页面产生)。Controller 是提供应用的处理过程控制(一般是一个Servlet),通过
8、这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。StrutsStruts是采用Java Servlet/JavaServerPages技术,开发Web应用程序的开放源码的FrameWork。Web ServiceWeb Services是建立可互操作的分布式应用程序的新平台,是一种新的web应用程序分支,他们是自包含、自描述、模块化的应用。水晶报表为企业提供了用于OLAP的交互式的、简单易用的分析报表功能,专为Web用于而设计,为企业的决策人员提供了无与伦比的决策支持功能。Ejb3.0.1.2 系统的上下文联系1.系统与Excel 2000 / XP/2003 的接口使用Apac
9、he POI组件。2.系统与数据库连接使用数据库连接池。3.系统与XML文档交互使用Apache JDOM。4.系统采用打印组件来实现打印和打印预览功能。5.系统提供与财务系统的接口。付款单据传入财务系统,财务付款后,企业级资产管理系统能够及时从财务系统获取付款的数据。6.系统通过定时器组件实现与OAK系统的接口,每天通过OAK系统提醒用户及时处理企业级资产管理系统的待办工作。7.系统提供与招投标系统的接口。将项目信息传递给招投标管理系统,项目招标后,企业级资产管理系统能够及时从招投标系统中获取项目的招标信息。8.系统提供与生产管理系统进行的接口。实现项目管理、设备台帐、维护计划、工单与生产管
10、理系统的交互。9.和企业信息门户管理系统集成,支持从门户系统直接进入企业级资产管理系统来处理待办事宜。10.采用WebService和EJB远程接口技术实现系统之间的数据交换。其中EJB远程接口技术的使用适用于由我公司开发的业务系统之间的数据交换。WebService技术主要适用我公司开发的系统与其他公司开发的业务系统之间的数据交换。1.3 系统的物理部署结构企业级资产管理系统的部署采用“全省大集中”的模式,系统存在用户数、业务数据量大特点,建议系统硬件架构如下图所示:系统硬件架构1.4 系统的技术体系结构1.5 系统的功能体系结构项目管理企业级资产管理系统前期与立项设计与计划执行与监控资料管
11、理物资管理申购管理采购管理储运管理品控管理竣工决算合同管理系统生产管理系统档案管理系统EIPPKIOAK设备台帐管理设备管理工单管理财务管理资金管理核算管理全面预算管理系统固定资产管理模版管理配置管理企业级资产管理系统在项目前期管理、设计、执行与监控到竣工的过程中,通过物料装配使初设台帐形成正式的设备台帐,以概算结构为核心控制整个项目过程发生成本,归集物资采购与服务采购成本,所有成本分摊到暂估资产卡片后形成正式的固定资产卡片。技改项目涉及到资产报废和闲置则需要更新资产卡片,并将闲置物资入库供再次使用。在生产运营过程中由预试、定检、消缺等运维工作生成工单,根据设备与备品配件的关联关系查找库存,可
12、以领用备品配件或者进行物资申购,生成物资和服务采购订单,在工单执行过程中将归集所有发生成本。1.6 子系统概述根据需求规格说明书将系统划分为以下4个主要功能模块,项目管理、物资管理、设备管理、财务管理。项目管理包括前期管理、设计与计划、执行与监控、竣工决算等子模块,前期管理包括了项目从规划到项目年度投资计划,设计与计划包括项目开工前的各项设计与计划工作,执行与监控规划包括项目施工过程中对质量、安全、资金的控制,竣工决算包括项目阶段验收到决算转资的工作。类端目录结构:目录说明:按照系统的功能划分。masterdata基本资料,数据业务层。commom公用函数。component 公用组件。int
13、eractive与外部系统的webservice接口。project 项目管理各个模块material 物资管理各个模块device 设备管理各个模块finance财务管理各个模块payment 付款contract 合同 JSP整体目录结构:模块名称JSP目录说明对应的需求项项目文件webcomponent重用组件config通用配置管理维护组件css通用的cssdownload提供Java下载文件error通用的系统错误提示页面images通用的图片文件include通用的包含文件js通用的js文件lcam企业级资产管理系统Jsp文件projectmaterialdevicefinance
14、contractpaymentcommoncomponentimagesjsprimarypage通用系统访问主页面system系统的管理文件WEB-INF配置文件存放路径workflow工作流引擎页面文件extext 动态js组件配置文件目录结构:目录下级目录说明对应的需求项WEB-INFlcam企业级资产管理系统的配置文件projectmaterialdevicefinancecontractpaymentcomponentdwrtemplate(excel、doc、xml)compagedwr 配置文件 tld存放标签APP-INFlib存放工程项目管理系统所引用到的包集合classes
15、存放编译以后的Java类代码配置平台目录结构目录下级目录说明ct.lcam.project项目管理相关配置material物资管理相关配置device设备管理相关配置finance财务管理相关配置contract合同管理相关配置payment付款管理相关配置masterdata主数据管理相关配置1.7 系统主要场景描述系统场景从系统应用层的实现方式分为以JSP和Struts两种实现方式;从系统功能上分可以分为新增场景和查询场景。1.7.1 新增场景 新增、更新、删除等操作场景与新增场景类似,统称新增场景。下面以新增开工申请为例对以Struts方式实现的前端表现层的新增场景进行描述,如图:Str
16、uts为前端表现层的新增场景1.7.2 查询场景查询、显示列表等场景都归为查询场景。下面以开工申请的查询为例描述Struts为前端表现层的查询场景:Struts为前端表现层的查询场景1.8 关键的设计概念1.8.1 系统采用技术简介1.8.1.1 MVC模式简介MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层-模型层、视图层、控制层。 它们分别担任不同的任务,下图显示了这几个模块各自的功能以及它们之间的相互关系。视图视图(View)代表用户交互界面,对于Web应用来说
17、,可以概括为HTML界面,但有可能为XHTML、XML和Applet。随着应用的复杂性和规模性,界面的处理也变得具有挑战性。一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。业务流程的处理交予模型(Model)处理。比如一个订单的视图只接受来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传递给控制和模型。模型模型(Model)就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。
18、目前流行的EJB模型就是一个典型的应用例子,它从应用技术实现的角度对模型做了进一步的划分,以便充分利用现有的组件,但它不能作为应用设计模型的框架。它仅仅告诉你按这种模型设计就可以利用某些技术组件,从而减少了技术上的困难。对一个开发者来说,就可以专注于业务模型的设计。MVC设计模式告诉我们,把应用的模型按一定的规则抽取出来,抽取的层次很重要,这也是判断开发人员是否优秀的设计依据。抽象与具体不能隔得太远,也不能太近。MVC并没有提供模型的设计方法,而只告诉你应该组织管理这些模型,以便于模型的重构和提高重用性。我们可以用对象编程来做比喻,MVC定义了一个顶级类,告诉它的子类你只能做这些,但没法限制你
19、能做这些。 业务模型还有一个很重要的模型那就是数据模型。数据模型主要指实体对象的数据 保存(持续化)。比如将一张订单保存到数据库,从数据库获取订单。我们可以将这个模型单独列出,所有有关数据库的操作只限制在该模型中。控制器控制(Controller)可以理解为从用户接收请求, 将模型与视图匹配在一起,共同完成用户的请求。划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层并不做任何的数据处理。例如,用户点击一个连接,控制层接受请求后, 并不处理业务信息,它只把用户的信息传递给模型,告诉模型做什么,选择符合要求的视图返回给
20、用户。因此,一个模型可能对应多个视图,一个视图可能对应多个模型。MVC处理过程首先控制器接受用户的请求,并决定应该调用哪个模型来进行处理;然后模型根据用户请求进行相应的业务逻辑处理,并返回数据;最后控制器调用相应的视图来格式化模型返回的数据,并通过视图呈现给用户。MVC的优点首先,模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都应反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化-传播机制。其次,模型是自包含的,与控制器和视图保持相对独
21、立,所以可以方便地改变应用程序的数据层和业务规则。此外,控制器提高了应用程序的灵活性和可配置性。MVC的应用范围适用MVC需要精心的计划,由于它的内部原理比较复杂,所有需要花费一些时间去理解它。将MVC运用导应用系统中,会带来额外的工作量,增加应用的复杂性,所以MVC不适合小型应用程序。但对于开发存在大量用户界面,并且业务逻辑复杂的大型应用程序,MVC将会使软件在健壮性、代码重用和结构方面上一个新的台阶。尽管在最初构建MVC框架时会花费一定的工作量,但从长远的角度来看,它会大大提高后期软件开发的效率。MVC与J2EE架构的关系MVC与J2EE架构的对应关系是:View处于Web Tier或者说
22、是Client Tier,通常是JSP/Servlet,即页面显示部分。Controller也处于Web Tier,通常用Servlet来实现,即页面显示的逻辑部分实现。Model处于Middle Tier,通常用服务端的javaBean或者EJB实现,即业务逻辑部分的实现。MVC与Struts的关系MVC模式是一种架构模式,其实需要其他模式协作完成。在J2EE模式目录中,通常采用service to worker模式实现,而service to worker模式可由集中控制器模式,派遣器模式和Page Helper模式组成。而Struts只实现了MVC的View和Controller两个部分
23、,Model部分需要开发者自己来实现,Struts提供了抽象类Action使开发者能将Model应用于Struts框架中。1.8.1.2 Struts简介对于开发Web应用,要从头设计并开发出一个可靠、稳定的框架并不是一件容易的事。幸运的是,随着web开发技术的日趋成熟,在web开发领域出现了一些现成的优秀的框架,开发者可以直接使用他们,Struts就是一种不错的选择,它是基于MVC的Web应用框架。在Struts中,模型由实现业务逻辑的JavaBean或EJB组件构成,控制器由ActionServlet和Action来实现,视图由一组JSP文件构成。下图显示了Struts实现的MVC框架。(
24、Struts实现的MVC框架)在Struts框架中,视图就是一组JSP文件,在这些JSP文件中没有业务逻辑,也没有模型信息,只由标签,这些标签可以是标准的JSP标签或客户化标签,如Struts标签库里的标签,此外,通常也将Struts框架中的ActionForm Bean也划分到视图模块中。模型表示应用程序的状态和业务逻辑,在这里,我们用JavaBean和EJB组件来实现。控制器由ActionServlet类和Action类来实现。在Struts中,模型、视图、控制器三者之间的关系和各自的主要功能如下图:1.8.1.3 EJB技术简介EJB的概念EJB的全称是Enterprise java b
25、ean。是JAVA中的商业应用组件技术。EJB结构中的角色 EJB 组件结构是基于组件的分布式计算结构,是分布式应用系统中的组件。EJB的体系结构EJB分布式应用程序是基于对象组件模型的,低层的事务服务用了API技术。EJB技术简化了用JAVA语言编写的企业应用系统的开发,配置。EJB技术定义了一组可重用的组件:Enterprise Beans。你可以利用这些组件,象搭积木一样的建立你的分布式应用程序。当你把代码写好之后,这些组件就被组合到特定的文件中去。每个文件有一个或多个Enterprise Beans,在加上一些配置参数。最后,这些Enterprise Beans被配置到一个装了EJB容
26、器的平台上。客户能够通过这些Beans的home接口,定位到某个beans,并产生这个beans的一个实例。这样,客户就能够调用Beans的应用方法和远程接口。EJB服务器作为容器和低层平台的桥梁管理着EJB容器和函数。它向EJB容器提供了访问系统服务的能力。例如:数据库的管理和事务的管理,或者对于其它的Enterprise的应用服务器。所有的EJB 实例都运行在EJB容器中。容器提供了系统级的服务,控制了EJB的生命周期。EJB中的有一些易于使用的管理工具如:Security-配置描述器(The Deployment descriptor)定义了客户能够访问的不同的应用函数。容器通过只允许授
27、权的客户访问这些函数来达到这个效果。Remote Connectivity-容器为远程链接管理着低层的通信issues,而且对Enterprise Beas的开发者和客户都隐藏了通信细节。EJB的开发者在编写应用方法的时候,就象是在条用本地的平台一样的。客户也不清楚他们调用的方法可能是在远程被处理的。Life Cycle managment-客户简单的创建一个Enterprise beans的实例,并通常取消一个实例。而容器管理着Enterprise Beans的实例,使Enterprise Beans实现最大的效能和内存利用率。容器能够这样来激活和使Enterprise Beans失效,保持
28、众多客户共享的实例池。等等。 Trasction management-配置描述器定义了Enterprise beans 的事务处理的需求。容器管理着那些管理分布式事务处理的复杂的issues。这些事务可能要在不同的平台之间更新数据库。容器使这些事务之间互相独立,互不干扰。保证所有的更新数据库都是成功发生的,否者,就回滚到事务处理之前的状态。EJB组件是基于分布式事务处理的企业级应用程序的组件。所有的EJB都有如下的特点:EJB包含了处理企业数据的应用逻辑。定义了EJB的客户界面。这样的界面不受容器和服务器的影响。于是,当一个EJB被集合到一个应用程序中去时,不用更改代码和重新编译。EJB能够
29、被定制 各种系统级的服务,例如安全和事务处理的特性,都不是属于EJB类的。而是由配置和组装应用程序的工具来实现。 EJB的分类有两种类型的EJB: Session beans 和 entity beans。Sessionbeans是一种作为单用户执行的对象。作为对远程的任务请求的相应,容器产生一个Session beans 的实例。一个Session beans有一个用户.从某种程度上来说,一个Session bean 对于服务器来说就代表了它的那个用户.Session beans 也能用于事务,它能够更新共享的数据,但它不直接描绘这些共享的数据。Session beans 的生命周期是相对较
30、短的。典型的是,只有当用户保持会话的时候,Session beans 才是活着的。一旦用户退出了,Session beans 就不再与用户相联系了。Session beans被看成是瞬时的,因为如果容器崩溃了,那么用户必须重新建立一个新的Session对象来继续会话。Session bean典型的声明了与用户的互操作或者会话。也就是说,Session bean了在客户会话期间,通过方法的调用,掌握用户的信息。一个具有状态的Session bean称为有状态的Session bean.当用户终止与Session beans互操作的时候.会话终止了,而且,bean 也不再拥有状态值。Session
31、 bean也可能是一个无状态的 session bean.无状态的Session beans并不掌握它的客户的信息或者状态。用户能够调用beans的方法来完成一些操作。但是,beans只是在方法调用的时候才知道用户的参数变量。当方法调用完成以后,beans并不继续保持这些参数变量。这样,所有的无状态的session beans的实例都是相同的,除非它正在方法调用期间。这样,无状态的Session beans就能够支持多个用户.容器能够声明一个无状态的Session beans.能够将任何Session beans指定给任何用户。Entity Beans对数据库中的数据提供了一种对象的视图。例如
32、:一个Entity bean能够模拟数据库表中一行相关的数据。多个client能够共享访问同一个Entity bean.多个client也能够同时的访问同一个Entity bean.Entity beans通过事务的上下文来访问或更新下层的数据。这样,数据的完整性就能够被保证。Entity Beans能存活相对教长的时间,并且状态是持续的。只要数据库中的数据存在,Entity beans就一直存活。而不是按照应用程序或者服务进程来说的。即使EJB容器崩溃了,Entity beans也是存活的。Entity Beans生命周期能够被容器或者 Beans自己管理。如果由容器控制着保证 Entity
33、 beans持续的issus。如果由Beans自己管理,就必须写Entity beans的代码,包括访问数据库的调用。 Entity Beans是由主键(primary key 一种唯一的对象标识符)标识的。通常,主键与标识数据库中的一块数据,例如一个表中的一行,的主键是相同的。主键是client能够定位特定的数据块。(增加EJB3介绍、吴华庭)1.8.1.4 Web Service简介Web Services是建立可互操作的分布式应用程序的新平台,是一种新的web应用程序分支,他们是自包含、自描述、模块化的应用,可以发布、定位、通过web调用。Web Service可以执行从简单的请求到复杂
34、商务处理的任何功能。一旦部署以后,其他Web Service应用程序可以发现并调用它部署的服务。 Web Service平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。要实现互操作性,Web Service平台必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。在传统的分布式系统中,基于界面(interface)的平台提供了一些方法来描述界面、方法和参数(译注:如com和cobar中的idl语言。同样的,Web Service平台也必须提供一种标准来描述Web Service,让客户可以得到足够的信息来调用这个Web Servi
35、ce。最后,我们还必须有一种方法来对这个Web Service进行远程调用。这种方法实际是一种远程过程调用协议(rpc)。同时rpc协议还与编程语言无关。一般Web Service实现包含四个基本步骤:创建Web Service的商业逻辑(通常是一些Java类);将这些Java类部署到一个SOAP服务器上;生成客户访问代码;部署客户应用。而Web Service由两部分组成:SOAP-Web Service之间的基本通信协议;WSDL-Web Service描述语言,它定义了Web Service做什么,怎么做和查询的信息。下图描述了Web Service的3个组成部分-WSDL、SOAP、U
36、DDI。Web Service的三个组成部分下面是组成Web Service平台的三项技术:1.8.1.4.1 XML和XSD 扩展的标记语言(xml)是web service平台中表示数据的基本格式。除了易于建立和易于分析外,xml主要的优点在于它既是平台无关的,又是厂商无关的。无关性是比技术优越性更重要的:软件厂商是不会选择一个由竞争对手所发明的技术的。 xml解决了数据表示的问题,但它没有定义一套标准的数据类型,更没有说怎么去扩展这套数据类型。例如,整形数到底代表什么?16位,32位,还是64位?这些细节对实现互操作性都是很重要的。w3c制定的xml schema(xsd)就是专门解决这
37、个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。Web Service平台就是用xsd来作为其数据类型系统的。我们用Java来构造一个Web Service时,为了符合Web Service标准,所有使用的数据类型都必须被转换为xsd类型。1.8.1.4.2 SOAPWeb Service建好以后,就需要去调用它。简单对象访问协议(Soap)提供了标准的rpc方法来调用Web Service。实际上,Soap规范定义了Soap消息的格式,以及怎样通过http协议来使用Soap。Soap也是基于xml和xsd的,xml是Soap的数据编码方式。Soap 是 XM
38、L Web Service 的通信协议。当把 SOAP 描述为一种通信协议时,多数人都会想到 DCOM 或 CORBA,并且会问SOAP 如何激活对象?或SOAP 使用什么样的命名服务?等问题。虽然 SOAP 实现方案可能会包含上述内容,但 SOAP 标准并未对其进行规定。SOAP 一种规范,用来定义消息的 XML 格式 - 这是规范中所必需的部分。包含在一对 SOAP 元素中的、结构正确的 XML 段就是 SOAP 消息。SOAP 规范的其他部分介绍如何将程序数据表示为 XML,以及如何使用 SOAP 进行远程过程调用 (RPC)。这些可选的规范部分用于实现 RPC 形式的应用程序,其中客户
39、端将发出一条 SOAP 消息(包含可调用函数,以及要传送到该函数的参数),然后服务器将返回包含函数执行结果的消息。目前,多数 SOAP 实现方案都支持 RPC 应用程序,这是因为习惯于开发 COM 或 CORBA 应用程序的编程人员熟悉 RPC 形式。SOAP 还支持文档形式的应用程序,在这类应用程序中,SOAP 消息只是 XML 文档的一个包装。文档形式的 SOAP 应用程序非常灵活,许多新的 XML Web Service 都利用这一特点来构建使用 RPC 难以实现的服务。SOAP 规范的最后一个可选部分定义了包含 SOAP 消息的 HTTP 消息的样式。此 HTTP 绑定非常重要,因为几
40、乎所有当前的 OS(以及许多以前的 OS)都支持 HTTP。HTTP 绑定虽然是可选的,但几乎所有 SOAP 实现方案都支持 HTTP 绑定,因为它是 SOAP 的唯一标准协议。由于这一原因,人们通常误认为 SOAP 必须使用 HTTP。其实,有些实现方案也支持 MSMQ、MQ 系列、SMTP 或 TCP/IP 传输,但由于 HTTP 非常普遍,几乎所有当前的 XML Web Service 都使用它。由于 HTTP 是 Web 的核心协议,因此大多数组织的网络基础结构都支持 HTTP,并且员工已经了解了如何对其进行管理。如今,已经建立了用于 HTTP 的安全保护、监视和负载平衡的基础结构。1
41、.8.1.4.3 WSDL用机器能阅读的方式提供一个正式的描述文档。Web service描述语言(WSDL)就是这样一个基于XML的语言,用于描述Web Service及其函数、参数和返回值。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Web Service生成WSDL文档,又能导入WSDL文档,生成调用相应Web Service的代码。1.8.1.4.4 开发Web Service的步骤1、 编写服务器端 导入WebService包和WebMethod包:import javax.jws.WebService; im
42、port javax.jws.WebMethod; 实现的服务类前加WebService符号; 为了代码清晰,类提供的公开方法前加WebMethod符号,这个不写对编译也没影响。2、 编译服务器端 javac命令的classpath选项中要有javaee.jar的路径,如javac -classpath d:/Sun/SDK/lib/javaee.jar -d ./build src/endpoint/Hello.java 用wsgen命令生成wsdl文件. 服务器端打包。3、在客户端机器上自动生成stub类 客户机上必须也装有jdk和javaee5 用wsimport工具将服务器传过来的ws
43、dl文件转换成本地的stub类4、编写客户端调用代码 导入WebServiceRef包:import javax.xml.ws.WebServiceRef; 导入本地生成的stub类,如:import endpoint.HelloService;import endpoint.Hello; 指明服务器的wsdl路径:WebServiceRef(wsdlLocation=http:/localhost:8080/xxx/xxxService?WSDL) 声明一个静态的service对象:static HelloService service; 对要调用的远程方法声明一个代理对象,通过代理来调用真
44、正的远程方法5、编译客户端调用程序,注意classpath参数中要有 stub类的路径; javaee.jar的路径; appserv-ws.jar的路径。6、用appclient执行客户端程序 进入到客户端程序的上级目录; 把APPCPATH的值设置为当前目录; appclient的第一个参数为客户端程序名,后面的参数是传给客户端程序本身的命令行参数。下图是分布式服务下Web Service的实现结构图:Web Service的基本结构图客户端需要根据WSDL创建客户端Java程序,其中包括Stub程序。客户端调用相应的Stub程序,进一步调用JAX-RPC(Java APIs for XM
45、L-Based Remote Procedure Call,基于XML的远程过程调用的Java API)运行环境创建SOAP请求消息,通过HTTP传输给服务器端。Web服务器端的JAX-RPC运行环境在收到SOAP请求消息后,对SOAP的XML内容进行解析,再通过Tie来调用服务接口实现类(无状态会话Bean或者Java对象),得到结果后,创建SOAP响应消息返回给客户端。1.8.2 系统中的J2EE应用模式本系统主要采用J2EE和JSP两项技术构建,同时还有Struts和XML。J2EE应用于服务器端,主要采用EJB技术,提供与数据库的交互、与Struts的通信。EJB分为实体Bean和会话Bean两大部分,实体Bean全部采用CMP(即容器管理的持续),特殊情况下可采用BMP(Bean管理的持续),CMP实现与数据库的交互,实现对数据的存取以及数据库事务的管理;会话Bean实现业务逻辑,对数据进行逻辑处理,同时提供了Struts的访问接口。考虑到系统中存在大量数据的访问,如果客户端直接调用CMP,那么将产生大量的RMI调用,从而加重网络负载