广东移动新系统技术记录.docx
- 文档编号:7394380
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:27
- 大小:1.24MB
广东移动新系统技术记录.docx
《广东移动新系统技术记录.docx》由会员分享,可在线阅读,更多相关《广东移动新系统技术记录.docx(27页珍藏版)》请在冰点文库上搜索。
新CRM技术笔记
1.部署新系统
1.1.准备
Ø源代码
贵州版本:
http:
//10.3.3.233/svn/products/openboss/newcrm_gz
Ø拷贝.classpath、.project两个文件至工程根目录;
Ø创建目录html\WEB-INF\lib;将newcrm_gz\lib下各个子目录中的jar拷贝至html\WEB-INF\lib;
Ø把defaults.xml拷贝至config/system/service/defaults.xml;
ØTNS准备
##贵州CRM测试库base/base#123
GZCRM225_TEST=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=10.3.3.225)(PORT=1521))
)
(CONNECT_DATA=
(SERVICE_NAME=gzcrm)
)
)
1.2.导入Eclipse
Øimport
Ø选择exitsingprojectsintoworkspace
Ø选中工程右键进入configbuildpath
Ølibraries中检查jre设置是否正确,建议这里设置为1.6或1.6以上
Øjavacompiler中Compilercompliancelevel设置为1.6
1.3.编译
Øproject->buildproject或者clean
Ø编译之后工程存在error,不要紧,只要不是致命的导致整个工程未全编的error可忽略
1.4.设置tomcat设置
Øwindow->preferences->tomcat选择version6.x
Øwindow->preferences->tomcat->JVMSettings,jre选择1.6
Ø设置启动内存:
-Xms256m-Xmx512m-Xss16M-XX:
MaxPermSize=512m
Øtomcat下面外链工程:
参考server.xml修改tomcat\conf下的server.xml
/ProgramFiles/workspace/ainbs2/html" 指向你的源代码下的HTML 1.5.启动验证 地址: http: //localhost: 8080/newcrm 登录用户名/密码: 9996026/password1 1.6.参考 提示信息管理、申告单类型配置、用户备注变更、密码重置、担保信息变更、预占号码释放 2.常用表 2.1.操作员 selectt.*,t.rowidfromsec.sec_operatortwhereoperator_idin(9996026,85300159,95550702,95550001,95550700,95550000,95550004); 非超级管理员查询 selectt.*,t.rowidfromsec.sec_operatortwherepassword='7c6a180b36896a0a8c02787eeafb0e4c'and(is_adminisnulloris_admin! ='Y'); 2.2.用户号码表 selectt.*,t.rowidfromso1.ins_user_853twhereSTATE=1andbill_idin('18334055272','18334000745','18334055705','18334005232'); 其中so1表示一个分中心,853代表地市,地市位于so1分中心下。 2.3.分中心配置 分中心即把数据库按中心来划分,来减轻需要频繁访问数据库的压力(如营业库、帐管库)。 selectt.*,t.rowidfrombase.bs_districttwheret.district_type_id=2t.district_id>=930andt.district_id<=936; selectt.*,t.rowidfrombase.bs_districttwheret.region_id=931; 该配置将地市和分中心映射起来。 2.4.分表配置 selectt.*,t.rowidfrombase.cfg_table_splitt; selectt.*,t.rowidfrombase.cfg_table_split_mappingt; 首页的客户信息TAB是通过数据库配置而来,使用了动态表单技术。 2.5.首页客户信息配置 selectt.*,t.rowidfrombase.of_cust_info_itemtwhereitem_labelin('证件号码','受理号码'); JSP是: custInfoForSubscriberView.jsp 2.6.菜单配置方法 selectt.*,t.rowidfromsec.sec_functiontwherenamelike'%集团日常%'; selectt.*,t.rowidfromsec.sec_role_granttwhere1=1andt.ent_id=80000662andt.role_id=99999; 2.7.枚举、数据字典、静态数据 base.bs_static_data 一般在SET中配置,JSP页面中不用特别配置,如: 2.8.国际化 SELECTt.*FROMbase.bs_i18n_resourcet; 2.9.表与序列关系表 SELECTt.*FROMbase.cfg_id_generatort; 2.10.ftp配置 SELECTt.*FROMbase.bs_ftp; SELECTt.*FROMbase.bs_ftp_patht; 3.代码跟踪 新系统的菜单一般是以JSP作为入口,而老系统则使用Action的showMain方法作为入口。 3.1.代码结构和配置 src,config,lib,html defaults.xml: 配置数据源、分中心,密码既支持密文也支持明文。 加密工具: zjcrm-rc2.exe sec-adapter.properties: 较少涉及,SecImpl(secframe框架,加载新系统等)和XGImpl(加载新系统缓存等) client.properties: 如果不掉后台OBD时该配置不起效果,若需要调用老系统OBD,则需要配置该文件。 新系统采用MVC结构: Web: Action(如action处在目录结构下: com.asiainfo.crm.channle.apply) Service: (可以是jsp或者web层和service交互,service也可调用service,service控制事务,service采用工厂模式创建,不能直接创建) Dao: Bo: Bean和Engine,Engine封装query、insert、update等,bean对应实体。 Ivalues: (放置接口,不在层次中) 一般访问顺序: Jsp>action>service>dao>bean 注意,Js尽量从jsp中抽离出来,这样可只加载一次。 3.2.快速跟踪 地址: http: //localhost: 8080/gz/crm/support/party/CmSupportTypeList.jsp? funcId=30011013&verifyType=&psptReadSerialId=&psptVerifySerialId= 定位菜单: 搜索菜单(需要超级管理员权限),查询菜单表 后台查询语句执行时,需要加schema用户名。 日志: log4j.properties,配置log4j.rootLogger=debug,console,否则控制台无法打印。 例子: 申告单类型配置,CmSupportTypeList.jsp 页面的table中jsp直接和service交互,如: tablesetname="com.asiainfo.crm.support.party.web.SETCmSupportType"tableid="tblList" tablemodel="com.ai.appframe2.web.datamodel.MethodModelForService" implservice_name="com.asiainfo.crm.support.party.service.interfaces.ICmSupportTypeSV" implservice_querymethod此处和js的doQuery方法的参数要一致。 ="query(StringappealType,StringappealName,StringprocessType,StringappealPriority,int$STARTROWINDEX,int$ENDROWINDEX)" implservice_countmethod="count(StringappealType,StringappealName,StringprocessType,StringappealPriority)" initial="false"editable="false"needrefresh="true"multiselect="true"ondbclick="doView" pagesize="20"width="100%"height="300"ondblink=""onresize="true"> colfieldname="APPEAL_TYPE"visible="true"title="申告单类型"width="8%"> col> colfieldname="APPEAL_NAME"visible="true"title="申告单类型名称"width="10%"> col> ... colfieldname="EXPIRE_REMIND_INFO"visible="true"title="超时提醒"width="12%"> col> colfieldname="REMARK"visible="true"title="备注"width="16%"> col> table> //查询 functiondoQuery(){ varqryRowSet=getRowSet(); varcondi=""; condi+="&appealType="+qryRowSet.getValue("APPEAL_TYPE"); condi+="&appealName="+qryRowSet.getValue("APPEAL_NAME"); condi+="&processType="+qryRowSet.getValue("PROCESS_TYPE"); condi+="&appealPriority="+qryRowSet.getValue("APPEAL_PRIORITY"); getTable().refresh(condi); } 新CRM使用多个数据源,如资源库使用的数据源是res,营业库使用的是so{center},公共库使用的数据源是base。 调用数据源时会根据dao的包名设置其对应的数据源(原理就是动态代理),这个关系配置是在defaults.xml的 Dao的三种实现方式: 1.BO*Engine(使用ConfigTools工具生成,建议使用) 2.使用DataStore(无事务控制) Conn=ServiceManager.getSession().getConnection(); DataStoredataStore=ServiceManager.getDataStore(); 3.使用jdbc Notice: 尽量少用ServiceManager.getSession().getNewConnection(),因为这样获取的链接不受事务控制,如果使用了必须手动关闭链接。 访问Action时,如果对分中心有要求,需要加上: “&CenterType=RegionId&CenterValue=”+regionId 4.进程 进程分为TF进程和TASK进程。 Jh_web项目/com/asiainfo/crm/jh/exe/task TASK为调度任务进程,非实时;TF为实时进程(比如后台导入) Selectt.*,t.rowidfrombase.cfg_taskt; 5.开发规范 参考: 基础类-9-贵州新crm技术开发规范.doc 5.1.目录结构 html、src、lib、config。 1)SRC common: 基础文件,如日志、公共的web方法、公共的静态数据类 channel: 未使用,已单独部署形成一个产品线 so: 营业模块,如: 营业受理、业务订购、业务变更 ams: 账务管理 res: 资源管理,如: 号码管理、号卡管理、终端管理 market: 未使用,如: 集团客户管理,营销活动管理 inter: 接口模块,CRM对外提供的接口,如: 电子渠道、网厅、短厅crm,包括: 账务接口子模块、开通接口子模块、CBOSS接口子模块 cust: 客户管理模块 sec: 已将权限独立打包成secframe.jar,该模块不会使用 report: 报表 product: 产品管理,已打包成pce.jar使用memcache配置缓存,该模块不会使用 具体模块划分: bo: 存放数据库操作的Engine和Bean。 dao: 数据访问层 ivalues: (接口定义)表信息描述类 service: 服务层 valuebean: (自定义javabean) web: 存放Action类 目录名字包含example、test的类生产上不会被编译发布,例如test/**/*.*、**/test/*.*、example/**/*.* 接口开发需要提供给第三方的类,需要放在third目录下,否则不会发布给第三方系统调用,例如Remote服务提供给外围系统的POJO依赖类: com\asiainfo\crm\sec\exe\remote\third\OpInfoBean.java 2)HTML bce: 存放bce页面,后台已打包成bce.jar jsv2: appframe使用的JS、HTM文件 secframe: 权限页面,后台已打包成secframe.jar webframe: 负责登录框架以及主页上部、左侧、底部的展示,后台打成oneframe.jar 注: SVN不允许开发人员修改webapp、jsv2、bce等公共模块,若需修改时需申请权限。 3)Config Config目录中存放系统配置文件及针对数据库表操作的配置文件,针对数据库表操作的配置文件由Appframe配置工具ConfigTools自动生成,包括bo文件(数据操作引擎资源文件)、set文件(DBGRID、DBFORM使用资源文件)、ds文件(下拉框资源文件)。 remote/client.properties: 对外围提供的接口的配置 socket/socket.properties: 对外围提供的Socket接口 system/cache/cache.xml: 缓存配置 system/service/defaults.xml: 配置数据源、分中心 基础数据库,营业数据库,如: 贵州5个地市1个数据库,4个地市一个数据库 system/service/omframe-service.xml: 配置服务具体的实现类,如果公共组件的实现,提供可自定义业务编程的入口 task/task.properties: 配置后台进程TaskFrameWork,如TF重启事件等 memcached.properties: 产品数据配置如开户用全球通、全球通58、全球通120等产品的产品数据量很大,单纯数据查询或者缓存到本地的内存消耗大,新系统统一放到memcached中,开发时设置is_use_db=true(不用缓存),利于开发时定位问题。 4)LIB appframe: crm系统的组件服务等,提供基础开发包,如: 表格、树、数据库事务控制、获取服务(EJB,本地)、提供监控运行状态、排查问题时查看调用哪些服务、服务运行状态时间等。 bce.jar: 业务配置工具 comframe30.jar: 流程调度 Easymem.jar: memcached相关 omframe.jar: 订单框架 oneframe.jar: pce.jar/pce-ext.jar: 产品管理,提供接口给其他受理模块调用。 至于采取mem方式还是读数据库方式,就由Memcached.properties控制 secframe.jar: 权限 注: 一般没有权限提交lib下的Jar包。 5.2.分层开发规范 Jsp>Action>Svr>Dao Jsp>Svr>Dao Jsp>Svr>Svr>Dao 禁止未经过Svr直接访问Dao(无事务控制或者取不到数据源),事务位于Svr层。 获取业务服务对象可以采用getService和getCrossCenterService两种方式: 普通服务对象获取采用getService方法,对于涉及到跨中心数据操作访问的服务对象获取,必须使用平台提供的getCrossCenterService方法,示例如下: ICommonSVcommonSV=(ICommonSV)ServiceFactory.getService(ICommonSV.class); commonSV.saveOrdSoLogDataInfo(……); 比如: so1只能写so1的数据,so2只能写so2的数据。 但是有个公共中心,可写so1和so2,可通过getcrosscenterservice获得。 getCrossCenterService方法在服务内部禁止使用,必须在接口、web段或进程主程序中调用,使用方式如下: booleanflag=CrossCenterStoreHelper.isSameCenter();//判断是否同一个中心 if(flag){ getService(); } 5.3.与其他层的交互规则 ACTION层: 1、不能调用DAO类,只能调用本package下的sv类 2、禁止连接数据库做任何操作 3、禁止调用BO类set、get、transfer外方法 5.4.业务模块间调用 原则上2个目录的sv不能互相调用,假设res要提供接口给so调用,需要在res的teaminvoke目录的out.service去定义接口做实现。 然后so在teaminvoke里的in.service中引起来,in中引用的接口要确保是其他out中的接口。 接口命名是务必按照规范命名,否则serviceFactory无法获取到服务。 所有的服务接口类必须抛出java.rmi.RemoteException异常。 5.5.其他注意事项 业务逻辑层开发时,所有的服务接口类必须抛出java.rmi.RemoteException,因为在发布后,sv会发布成EJB服务,根据EJB规范要求,必须抛出RemoteException异常。 importjava.rmi.RemoteException; publicinterfaceIUserInfoFSV{ publicIInsProdValuegetInsProdByBillId(StringBillId)throwsException,RemoteException; } 需要注意的是,采用获取数据库连接方式,数据存取层在通过平台提供的方法获取到数据库连接后,禁止对数据库进行Commit和Rollback操作,另外,对于数据库连接及通过数据库连接创建的PreparedStatement和ResultSet,必须在使用完毕后进行关闭,关闭在finally进行,按照ResultSet、Statement、Connection次序进行关闭,关闭时,需要进行对象是否为空以及是否已关闭的判断,对象不为空且未关闭的情况下才可执行。 5.6.Sequence 在base.cfg_id_generator中配置步长,如果在cfg_id_generator中配置了历史表(HIS_TABLE_NAME),在修改当前表的时候会自动将数据同步到历史表中去。 配置的目的是放置ID浪费和冲突。 5.7.命名规范 lDao 接口类名: **.dao.interfaces.I*DAO 实现类名: **.dao.impl.*DAOImpl lService 接口类名: **.service.interfaces.I*SV, 实现类名: **.service.impl.*SVImpl *的内容必须对应一致! lAction 命名: **.*Action 继承: BaseAction 方法声明必须满足格式(返回void,2个固定参数,抛出异常,methodname任意): publicvoiddownLoadImsiFile(HttpServletRequestrequest, HttpServletResponseresponse)throwsException; 调用: 一般是在jsp页面上调用js方法PostAction(url,xml) url字符串格式: {context}/business/{Action全限定名}? action={action_method} 如果对分中心有要求,还要加上"&CenterType=RegionId&CenterValue=“+regionId Xml: 由页面标签的jsAPI生成,用于提供aitable,aiform的数据至Action。 5.8.工厂模式 DAO与Service都是通过下面的API获取实例: IDoneCodeSVdoneCodeSV=(IDoneCodeSV)ServiceFactory.getService(IDoneCodeSV.class); 5.9.设置分中心 在发送请求时设置中心 在调用PostInfo(url),aitable.refresh(cond)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 广东 移动 系统 技术 记录