厦门东南融通系统工程有限公司
烟草资金监管平台架构设计说明书
厦门东南融通系统工程有限公司版权所有
厦门东南融通系统工程有限公司 版权所有
©东南融通。本文件未经东南融通的书面允许不得复制或分发。本文件中的任何部
分都不得用于东南融通意愿以外的其他目的
目 录
1 简介............................................................................................................................................5
目的............................................................................................................................5
范围............................................................................................................................5
术语............................................................................................................................6
参考文档....................................................................................................................6
文档组织方式............................................................................................................6
2 系统总体架构............................................................................................................................8
产品特点....................................................................................................................8
设计指导思想............................................................................................................8
系统逻辑架构..........................................................................................................10
系统应用架构..........................................................................................................11
系统物理架构..........................................................................................................13
与业务系统的关系..................................................................................................14
与银行系统的关系..................................................................................................14
连接示意图......................................................................................................14
接口关系图......................................................................................................15
3 应用框架设计..........................................................................................................................17
技术框架..................................................................................................................17
界面设计..................................................................................................................17
登陆参考..........................................................................................................18
首页参考..........................................................................................................19
新增页面..........................................................................................................19
修改页面..........................................................................................................19
审批页参考......................................................................................................20
查询页参考......................................................................................................21
类设计......................................................................................................................21
模块划分..................................................................................................................22
功能菜单..................................................................................................................23
4 基础功能设计..........................................................................................................................26
组织模型..................................................................................................................26
权限控制..................................................................................................................27
菜单权限控制..................................................................................................27
操作权限控制..................................................................................................28
数据权限控制..................................................................................................29
流程控制..................................................................................................................29
流程功能概述..................................................................................................30
工作流的使用..................................................................................................31
工作流的集成..................................................................................................31
系统流程设计..................................................................................................31
流程处理框架..................................................................................................32
流程基本操作..................................................................................................33
规则处理..................................................................................................................38
开发过程..........................................................................................................38
规则定义..........................................................................................................39
规则执行..........................................................................................................39
消息服务..................................................................................................................39
功能描述..........................................................................................................39
邮件发送..........................................................................................................40
短信发送..........................................................................................................40
发送维护..........................................................................................................42
接口类设计......................................................................................................42
通讯网关..................................................................................................................44
连接方式..........................................................................................................44
功能描述..........................................................................................................44
技术框架..........................................................................................................46
接口类设计......................................................................................................46
任务调度..................................................................................................................48
功能描述..........................................................................................................48
解决方案..........................................................................................................48
应用示例..........................................................................................................49
配置说明..........................................................................................................50
任务清单..........................................................................................................51
报表开发..................................................................................................................51
报表设计..........................................................................................................51
报表种类..........................................................................................................52
报表清单..........................................................................................................53
报表打印..........................................................................................................53
5 数据同步设计..........................................................................................................................54
6 安全性设计..............................................................................................................................56
方案概述..................................................................................................................56
权限控制..................................................................................................................56
CA 认证 ...................................................................................................................56
登陆日志..................................................................................................................56
操作痕迹..................................................................................................................56
审批痕迹..................................................................................................................58
Server 端校验 ..........................................................................................................58
7 性能设计..................................................................................................................................60
8 客户化设计..............................................................................................................................61
改变监管规则..........................................................................................................61
改变业务流程..........................................................................................................61
外围系统连接定制..................................................................................................61
改变数据库类型......................................................................................................61
改变组织数据来源..................................................................................................61
9 开发规范..................................................................................................................................63
Java 编程规范..........................................................................................................63
数据库设计规范......................................................................................................64
文件命名规范..........................................................................................................65
页面样式规范..........................................................................................................66
页面开发规范..........................................................................................................66
后台程序规范..........................................................................................................68
文档规范..................................................................................................................70
序列号的获取..........................................................................................................71
异常处理..................................................................................................................71
JSP 页面异常...................................................................................................71
Action 异常.....................................................................................................71
DAO 和 Service 层的异常 ..............................................................................72
异常编程指导..................................................................................................72
错误消息..................................................................................................................72
事务处理..................................................................................................................73
目录结构..................................................................................................................73
配置文件..................................................................................................................74
开发指导..................................................................................................................75
第三方软件..............................................................................................................75
10 环境搭建..................................................................................................................................78
开发环境..................................................................................................................78
调试环境..................................................................................................................78
开发基础数据环境..................................................................................................79
外部系统模拟环境..................................................................................................79
附录 1: 开发软件和工具................................................................................................................81
附录 2:公共资源管理...................................................................................................................82
附录 3:文档变更记录...................................................................................................................83
1 简介
本文档为烟草资金监管平台的软件架构设计说明书。本文档与“烟草资金监管基础平台
数据库设计说明书.doc”和“烟草资金监管系统数据库设计说明书.doc”一起构成本系统的概
要设计文档体系。
目的
本文档为烟草资金监管平台的软件架构设计提供详细的说明,包括整个系统的架构、基
础平台的技术实现、客户化方式和指导应用开发的相关规范等。
本架构书为编制如下文档提供基本依据:
程序设计书
软件开发计划
软件测试计划
软件用户手册
系统安装手册
本架构书与本系统的“程序设计书”一起,为编写程序、单元测试、集成测试(α测试)
提供基本依据;
本架构书为其它有关文件提供基本依据;
本架构书为软件质量保证人员提供工作依据;
本架构书将作为软件β测试和系统验收的准则;
本架构书与本系统的“程序设计书”一起,将作为编码的基准文件。
范围
本设计书从技术角度定义了本系统的架构,内容涵盖了本系统的设计思想、软件体系结
构、软件功能模块分解及边界设计、应用框架设计、与外围系统地连接处理、开发规范等。
对本系统使用的主要技术,如 PowerWeb、工作流、规则技术、Jasper 等)也做了简要介绍。
本系统中硬件设备和网络设备的设计以及软件详细设计部分不在本规格之内。
术语
PowerWeb:是东南融通开发的一个 Web 界面开发平台。
intelliRule:是东南融通开发的规则系统,可实现规则的编辑、编译和执行。
JasperReports:开放源码的报表生成工具,用户需要按照它制定的规则编写报表格
式的 XML 模板文件,然后指定数据源得到导出的报表文件。
iReport:一个帮助那些使用 JasperReports library 生成报表的用户以可视化方式设
计报表的工具。
Hibernate:Hibernate O-R mapping tools,由 提供,用于数据层
的开发。
Spring:Spring - Java/J2EE Application Framework,由 提
供,用于业务逻辑层的开发。
工作流引擎:解释业务流程的定义,与工作流的参与者(包括人或软件)相互作用,
并根据需要调用其它的 IT 系统、应用、或者数据。
规则引擎:对业务规则进行解释。是一种高性能的专用解释(推理)程序。把当前
提交给引擎的数据对象与加载在引擎中的业务规则进行匹配,符合当前数据状态下
的业务规则会被激活,根据业务规则中声明的执行逻辑,触发对应的操作。
tfm:tobacco fund monitor 烟草资金管理系统
参考文档
烟草资金监管平台系统需求规格书.doc
CMBP 演示系统, (admin/admin@cmbp)
文档组织方式
第二章关注的是整个系统的内外部环境以及各相关要素之间的关系。
第三章关注的是整个系统提供的具体功能、展现形式和功能实现的技术框架。
第四章关注的是基础平台部分的功能实现思想以及实现的技术框架。
第五章关注的是本系统的数据和外围系统的数据库的数据如何同步和更新。
第六章和第七章关注的是两个主要的非功能性需求如何实现,即安全性和性能。
第八章是对需要客户化的几个问题的方案概述。
第九章是指导开发人员开发, 保证设计的一致性和代码具有良好的可读性,保证开
发能规范有序地进行的一些指导和要求。
第十章是指导开发人员搭建开发和调试环境,也可了解未来该系统如何部署。
2 系统总体架构
本章将从技术角度阐述本系统的定位、设计思想、逻辑架构、应用架构、物理架构以及
需要交互的外围系统。本章是后续章节的编制依据。
产品特点
采用了先进的 J2EE 技术架构,确保系统的可扩展性、安全性、可靠性。
安全、高效的电子支付平台,全面掌握行业资金流动情况。
全新的多方位的监督理念,包括设置行业企业帐户库、流程控制点、流水帐管理、
多渠道的帐目对照、实时报警。
三级体系,两级监管,组成一个贯穿事前、事中、事后的全方位资金监管体系。
界面友好,B/S 结构的界面,C/S 的应用效果,新鲜直观,操作方便。
统一的接口规范,灵活的的对外接口和报文配置,方便对接不同的业务系统和银行
系统。
实时警示,报警方式灵活选择,报警内容容易定制。
功能强大的工作流管理系统和规则系统,业务流程和监控规则可以自由调整,做到
随需应变。
丰富的图文并茂的监控方式,包括数据表格、柱状图、散列图、仪表图等,一目了
然掌控全局。
构件化功能组装,强大、简单的业务延伸能力,方便新业务的拓展。
设计指导思想
J2EE 平台,B/S 结构, MVC 设计模式。
J2EE 平台实现系统的平台无关性(包括操作系统无关性和应用服务器无关性)。B/S
架构的优点是维护方便,能够降低成本。采用 MVC 设计模式,使系统具有更大的
灵活性和扩展性。
充分使用已有的软件资产,提高复用程度,降低开发成本。
在本系统中,使用了公司的研发产品 intelliFlow 工作流管理系统和 intelliRule 规则
系统,参考了公司其它项目中的流程处理框架和基于 PowerWeb 的应用框架,修改
扩展了消息服务构件、通讯网关构件和组织模型维护。
优先使用构件的组合,以构件的思想搭建一个松耦合的系统。
在本系统中,最基础的功能在 bas 模块中,这是所有的基础,在此之上是消息服务
构件、通讯网关构件和流程处理框架,这些框架、构件、工具库和 intelliFlow 工作
流管理系统、intelliRule 规则系统一起构成系统的基础平台;基于该平台开发 3 个
应用子系统的功能。
面向接口编程,实现可以替换,充分发挥面向对象编程的优势。
面向接口编程的好处是实现方式容易配置,譬如本系统将来要外接的系统在 5 个以
上,十分复杂,尤其是组织数据也可能取自其它系统,将各功能以接口形式提供,
就可以在外界有变化时,只需要单独实现,而不会涉及到已有代码的修改,大大降
低测试的工作量。
配置灵活的思想,使有利于产品推广。
保证流程、报警规则、消息模板、消息发送方式、报文收发实现类能方便配置。
分层分块思想,方便开发和维护。
整个系统分为基础平台和应用功能,基础平台提供应用框架和核心技术,应用功能
主要是在此基础上实现业务功能,以良好的形式展现。应用框架分为流程框架和非
流程处理框架,都由表现层、业务逻辑层和持久化层组成。对于构件,分为核心功
能和扩展功能,扩展功能在实施中客户化;公用组件包里面包含了系统使用的各种
公共功能,相对比较独立。
通过详细的规范简化应用功能的后继开发,保证设计思想和编码风格的一致性。
产品最大的问题是由于实施应用的点比较多,各自情况不一样,导致修改或客户化
的可能性很高,同时产品生命周期长,参与的开发人员会相对比较多,为应对这一
特点,本系统通过详细的规范降来低学习成本,提高易维护程度。
系统逻辑架构
本系统安装在各省公司和国家局,各省与国家局之间的系统完全独立,但省与国家局数
据库之间有数据同步、上载和下传活动发生,省之间的数据库完全独立。
本系统的角色有监管人员、财务人员、业务人员和系统管理员,不同的角色对应系统不
同的访问权限,一个人只有一个角色。其中只有省公司有系统管理员,即系统是统一维护。
本系统的基础数据一部分来于各个业务系统(如合同信息),一部分在省级系统中维护(如
人员信息),一部分由国家局系统维护后下载到省级系统使用(如银行信息)。
本系统需要实时或定时地从业务系统中获取业务数据,前者如业务合同信息,后者如分
公司的销售数据。与银行系统的连接(如查询余额)通过国家局接口连接总行进行。
本系统的应用层将在基于 J2EE 技术的东南融通基础平台之上进行开发。并重点使用该
平台的应用开发框架、页面框架集及控件集、流程引擎、规则引擎和构件库。关于这一部分
的详细介绍见第 4 章。
本系统的应用模块包括帐户管理、运营监管、综合查询、烟叶收购、两烟购销等。关于
各功能的详细介绍见 节。
系统应用架构
系统应用架构图描述系统的组成部分和各个部分的依赖关系。
系统使用 Java 语言开发,B/S 结构,支持的浏览器为微软 IE 以上
PowerWeb 开发平台辅助前台展现层的实现
规则引擎负责依照监管规则对业务数据进行处理
工作流引擎负责对业务流程进行处理
Jasper 负责报表处理,同时使用 JFreeChar 实现一些特殊图形的显示
应用逻辑层使用 Hibernate/iBatis 负责对数据进行存取,使用 Spring 负责系统各个部
件的组装以及一些辅助功能
系统用到的数据库为 Oracle 或 DB2, 应用服务器为 IBM 的 Websphere Application
Server,这是由解决方案决定的。
各技术的选择理由如下:
系统物理架构
系统部署图描述系统运行时所依赖的硬件环境,该环境由节点和节点之间的依赖关系组成。
系统为三级体系、两级监管,三级体系指国家局、省公司、分公司,两级监管指在国家
局和省局都单独安装本系统,对业务进行监督管理,国家局和省局之间通过数据的上传和下
载保证信息的同步。
逻辑上,系统的服务器包括 Web 服务器、应用服务器和数据库服务器。Web 服务器主
要负责静态页面的显示,应用服务器主要是提供中间层组件、流程引擎和规则引擎的运行环
境。当数据较少时,这些服务器可安装在同一台机器上;当数据量增加时,这些服务器可按
需要分别安装在不同的机器上,Web 服务器、应用服务器还可由多台机器组成集群
(Cluster),实现负载均衡机制。原则上数据库服务器使用单独的机器。
系统的运行环境如下:
客户机/服务器 软件配置 备注
客户端 Windows 2000 Professional
IE 以上
应用服务器
数据库服务器 Oracle9i
与业务系统的关系
本系统与各业务系统之间的关系如下图:
本系统需要从各业务系统获取业务数据,并保存在本系统中,以查询和统计。
通过通讯网关实现外部系统数据的获取,即应用模块提出请求指令,通讯网关连接外部
系统,发送报文并获取报文,应用模块获取报文后进行其后的数据处理,对外的报文格式
为 XML。
数据是实时还是定时从各系统获取,以及获取后的处理,待需求细化后在详细设计中体
现。
与银行系统的关系
连接示意图
本项目的银行连接属于“银企直联”范畴,为实现与银行进行直联,必须签订《网上“企
业银行”银企直联服务协议》,基于该协议,在本系统的应用服务器上安装银企直联客户端,
本系统根据银行提供的接口说明组织 XML 报文,直接调用银行提供的 API,实现与银行的
金融数据交换,安全问题由银行负责。
连接示意图如下:
接口关系图
本系统需要与银行系统进行连接的业务如下:
向银行系统收发报文的方式与业务系统类似,不同之处在于和业务系统打交道时需
要本系统连接业务系统,而与银行系统打交道时,连接银行系统是由其客户端解决,本
系统只是组织 XML 格式的报文并调用客户端的 API。
3 应用框架设计
本章将阐述本系统的应用框架、系统的功能菜单、数据流转等。本章为 Web 层、业务
逻辑层和数据访问层的设计及实现提供依据。
技术框架
客户浏览器发出 HTTP 请求,通过控制器转发调用相应的业务处理模块来业务逻辑,处
理的结果通过控制器相应的视图格式化,返回客户端浏览器呈现给使用者。在页面的开发上,
多采用 JSP TAG,实现页面元素的重用,所有相同元素统一控制以增强应用的可维护性。
业务层的设计遵循组件化设计模式。业务逻辑被封装在业务逻辑组件之中,控制器
Action 通过调用业务逻辑组件的接口来实现业务逻辑处理。当需要对数据进行处理时,业务
逻辑组件通过调用数据访问组件的方法来完成对持久数据的操作。另外,在业务逻辑组件之
间的通讯也是通过调用接口的方式来实现,以确保组件的重用性和扩展性。
数据访问层遵循 DAO 设计模式,通过 Hibernate 和 iBatis 来访问数据库。使用 Hibernate
主要做单表的操作,使用 iBatis 主要用来实现复杂的查询操作,以优化性能。
界面设计
本系统的界面风格将参考“烟草资金监管演示系统”和 PowerWeb 的页面开发控件效果,
由专业的美工人员设计。如下是设计的主要想法,本部分在设计完成后将被替换。
登陆参考
首页参考
整个页面分为上,左, 右, 下四块, 上为常用菜单图标等, 下为脚注, 右边开发人员可
自由分割,左为树形菜单
上面的常用菜单和左边的功能菜单都是动态获取的
需要做分公司、省公司和国家局的首页 3 套,具体待需求明确后定。
打开一个菜单页面时,新的页面 tab 页效果显示
新增页面
略。
修改页面
略。
审批页参考
每个子系统一个审批任务列表
每条任务选中进入后为对应的业务信息和审批信息
查询页参考
类设计
业务功能实现的类关系如下图:
一一一一 一一 一一一 一一一 一一一一 一一一一 一一一一 一一一一
---- ---- ---- ----
---- ---- ---- ----
---- ---- ---- ----
---- ---- ---- ----
一一一 1 2 3 4 5 6 7….
一一一一一一
一一
一一一一
---- ---- ---- ----
---- ---- ---- ----
一一一一 一一一一一
一一一一一
一一一一一 一一一
一一一一一
一一一一一 一一一一
一一 一一一一 一一 一一 一一 一一
一一一一一
LTActionServlet 实现转发功能,根据 struts 的配置文件决定流程和页面的流转,包括常
用数据格式的转换。
Action 中调用各业务逻辑处理,业务逻辑的处理实现依照 Spring 的框架在 XServiceImpl
中处理,每个处理类都对应一个接口类。
数据层的操作在使用 Hibernate 时在 XDaoImpl 中实现,使用 iBatis 时,在 XSqlDaoImpl
中实现,每个处理类都对应一个接口类。
模块划分
分类 模块代码 模块名称
bas 基础功能、非流程框架和工具类库
org 使用工作流组织模型的组织维护
iwf 流程处理框架
mns 消息服务
基础平台
cgs 通讯网关
ssm 系统管理和基础信息
account 账号处理
payroll 网上支付
monitor 资金监管
应用功能
bulletin 公告管理
基础平台各部分的关系如下图:
功能菜单
根据每个人的权限动态生成功能菜单,采用树状方式显示。如下是系统的全部功能:
一级菜单 二级菜单 三级菜单
系统设置
权限管理系统管理
通知设置
行政区划
组织管理基础信息
卷烟管理
合作银行登记
合作银行选择账户设置
账户种类定义
账户信息查询
账户余额查询
账户审批查询
账户管理子系统
账户查询
账户种类查询
一级菜单 二级菜单 三级菜单
账户开设申请
银行开户办理
账户信息变更
账户申办
账户销户办理
账户审批 账户审批任务
账户启用
账户停用
账户冻结
状态管理
账户解冻
拨付申请
拨付审批资金拨付
资金拨付
烟叶收购支付
烟叶采购支付
卷烟采购支付
辅料采购支付
业务支付
固定资产采购支付
人工费用支付
办公费用支付
业务费用支付
物流费用支付
基建支付
捐赠支付
专卖经费支付
费用支付
其他费用支付
对账单查询下载
批量下载
网上支付子系统
对账管理
银企勾兑
一级菜单 二级菜单 三级菜单
交易列表
两烟购销确认
烟叶收购监管
烟叶购销监管
卷烟购销监管
辅料采购监管
业务监管
卷烟销售监管
拨付列表
拨付监管
资金拨付监管
支付列表
费用支付监管
固定资产采购监管
人工费用支付监管
办公费用支付监管
业务费用支付监管
物流费用支付监管
基建支付监管
捐赠支付监管
专卖经费支付监管
费用监管
其他费用支付监管
贷款担保监管
资金监管子系统
警示统计
公告申请
公告审批公告管理
公告管理
综合查询 账户交易明细查询
4 基础功能设计
组织模型
本系统使用工作流管理系统的组织模型,模型如下图:
组织单元(Unit):机构、部门、工作组的统称。
组织单元类型:可以是机构,部门或工作组
角色(Role):指标准岗位,如监管,财务
职位(Position):也称管理职位,指一个组织中的一个标准岗位(不是一个人)。职位可以
和人关联。
汇报关系:指一个人(或职位)向另一个人(或职位)汇报。
显示汇报关系:直接设置的汇报关系。
隐式汇报关系:由上下级职位关系决定的汇报关系。
群组:人员的集合,这些人可来于不同的组织单元(如机构)
代理:指一个人(或职位)代理另一个人(或职位)的职权
本系统目前只使用如下概念:组织单元、角色、职位,不使用群组、代理、显示汇报关
系,未来根据需要可以扩展。
本系统将在工作流组织模型基础上做扩展,即增加部分表的字段信息。
该模型中的机构对应本系统中的省公司或国家局,子机构对应分公司和工业企业,部门
对应这些机构下的部门。组织树的表现形式如下:
XX 省公司/国家局
----职位
----人员
----部门 1
-----职位
----人员
----部门 2
---XX 分公司
-----部门 1
------部门 2
---企业
---部门 1
---部门 2
权限控制
本系统的权限控制包括动态菜单,操作功能和数据权限三类的控制。
菜单权限控制
系统根据登陆人所拥有的菜单权限动态生成能访问的菜单。菜单权限的维护机制如下:
一个用户对应一个角色。角色和权限关联,角色对应的权限可增加,但不能取消。
用户对应某个角色时,即默认拥有了该角色对应的全部权限。
每个用户的权限是角色对应权限的子集,即可取消部分权限,但不能增加。
角色增加权限 A 时,拥有该角色的人都增加权限 A。
用户登陆时,根据登陆人的 ID 号,获得该人能访问的全部菜单,保存在 session 中,
并形成菜单树。数据关系参见“烟草资金监管基础平台数据库设计说明书”
提交请求时,server 端校验是否能操作该菜单。
系统的全部功能菜单作为初始化数据提供。
操作权限控制
一个菜单对应的 web 页面上有多个功能,如增加、删除、修改、查询、上载,这
称为功能权限,又称操作权限。
功能权限的维护和菜单权限同时维护,即在给角色或人设置菜单权限时,同时指定
在对应的功能;一个菜单项下对应一个或多个功能权限。
用户登录时,根据登陆人的 ID 号,获得该人能访问的全部功能,保存在 session 中。
数据关系参见“烟草资金监管基础平台数据库设计说明书”
每个功能按钮在页面上的显示使用“按钮控件”,该控件能根据功能 ID 决定按钮是
否可用,如果不可用,disable 按钮。
提交请求时,server 端校验是否能操作该功能。
系统的全部功能权限作为初始化数据提供。
数据权限控制
对数据权限控制包括以下两种要实现的功能:
在账号处理审批查询时,国家局领导可查询全部省,省级领导可查询本省的全部审
批,市级单位只能查询本地区的,普通员工只能查询个人的。
在业务处理上,要能以组织机构+分管范围定义(如某领导分管厦门,漳州,泉州
的卷烟销售)的方式控制数据。
数据权限的实现方案为:
对业务需要做数据权限的部分,需要维护人员的分管范围,分管范围的粒度为分公
司/工业企业。
审批查询的数据权限固化在代码内,即省级领导可查询全部的分公司/工业企业,
分公司只能查自己地区内所有的工业企业,工业企业只能查自己的,其他人只能查
自己。
所有需要做数据权限功能的表的每条记录绑定操作员工号、公司/企业代码、部门
号(非必须)。
所有需要数据权限控制的查询功能使用 iBatis 实现,在业务查询信息外同时传入操
作人员 ID 号和可看的公司/企业列表;该列表在登陆时获得,并保存在 session 中;
如果没有公司/企业列表,但有操作人员号表示查询操作人员自己提交的。
流程控制
使用 intelliFlow 工作流和工作流应用框架实现对流程的控制。工作流应用框架的数据库
设计参见“烟草资金监管基础平台数据库设计说明书”。
本系统提供给最终用户的系统中只包括工作流引擎,建模工具只提供给实施推广人员使
用,本系统不使用流程监控工具。
工作流应用框架负责衔接应用业务和流程管理,作为一个半正式产品使用,其后台数据
库是固定的,但框架由于必然涉及到应用的使用,在不同的系统中会有调整。本系统中有调
整,主要是:
将原来的流程发起后输入表单改为表单输入完毕提交时发起流程。
将一次性查询所有任务改为按业务分类查询任务,如账号审批任务包括申请、开户、
销户等流程任务的审批。
需要增加根据各种业务属性查找流程,由于有多个审批查询功能,业务属性在不同
的业务审批查询中不一样。
由于工作流升级,个别 API 没有兼容带来的修改。
流程功能概述
所有流程的业务表现都是 A -> B - >C 这种线型依次审批的形式,每个环节一个人
审批;所有审批关系在系统上线前就决定,不存在随机指定。
审批的操作包括同意,不同意,驳回,同意时运行到下一个结点,不同意时流程结
束,驳回有两种情况,驳回到流程发起人,也有驳回到上一审批人。
流程发起人在流程被驳回后可以取消流程,即流程有 3 种方式结束:同意、不同意、
发起人取消。
需要提供超时功能,超时指任务的超时,不需要流程的超时支持;超时信息要在任
务提醒中显示。
一个省的所有地区在某个业务上的处理流程是全部相同的,任务分派的方式也全部
相同的,即不存在一个业务的处理,在某个地区可能多一个环节或少一个环节之类
的情况。
流程发生在账号审批、拨付审批、公告管理和警示处理业务中,业务流程总数在 10
个左右。
流程的任务列表按子系统分类显示,即整个系统有多个任务列表,同时首页上有简
要的任务提醒摘要信息,并能导航到不同的任务列表;任务列表上的业务信息根据
业务不同显示的也不同。
在 web 上提供按业务和流程信息查询流程的功能,不同子系统的查询字段不一样;
查询时,有数据权限的控制,如省的领导可查看全部市的信息,市的领导只能看本
地区的,普通人员只能查自己的。
流程不会出现跨系统的审批,即各省和国家局的审批活动是独立的。
在开发过程中,所有流程的任务按角色进行分配,以此进行调试和演示;在系统上
线时,使用流程建模工具配置任务分配方式。
所有流程的定义和任务分派方式在系统上线前都需要可自由变动。
工作流的使用
本系统按 intelliFlow 通常的开发模式使用,即首先使用工作流建模工具建立流程和
进行任务分派,流程框架封装工作流的调用并将流程与业务关联起来,开发人员在
流程开发时不需要接触到对工作流的直接调用。
在系统上线前,需要使用工作流建模工具修改分派策略,使与实际的组织数据匹配,
然后再上传部署流程定义。
工作流的集成
工作流需要以 ear 包的形式运行在应用服务器环境下,本系统和工作流集成的方式是在
intelliFlow 发布的 ear 包中添加本系统的 web application (war 包形式),删除发布包中不
需 要 的 如 下 文 件 : , , , , 同 时 修 改
META-INF\,在其中增加本应用 web application 的部署描述。
系统流程设计
流程分包管理,一级包名为他 tfm,二级包位 account(账号审批)、payroll(资金拨
付)、警示处理(notify)和公告管理(bulletin) 。
在开发过程中,所有流程按单位号+角色进行分派,其中单位号为流程变量。
由于本系统流程不多,为显示内容丰富和直观,流程设计不做归纳整理,即需求有
几个流程,流程设计时就定义几个。
在系统上线前,如果组织数据和分派方式不一样,需要通过流程建模工具配置分派
策略;如果流程增加新的结点,需要做一定的页面开发;如果不使用本系统提供的
组织模型表,组织数据的获取需要重新开发; 如果需要其它的流程功能, 可能需要
一定的开发(如修改页面)。
系统包括如下流程(注:没有标明省的任务执行人都指是被监管单位的人)
(1). 开设申请 (包 ID:,模板 ID:openaccount)
(2). 开户办理 (包 ID:,模板 ID:accountconfirm)
(3). 销户、账户信息变更(包 ID:,模板 ID:modifyaccount)
(4). 账户状态修改(包 ID:,模板 ID:modifystatus)
(5).另外 2 个子系统的流程待需求细化和分析后补充。
流程处理框架
流程处理框架的业务组件对应的接口为 ,采用 Spring 框架。
本系统中的动作都是人工动作,流程中的人工动作分为数据录入和审批环节。业务数
据的处理和流程数据的处理分开进行,业务数据由业务逻辑实现处理,流程数据由工作流
引擎处理,所以这些操作包在一个 Spring 的 service 中,通过配置 JTA 事务支持,实现业
务操作和工作流使用 EJB 实现的操作的事务一致性。
流程处理框架目前提供的主要服务有(具体参见 Javadoc.):
流程方面,发起和取消流程。
流程变量,取得和设置流程变量。
任务列表,取得任务列表。
任务方面,接受任务(start,continue,resume)提交任务(commit),挂起任务
(suspend)。
组织方面,提供流程框架用到的与组织相关的一些方法,这里的组织指使用工作流
组织模型和表结构。
主要的类有:
封装 intelliFlow 工作流的 API
流程处理,包括流程与业务的关联建立,调用
WfClient 的流程相关功能。
实现辅助功能, 如根据用户号取得用户在职
位、角色、部门、机构的信息。
流程基本操作
一个业务一般由经办申请、一级或多级主管审批组成。一个标准业务操作流程如下
图:
任务操作说明:
申报:任务提交,流程进入下一步骤。
取消:取消申请,流程结束。
同意:表示审批通过,可以进入流程的下一个步骤。
不同意:申请被取消,流程结束。
驳回:表示审批没有通过,要做适当修改,任务驳回至上一个步骤或申请人,
根据业务的不同处理不同。
(1). 发起流程
业务数据输完后,点“提交”,提交业务数据,同时发起流程并记录流程和业务的关
联关系。流程发起为首结点执行。
基础的 Action 实现发起流程并记录流程和
业务的关联关系,具体的流程处理,需要写一个子类 action,实现业务数据的处理,
一类业务对应一个子 action。如:
BasAction 为系统最底层的 action,BaseProcessAction 处理和流程有关的公共内容,
AccountProcessAction 实现如下的 API,调用账户开设申请的业务逻辑处理方法,
在该方法内提交处理业务数据和调用工作流 API 处理流程数据。时序图如下:
其中 AccountAppProcessAction 和 IOpenApplyService 和需要发起流程的具体业务
对应,WfService 为流程框架处理类,WfClient 封装对工作流的调用,WorklistLocal
为工作流对外的接口。
根据工作流应用框架要求,发起流程前需要配置好表 IWF_BIZ_CATEGORY 和
IWF_PROCESS_CONFIG。
需 要 发 起 流 程 的 页 面 要 hidden 两 个 字 段 的 值 , 即 bizCode 和 bizName , 与
IWF_BIZ_CATEGORY 表中的配置对应。
由于工作流是使用 EJB 实现,为保证实现事务的控制,应用的 service 使用 JTA 事
务,并且调用的其它 service 不要有事务控制,直接使用 xxxTarget。
<bean id="openApplyServiceTarget" class="">
<property name="basService">
<ref bean="basServiceTarget"/>
</property>
<property name="comService">
<ref bean = "comServiceTarget"/>
</property>
<property name="wfService">
<ref bean = "wfService"/>
</property>
</bean>
<bean id="openApplyService"
class="">
<property name="transactionManager">
<ref bean="jtaTransactionManager"/>
</property>
<property name="target">
<ref local="openApplyServiceTarget"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
(2). 取得任务列表
由于本系统有比较多的根据业务信息查询审批任务,不同的子系统业务信息数量和
内容不完全一致,因此,有关任务的查询都不直接调用工作流的 API 实现,而是
关联业务表、流程业务关联表、流程表、任务表直接查询,查询结果分页显示,分
页功能使用 PowerWeb 的表格控件实现。
数据库的查询使用 iBatis
任务列表的获取如下,在 Action 内将查询条件拼成 Hashmap 后,调用查询实现类,
查询获得任务列表信息,其中包含业务信息和流程信息,再分页显示。
(3). 选中任务
选中任务指选择任务列表中的某一条任务,进行审批。选中任务的主要操作是要获
得对应的业务信息和流程信息,显示在审批页面上。
实现机制为:当前任务选中后要进入的 JSP 文件和获得页面数据的 handler 配置在
数据库中,即表 IWF_NODE_CONFIG 中;选择一条任务后,通过调用工作流的 API
获得流程信息,根据流程信息的 MPID 在表 IWF_NODE_CONFIG 中找到对应的配
置信息,执行 handler 获得业务数据,最后 forward 到配置的 JSP 页面。
基础的 Action 继承 BasAction,实现任
务选中后的操作,包括找到和当前结点操作对应的 JSP 文件和业务处理 handler。
本系统中,不需要使用子类 action。时序图如下:
业务处理 XxxHandler 继承 实现当前任务
相关业务数据的获得。其实现实通过对应业务表中主键的 bizId 获得业务信息。
Handler 的处理框架如下:
public Map startTask(IwfTaskVO iwfTaskVO, UserProfileVO upvo) throws GenericException {
String bizId = ());
//根据 bizId 查找业务数据
//实例化一个 JSP 页面上要使用的 form, 该 form 继承于 BaseTaskForm
(iwfTaskVO, [form 实例]);
Map result = ("[form 实例名]", form 实例);
return result;
}
(4). 任务审批
任务审批有同意、不同意和驳回三种结果。
任务审批通过调用 实现。本系统不需要使用
子 action。
审批意见的处理:在提交任务 commitTask 时,审批意见直接存入 intelliFlow Task
表的 Memo 字段中,方法为:建立一个字符串类型的临时变量,变量名为
_TASKMEMO,审批意见作为该变量的值,将该
变量放入提交的流程变量集中即可,流程引擎会自动取得该变量的值存入 Task 表
的 Memo 字段中。
(5). 流程查询
流程查询在业务上称审批查询,在 web 上表现为多个菜单,一个菜单对应业务的
一个分类。输入信息包括:流程信息、业务信息;输出信息包括:流程信息、业务
信息、当前任务信息(如当前环节、当前处理人),不同的业务分类对应的业务信
息不一样;流程查询还需要考虑数据权限控制,领导能看全省的,市的领导只能看
个人的,普通人只能看自己的。
实现方案如下:
同“取得任务列表”进行查询。
在查询时使用数据权限控制方案,参考“ 数据权限控制”
规则处理
本系统使用规则系统处理警示提醒。
规则的表达方式和规则系统的调用方式待需求细化和分析结束后补充。
开发过程
规则的开发可以分为两块,首先是业务用户组织和定义业务规则,然后是技术人员
映射技术实现。在本系统中,规则的所有开发都由技术人员处理。
规则定义
具体组织和表达方式需要待需求明确和分析后确定。
规则执行
具体使用方式需要待需求明确和分析后确定。
消息服务
功能描述
消息服务构件负责提供报警方式的可配置和报警内容的可定制,并完成消息的发送
和发送痕迹管理。发送痕迹管理采用文件形式保存,每天发送的痕迹保留在一个文
件中,消息发送失败的痕迹保存在一个专门的文件中。
系统提供的报警方式为邮件和短消息,消息的发送人统一为系统设置的一个邮件地
址或手机用户
发送方式是按业务配置,即不同的业务消息发送方式可不一样,如果业务的消息发
送方式没有配置,使用整个系统缺省的方式。
为实现消息的发送,用户要保证基础条件满足,即有邮件服务器或开通短消息发送
渠道。
邮件发送
邮件发送使用 javamail,通过 Socket 连接邮件服务器,发送邮件。邮件的发送为异步方
式,先将邮件信息保存在数据库中,再使用任务调度扫描邮件队列,并发送邮件。
邮件的消息内容使用 velocity 的模板机制,不同的业务发送模板不一样,使用文件形式
配置;不同业务的发送人使用规则系统定制规则决定。
短信发送
短信发送有 3 种方式,下面介绍一下各自的实现方式及特点:
1、 向已有的短信平台发送数据,由短信平台代为发送短信。这样的短信平台提供商有
新浪、搜狐等。此方式一般采用 HTTP 的数据提交方式,接口简单,开发成本低,
但要求服务器必须具备 internet 条件,对服务器的安全性要求较高,且功能较为单
一,一般只做短信的发送。
2、 通过短信网关发送短信。建立短信网关专线,使用 CMPP(移动)、SGIP(联通)、
CNGP(小灵通)协议进行数据的发送。此方式具备短信交互功能、吞吐性能好,
但运行费用、开发成本较高。
3、 采用 GSM Modem 发送短信。公司已有多个此方式的成功案例,具备多种变成语言
接口(ActiveX、Java、C#),可实现短信的交互功能,开发成本低。
本系统支持向已有短信平台发送数据和采用 GSM 方式发送两种方式,前者的机制十分
简单,连接短信平台并发送就可以,这里着重介绍后一种方式的实现。
(一) 系统实现图
(二) 系统分析
系统使用专门一台短信服务器与移动短信网关进行短信业务处理,短信服务器使
用 GSM Modem 直接与移动接收发送短信,短信服务器可选用一台或多台 GSM Modem
同时与移动网关进行短信收发,设备数量由业务量大小而定,如在系统使用初期业务量
较小,可用较少的 GSM Modem ,如果业务量增大后,由于 GSM Modem 每发送一条
需要 6-10 秒的时间,短信服务器如果不能及时完成信息处理,就可以增加多台 GSM
Modem 并行处理提以高数据流量,减少发送延迟。使用多台 GSM Modem 也可提高系
统稳定性,当其中某些 GSM Modem 设备故障,系统也可保持运行。系统可实现按需调
配短信设备数量,减少系统初期建设费用,便于系统升级扩容处理。
对移动用户请求信息,答复信息,处理情况都进行记录,以便于与移动公司信息、
计费等对比。
系统实行分布式处理方式,短信服务器接收到移动用户发送的请求信息时经过过滤
分类处理,按已注册的的业务类型通知到各应用服务器,由各应用服务器进行处理后通
过短信服务器回复用户,以提高系统短信服务处理能力,业务扩展灵活性。系统同时提
供对内部网络各应用发送短信的请求。
(三) 硬件信息
短信务服器:Windows 2000
GSM Modem :福州利事达信息技术有限公司 LT1080-GSM 短信王
支持: PPP 协议栈 、AT 控制命令
接口:R 232(串口)
短消息:MO/MT/TEXT/PDU
频率:EGSM900/GSM1800
发送速度:10 秒以下
音频特性:半速/全速/增强加速
天线接口:SMA
(四) 短信应用端基于 JsmsApp 实现
短信应用业务系统应用端模块进行短信的收发处理,提供基于 Java 的 JsmsApp 中
间件。应用业务系利用中间件可以进行快速的实现短信应用开发,并且部署多个短信应
用业务系统。
发送维护
系统维护“业务类型—消息接收人----发送方式”这一关系,不同业务的消息接收人和发
送方式是独立的,通过直接选择组织树上的具体人决定发送人,发送人 1 个或多个,发送人
的邮件或电话号码在人员信息中维护,发送方式可以是邮件、短消息或两种都可以。
消息的发送人在配置文件中配置,整个系统有一个全局的发送人,如果各个业务对应的
发送人没有配置,使用全局的发送人,否则使用和业务对应的发送人。
接口类设计
getMsgBody
public getMsgBody( aTemplateFile,
aTmpParam,
picList)
throws MnsException
根据模板文件和参数,获得实际的消息内容
Parameters:
aTemplateFile - 带绝对路径的模板文件名,如 c:\hello
aTmpParam - 参数值的集合,每个元素的 key 名和模板中的变量名对应. 可为空
picList - 内嵌图片文件的集合. 可为空
Throws:
MnsException
sendMsg
public void sendMsg( aSender,
aReceiverList,
aSubject,
aMsg,
aSendType)
throws MnsException
根据需要的发送方式发送消息
Parameters:
aSender - 发送者,如果为 null,使用系统配置的默认发送者
aReceiverList - 消息接收人集合;每一个元素为 Hashtable 类型,有两个 key, address:
邮件地址或手机号码,channel:发送方式(email , sms 等); 为 string 时,只能是邮件地
址
aSubject - 消息主题
aMsg - 消息内容
aSendType - :立即发送,:异步发送
Throws:
MnsException
sendMsg
public void sendMsg( aSender,
aReceiverEmailList,
aSubject,
aMsg,
aCCEmailList,
aAttachFile,
aSendType)
throws MnsException
以邮件的方式发送消息,支持 cc 和附件,使用模板
Parameters:
aSender - 发送者,如果为 null,使用系统配置的默认发送者
aReceiverEmailList - 消息接收人集合;里面的元素 String 类型的邮件地址
aSubject - 消息主题
aMsg - 消息内容
aCCEmailList - CC 人集合;里面的元素是邮件地址,String 类型
aAttachFile - 附件集合;里面的元素带绝对路径的文件名,String 类型
aSendType - 0:立即发送,1:异步发送
Throws:
MnsException
通讯网关
连接方式
通讯网关负责提供和外部系统连接的可配置框架,并提供数据转换、通讯痕迹管理等功
能。
本系统和外部系统的连接有以下方式:
1. 外部系统在数据库层面提供 view,直接访问外部系统的 view 获取数据。
2. 将应用模块的数据对象转换成 XML 格式,传输到外部系统,外部系统按本系统要求的
格式返回 XML 格式的数据,再转换成数据对象为应用模块使用。
3. 将应用模块的数据对象转换成 XML 格式,传输到外部系统,从外部系统自定义的接口
获取 XML 格式的数据后,转换成本系统要求的 XML 格式的数据,再转换成数据对象
为应用模块使用。
4. 其它的方式,在实施过程中定制(如发送报文到消息中间件)。
连接方式的复杂性是以下原因造成的:
1. 不同省的业务系统千差万别,可连接的方式取决于双方协作的结果,难以事先决定。
2. 不同省使用的数据库类型和数据库的设计必然不一样,无法固定为一种。
功能描述
用例图如下:
技术框架
数据转换实现应用模块的数据对象与 XML 格式的互转,应用传给通讯网关自定义
的对象类型,通讯网关与外部系统之间是 XML 格式,应用与通讯网关之间使用通
讯网关自定义的数据对象。
通讯服务能方便连接不同数据库的不同视图,并将查询的结果转换成数据对象,外
部系统的数据库可以是任意的关系型数据库。同时提供标准的 socket 连接的方式。
根据本系统的业务功能要求,规范外部系统要创建的视图(如果采用该方式),提供
标准的适配器。
根据本系统的业务功能要求,固化采用 socket 连接外部系统的处理,提供标准的适
配器。
与外部系统连接并处理数据的实现类自由可配置,以能解决例外情况。
接口类设计
AppData 为自定义的一个数据类型,核心是一个 Vector。
execute
public AppData execute( msgID,
AppData input)
throws
执行一个业务操作
Parameters:
msgID - 业务操作编号,与业务类型定义文件相符
input - 传入的参数和数据
Returns:
通用数据接口
Throws:
execute
public AppData execute( msgID,
AppData input,
adapterType)
throws
执行一个业务操作
Parameters:
msgID - 业务操作编号,与业务类型定义文件相符
input - 传入的参数和数据
adapterType - 使用的适配器类型
Returns:
通用数据接口
Throws:
file:///C:/1/com/longtop/ltfp/cgs/common/
file:///C:/1/com/longtop/ltfp/cgs/common/
file:///C:/1/com/longtop/ltfp/cgs/common/
file:///C:/1/com/longtop/ltfp/cgs/common/
任务调度
功能描述
任务调度模块实现在没有人工干预下自动执行任务,任务对应的是一个 API
任务可一次性执行或周期性执行,周期类型可自由配置,如每天,每周的星期几,
每月的那几天
任务调度过程有日志记录,可被查询。
任务执行的时间不能动态修改,如果需要修改,需要先停止服务器,修改后,再启
动。
解决方案
本模块使用 spring 内建的 quartz 组件实现,技术框架如下:
Job JobDetail Trigger SchedulerFactory
1
1
1
1
1
n
描述 技术实现
job 定义一个任务,即要做的事,对
应着 API
任意 bean 的一个方法
jobDetail Quartz 能运行的一个任务,是将
Job 封装成一个 Service
bean 方法通过配置文件产生一
个新的 jobDetail bean
trigger 触发器,包含一个 jobDetail 和任
务触发的时间条件(如每月地一
天晚上 18:00)
jobDetail bean 通过配置文件产
生一个新的触发器 bean
schedulerFactory 包含要调度任务的所有触发器
列表
把已定义的全部触发器 beans 都
配置到 schedulerFactory 列表中
使用 spring 后,无需编写代码就可以把一个功能配置成定时任务。如果希望用户能够
更改任务触发的时间条件,也只需创建单独的触发器类。由于是注入式编程,由 spring 管理,
无需接口,除了多点配置外,其它开发完全同普通 Java API 功能的实现。
应用示例
首先,和常规 API 的开发一样,写 API,实现某功能。
提供了两个方法,作为这里的例子。API 写好后,接下来就是配置了,包括如下的步骤,这
里以提供的例子说明如何配置。
1. 定义 spring bean,如果已存在或使用现有的 bean,则不需要此步骤,此步骤属于
spring 范畴,与任务调度无关。
<bean id="sampleJob" class=""/>
2. 定义一个 jobDetail。jobDetail 为 quartz 可识别的一个任务,它包含一个方法 run(),
执行任务的时候将调用该方法。
<bean id="sampleCronJobDetail"
class="">
<property name="targetObject"><ref bean="sampleJob"/></property>
<property name="targetMethod"><value>doCron</value></property>
</bean>
targetObject 和 targetMethod 设 置 run() 方 法 体 内 要 调 用 的 类 和 该 类 的 一 个 方 法 。
sampleJob 引用了前面定义的 bean,doCron 为 SampleJob 的一个方法,该方法不能包含参数。
3. 定义任务的触发器,当到达一定的时间条件时,触发器将启动对应的任务。
<bean id="sampleCronTrigger"
class="">
<property name="jobDetail"><ref bean="sampleCronJobDetail"/></property>
<property name="cronExpression"><value>4,37 * * * * ?</value></property>
</bean>
jobDetail 属性把上一步定义的 sampleCronJobDetail 绑定到该触发器,cronExpression 设
置任务触发的时间点(详细介绍见下面)。
4. 定义调度引擎,管理所有触发器。
<bean class="">
<property name="triggers">
<list>
<ref bean="sampleCronTrigger"/>
</list>
</property>
</bean>
5. 启动应用
至此所有工作已完成,启动应用,应该可以出现以下调试信息。
17:32:37,031 INFO [LogService] run () at sec 4,37
17:33:04,015 INFO [LogService] run () at sec 4,37
17:33:37,015 INFO [LogService] run () at sec 4,37
配置说明
两类常用的触发器
1. simpleTrigger
<bean id="sampleSimpTrigger"
class="">
<property name="jobDetail"><ref bean="sampleSimpJobDetail"/></property>
<property name="startDelay"><value>10000</value></property>
<property name="repeatInterval"><value>15000</value></property>
</bean>
startDelay ,调度引擎初始化后的 10 秒内第一次执行任务,取值单位毫秒
repeatInterval ,任务每间隔 15 秒执行一次,取值单位毫秒
2. cronTrigger
通过具体的时间点来设置任务的执行,参见上节的配置。
cronExpression
格式: 秒 分 时 日期 月份 星期 年 (中间的空格必需,年如果为*可以省略)
在对应的位置输入相应的合法数字(如秒为:0~59),当系统时间与该时间相同时,
则启动任务。
“,”号,允许一个时间域取多个值,如秒位置为(4,37)在 4 秒或 37 秒都会启动任
务。
“*”号,表示任意的值,都会引起任务的执行,一般不用于秒域。如果分钟为*,则
每分钟都会执行任务。
“?”号,用于日期或星期位置,由于不同时指定日期和星期,?的位置表示不考虑
该因素。
“-”表示联系的一段取值,如 5-8,等价于(5,6,7,8)。
“#”仅用于星期,表示第几个星期,如 2#2,表示本月第 2 个星期一。
详细内容参见 CronTriggers Tutorial
任务清单
需要待需求细化和分析后确定
任务名 任务描述 触发条件 备注
报表开发
报表设计
本系统使用 iReport 工具绘制报表模板,使用 Jasper 动态产生报表并输出到 web 页
面上或以文件形态保存在服务器上,原理如下图:
报表种类
本系统拟采用常规表格式报表和仪表图展示监管统计信息,具体待需求明确和细化后确
定。如下是仪表图的展现形式:
报表清单
需要待需求明确和分析后确定。
报表名 内容概述 展现形式 实时/定时
报表打印
使用 ScriptX 实现在 IE 上的打印控制(
5 数据同步设计
本系统从外部业务系统获取业务数据,发送标志位信息给专卖准营证系统;国家局
系统和省局系统是独立的,但存在数据上的关系,即合作银行信息、账户种类信息在国
家局系统中维护后,下发到各省数据库,同时各省数据库将数据按要求上传到国家数据
库。
本系统和外部系统的数据关系主要通过 3 种方式解决:
1. 通过通讯网关实时获取外部系统的业务数据或发送标志位信息。
2. 通过数据复制技术实现国家局和省局基础数据的同步。
3. 通过任务调度机制定时上传数据或更新数据。
第 (1) 种方式的实现在“ 通讯网关”中详细描述。第 (3) 种方式的实现在“ 任
务调度中详细描述,上传或更新的具体数据和要求有待需求的细化,在详细设计中解决。
本章主要关注第 (2) 种方式的实现。该方式实现的前提是国家局和省局的数据库
都使用 Oracle 数据库,以使用 Oracle 数据库提供的复制技术。
复制是一种实现数据分布的方法,也就是说把一个系统中的数据通过网络分布到另
外一个或者多个地理位置不同的系统中,以适应可伸缩组织的需要、减轻主服务器的工
作负荷和提高数据的使用效率。
Oracle 针对数据分布式计算的需要,提供了一整套功能强大的数据库复制解决方案。
Oracle 的数据复制按功能可以分为三类:简单复制、高级复制和混合复制,而高级复制
又可分为多主节点复制和可更新快照复制。本系统使用其简单复制功能。
要实现的复制示意图如下:
技术实现如下:
1. 在各省局数据库中建一个 service name,连接到国家局数据库。
2. 在各省局数据库中创建一个数据库连接(DBLINK),如:
SQL> CREATE PUBLIC DATABASE LINK DBL_CNYC CONNECT TO USERA
IDENTIFIED BY USERA USING ' ';
这里的用户指国家局数据库用户, 为省局数据库可连接国家局
数据库的 service name
3. 在各省局数据库中创建快照表空间和对应国家局数据库需要复制的表的快照。
4. 在各省局数据库中创建一个定时刷新过程来定时刷新快照组。
5. 在各省局数据库中创建一个定时任务来调用定时刷新过程,实现定时将国家局
数据库的数据复制到各省局数据库。
详细创建步骤请参考 SVN 上的“ORACLE 快照实现数据复制.doc”。
6 安全性设计
本章描述应用层面的安全性考虑。
方案概述
通过授权机制防止访问保密数据或受限数据、创篡改数据以及执行没有授权的功能。
通过使用 CA 的身份验证机制控制对系统的访问
通过良好的异常管理防止暴露敏感的系统级信息。
通过日志和痕迹管理使系统的操作可查询可追踪。
通过 Server 端校验防止绕过页面的检查或直接访问无权限的 URL
权限控制
参见
CA 认证
CA 认证主要是商务上的一个考虑,具体是否使用根据在实施时的商务情况而定,在开
发阶段不考虑。
登陆日志
用户登录系统时,记录登陆人、登陆时间、IP 地址等信息,如下形式:
操作痕迹
日志分为三种,要记录到数据库中的系统流水或痕迹,记录程序执行的供调试和监控的
程序日志,其它记录在文件中的业务日志。
操作痕迹。记录操作人员的每一次操作。只在支付子系统中记录操作痕迹,系
统同时提供支付过程的轨迹查询,确保每一步都可追踪。
程序日志。使用 log4j 在程序中记录重要的调试信息和运行信息,记录信息包括
类名、代码行号和消息内容。实现类名为:. ProLogService
业务日志。类似程序日志,但日志文件自由定义,可以单独一个也可使用公共
的,譬如消息发送的日志保留。实现类名:。
程序日志的使用如下:
import ;
.....
public class Test {
protected static ProLogService log = ();
public void XXXX(){
(“hello”);
}
}
日志文件路径在 中由${}定义,如果没
有 设 置 , 默 认 为 ${}/rabbit/logs 下 ( 如 : C:\Documents and
Settings\administrator\rabbit\logs),可以通过修改该文件改变其它设置。
示例如下:
2006-08-11 15:51:53,265 [ :3116:DEBUG] initializing non-lazy collections
2006-08-11 15:51:53,265 [ :112 :DEBUG] 开始发起流程...
2006-08-11 15:51:54,093 [ :114 :DEBUG] 结束发起流程...
业务日志的使用如下:
在 中配置 category,调用时指定,如
BizLogService logger = new BizLogService("NotifyFailLog");
String address =”admin@”;
mailto:admin@
("发送失败,未发送邮件地址: " + address);
审批痕迹
流程的每一步审批都可追踪,即可知道每一个流程的环节是如何进行的,是何人在何时
操作的,操作后下一个环节是什么。
Server 端校验
Server 端校验主要解决如下问题:
防止没有登陆系统的访问。
在 server 端重新做功能权限和操作权限的校验,防止绕开页面的控制。
实现方案:
在 Request 的入口检验需要校验的请求是合法的。
在每个业务的 action 实现类中对需要做 server 端校验的 API 检查 menuCode 或
funCode,保证不为空; 如果为空, 表明此时为非法的请求,不做任何处理。
Server 端校验的实现是通过如下类实现:
package ;
......
public class LTSecurityFilter implements Filter {
}
并配置在 中,使所有的请求都会被校验。
<filter>
<filter-name>LTSecurityFilter</filter-name>
<filter-class></filter-class>
</filter>
<filter-mapping>
<filter-name>LTSecurityFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>LTSecurityFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
7 性能设计
性能设计的主要方案:
1. 适当的页面缓冲。当一个用户需要在若干页面间频繁切换来完成其业务处理时,采
用页面缓冲技术,以减少网络因重复传输而耗费大量系统资源。分为如下几种:
系统缓存:系统启动时需要加载信息,包括规则信息。
用户信息缓存:用户登录时用户自身信息的缓存,包括用户基本信息、用户权
限数据、SessionID 等。
业务数据缓存:业务处理的公用数据。包括账户类型、银行信息等。
2. 在大数据量查询方面,一页可以显示的行数以及一次可装入内存的页数都可参数化
配置。这种折中数据库访问次数和内存占用的策略,可以根据实际部署环境进行调
优,以提高系统的综合性能。
3. 采用的数据库连接池,能够缓存指定个数的数据库连接。系统不需要每次都重新建
立数据库连接,提高了数据库访问的速度。
4. 对资源来说,是可以反复使用的,缓存的访问开销比直接访问资源开销要小。系统
频繁使用的配置文件都一次性装入内存,程序不需要每次都从硬盘读取,大大降低
系统的 I/0 负担。
5. 建立数据库良好的索引关系,提高查询检索速度。
8 客户化设计
本章描述系统在未来推广实施过程中,可能要客户化的问题以及解决方案,具体的客户
化过程参见“烟草资金监管基础平台使用手册.doc”。
改变监管规则
本系统中的规则专门使用规则库进行管理,从而做到规则变化时不修改代码(增加新的
业务属性或功能除外)。通过规则编辑器修改规则,编译后测试、部署,实现规则的随需应
变。
改变业务流程
本系统中的流程专门使用流程管理系统进行处理,从而做到流程变化时代码一般不需要
修改。通过流程建模工具修改流程定义和配置任务的分派方式,编译后测试、部署,实现流
程的随需应变。
外围系统连接定制
本系统使用通讯网关构件连接外部系统,在设计已考虑到的常规方式内,通过手工修
改 XML 配置文件实现连接任意系统和送收信息内容的自由变动,对于非常规方式,实现本
系统提供的接口,按接口返回数据,并将实现类配置在文件中,做到代码独立修改。
改变数据库类型
本系统通过良好的数据库设计规范,避免数据移植的工作量,即希望通过使用各数据库
共同的数据类型和数据访问方式,使在不同的数据库上运行时代码不需要修改。
改变组织数据来源
将已存在的系统的组织概念映射到本系统。
重新实现如下的组织接口:
接口类 功能描述 备注
本系统获取组织数据、权限数据的接口 参考 Javadoc
intelliFlow 获取组织数据的接口 参考产品文档
9 开发规范
该部分对如何进行设计和编码进行规范,以使系统的实现具有明确的要求和统一的
风格。规范只约束本系统的开发,不作用于使用到的外部产品,如工作流管理系统、规则
系统。
本规范中的“不使用”指完全不要考虑,“尽量不使用”或“尽量避免”指在完全没有其它
解决方案的情况下考虑使用,使用前需要与架构师口头沟通,征得同意;“不同数据库”只
指 Oracle 和 DB2。
凡是该规范没包括的情况和例外情况的处理,请口头沟通架构师,获得许可后才可
实施。
Java 编程规范
除了本文档提到的规范外,其他的规范参考公司相应的 java 编程规范,如果有冲突
以本文档为主。
关于编程规范,本文当特别补充和强调如下几点:
不要用工具生成没用的注释,如下是一个例子:
* TODO To change the template for this generated type comment go to Window - *
Preferences - Java - Code Style - Code Templates
除使用工具直接生成的类外,其它所有类的功能要有注释,即使只是一个数据对象;
非常见功能的 API 必须要有功能描述的注释。独立的要被应用其他功能所调用的
模块的接口和公共 API 的注释要完备,即包括功能说明、参数和返回值说明。其
它情况的 API 的注释尽量完备,但不强制要求。
“{”直接跟在语句后面,如下:
public BaseDataSource getDataSource(String subreportName)
throws JRScriptletException {
….
}
}
不在循环中定义变量(不得以的情况除外)
使用 StringBuffer 来替代 String 的相加。
即使 IF,While 是单语句,也要使用“{ }”来划分程序块。
使用封装 log4j 的 API 来记录程序日志,不在代码中使用
异常即使不需要抛出,在 catch 部分需要记录错误日志(如装载配置文件出现
IOException,可以不向外抛)。
数据库设计规范
设计思想
数据库设计时要兼顾不同数据库的要求和限制,降低数据库移植和维护管理的
工作量。
使用 ErWin 生成创建不同数据库需要的数据库脚本文件,不要手工写或修改
脚本文件。(在 ErWin 中,打开物理模型,Database -> Database connection 连
接数据库;Tools -> Forward engineer,再点 generate,建立数据库环境)
使用 ErWin 直接生成数据库设计文件,导入到 word 中后只是做排版上的调整,
不修改内容。(在 ErWin 中,Tools -> Report Builder, 自动生成所使用的模板为
“数据库设计文档模版.rtb”(直接拷贝到[ErWin_HOME]\CA\AllFusion ERwin
Data Modeler\Reports 下既可)。
调试、测试、系统初始化使用的数据手工写成脚本文件保存。
尽量使用不同数据库共有或接近的数据类型,不使用序列、存储过程、触发器、
和开发包,尽量不用数据库的函数,以降低数据库移植的工作量,一定需要使
用数据库的函数时,在设计或编码时要预先考虑数据库迁移时能否处理。
命名规范
命名应该使用英文单词,尽量避免使用拼音,名称一律大写,单词太长时,使
用容易一眼就明白的简写或缩写。
表的名称由代表逻辑分类的前缀和代表用途的后缀组成,前缀为 2 个字母的缩
写,后缀为用下划线分隔开的单词或缩写组成;关联表后缀为“R_”加相关联的
表名,表名之间用下划线分隔;基础平台的表的前缀统一为“TB_”,应用层的
表的前缀统一为“TF_”。
字段名为用下划线分隔开的单词或缩写组成。
表名和字段名的长度在 30 个字符内。
不同的表使用相同含义的字段应该采用完全一样的名称和字段类型定义。
主键前缀为 PK,主键名称应是“前缀_表名_构成的字段名”。如果复合主键的
构成字段较多,名称长度超过了 30,以易理解为原则,酌情缩减到 30 内。
外键前缀为 FK,外键名称应是“前缀_外键表名_主键表名_外键表构成的字段
名”。如果名称长度超过了 30,以易理解为原则,酌情缩减到 30 内。
索引前缀为 IDX,索引名称应是“前缀_表名_构成的字段名”。如果名称长度超
过了 30,以易理解为原则,酌情缩减到 30 内。
视图前缀为 V,后缀为用下划线分隔开的单词或缩写组成,以能体现业务操作
为原则,长度不超过 30。
字段类型选择规范
固定长度的字符串类型采用 char,长度不固定的字符串类型采用 varchar 或
varcahr2 (DB2 只有 varchar)
数字型字段在 oracle 中采用 number(p),number(p,s)类型,在 DB2 中采用
integer 或 decimal(p,s),对于金额一律使用(16,2)
日期时间类型采用 char 类型,数据格式采用:YYYYMMDDHH24MISS 或
YYYYMMDD 或 HH24MISS,以避免数据库移植时的麻烦。
不使用数据库产生的系统时间,以避免 oracle 和 db2 表示方法不一样带来移植
的麻烦。
表中的序列号由程序生成,类型采用数值型,由基础平台提供。
尽量避免使用 blob,clob,long,text,image 等大对象,降低数据库移植和维
护管理的工作量。
文件命名规范
所有的目录名由直接的技术管理人员决定,以简洁清晰易懂原则,首选英文名,是
否用中文或缩写酌情考虑。
所有使用 hibernate 工具生成的代码和 XML 文件的目录名为:com.**.vo
所有 iBatis 对应的 XML 文件的目录名为:com.**.map
所有数据库层操作的文件目录名为:com.**.dao
所有 Spring 的 Serivce 对应的文件名放在模块的根目录下,即 com.**
所有 Struts 的 form 文件和 action 文件的目录名为:com.**.web
Java 文件命名参考 java 编程规范。
JSP 文件名使用小写,多个单词之间使用“_”隔开或直接连写,如连写后面的单词
首字母大写(如 );首选英文名,如无法用常见英文名表示,可使用中文
拼音。
页面样式规范
页面所有元素的样式通过样式文件设置,不可直接写在页面中。
系统页面样式控制方式是:页面元素的默认样式 + 特殊样式,如果有指定特殊样式(即
直接写 class=” …”),使用指定的,如果没有指定,将使用默认的。
为能自动套用默认样式,所有 JSP 文件头要包含 文件,该文件包含了标签
库、js 文件、css 样式
<%@ include file="../bas/"%>
样式文件为 ,内有其它特殊样式,如要使用,需直接技术管理人决定。
页面开发规范
分类 规范
页面编码 使用 GBK
页面样式 通过 include 页面 bas/ 使用样式控制
页面 FORM Table 中各列的宽度使用相对值
需要发起流程的页面要 hidden 两个字段的值,即 bizCode 和 bizName,与
IWF_BIZ_CATEGORY 表中的配置对应。
翻页控制 include 该文件在需要显示翻页处:bas/
页面流转 点击新增、打开按钮,进入新增/编辑页面;输入信息保存后,停在原页面,
显示更新后的信息,提示“操作成功”。
点击删除,删除数据并返回列表页面,并刷新列表。
业务操作提交后,停在本页上,提示操作是否成功;部分业务可能在提交
成功后到其它功能页面,个案再定。
任务审批提交后,提示操作是否成功,成功时点“确定”到任务列表。
页面缓存 所有页面是可以 cache 的,所有页面都可以回退
页面布局 所有 label 的对齐方式为 left,后跟“:”(注意是中文全角状态下的冒号)
表格中的数据对齐方式为 left,但金额为 rihgt,并使用会计的表示方法,
如“5,000”
同类的页面元素在多行时尽量上下对齐
只有打开一个新的功能菜单时,才开一个新的 tab 页,一个功能菜单内的
所有操作(如增、删、改),其页面都在同一 tab 页上,不另开一个。
tab 页打开时,tab 上的标题为“功能名”或“功能名—操作名”,如“合作银行
—新增”,当点某个操作时,tab 页上的标题改为“功能名—操作名”
页面模板 增加:jsp\account\apply\
删除:jsp\org\
修改:jsp\org\
查询:jsp\org\
流程发起:jsp\account\apply\
任务列表:jsp\account\tasklist\
任务审批:jsp\account\tasklist\
组织数据选取对话框 (待定)
自定义标签 动态表格控件——丰富表格功能
树形控件——树状展现数据
按钮控件——实现操作权限控制
下拉列表控件——构造列表选项
页控件——tab 展现
详细使用参见“烟草资金监管基础平台使用手册.doc”
JS 函数 通过 include 页面 bas/ 使用公共的 JS 函数
jsUpperCase,toJsUpperCase:把输入的字符转为大写
jsLowerCase,toJsLowerCase:把输入的字符转为小写
typeNumber,verifyNumber: 只能输入数字
typeInteger,verifyInteger: 只能输入整数
typeFloat,verifyFloat: 只能输入浮点数
isNumber: 验证是否为有效数字,允许用科学计数法,即包含字母
required: 判断必填项是否有内容
测试 所有应用模块都要写主要的测试点简要描述,以面向应用功能为主,可包括技
术层面的测试,放在“开发主要测试场景清单.xls”中,如:
登陆时用户不存在/密码不正确的异常消息提示
流程发起时流程处理和业务处理在同一个事务中
后台程序规范
分类 规范
日志编码 使用 . ProLogService 记录文件中,开发人员决定日志的
级别和消息内容,错误信息都为 error 级
ACTION 编码 非 流 程 action 继 承 或
BasDispatchAction
流程 action 参考“流程控制”章节。
form bean 继承 ,map 方式表示的使用
在 action 中使用 BaseAction 中定义的 getBean(String beanId) 方法取
得业务层的逻辑接口,请不要直接使用其他方式取得业务层的逻辑
接口以减少耦合。
对于 server 端需要做权限控制的校验 request 中有 menuCode 或
funCode 信息,如果没有,返回到 logon 页面。
业务逻辑编码 应用框架搭建在 Spring framework 之上,所以业务层 Bean 的开发要
符合 Spring Bean 开发的要求。
Service 的 命 名 : 接 口 为 I[ 模 块 简 称 ]Service , 实 现 为 [ 模 块 简
称 ]ServiceImpl ; 其 方 法 命 名 : addXXX, deleteXXX, updateXXX,
loadXXX,listXXX,getXXX,,saveXXX 等
对 数 据 库 单 表 的 增 删 改 查 基 本 操 作 请 使 用 .
BasServiceImpl
业务 façade 的对应接口要定义一个不变常量“BEAN_ID”,其值为该
接口对应的 Bean 的定义的 id。
参与金额计算的各数据和计算结果的类型使用 BigDecimal,而不要
使用 Double 或 Float
集合类型的数据结构建议使用 系列的实现类
数据结构不确定的数据可以使用 装载
应用需要的一些常量值(如账户状态)统一放在 .
Constants 中定义;构件的不放在该文件中,自立独立定义;某些肯
定只是单个类中使用的常量,可在自己的类文件中定义
系统时间从 util 包中统一的 API 中获取。
应用的事务配置在业务 façade 的 Spring 实现 Bean 的定义上。
需要事务的方法的事务配置为“PROPAGATION_REQUIRED”
需要新事务的方法配置为“PROPAGATION_REQUIRES_NEW”
不需事务的方法配置为“PROPAGATION_REQUIRED,readOnly”
DAO 层的编码 应用框架搭建在 Spring framework 之上,所以 DAO 的开发要符合
Spring DAO 开发的要求。
DAO 文 件 的 命 名 : 接 口 为 I[ 模 块 简 称 ]Dao , 实 现 为 [ 模 块 简
称]DaoImpl,使用 iBatis 时使用[模块简称]SqlDao。
DAO 的实现类继承 ,以获得对表
的常规操作。
VO/PO 对象 VO 的生成使用 Hibernate export 工具。名称的规则类似如下:如果
表 名 为 TB_VAL_SETTING , 则 对 应 生 成 类 TbValSetting 和
。
VO 的主键建议类型为 string,生成方式为 assign。不使用数据库的
自生成主键,而是借助基础模块中的计数器服务生成符合业务要求
的值来当主键。
VO 的主键一定是要相对应用需求无意义。换句话说,主键是不会被
修改的。例如,假如发票号码唯一,但是发票号码在系统中有可能
被修改,则发票号码就不适合当主键。当然,主键本身的格式可能
设计成看起来有意义,如审批号:20050000000001,被设计成由年+10
位序列号 ,但是审批号不会被修改。
配置文件 各子系统和各模块的配置信息放在一起,并按如下注释:
<!-- =========org 模块==============-->
Spring 的配置文件中 target 和 service 挨在一起放,如 org 的 service
放在 org 的 target 下
所有公共配置文件的增加都从 SVN 上 check out 后增加,不得改变
原来内容的排版格式,如改变每行的最多字符数,并尽量整齐一致
测试
构件模块要基于 写测试案例,测试代码路径为:test.[测试
类路径],测试相关的辅助资料也放在该目录下,并放 说
明如何测试。
所有流程首先使用流程测试框架进行流程发起和任务提交的测试,
正确后再在本系统中测试。
文档规范
文档类型 文档命名 要求
烟草资金监管基础平台数据库设计
说明书.doc
使用 ErWin 设计或修改,导出文档后拷
贝到该文件中,编辑文档格式使美观
数据库设计
烟草资金监管系统数据库设计说明
书.doc
同上
基础平台详细设计书 核心构件需要有详细设计,常规部分不
需要写
详细设计
XXX 子系统详细设计书.doc 使用“XXX 详细设计书模板.doc”
每个子系统一份详细设计文档
序列号的获取
序列号由程序自动生成,生成规则在表 TB_SQ_SETTING 中配置,如下:
其中 BLOCK_COUNT 为递增数,SQ_LEN 为最大长度。无特别说明,各应用模块都使用该
规则,但独立计数,这通过调用时传入的参数决定。
获取序列号通过调用 的如下 API 实现:
/**
* 获取序列号, 序列号的产生规则为 TB_SQ_SETTING 中 SQ_ID 为"ID"的记录
*
* @param key
* 代表一种分类的 key, 即每一类独立的增加; 该值会插入到 TB_SQL_VALUE 表中
* @return seqId
*/
public Long getSeqId(String key) throws SequenceException;
key 统一使用对应的表名,如维护菜单权限,则 key 为“PW_MENU_RIGHT_ID”。
对需要在序列号基础上生成有一定规则的特定长度的字符串,参考该类的其它 API。
异常处理
JSP 页面异常
此处的异常都为程序异常(如标签的语法错误),与业务逻辑没任何关系,该类错误一般
是 在 开 发 阶 段 发 生 , 运 行 阶 段 不 会 发 生 。 出 现 此 类 异 常 都 会 被 转 向 到
/jsp/bas/ 页面处理,并显示出来,提示用户。
Action 异常
通过层层调用,所抛出的各种异常,到 action 之后都被转为 Exception 抛出。在 struts
中配置 ExceptionHandler,能够处理 action 的异常,包括日志记录和出错转向。异常的错误
消息,在/jsp/bas/ 会提示用户。
DAO 和 Service 层的异常
这两层一般不需要往抛具体的异常,抛 RuntineException 的子类异常既可。
异常编程指导
使用如下的两类异常
LTException,如果异常要作为一种逻辑处理的返回状态,调用者需要进行再处理
的,则须抛出此类异常的子类,如登陆验证方法要表示“用户名不存在”,“密码不匹
配”。
LTRuntimeException,调用者无法有效的处理,或者异常处理框架已经处理,不需
要调用者再做其它事情的时候,都可以抛出此类异常。该异常无需被捕获,也不必
在接口中定义。
处理异常时,遵循以下几条原则:
1. 尽量不要在 DAO 和 Service 层中 throws 异常,即系统以 RuntineException 处理
2. 尽可能减少 throws 异常类型,多个时候用 LTException 代替即可
3. 避免用抛异常的方式去解决业务问题,除非是抛给最终用户的。
错误消息
错误消息主要是给最终用户提醒的,否则可不用定义。使用 struts 的 ActionError 来整
合异常错误消息和 ActionForm 输入验证提示,再由资源文件配置消息内容,实现统一维护。
流程为:
1. 抛 出 异 常 时 定 义 messageKey 和 参 数 messageArgs , 并 在 资 源 文 件
中定义消息内容。
2. 异常处理框架统一转换异常消息为 ActionError
3. /jsp/bas/ 根据 ActionError 和资源文件,组装消息内容并显示给用户。
注意
所有的 jsp 页面应引入/jsp/bas/ 文件
messageKey 一般为三个单词隔两个点组成,能表明内容即可,如:
部分构件不遵循上面的规则,消息格式为:errorcode = message,相当于上面的一个
简化。
错误消息配置
属性的 key 为[模块名]. 的形式或是一个 error code 号(构件中的方式)
使用专门的常量类来对应属性 key,类名为
事务处理
使用 spring 声明式事务管理,来实现一般的事务管理。通过简单的配置,声明式事务管
理几乎可使开发者不用进行任何事务编程,但还是有些方面要注意:
1. Service 的任何一个方法都是一个完整的事务过程。
2. 当 Action 调用了一个以上的数据库写操作 service 方法时,应确认此为多个事务;
即 action 中多个 service 的方法或 service 的多个方法是不在一个事务中的。
3. 事务使用 JTA 事务管理方式
4. 对于特殊情况,可以考虑使用 spring 编程式事务,使用 TransactionTemplate
目录结构
分类 模块 目录名 备注
页面风格 css PowerWeb 的 CSS
,
,
,
应用的 CSS
图片 images
前台 基础平台
JavaScript js PowerWeb 的 JS
tree 目 录 , ,
, ,
,,
,,
应用的 JS
标签库 tld
基础框架 jsp/bas 登陆/退出,主页面
系统维护 jsp/ssm 其它基础信息和系统管理维护功
能
组织维护 jsp/org 组织维护和权限管理功能
账号管理 jsp/account
网上支付 jsp/ payroll
资金监管 jsp/monitor
应用功能
公告管理 jsp/bulletin
基础框架
登陆/退出,序列值生成,action 基
类,form 基类,异常类和异常处
理,数据操作基础 API,工具类
流程处理
日志服务 程序日志记录(文件形式)
应用日志记录(文件形式)
消息服务 多渠道的消息发送
消息模板的可配置
基础平台
通讯网关 数据转换
报文发送
组织维护
系统维护
账号管理
网上结算 . payroll
资金监管 . monitor
公告管理 . bulletin
公共功能 获取常用数据字典的值列表
后台
应用功能
工具类库
配置文件
文件名 功能 规定
ApplicationResources_zh.
properties
系统的中文错误消息 上半部为基础平台的,下半部为应
用的,不能交叉
系统(key, value)格式的配置文
件
上半部为基础平台的,下半部为应
用的,不能交叉
jdbc 方式访问时的配置(仅开发
测试使用)
Web 应用的配置文件
基础平台 sql 映射文件配置
基础平台 pring 的服务配置文
件
基础平台 spring 的数据访问配
置文件
基础平台 strtus 的配置文件
资金监管应用 sql 映射文件配
置
tfm 资金监管应用 Spring 的服务配
置文件
tfm 资金监管应用 spring 的数据访
问配置文件
资金监管应用 strtus 的配置文
件
在 standalone 的 java 类中获得
bean 实例需要的文件
开发指导
参考“烟草资金监管基础平台使用手册.doc”
第三方软件
第三方软件要被管理,即其用途、来源和包含的文件在系统中要十分清晰,所有需要新
引入的第三方软件需要告知架构师并获得认可。下表是系统使用的除数据库、应用服务器外
的其它第三方软件(包括公司自开发产品)。
名 称 版本 来 源 功 能 相关 jar 包
Jasper 报表引擎
log4j 记录日志
Junit 单元测试
mail
发送邮件
activation
/glasgow/
消息服务构件中发邮
件使用
velocity
消息服务构件中消息
模板解析
Apache-co
mmon
s/
报表等模块需要使用
.jar
commons-javaflow-20060
uploadbean 文件上传
intelliRule 来于 intelliRule 规则执行
commons-jci-SNAPSHOT
ar
intelliFlow 来于 流程处理
powerweb-t
aglib
来于 标签库
XML 解析 来于 报表等模块需要使用
hiberbate 来于 数据访问层处理
spring 来于 持久层处理
struts 来于 Web 层处理
classes12 来于 Oracle 数据驱动程序
jta 来于 JTA 事务处理
dom4j 来于 解析 XML 文档的开
放源代码 XML 框架
ehcache. 来于 缓存处理
aopalliance 来于 使 用 hibernate 和
spring 的附属包
来于 使 用 hibernate 和
spring 的附属包
asm 来于 Hibernate 用 它 来 实
现 PO 字节码的动态
生成
standard 来于 使用 JSTL 所要求的
文件
ibatis 来于 提供的 ORM 机制
jdom 来于 转换到 SAX 和 DOM
jstl 来于 JSP 标准标记库
commons-v
alidator
来于 验证规则
commons-d
bcp
来于 数据库缓冲池管理
ar
来于 正则表达式处理
jsp-api 来于 页面开发
servlet-api 来于 页面开发
quartz
quartz/
任务调度
Web 打印
J2EE
x/
注:删除了 PowerWeb 的如下几个包:,,,
,
10 环境搭建
本章描述如何搭建开发和调试环境,从中也可了解未来该系统如何部署。
开发环境
1. 安装应用服务器 和数据库 Oracle9i
2. 拷贝\\Svnstore\ 01 编辑区\03 编码下的全部代码
3. 在 IDE 中将\\Svnstore\01 编辑区\03 编码\webapp\WEB-INF\lib 中的全部 jar 添加到 IDE
的 classpath 中
4. 建立数据库环境
使用 将“烟草监管基础平台数据库模型.ER1”的表导入到数据库中。(在
ErWin 中,打开物理模型,Database -> Database connection 连接数据库;Tools ->
Forward engineer,再点 generate,建立数据库环境)
使用 将“烟草监管系统数据库模型.ER1”的表导入到数据库中。
在 Oracle 的 Worksheet 中依次执行“”、“”、
“”
5. 修改工作流表的初始化数据
打开表 Enginemanagement,可见:
修改 HTTPPORT 为使用 JBoss 对应的 http port,默认为 8080
修改 IIOPPRT 为使用 JBoss 时调用 EJB 的 port,默认为 1099
调试环境
1. 将工作流的发布包解压到某一目录下,以下称[intelliFlow_home;工作流的发布包获得:
ServerStore\06 参考资料\产品版本\
2. 将 \\Svnstore\ 01 编 辑 区 \03 编 码 \ 解 压 缩 到 [JBoss_Home]\
server\default\deploy 下,会是一个 目录,这是工作流和本项目的应用已
集成好的包,结构如下(应用的全在 下)
3. 接上步,打开 ,修改 中的如下一行,将端
口改为使用 Jboss 的 HTTP port,默认是 8080。
= http://localhost:8080
4. 将修改好的 拷贝到[intelliFlow_home]\libs 下。
5. 启动 JBoss,调试应用。
如果有流程调试,启动工作流引擎,然后启动流程建模工具,定义和部署流程。引擎启
动如下
http://localhost:[port]/EngineCtrl/
应用的访问为:
http://localhost:[port]/tfm/
开发基础数据环境
包含开发所需要的组织基础数据、权限维护数据、账户类型数据、登记银
行数据、各种字典数据等,这是开发和测试的基础。
在 Oracle 的 Worksheet 中执行该文件,创建基础数据环境。
外部系统模拟环境
本系统和外部系统有大量的数据交互,在开发和测试阶段,不具备连接外部系统的条件,
通过以下模拟方法实现:
通过模拟的 Socket Server 返回通过 Socket 方式获取的外部业务系统数据。
通过独立的一个数据库模拟国家局的一级库,在该数据库中放模拟的数据,本系统
http://localhost:[port]/EngineCtrl/
http://localhost:[port]/tfm/
使用的数据库将从模拟的国家局数据库查询信息,如外省的单位信息。
通过模拟的 Socket Server 接收发送给“专卖准营证系统”的标志信息,并将该信息记
录在文件中。
附录 1: 开发软件和工具
分类 名称 作用
JDK JDK Java 虚拟机
数据库 Oracle9i 数据库管理系统
集成使用的应用服务器软件应用服务器
开发使用的应用服务器软件
UML 工具 (免安装,直接运行)
Erwin 数据库设计工具
设计软件
Visio 画框图等
Eclipse Java 程序开发
MyEclipse 创建 Hinernate mapping(一个 Eclipse 插件)
开发软件
Junit 单元测试
TOAD 数据库开发工具
代码 build 软件
辅助工具
Jasperreport 的可视化开发工具 (免安装,直接运行)
版本控制 TortoiseSVN 版本控制 (测试部门负责)
附录 2:公共资源管理
分类 目录 责任人
前台公共程序文件 css , image, js , jsp\bas, 所有配置文件 方春强
方春强
余先兵
后台公共程序文件
周怀洋
第三方包 lib 余先兵
设计\数据库设计\烟草资金监管基础平台数据库模
型.ER1
设计\数据库设计\
设计\数据库设计\
设计\数据库设计\
余先兵数据库设计模型
开发和运行基础数据
设计\数据库设计\烟草资金监管系统数据库模型.ER1 张锋
责任人负责该目录下所有文件的修改和管理,或授权其它人修改,其它人在未授权情况
下不得修改已有的文件,如果增加新的文件,需先口头沟通责任人,责任人需要检查是
否有必要放在公共区,或是否在其它文件中有重的功能。
下一个模块一个单独的目录,开发人员为责任人。
附录 3:文档变更记录
版本号# 日期 作者/修改者 备注
2006-7-14 余先兵 决定技术选型和文档目录结构
2006-8-23 余先兵,张锋 根据需求说明书,完成整个系统的架构设
计,相当于概要设计,部分该在概要设计
中完成的内容由于需求还需要明确而待解
决