Waf2技术框架设计20120306_第1页
Waf2技术框架设计20120306_第2页
Waf2技术框架设计20120306_第3页
Waf2技术框架设计20120306_第4页
Waf2技术框架设计20120306_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、Waf-2技术架构概要设计版本内容作者1.0Waf-2技术架构概要设计刘岳嘉1. 背景WAF-1框架经过数年的发展,已积累几十家客户,在公司WEB应用开发领域作出了很大贡献。但经过诸多项目的验证,问题还是反映频频,下图为客户调研结果:根据调查结果,WAF框架的易用性、稳定性与性能问题表现突出。市场有很大需求,但表现不够给力。主要问题分析如下:1.1. 易用性n BIM工具的支持WAF本身基于AOM,无论从运行平台还是开发工具,都是AOM的一个子集,尤其是工具的开发支持方面相对还不够强大,如:UI定义中对UI布局的支持,还有对HTML原生元素的支持(开发网页应用)方面还不够灵活,功能与与GUI相

2、似,开发人员为了达到网页应用的效果需要手工调整xhtml页面,但工具反向无法解析。n 开发环境的配置与布署开发环境目前需要一套稳定、统一的版本供开发人员使用。n 控件功能的欠缺与不稳定开发人员在ManagerBean中进行控件的设值、状态改变及事件的捕获时,还存在或多或少的问题,如前段时间的树控件无法获取选取值、表格控件无法进行可编辑使能设值等。开发人员常常为了实现某控件的功能,要往前端刷出Ext代码完成相应的工作; 还有开发人员所需要使用的某些控件欠缺,如树表控件等。n 异常机制不够友好开发人员在起初使用WAF开发应用时,经常会报出aom生命周期的错误或Ext的js脚本错误,开发人员难以调试

3、。n AOM支持问题AOM是基于jsf框架的实现,jsf的生命周期过多,加之AOM对控件封装过严,导致开发人员难于调试跟踪且无法灵活控制。 1.1. 稳定性n 控件不稳定如前期经常反映的树状控件捕获的事件无法获取选中值等。 n WAF框架不稳定补丁的输出并不能考虑到所有用户,经常为了解决某一用户的问题而影响到其它用户的正常使用; 框架开发人员在框架开发过程中考虑的各版本兼容问题不足。1.1. 性能l 世华地产的性能问题近期反映最严重的问题是世华地产,是由于客户端配置低,无法支撑起富客户端特性的应用。 l 其它在铁建项目AOM使用自有的数据结构对组件树进行的恢复操作。 AOM的事件交互以及组件同

4、步依赖于服务器端维护的组件树,影响前后台交互性能; 种种问题表明,问题主要在AOM层面,框架过厚,易用性不强,控件功能欠缺,异常机制不友好,WEB服务器端在大并发量下负荷过重,前端EXTJS对客户端的要求较高,都无法承接EAS的要求,选择一套轻量级的控件势在必行。2. 技术框架蓝图及概要描述WAF-2框架主要目标是轻量化,轻量化的框架有以下优点:l 易用性强l 性能保障l 学习成本低l 知识传播快下图为WAF-2的技术架构图:l 视图层前端视图层主要采用JSP进行描述,为了提升复用,采用JSP2.0中的TagDir方式开发可复用的基础控件与WEB组件。l 前端逻辑层前端逻辑层采用SpringM

5、VC作为核心技术引擎,进行用户的请求、响应、请求拦截等工作。l 后端服务层后端服务层延续EAS的RPCService与ControllerBean层.处理过程如下图:浏览器发出请求,将请求数据以get/post方式进行追加或打包,提交至前端逻辑层Controller层。在执行具体的请求方法前,要对请求进行一次拦截,主要用来进行权限验证、License及JavaScript对象与JAVA对象的转换操作,并进行远程对象注入,方便在Controller层调用后台。几层拦截成功通过后,执行Controller层具体方法,访问后台,可直接利用在拦截器中注册的服务方法进行后端服务访问。3. 技术框架部件设

6、计及描述3.1 视图层l 职责视图层主要选用JSP2.0作为核心展现技术,为实现AJAX与更炫的效果,与方便开发人员掌握与使用,选用目前非常流行的JQuery作为JS库,控件方面要考虑风格统一与相对稳定,且功能稍强的JQueryUI作为基础控件库,并结合JQGrid与JSTree等树、表控件。 l 交互由于视图层与前端控制层的交互使用REST方式,即简单的请求响应,浏览器与前端逻辑层的交互数据格式采用标准化的JSON,所以WAF-2的视图层可与前端逻辑层(Controller层)完全解耦,以后升级至其它富客户端技术,HTML5等也变得非常容易。模板技术方面,建议采用JSTL原生的模板技术,无论

7、从稳定性,与将来的升级都有保证。l 控件控件与WEB组件的封装采用JSP2.0中的TagDir方式,旧的类形式的TAG技术必须要继承TagSupport进行实现,开发难度提高,代码结构将变得模糊,所以在这里不建议使用JSP1.0中的Tag封装技术。3.2 前端逻辑层l 职责主要负责处理视图层传递的请求,如保存,删除,审核,反审核,并调用远程接口进行后端服务的调用处理。l 状态Waf-2采用Rest方式交互,只进行简单的请求与响应,不提倡使用Session状态,使用Session状态会增加Web服务器的负荷,并发性将不能保障。l 交互视图层通过提交的Get/Post方式请求,将结合参数与提交内容

8、发送请求至前端逻辑层,前端逻辑层通过远程接口调用后端服务后返回,并加以业务应用处理反馈至前端视图层。3.3 后端服务层与GUI相同,在这里不作赘述。4. Waf-2开发模型4.1 扩展模型5. 技术框架超类体系本章主要对技术框架的超类体系进行描述,超类体系搭建的目标要符合:易扩展开放性好层次清晰拒绝深度继承易理解易调试5.1 功能划分n com.kingdee.bos.waf2.view.core描述:基础框架的核心超类.(最高超类)n com.kingdee.bos.waf2.annotation描述:为方便开发人员开发,为waf2加入的注解,如注入服务等功能.n com.kingdee.b

9、os.waf2.constant描述:waf2的常量类包.n com.kingdee.bos.waf2.util描述:waf2的工具类n erceptor描述:waf2的拦截器n com.kingdee.bos.waf2.filter描述:waf2的web请求过滤器.n com.kingdee.bos.waf2.json描述:waf2的json转换处理类n com.kingdee.bos.waf2.template描述:waf2提供的通用模板n ponent描述:waf2提供的通用WEB组件。n com.kingdee.bos.waf2.exce

10、ption描述:waf2的系统与业务异常5.2基础框架核心超类5.2 基础框架注释类5.4 基础框架常量类5.5基础框架工具类5.6基础框架拦截器5.7基础框架过滤器5.8基础框架异常类5.9基础框架json处理类5.10基础框架通用模板类l 基础资料类l 单据类5.11基础框架通用组件类5.12 JS核心超类WAF.JS是所有页面JS类的最高超类,主要用来描述各种通用的方法,帮助开发人员在自己的页面JS类中方便调用。模板方法中已描述的方法在子类中无需实现,如需覆盖,只需重新声明当前类的prototype方法即可.6. 系统服务系统服务主要系统级架构服务进行描述,具体包括如下几部分:l 日志l

11、 权限l Licensel 国际化l HTTP缓存l 后台远程对象调用服务6.1日志日志采用Log4J,具体实现也比较简单,只需要在引用到日志的类中加一句:protected Logger logger = Logger.getLogger(this.getClass);即可。6.2权限6.3 License6.4国际化国际化方面由于EAS的原始规范中,将Java源码与相关的多语种资源生成在一起,waf-2也要延用这种规范,一个Controller对应多个相应的国际化资源。但问题出在SpringMVC对国际化方面的支持只能通过单独的配置文件进行设置,如下:<bean id="m

12、essageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basename" value="/WEB-INF/properties/TestController" /> <property name="defaultEncoding" value="UTF-8"/> </bean>

13、;这样的话,BIM必须每次生成后要维护spring mvc 的messageSource中的basename属性,此点为SpringMVC没有规范的一点。Waf-2建议采用原生的i18n规范,如下:<% taglib uri="/taglibs/i18n-1.0" prefix="i18n" %><i18n:bundle baseName="com.kingdee.demo.TestController" id="bundle" localeRef=

14、"WafLocale" scope="session"/><i18n:message key="page.title" /><% taglib %>将i18n的标签库引入当前页面。<i18n:bundle . /> 将当前页面的国际化资源文件与当前页面绑定<i18n:message key=”page.title” /> 从当前页面绑定的国际化资源文件中获得对应的显示值。6.5 HTTP缓存HTTP缓存采用http filter来实现,如果是.do的请求,则在头文件中加入no-ca

15、che=true的处理。代码如下:httpResponse.setHeader( "Pragma", "no-cache" );httpResponse.addHeader( "Cache-Control", "must-revalidate" );httpResponse.addHeader( "Cache-Control", "no-cache" );httpResponse.addHeader( "Cache-Control", "no-s

16、tore" );httpResponse.setDateHeader("Expires", 0);6.6 后台远程对象调用服务后台远程对象调用服务为方便开发人员获得远程对象调用接口,采用服务注入方式,开发人员直接引用对象调用即可。/* * 远程BO对象 */IBOSBizCtrlIFareExpenseAccount fareExpenseAccount;7. 编程模型及代码结构8. 组件对象模型8.1 WEB组件的规范开发人员在开发组件时也要遵循WEB组件开发的一些规约。原则上讲,组件与页面类似,他们都有经历初始化与销毁的生命周期过程,并且都拥有metaData

17、PK,UIContext,Context等属性,但他们有一个本质的区别:n 页面是与客户直接交互的最基本的单元,它可以独立存在。n 组件只是为了组合页面为存在的页面元素,它不可以独立运行。页面必须要实现的接口为IWebBean;WEB组件必须要实现的接口为IWebComponentBean具体的简要类图如下:8.2 WEB框架核心组件列表l 列表组件提供普通列表式CRUD维护组件。l 树组件提供普通层次类(树型)CRUD维护组件。l 查询组件提供查询方案组件,主要用来查询列表。l BOTP组件提供BOTP常用服务组件。l 工作流组件提供工作流常用服务接口组件。l 审核组件为基础资料或单据提供审

18、核与反审核服务接口的组件。l 多组织切换组件为当前业务单元提供多组织切换组件。l 共享隔离组件为当前基础资料提供分配策略等相关服务组件。l 数据导航组件为当前业务单元提供定位操作。l 启用/禁用组件为当前基础资料或单据提供启用禁用操作组件。l 批量编辑组件为当前基础资料或单据提供批量编辑组件,主要以列表方式提供。l 快捷查询组件为当前基础资料或单据提供快捷查询的组件。l 常用查询组件为当前基础资料或单据提供浮动式的常用查询组件。8.3 WEB组件的详细描述下面针对一期WEB框架提供的核心组件进行详细描述:8.3.1 列表组件英文名称:ViewGrid中文名称:列表维护组件,表格本身只能显示,不

19、能编辑修改。描述:列表组件类型:UI组件包名:ponent子组件:表格Grid父组件:无组件属性集合:名称类型说明设计期IdString组件ID是JsvarString前端组件的Javascript变量是OwnerIWebElement父项窗体句柄否nativeTableTableComponent获取此复合组件的实体组件是BindingString(EL表达式)IOVC,绑定的MB的组件对象是mergedBoolean合并单元格是toolbarPositionPosition工具栏处于表格的位置是showRowNumberBoolean是否显示序号列是singleSelectionBoole

20、an是否只允许单选是strapRowBoolean是否允许表元自动换行是editUIContentElementEditUI在界面中的元素容器名称(不指定则以模态窗体弹出)是lockColumnsInt锁定列数是editURLString用于定位编辑界面的位置。是QueryQueryInfo用来作查询使用是功能集合: 名称说明新增(AddAction)新增时编辑界面以模式窗口打开一个窗口。修改(UpdateAction)和新增类似,但是需要接受ID参数,运行期传递删除(RemoveAction)支持单个删除和批量删除,给予提示是否删除删除查看(viewAction)查看界面操作刷新(Refre

21、shAction)支持刷新打印(printAction)打印可扩展事件:名称说明新增AddActionEvent修改UpdateActionEvent删除RemoveActionEvent刷新RefreshActionEvent表格双击DBLTableSelectEvent表格单击TableSelectEvent依赖组件: 无版本信息: 1.0-SNAPSHOT输出信息: CurrentTableID: 当前选择的ID CurrentTableRows: 当前选择的Rows业务特征描述:其它:8.3.2 树组件英文名称:tree(viewTree)中文名称:树维护组件,主要用来进行层次结构数据

22、的维护,与分组结构的分组信息。描述:树组件类型:UI组件包名:ponent子组件:树 tree父组件:无属性集合:名称类型说明设计期IdString组件ID是JsvarString前端组件的Javascript变量是OwnerIWebBean父项窗体句柄否nativeTreeTreeComponent获取此复合组件的实体组件是BindingString(EL表达式)IOVC,绑定的MB的组件对象是rootVisibleBoolean是否显示根节点是loadAllNodesBoolean是否一次读取所有级别节点(性能问题)是EditURLString编辑界面路径是QueryQueryInfo查询

23、对象是功能集合: 名称说明新增(AddAction)新增时编辑界面以模式窗口打开一个窗口。修改(UpdateAction)和新增类似,但是需要接受ID参数,运行期传递删除(RemoveAction)支持单个删除和批量删除,给予提示是否删除删除定位(locationAction)只支持前端定位遍历操作刷新(RefreshAction)支持刷新上移(moveUpAction)上移操作,主要用来调整节点顺序下移(moveDownAction)下移操作,主要和来调整节点顺序移动(moveAction)移动操作,可以移动到任意一个节点下 可扩展事件:名称说明新增AddActionEvent修改Updat

24、eActionEvent删除RemoveActionEvent刷新RefreshActionEvent表格双击DBLTableSelectEvent表格单击TableSelectEvent依赖组件: 无版本信息: 1.0-SNAPSHOT业务特征描述:8.3.3 高级查询组件英文名称:query(queryBean)中文名称:通用过滤维护组件,主要用来对数据进行查询过滤操作。 描述:查询组件类型:服务组件包名:ponent子组件:父组件:无属性/参数集合:名称类型说明设计期idString组件ID是ownerIWebBean父项窗体句柄否queryQueryInfo查询对象是功能集合: 名称说

25、明查询(queryAction)支持快速查询,通过某些列进行快速查询可扩展事件:名称说明查询执行事件queryActionEvent依赖组件: 无版本信息: 1.0-SNAPSHOT业务特征描述:8.3.4 BOTP组件英文名称:botp(botpBean)中文名称:BOTP组件 描述:提供单据的转换服务,主要包括上推、下推、上查、下查操作.类型:服务组件包名:ponent子组件:父组件:无属性/参数集合:名称类型说明设计期idString组件ID是ownerIWebBean父项窗体句柄否botpSrcBillInfoCoreBillBaseInfo源单据否功能集合: 名称说明上拉(creat

26、eVoucherAction)BOTP上拉操作下推(createToAction)BOTP 下推操作上查(traceUpAction)BOTP 上查操作下查(traceDownAction)BOTP 下查操作可扩展事件:名称说明上拉(createVoucherActionEvent)BOTP上拉操作下推(createToActionEvent)BOTP 下推操作上查(traceUpActionEvent)BOTP 上查操作下查(traceDownActionEvent)BOTP 下查操作依赖组件: 无版本信息: 1.0-SNAPSHOT业务特征描述:8.3.5 工作流组件英文名称:workFl

27、ow(workFlowBean)中文名称:WorkFlow组件 描述:提供工作流相关服务类型:服务组件包名:ponent子组件:父组件:无属性/参数集合:名称类型说明设计期IdString组件ID是OwnerIWebBean父项窗体句柄否billIDString单据ID否功能集合: 名称说明viewProcessAction查看流程图viewOpinionAction查看审批意见multiApproveAction执行多级审批viewActivityListAction查看业务流程列表specifyNextPersonAction指定下一步参与人可扩展事件:名称说明viewProcessAct

28、ionEvent查看流程图viewOpinionActionEvent查看审批意见multiApproveActionEvent执行多级审批viewActivityListActionEvent查看业务流程列表specifyNextPersonActionEvent指定下一步参与人依赖组件: 无版本信息: 1.0-SNAPSHOT业务特征描述:8.3.6 审核组件英文名称:audit(AuditBean)中文名称:审核组件 描述:提供审核服务类型:服务组件包名:ponent子组件:父组件:无属性/参数集合:名称类型说明设计期IdString组件ID是OwnerIWebBean父项窗体句柄否au

29、ditFieldint待审核/反审核属性(提供常量)是auditEntityInfosCoreBaseCollection待审核/反审核的对象集合否功能集合: 名称说明auditAction审核unAuditAction反审核可扩展事件:名称说明auditActionEvent审核操作完毕后抛出的事件unAuditActionEvent反审核操作完毕后抛出的事件依赖组件: 无版本信息: 1.0-SNAPSHOT8.3.7 多组织切换组件英文名称:orgSwitchBean(orgSwitchBean)中文名称:多组织切换组件 描述:提供多组织切换组件类型:服务组件包名:ponent子组件:父组

30、件:无属性/参数集合:名称类型说明设计期IdString组件ID是OwnerIWebBean父项窗体句柄否showStyleString组织选择框样式(枚举):树型展现/平层展现是功能集合: 名称说明可扩展事件:名称说明orgSwitchActionEvent审核操作完毕后抛出的事件依赖组件: 无版本信息: 1.0-SNAPSHOT8.3.8 共享隔离组件英文名称:ShareIsolationBean(ShareIsolationBean)中文名称:共享隔离组件 描述: 共享隔离组件对外提供一些服务,包括校验是否可以新增,是否可以删除,是否可以编辑等。同时,对于D类基础数据来说,共享隔离也需要

31、控制分配,反分配等操作。在用户删除数据的时候,也需要对共享隔离进行判断类型:服务组件包名:ponent子组件:父组件:无属性/参数集合:名称类型说明设计期IdString组件ID是OwnerIWebBean父项窗体句柄否功能集合:名称说明可扩展事件:名称说明依赖组件: 无版本信息: 1.0-SNAPSHOT8.3.9 数据导航组件英文名称:ShareBean(orgSwitchBean)中文名称:数据导航组件 描述:提供数据导航服务类型:服务组件包名:ponent子组件:父组件:无属性/参数集合:名称类型说明设计期IdString组件ID是OwnerIWebBean父项窗体句柄否currentBaseCoreBaseInfo当前的基础资料或单据,用于定位否功能集合:名称说明firstPositionAction定位至第一条记录previewPositionAction定位至上一条记录nextPositionAction定位至下一条记录lastPositionAction定位至最后一条记录可扩展事件:名称说明firstPositionAction定位至第一条记录previewPositionAction定位至上一条记录nextPositionAction定位至下一条记录lastPositionAction定位至最后一条记

温馨提示

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

评论

0/150

提交评论