《中国联通云门户-流程服务项目-开发及编码规范.doc》由会员分享,可在线阅读,更多相关《中国联通云门户-流程服务项目-开发及编码规范.doc(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流中国联通云门户-流程服务项目-开发及编码规范.精品文档.中国联通云门户项目流程服务项目开发及编码规范中国联合网络通信集团有限公司2022-05-24产权说明本文件中出现的任何文字叙述、文档格式、插图、照片、方法、过程等内容,任何个人、机构未经授权许可,不得复制或引用本文件的任何片断,无论是通过电子形式或非电子形式。文档信息项目名称:中国联通云门户项目项目经理:肖永威文档版本号:v 1.1项目阶段:设计阶段文档版本日期:2012年12月120日 起草人:张玉明起草日期:2012年12月13日评审人:评审日期:评审方式:会议评审【】、邮件评审【】
2、版本历史版本号版本日期作者说明v 1.02012-12-13张玉明创建文档v 1.12012-12-17张玉明修订文档,增加WS配置classpath增加流程建模复用组件配置及使用规范v 1.22012-12-18张玉明增加4.5 Identifiers数据提取v 1.32012-12-18张玉明、刘彦利增加 3.3.5 方法集和命名空间v 1.42012-12-20张玉明增加 4.8 4.9节v 1.52013-01-22张玉明增加 3.3.7节目 录1概述71.1目标71.2名词解释72功能设计72.1页面设计72.1.1页面设计一般原则72.1.2XFORM开发原则72.1.3菜单72.
3、1.4调试72.2数据库设计82.2.1原则82.2.2主键82.2.3关联82.2.4触发器82.2.5索引92.3流程设计92.3.1原则93项目构建与编码规范103.1项目开发工具一览表103.2开发资源及服务器信息113.2.1SVN服务器113.2.2Cordys BOP4 开发服务器123.3Cordys BOP平台133.3.1测试环境租户建立规范133.3.2CWS项目构建方案133.3.3CWS项目项目开发注意193.3.4备份策略193.3.5方法集和命名空间193.3.6方法213.4编程公共命名223.4.1类命名223.5Javascript命名223.5.1类成员变
4、量命名223.5.2普通变量命名233.5.3类成员方法243.5.4普通方法243.6Java命名243.6.1类成员变量与普通变量243.6.2类成员方法253.6.3包命名253.7数据库命名253.7.1表和字段命名253.7.2主键命名253.7.3外键命名263.7.4视图命名263.7.5序列命名263.7.6存储过程命名263.7.7函数命名273.7.8触发器命名274技术实现274.1业务逻辑实现方案选择274.2页面284.3BPM324.3.1流程松耦合性324.3.2流程事务性334.3.3流程建模复用组件配置及使用规范344.4消息映射344.4.1消息结构344.
5、4.2消息删除354.4.3本地变量354.4.4子流程364.4.5并行处理364.4.6Web Service / Method414.4.7JavaScript编码414.4.8JAVA编码424.4.9数据库连接474.4.10数据库连接474.5Identifiers数据提取474.6调试与测试484.6.1调试484.6.2Webgateway484.6.3WS-AppServer调试494.6.4NOM内存泄漏检测与调试494.7单元测试494.8开发工具整合494.8.1Subclipse SVN插件安装494.8.2Cordys CoE 插件584.8.3eclipse中安装
6、tomcat插件584.9开发过程中性能及故障处理634.9.1限制流程实例中循环的最大数量634.9.2MySQL主从复制Binary Log清理644.9.3Eclipse Performance644.9.4Cordys 自定义认证类及BCP JAR路径配置651 概述指导云流程服务项目开发,提供设计、开发、编码的参考、执行规范。1.1 目标规范项目各环节实施、开发、编码规范,以及故障处理、调优问题汇总记录。此文档会在整个项目实施过程中不断维护,保持版本更新。1.2 名词解释CordysCWSRESTBinLog2 功能设计2.1 页面设计2.1.1 页面设计一般原则2.1.2 XFOR
7、M开发原则2.1.3 菜单菜单项应当赋予角色,而不是直接赋给用户2.1.4 调试可以使用fiddler、httpwatch、firebug、IE developerToolbar来对Http请求及JS脚本进行调试和性能调优。2.2 数据库设计2.2.1 原则数据库设计必须符合第一范式。数据库只保留基本逻辑约束,包括以下方面:l 主键l 主子表关联外键约束属性表不添加外键约束。所有数据库设计的内容体现在数据模型文档中,针对特定字段的约束体现在该字段的属性和注释中,需要特别说明的,可以在物理模型图中加Notes。注意:由于本项目中使用的是Cordys BOP平台产品,在BOP中能够提供API来解决
8、的或者可以通过查询平台系统表提取数据的,原则上不要再增加新表来辅助设计和逻辑实现,以避免后期与应用耦合性过高。2.2.2 主键以单一整形或字符串类型字段做主键。2.2.3 关联当一个表通过外键引用另一个表时,往往主表的删除意味着相关记录的删除,如果确认这里的业务逻辑是正确的,而且没有其他的影响,可以使用“级联删除”选项来简化代码,但必须在相应的数据库模型上有所体现。同样的,“级联更新”也起到类似的作用。2.2.4 触发器对于一些简单的,基本业务无关的数据操作,可以使用触发器来实现:比如生成序列号。但业务相关的,复杂的逻辑,则避免在触发器中实现。2.2.5 索引对于查询频度远高于修改的数据表,或
9、者需要经常对查询结果排序的表,创建相应的索引。2.3 流程设计2.3.1 原则以详细设计为准,模型设计摘要如下。1.创建流程模型时修改流程的namespace,如下所示:2.泳道颜色使用双色交替,循环使用cordys提供的第1个颜色和第2个颜色,3.泳道间的间距1px4.泳道的长度要统一5. decision的描述用“.是否.”,条件描述为“是”“否”,摆放位置应在连接线的起始端,水平连线上方、垂直连线右侧,偏移位移在5px以内6.当decision的出口在3条或3条以上,根据实际业务情况进行描述7.活动节点间的连线,水平或垂直平行时用直线,除此之外用带直角的连线8. group组件上下边框应
10、大于泳道边界1px,group的描述有实际的业务含义9.流程中的组件大小用default。如果文字太多(超过50字时),可根据实际情况调整10.相同组件的大小在同一流程模型中保持一致11.流程的起始位置在上方,结束位置在下方循环中驳回节点尽可能共用,以减少驳回节点个数3 项目构建与编码规范本项目开发基于Cordys BOP 4.1平台进行开发。Cordys层使用SOAP WS进行服务开发,中间层使用RESTful的WS对外暴露资源和服务。REST风格的WS使用Jboss Resteasy作为框架的基础上进行开发,开发测试服务器使用Apache Tomcat 7.0,JDK 统一使用1.6,Ec
11、lipse需要 eclipse-jee-juno 版,并整合Cordys CoE插件作为WS开发IDE。开发数据库使用 MySQL 5.5+,推荐使用5.5.19版,生产环境使用MySQL Master/Slave模式,前端连接使用MySQL Proxy模式进行JDBC连接。开发工程包DEMO中提供了Ant打包脚本,方便进行服务打包,第三方常用的lib库则都包含在EIP DEMO 工程中,请避免使用其他版本的库。每个EIP服务的客户端是一个Jar文件,命名为XXX_impl.jar,最新的客户端jar文件以现网运行的版本为准。开发工程包请向开发人员索取。3.1 项目开发工具一览表平台:Cord
12、ys BOP4.1 Cu7MySQL Server:MySQL Server Community 5.5.19Eclipse IDE:eclipse javaee juno with Cordys CoE pluginSvn plugins: Eclipse update site URL: http:/subclipse.tigris.org/update_1.8.xMySQL Tools:Navicat for MySQL 10.0.11 enterprise editionWeb Contanier:Apache Tomcat v7.0Web Browser: Google Chrome
13、 最新版,Mozilla Firefox,IE 8 +,推荐使用Chrome浏览器进行开发。SSH客户端:Xmanager 3.0 +,SecureCRT 7.0,推荐使用XME 3.0,可以直接使用图形界面,FTP客户端:Xftp,FilezillaXML格式化工具:foxe(XML 格式化工具)、XPathVisualizer 1.3.0文本编辑工具:Notepad+ 6.223.2 开发资源及服务器信息3.2.1 SVN服务器1、项目开发服务器地址:https:/10.64.6.98:8443/svn/cloudbpm项目开发人员帐号,联系配置管理员获取。开发服务器管理员帐号:远程桌面:
14、adminstrator 密码:联系相关人员IP:10.64.6.98SVN客户端需使用TortoiseSVN 1.7.*2、公司SVN服务器: 项目根路径:http:/10.64.8.160/svn/20121123/YMHLCFW/注意:本节以下所述SVN地址均相对此项目SVN根路径 开发工程SVN地址: Cordys中CWS创建项目工程时绑定的SVN地址:00Developing/02code/cloudbpm/trunk/projects/bpm-cordys-cws-all Cordys中CWS中创建的Java代码在Eclipse中编辑时,需下载Eclipse工程,下载地址:00De
15、veloping/02code/cloudbpm/trunk/project/bpm-cws-java 项目基础类库开发的Eclipse工程SVN地址:00Developing/02code/cloudbpm/trunk/project/bpm-common 项目REST服务开发的Eclipse工程SVN地址:00Developing/02code/cloudbpm/trunk/project/bpm-rest 项目java版本SDK开发的Eclipse工程SVN地址:00Developing/02code/cloudbpm/trunk/project/bpm-sdk-java 项目php版本
16、SDK开发的工程SVN地址:00Developing/02code/cloudbpm/trunk/project/bpm-sdk-php 类库Jar包发布地址 项目基础类库编译后jar包发布的SVN地址:00Developing/02code/cloudbpm/trunk/projects/bpm-cordys-cws-all/rest-ws/Java/Java Archives/bpm-lib 第三方厂商-HP提供的类库发布的SVN地址:00Developing/02code/cloudbpm/trunk/projects/bpm-cordys-cws-all/rest-ws/Java/Ja
17、va Archives/hp-eip-lib 开发工具下载地址00Developing/02code/cloudbpm/trunk/tools 版本标签创建地址00Developing/02code/cloudbpm/tags/ 注意:各模块在模块目录下创建版本标签 个人目录地址:00Developing/04personal每人的文件夹下有三个文件夹 根据每天的任务,将相应的成果放到这三个文件夹里每天都得将当天成果放入文件夹中提交,并在svn备注中写明当天提交的是什么,多少个功能点3.2.2 Cordys BOP4 开发服务器CordysBOP4:服务器访问地址http:/10.64.8.1
18、49/cordys/ 位置:黑龙江集成公司按开发人员建立租户,在各自的租户下进行开发开放服务:SSH FTPMySQL数据库: 数据库名:eipdb 数据库地址:10.64.8.149端口:3306 用户名:eip_app1 密码:TrueTomcat Server: 地址:10.64.8.149 端口:8080管理用户:admin / admin webappRoot:/usr/local/tomcat-7.0.33/webappsFTP用户ftp:/10.64.8.149用户:ftpuser密码:ftpTrueCordys Bop集团服务器:访问地址http:/10.0.3.157/cor
19、dys/位置:集团按开发人员建立租户,在各自的租户下进行开发3.3 Cordys BOP平台3.3.1 测试环境租户建立规范EIP云门户端是按省分分配的应用ID。EIP云门户中的EIP应用ID、EIP租户ID与Cordys流程平台中的CARS租户的对应规则为:EIP应用ID-EIP租户ID=CARS租户ID由于Cordys中租户为LDAP的DN格式,所以CARS租户ID对应的CARS租户DN为:cn=zhangym195,cn=organizational users,o=CARS租户ID,cn=cordys,cn=defaultInst,o=例如:EIP中的某XX系统的应用ID为na999,
20、某YY的租户ID为hl328,其对应的Cordys中的租户ID为hl328-na999,对应的Cordys中的租户DN为:cn=zhangym195,cn=organizational users,o=hl328-na999,cn=cordys,cn=defaultInst,o=3.3.2 CWS项目构建方案集成平台的各个基础通用组件分别建立独立的workspace主要包括:统一用户管理,附件和报表,日志模块,工作台其他应用功能在一个workspace中分别建立独立的project。Is the reversed domain name really required to be used a
21、s part of the qualified name?It is strongly recommended, because this prevents name collisions with content from another software vendor. Product uniqueness within your domain, is at your own responsibility.In case, you are the one and only consumer of the developed application, you could consider t
22、o skip the reversed domain name part of the folder structure and hence from the qualified name. Disadvantage is that you could get name collisions in future.svn目录结构如下:i. tags、branches和trunck是SVN标准结构,trunck下面workspaces是工作空间窗口,bpmservices为本项目工作空间,rest-ws是REST服务开发的项目,还可以按以后规划建立其他项目ii. 以上SVN内容在导出到CWS后,目
23、录结构如下iii. 其他开发人员可以按此格式在CWS中建立项目,使用3.2.1节svn服务器中Cordys中CWS创建项目工程时绑定的SVN地址提供的地址对项目进行检出,然后再本地开发其中:l rest-ws为工作空间中的项目名称,一般一个服务分类独立一个项目Business Process Model为流程模型(business process models 和 case management models)目录,此目录下面一般以流程级联目录进行命名,此目录不会部署到流程模型的名称路径中。采用Set Start Point of Qualified Name,将此目录下级目录作为命名起始位置
24、。l DB Metadata为数据库元数据目录l Java目录下面包含Java archives 和 Java sources目录,Application packages can contain Java Archives (JARs, for short) that include Java classes developed as part of the application, or JARs from external providers (so called third party JARS). In the former case, you need to define a Ja
25、va Archive Definition; detailed instructions on this can be found in this webinar. In the latter case, there are two options:the required JAR is available itself and can therefore be delivered as part of the developed application;the required JAR is delivered by another application.In the last case,
26、 you must include a file path dependency. Note that in this scenario, the developed application can be deployed without the required Java Archive being available on the production environment.l Roles为角色目录l Rules为规则目录l User Interfaces为用户界面文件目录,包括user interfaces 和 external user interfacesl Web content
27、目录为HTM(L)页面文件、Javascript文件、CSS样式表、图片、图标等目录文件。这个目录要求定义一个Web Library Definition。此目录中的文件将部署到Cordys Web Server目录。l XML Store content 所有有效的XML结构能够发布到CordysXML Store中。典型地,它将用于不会存储在数据库或在文件系统中的属性和设置文件这个目录要求定义一个 XML Store Definition以使部署文档到Cordys XML StoreAll documents having a valid XML structure can be publ
28、ished to the Cordys XML Store. Typically, it will be used to store properties and settings that will not be stored in a database or on the file system. Not all documents with extension xml need to be published to the Cordys XML Store. For example, message bundles end at xml but needs to be part of s
29、ome Java archive.You need to define a XML Store Definition to deploy documents to the Cordys XML Store. More explanation and detailed instructions you can find at this webinar.l Web Services 开发的Web 服务目录l Web WsAppServer Packages 目录为根据DB Metadata生成成的package目录l XMLSchema Definitions为XMLSchema目录3.3.3 C
30、WS项目项目开发注意如果项目按每租户每开发人员模式进行BOP4项目开发的话,提醒各位基于SVN的CWS开发人员,在修改代码前一定要先检出代码,修改后再提交到SVN如果想将项目保存到自己的服务器Workspace下面使用 3.3.4 备份策略3.3.5 方法集和命名空间3.3.5.1 WS命名空间说明JAVA代码命名定义格式:http:/ 公司域名 / 项目编号 / 模块名 公司域名:项目编号:bpm模块名:见下表模块名编号对应操作接口描述流程执行ProcessExecute1. 发起流程2.列举出所有流程执行类的操作待办处理PendingOperate1. 任务认领2. 工作移交3. 委派列表
31、出所有统一待办待阅、应用待办待阅及Cordys平台任务相关的处理操作流程定义ProcessDefine1. 查看流程2. 获取流程环节3. 获取流程执行人4.列举出涉及流程定义类的操作,如获取当前用户下所有流程名称,获取当前流程环节,获取当前环节的后续环节等等。流程管理ProcessMgmt1. 获取流程实例2. 查看流程历史流程管理相关的所有操作组织管理OrgMgmt1. 用户查询2. 用户同步涉及与4A相关的组织用户同步及用户、角色、等组织信息查询操作,通过封装4A提供的REST服务接口,开发同步WS来实现。应用开户AppRegister1. 建立租户2. 建立系统资源(建立SG、SC、C
32、LASSPATH)3. 分配数据库资源4. 分配用户5.涉及应用开户流程模型BpmModel1. 车辆(Vehicle)2. 会议(Meeting)3. 档案(Archive)命名示例:如【流程执行】模块下面的启动流程操作命名空间如下http:/ /bpm / ProcessExecuteJAVA包命名方式:com.cuc.bpm.processexecute3.3.5.2 流程模型命名空间说明流程模型NS定义格式:http:/ 公司域名 / 项目编号 / BpmModel/ APPID 公司域名:项目编号:bpmAPPID:应用开发时EIP中申请的APPID。3.3.5.3 JAR包命名规范
33、1、 JAVA包命名bpm-模块名-版本号.jar2、 提供给第三方REST接口SDK命名bpm-模块名-interface-版本号.jar3.3.5.4 REST接口URI命名说明http:/EIP部署服务主机:端口/bpm/rest/模块名/服务操作/参数1/参数2示例:http:/10.0.0.99:8080/bpm/rest/ ProcessExecute /workflowBackOne/appId/appToken/controlUserId/processInstanceId/track_id3.3.6 方法命名方式为 Get%BUSINESS_ENTITIY%Object (返
34、回0-1个tuple)Get%BUSINESS_ENTITIY%Objects (返回0-n个tuple)Get%BUSINESS_ENTITIY%Object/ObjectsBy%PARAM1%_and_%PARARM2% (固定参数查询)Get%BUSINESS_ENTITIY%ObjectsByDF (动态查询)Get%BUSINESS_ENTITIY%Object/ObjectsBy%PARAM1%_and_%PARARM2%_and_DF (固定参数+DF查询)参数较多时,可考虑在object后以功能进行命名。 如 GetChangeObjectsByDFGetAnnualPlanO
35、bjectsByPlanID_and_PlanTypeGetAnnualPlanObjectsFiltermethod的命名基本上遵循两点 1.系统默认生成的规则: Object表示返回单个tuple,Objects表示返回多个tuple 2.自定义规则:By后面是条件,DF表示动态查询 这里PARAM之间之所以用下划线连接,是因为数据库字段有时候可能全部大写,无法断词。3.3.7 JAVA类注释1.方法注释:项目中的方法注释按以下模板生成。生成成后效果,如图所示:配置方法:在Eclipse中按以下方式打开菜单:windows - preferences:找到Java Code Templat
36、e右侧 “Configute generated code and comments”:区中点击 “Metods”,然后Edit此模板,将下面内容/*MethodName:$enclosing_method*Description:$todo*author$user*$tags$return_type*throws*/表 - Eclipse的模板配置粘贴后,如图示:保存即可。生成的模板注释后如下所示:/* * * Method Name: startProcess * Description: 根据传递的流程特定消息来启动流程并返回流程实例ID * author yuming * param
37、type 类型 definition * param receiver 流程图名称(全路径) * param messages 流程流转消息(XML Node) * param source 可选参数 * return String Instance_Id * throws * IllegalArgumentException 参数错误 * throws * SOAPException 执行异常,流程启动失败 */2.3.4 编程公共命名进行面向对象的设计,考察方法本身是否为类的职责。3.4.1 类命名WS-AppServer依据后台数据库表对象或Object自动生成的Class,以系统默认命
38、名为准;其他自定义类命名方式为 名词名词中各个单词的第一个字母大写如:OaObject或动词+名词动词第一个字母小写,名词中各个单词的第一个字母大写getOaObject3.5 Javascript命名3.5.1 类成员变量命名命名方式为 _名词+名词如 _password_userName首字母小写,如包含多个名词后面名词首字母大写。成员变量都应当被封装,不能被外部直接访问。采用“_”前缀,同时提供getter/setter方法。3.5.2 普通变量命名非对象类型变量命名方式为 %TYPE%名词+名词如 sTypeiIndexgiIndex%TYPE%为变量类型(虽然Javascript没有
39、类型的概念,但是从代码可读性和校验方便性考虑还是应当添加),包括以下取值: i: int gi: gloable int variable s: String 对象类型变量命名方式为 名词+名词%OBJECT_TYPE%如 employeeNodeorderArray%OBJECT_TYPE%为对象类型,包括以下取值: NodeArray其它 所有无类型前缀的变量都是“对象”,而后缀表示它是哪种“对象”。有多个名词时采用Camel格式,也即各名词首字母大写。3.5.3 类成员方法命名方式为 function _动词+名词+名词(参数列表也即普通变量列表)如 function getUser(s
40、Code)需要考虑是否对外部公开 公开则无“_”前缀 不公开则有“_”前缀 实例方法通过prototype定义,静态方法直接定义。 如 Date.prototype.toCordysString=function()Date.fromCordysString=function(sDateTime)3.5.4 普通方法与类成员方法的唯一区别是不需要考虑外部可见性。3.6 Java命名3.6.1 类成员变量与普通变量命名方式为 名词+名词如 PassWordUserName首字母小写,如包含多个名词后面名词首字母大写。成员变量都应当被封装,不能被外部直接访问。采用private修饰符,同时提供ge
41、tter/setter方法。3.6.2 类成员方法命名方式为 %可见性% %返回类型% 动词+名词+名词(参数列表也即普通变量列表)动词第一个字母小写,名词中各个单词的第一个字母大写如 private String generateReport(int employeeIndex)3.6.3 包命名命名方式为 com.unicom. %MODULE%如 com.unicom.bpmsi注意保持WS-AppServer Repository中的package和java中的一致3.7 数据库命名3.7.1 表和字段命名对于Oracle,、表名全部大写,根据应用的不同用下划线分隔 如 OA_*HR_
42、*如果表明超长,测应用名称缩写比如REPAIRREPORT_*缩写为RR_*3.7.2 主键命名命名方式为 PK_表名如 PK_EMPLOYEE全部大写。 3.7.3 外键命名命名方式为 FK_表名_被引用表名如 FK_EMPLOYEE_DETAIL_EMPLOYEE全部大写。 3.7.4 视图命名命名方式为 VW_表名_表名如 OA_VW_EMPLOYEE_USER_INFO全部大写。 3.7.5 序列命名命名方式为 SEQ_表名如 OA_SEQ_EMPLOYEE全部大写。 3.7.6 存储过程命名命名方式为 S_动词_名词如 OA_S_UPDATE_EMPLOYEE全部大写。 3.7.7
43、函数命名命名方式为 F_动词_名词如 OA_F_CALCULATE_USER_NUMBER全部大写。 3.7.8 触发器命名命名方式为 DT_动词_名词如 OA_DT_GENERATE_USER_ID全部大写。4 技术实现4.1 业务逻辑实现方案选择本项目中的业务逻辑可以通过以下几种方式实现:Javascript in XForm, WS-AppServer, BPM, SQL in WS-AppServer Web Service (method), SAP Connector, Scheduler和Store Procedure。一般的指导原则是:考虑企业内部原有和目标业务流程规范性、业务流程操作习惯和项目执行力度是否采用BPM进行技术实现取决于是否可以或需要增加业务的可见性尽量使用BPM进行较高层次的业务建模,而使用WS-AppServer构建细粒度的功能或事务逻辑如果性能是业务逻辑的瓶颈,应尽量采用WS-AppServer实现尽量简化客户端(Javascript in Xform)的实现代码,而选择后面的几种方式把实现封装在SOAP method中(其实就是统一的后台调用接口)尽量少使用Store Procedure,因为它特定数据库的依赖性太强,而且无法实现标准的tuple old/new接口无论是不太涉及业务对象、简单轻量级的业务逻辑,比如拼接日期、