《中国联通云门户流程服务项目开发及编码规范模板.doc》由会员分享,可在线阅读,更多相关《中国联通云门户流程服务项目开发及编码规范模板.doc(73页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、中国联通云门户项目步骤服务项目开发及编码规范中国联合网络通信集团2024-07-10产权说明本文件中出现任何文字叙述、文档格式、插图、照片、方法、过程等内容,任何个人、机构未经授权许可,不得复制或引用本文件任何片断,不管是经过电子形式或非电子形式。文档信息项目名称:中国联通云门户项目项目经理:肖永威文档版本号:v 1.1项目阶段:设计阶段文档版本日期:12月120日 起草人:张玉明起草日期:12月13日评审人:评审日期:评审方法:会议评审【】、邮件评审【】版本历史版本号版本日期作者说明v 1.0-12-13张玉明创建文档v 1.1-12-17张玉明修订文档,增加WS配置classpath增加步
2、骤建模复用组件配置及使用规范v 1.2-12-18张玉明增加4.5 Identifiers数据提取v 1.3-12-18张玉明、刘彦利增加 3.3.5 方法集和命名空间v 1.4-12-20张玉明增加 4.8 4.9节v 1.5-01-22张玉明增加 3.3.7节目 录1概述71.1目标71.2名词解释72功效设计72.1页面设计72.1.1页面设计通常标准72.1.2XFORM开发标准72.1.3菜单72.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项目开发工具一
3、览表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类组员变量命名223.5.2一般变量命名233.5.3类组员方法243.5.4一般方法243.6Java命名243.6.1类组员变量和一般变量243.6.2类组员方法253.6.3包命名253.7
4、数据库命名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.4.2消息删除354.4.3当地变量354.4.4子步骤364.4.5并行处理364.4.6Web Service / Method414.4.7JavaScript编码414.4.8JA
5、VA编码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中安装tomcat插件584.9开发过程中性能及故障处理634.9.1限制步骤实例中循环最大数量634.9.2MySQL主从复制Binary Log清理644.9.3Eclipse Perfor
6、mance644.9.4Cordys 自定义认证类及BCP JAR路径配置651 概述指导云步骤服务项目开发,提供设计、开发、编码参考、实施规范。1.1 目标规范项目各步骤实施、开发、编码规范,和故障处理、调优问题汇总统计。此文档会在整个项目实施过程中不停维护,保持版本更新。1.2 名词解释CordysCWSRESTBinLog2 功效设计2.1 页面设计2.1.1 页面设计通常标准2.1.2 XFORM开发标准2.1.3 菜单菜单项应该给予角色,而不是直接赋给用户2.1.4 调试能够使用fiddler、httpwatch、firebug、IE developerToolbar来对Http请求
7、及JS脚本进行调试和性能调优。2.2 数据库设计2.2.1 标准数据库设计必需符合第一范式。数据库只保留基础逻辑约束,包含以下方面:l 主键l 主子表关联外键约束属性表不添加外键约束。全部数据库设计内容表现在数据模型文档中,针对特定字段约束表现在该字段属性和注释中,需要尤其说明,能够在物理模型图中加Notes。注意:因为本项目中使用是Cordys BOP平台产品,在BOP中能够提供API来处理或能够经过查询平台系统表提取数据,标准上不要再增加新表来辅助设计和逻辑实现,以避免后期和应用耦合性过高。2.2.2 主键以单一整形或字符串类型字段做主键。2.2.3 关联当一个表经过外键引用另一个表时,往
8、往主表删除意味着相关统计删除,假如确定这里业务逻辑是正确,而且没有其它影响,能够使用“级联删除”选项来简化代码,但必需在对应数据库模型上有所表现。一样,“级联更新”也起到类似作用。2.2.4 触发器对于部分简单,基础业务无关数据操作,能够使用触发器来实现:比如生成序列号。但业务相关,复杂逻辑,则避免在触发器中实现。2.2.5 索引对于查询频度远高于修改数据表,或需要常常对查询结果排序表,创建对应索引。2.3 步骤设计2.3.1 标准以具体设计为准,模型设计摘要以下。1.创建步骤模型时修改步骤namespace,以下所表示:2.泳道颜色使用双色交替,循环使用cordys提供第1个颜色和第2个颜色
9、,3.泳道间间距1px4.泳道长度要统一5. decision描述用“.是否.”,条件描述为“是”“否”,摆放位置应在连接线起始端,水平连线上方、垂直连线右侧,偏移位移在5px以内6.当decision出口在3条或3条以上,依据实际业务情况进行描述7.活动节点间连线,水平或垂直平行时用直线,除此之外用带直角连线8. group组件上下边框应大于泳道边界1px,group描述有实际业务含义9.步骤中组件大小用default。假如文字太多(超出50字时),可依据实际情况调整10.相同组件大小在同一步骤模型中保持一致11.步骤起始位置在上方,结束位置在下方循环中驳回节点尽可能共用,以降低驳回节点个数
10、3 项目构建和编码规范本项目开发基于Cordys BOP 4.1平台进行开发。Cordys层使用SOAP WS进行服务开发,中间层使用RESTfulWS对外暴露资源和服务。REST风格WS使用Jboss Resteasy作为框架基础上进行开发,开发测试服务器使用Apache Tomcat 7.0,JDK 统一使用1.6,Eclipse需要 eclipse-jee-juno 版,并整合Cordys CoE插件作为WS开发IDE。开发数据库使用 MySQL 5.5+,推荐使用5.5.19版,生产环境使用MySQL Master/Slave模式,前端连接使用MySQL Proxy模式进行JDBC连接
11、。开发工程包DEMO中提供了Ant打包脚本,方便进行服务打包,第三方常见lib库则全部包含在EIP DEMO 工程中,请避免使用其它版本库。每个EIP服务用户端是一个Jar文件,命名为XXX_impl.jar,最新用户端jar文件以现网运行版本为准。开发工程包请向开发人员索取。3.1 项目开发工具一览表平台:Cordys BOP4.1 Cu7MySQL Server:MySQL Server Community 5.5.19Eclipse IDE:eclipse javaee juno with Cordys CoE pluginSvn plugins: Eclipse update site
12、 URL: MySQL Tools:Navicat for MySQL 10.0.11 enterprise editionWeb Contanier:Apache Tomcat v7.0Web Browser: 谷歌 Chrome 最新版,Mozilla Firefox,IE 8 +,推荐使用Chrome浏览器进行开发。SSH用户端:Xmanager 3.0 +,SecureCRT 7.0,推荐使用XME 3.0,能够直接使用图形界面,FTP用户端:Xftp,FilezillaXML格式化工具:foxe(XML 格式化工具)、XPathVisualizer 1.3.0文本编辑工具:Notep
13、ad+ 6.223.2 开发资源及服务器信息3.2.1 SVN服务器1、项目开发服务器地址::8443/svn/cloudbpm项目开发人员帐号,联络配置管理员获取。开发服务器管理员帐号:远程桌面:adminstrator 密码:联络相关人员IP:10.64.6.98SVN用户端需使用TortoiseSVN 1.7.*2、企业SVN服务器: 项目根路径:注意:本节以下所述SVN地址均相对此项目SVN根路径 开发工程SVN地址: Cordys中CWS创建项目工程时绑定SVN地址:00Developing/02code/cloudbpm/trunk/projects/bpm-cordys-cws-
14、all Cordys中CWS中创建Java代码在Eclipse中编辑时,需下载Eclipse工程,下载地址:00Developing/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地址:00Develo
15、ping/02code/cloudbpm/trunk/project/bpm-sdk-java 项目php版本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/cloudbp
16、m/trunk/projects/bpm-cordys-cws-all/rest-ws/Java/Java Archives/hp-eip-lib 开发工具下载地址00Developing/02code/cloudbpm/trunk/tools 版本标签创建地址00Developing/02code/cloudbpm/tags/ 注意:各模块在模块目录下创建版本标签 个人目录地址:00Developing/04personal每人文件夹下有三个文件夹 依据天天任务,将对应结果放到这三个文件夹里天天全部得将当日结果放入文件夹中提交,并在svn备注中写明当日提交是什么,多少个功效点3.2.2 Co
17、rdys BOP4 开发服务器CordysBOP4:服务器访问地址 位置:黑龙江集成企业按开发人员建立租户,在各自租户下进行开发开放服务: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集团服务器:访问
18、地址位置:集团按开发人员建立租户,在各自租户下进行开发3.3 Cordys BOP平台3.3.1 测试环境租户建立规范EIP云门户端是按省分分配应用ID。EIP云门户中EIP应用ID、EIP租户ID和Cordys步骤平台中CARS租户对应规则为:EIP应用ID-EIP租户ID=CARS租户ID因为Cordys中租户为LDAPDN格式,所以CARS租户ID对应CARS租户DN为:cn=zhangym195,cn=organizational users,o=CARS租户ID,cn=cordys,cn=defaultInst,o=比如:EIP中某XX系统应用ID为na999,某YY租户ID为hl3
19、28,其对应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 as part of the quali
20、fied 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 to skip the reversed
21、 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后,目录结构以下iii. 其它开发人员能够按此
22、格式在CWS中建立项目,使用3.2.1节svn服务器中Cordys中CWS创建项目工程时绑定SVN地址提供地址对项目进行检出,然后再当地开发iv.其中:l rest-ws为工作空间中项目名称,通常一个服务分类独立一个项目Business Process Model为步骤模型(business process models 和 case management models)目录,此目录下面通常以步骤级联目录进行命名,此目录不会布署到步骤模型名称路径中。采取 Set Start Point of Qualified Name,将此目录下级目录作为命名起始位置。l DB Metadata为数据库元数
23、据目录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 Java Archive Definitio
24、n; 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, you must include a
25、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目录为HTM(L)页面文件、Javasc
26、ript文件、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 published to the Cordys XML
27、 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 some Java archive.You ne
28、ed 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 CWS项目项目开发注意假如项目按每租户每开发人员模式
29、进行BOP4项目开发话,提醒各位基于SVNCWS开发人员,在修改代码前一定要先检出代码,修改后再提交到SVN假如想将项目保留到自己服务器Workspace下面使用 3.3.4 备份策略3.3.5 方法集和命名空间3.3.5.1 WS命名空间说明JAVA代码命名定义格式:http:/ 企业域名 / 项目编号 / 模块名 企业域名:.cn项目编号:bpm模块名:见下表模块名编号对应操作接口描述步骤实施ProcessExecute1. 提议步骤2.列举出全部步骤实施类操作待办处理PendingOperate1. 任务认领2. 工作移交3. 委派列表出全部统一待办待阅、应用待办待阅及Cordys平台任
30、务相关处理操作步骤定义ProcessDefine1. 查看步骤2. 获取步骤步骤3. 获取步骤实施人4.列举出包含步骤定义类操作,如获取目前用户下全部步骤名称,获取目前步骤步骤,获取目前步骤后续步骤等等。步骤管理ProcessMgmt1. 获取步骤实例2. 查看步骤历史步骤管理相关全部操作组织管理OrgMgmt1. 用户查询2. 用户同时包含和4A相关组织用户同时及用户、角色、等组织信息查询操作,经过封装4A提供REST服务接口,开发同时WS来实现。应用开户AppRegister1. 建立租户2. 建立系统资源(建立SG、SC、CLASSPATH)3. 分配数据库资源4. 分配用户5.包含应用
31、开户步骤模型BpmModel1. 车辆(Vehicle)2. 会议(Meeting)3. 档案(Archive)命名示例:如【步骤实施】模块下面开启步骤操作命名空间以下http:/ .cn /bpm / ProcessExecuteJAVA包命名方法:com.cuc.bpm.processexecute3.3.5.2 步骤模型命名空间说明步骤模型NS定义格式:http:/ 企业域名 / 项目编号 / BpmModel/ APPID 企业域名:.cn项目编号:bpmAPPID:应用开发时EIP中申请APPID。3.3.5.3 JAR包命名规范1、 JAVA包命名bpm-模块名-版本号.jar2、
32、 提供给第三方REST接口SDK命名bpm-模块名-interface-版本号.jar3.3.5.4 REST接口URI命名说明http:/EIP布署服务主机:端口/bpm/rest/模块名/服务操作/参数1/参数2示例::8080/bpm/rest/ ProcessExecute /workflowBackOne/appId/appToken/controlUserId/processInstanceId/track_id3.3.6 方法命名方法为 Get%BUSINESS_ENTITIY%Object (返回0-1个tuple)Get%BUSINESS_ENTITIY%Objects (返
33、回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后以功效进行命名。 如 GetChangeObjectsByDFGetAnnualPlanObjectsByPlanID_and_PlanTypeGetAnnualPlanOb
34、jectsFiltermethod命名基础上遵照两点 1.系统默认生成规则: Object表示返回单个tuple,Objects表示返回多个tuple 2.自定义规则:By后面是条件,DF表示动态查询 这里PARAM之间之所以用下划线连接,是因为数据库字段有时候可能全部大写,无法断词。3.3.7 JAVA类注释1.方法注释:项目中方法注释按以下模板生成。生成成后效果,图所表示:配置方法:在Eclipse中按以下方法打开菜单:windows - preferences:找到Java Code Template右侧 “Configute generated code and comments”:区
35、中点击 “Metods”,然后Edit此模板,将下面内容/*MethodName:$enclosing_method*Description:$todo*author$user*$tags$return_type*throws*/表 - Eclipse模板配置粘贴后,图示:保留即可。生成模板注释后以下所表示:/* * * Method Name: startProcess * Description: 依据传输步骤特定消息来开启步骤并返回步骤实例ID * author yuming * param type 类型 definition * param receiver 步骤图名称(全路径) *
36、 param messages 步骤流转消息(XML Node) * param source 可选参数 * return String Instance_Id * throws * IllegalArgumentException 参数错误 * throws * SOAPException 实施异常,步骤开启失败 */2.3.4 编程公共命名进行面向对象设计,考察方法本身是否为类职责。3.4.1 类命名WS-AppServer依据后台数据库表对象或Object自动生成Class,以系统默认命名为准;其它自定义类命名方法为 名词名词中各个单词第一个字母大写如:OaObject或动词+名词动词第
37、一个字母小写,名词中各个单词第一个字母大写getOaObject3.5 Javascript命名3.5.1 类组员变量命名命名方法为 _名词+名词如 _password_userName首字母小写,如包含多个名词后面名词首字母大写。组员变量全部应该被封装,不能被外部直接访问。采取“_”前缀,同时提供getter/setter方法。3.5.2 一般变量命名非对象类型变量命名方法为 %TYPE%名词+名词如 sTypeiIndexgiIndex%TYPE%为变量类型(即使Javascript没有类型概念,不过从代码可读性和校验方便性考虑还是应该添加),包含以下取值: i: int gi: gloa
38、ble int variable s: String 对象类型变量命名方法为 名词+名词%OBJECT_TYPE%如 employeeNodeorderArray%OBJECT_TYPE%为对象类型,包含以下取值: NodeArray其它 全部没有类型前缀变量全部是“对象”,以后缀表示它是哪种“对象”。有多个名词时采取Camel格式,也即各名词首字母大写。3.5.3 类组员方法命名方法为 function _动词+名词+名词(参数列表也即一般变量列表)如 function getUser(sCode)需要考虑是否对外部公开 公开则无“_”前缀 不公开则有“_”前缀 实例方法经过prototyp
39、e定义,静态方法直接定义。 如 Date.prototype.toCordysString=function()Date.fromCordysString=function(sDateTime)3.5.4 一般方法和类组员方法唯一区分是不需要考虑外部可见性。3.6 Java命名3.6.1 类组员变量和一般变量命名方法为 名词+名词如 PassWordUserName首字母小写,如包含多个名词后面名词首字母大写。组员变量全部应该被封装,不能被外部直接访问。采取private修饰符,同时提供getter/setter方法。3.6.2 类组员方法命名方法为 %可见性% %返回类型% 动词+名词+名词
40、(参数列表也即一般变量列表)动词第一个字母小写,名词中各个单词第一个字母大写如 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_*假如表明超长,测应用名称缩写比如REPAIRREPORT_*缩写为RR_*3.7.2 主键命名命名方法为 P
41、K_表名如 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 函数命名命名方法为 F_动词_名词如 OA_F_CALCULATE_USER_NUMBER全部大写。 3.7.
42、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进行较高层次
43、业务建模,而使用WS-AppServer构建细粒度功效或事务逻辑假如性能是业务逻辑瓶颈,应尽可能采取WS-AppServer实现尽可能简化用户端(Javascript in Xform)实现代码,而选择后面多个方法把实现封装在SOAP method中(其实就是统一后台调用接口)尽可能少使用Store Procedure,因为它特定数据库依靠性太强,而且无法实现标准tuple old/new接口不管是不太包含业务对象、简单轻量级业务逻辑,比如拼接日期、格式化字符串或进行数学运算等,还是较为复杂业务逻辑,比如需要从数据库中取得相关业务对象信息进行比较复杂组装,应使用WS-AppServer;对于和SAP系统集成,使用SAP Connector依据逻辑复杂性和要实现目标不一样,分情况处理:1.假如某项功效仅实现单个业务实体增删改查(包含以一张表为主体,但包含多表关联查询),同时该实体改变又不至于扩散(扩散例子:删除订单还要同时修改对应计划状态),那么就能够由SQL in WS-AppServer Method实现。2.假如某项功效需要复杂逻辑处理,这些处理能够由系统完成,或对业务实体增删改影响到了其它实体(改变扩散),由WS-AppServer实现。3.假如某项功效需要多个不一样用户合作才