1.1.1.功能概述业务数据集成是指MDMServer与外围系统之间的数据交换时需要中间处理的模块应用层。如图所示,外围系统主要通过三种模式与MDMServer交互(这里不考虑ETL):直接的webservice访问–主要通过http协议联机访问,一般不通过业务集成层而直接访问数据服务层近实时的消息通知–主要通过MQ消息访问,需要在业务集成层进行必要的处理批量处理–主要通过文件进行数据传递,需要在业务集成层进行处理业务集成服务层的主要内容包括:近实时的消息通知数据标准代码的转换交易xml的拆分其他规则ExtPackageMDMinfrastructure数据服务层近实时处理业务集成层MDMDBModuleMQ个险BaseServicesHttp电商网上销售批量加载FTP(file)批量处理团险养老金银保电商自助服务架构服务层业务总控批量处理标准代码的转换入库方式判断处理,判断是否是新增还是更改交易拆分其他规则1.1.2.联机数据集成(基于MQ/XML)联机数据集成主要处理近实时消息通知,处理模式如下图所示。MQ组件是所有的客户信息更新消息的载体,MsgReceiver组件负责接收MQ的消息,通过MsgParser组件进行xml格式解析,MsgReceiver转交到IntegrateFW组件,IntegrateFW组件是转发框架,负责业务集成层的基本控制,根据报文的类型调用必要的规则处理进行数据转换或者信息拆分,然后交由具体逻辑处理实现模块IntegrateImpl完成业务集成逻辑,并最终通过ServiceInvocation模块调用MDM的服务,完成交易。数据服务层主要包括扩展服务和组合服务。如上图,根据业务需求,一般性的顺序如下详述:1ejbCreate–MQ中的信息通知WAS容器,根据MsgReceiver组件的MDB情况,创建一个实例进入池态;2onMessage–WAS容器调用MDB的onMessage方法,并把消息作为参数传递到该方法;2.1deliver–onMessage方法中调用IntegrateFW组件的deliver方法,并传递消息;2.1.1parse–IntegrateFW组件调用MsgParser组件解析传入的消息体;2.1.1.1Constructor–MsgParser组件根据消息体解析,生成一个IBObj对象;2.1.2parse–parse方法返回生成的IBObj对象;2.1.3getTCRMTxType–获取IBObj对象的服务类型;2.1.4getTCRMTxType–返回字符串结果;2.1.5getRequestName–获取IBObj的请求者;2.1.6getRequestName–返回;2.1.7Constructor–IntegrateFW根据服务对象和请求者,实例化一个IntegrateImpl组件中集成服务实例;2.1.8execute–调用具体实例的业务逻辑,并把IBObj作为参数传递;2.1.8.1callRule–调用标准代码转换规则,进行必要规则处理;2.1.8.2callRule–返回规则处理后的IBObj对象;2.1.8.3matchRule–调用客户识别规则,进行识别2.1.8.4matchRule–调用返回2.1.8.5constructIBObj–在具体的业务逻辑处理中,根据具体需要调用MsgParser创建需要的IBObj对象;2.1.8.5.1Constructor–MsgParser构建新的IBObj实例;2.1.8.6constructIBObj–返回具体的IBObj实例;2.1.8.7setAttribute–处理具体的IBObj实例内容;2.1.8.8setAttribute–处理内容返回;2.1.8.9toServiceXml–处理完所有的IBObj实例内容后,调用方法转换为xml标准服务格式;2.1.8.10toServiceXml–返回xml字节流;2.1.8.11invoke–调用MDM服务;2.1.8.12invoke–返回;2.1.9execute–完成具体业务集成逻辑实例的执行;2.2deliver–完成整个业务集成逻辑的执行;注:2.1.8到2.1.9之间可能有多次的callRule和invoke调用;2.1.8到2.1.9execute的调用需要包括在事务处理中;批量处理的业务集成层设计参见《批量型》章节。1.1.2.1.MsgReceiver组件MsgReceiver组件主要由IntegrateMDB组成,IntegrateMDB是一个MessageDriverBean,通过onMessage(Message)方法接收MQ的消息通知。信息接收组件主要负责从MQ接收消息,参数Message使用BytesMessage类型,消息格式为XML形式,其具体的接口定义参见《服务接口定义》中的相关通过MQ接口部分。接口主要包括:个险–增加客户(addPerson/CSCMQ)个险–保全修改客户(updatePerson/CSCMQ)电商网上销售–增加客户(addPerson/TOLMQ)电商网上销售–修改客户基本信息(updatePersonBase/TOLMQ)电商网上销售–保全修改客户(updatePerson/TOLMQ)注:以上括号中的服务名是指各个业务系统提交到MQ中的消息服务名,而不是MDM调用的标准服务名;组件调用IntegrateFW组件进行后续处理。publicvoidonMessage(Messagemsg){……if(msginstanceofBytesMessage){BytesMessagebm=(BytesMessage)msg;longlength=bm.getBodyLength();byte[]bs=newbyte[length];bm.getBytes(bs);BytesInputStreambis=newBytesInputStream(bs);IntegrateFW.deliver(bis);}else{……}……}1.1.2.2.IntegrateFW组件IntegrateFW组件是框架组件,负责业务集成层的控制调度。组件负责调用MsgParser组件,解析xml报文,然后根据报文类型调用具体的控制处理逻辑,同时调用业务处理规则进行数据和业务处理,最后形成处理后的报文提交ServiceInvocation组件调用MDMService,完成整个处理,同时如果在处理中发生异常,则交由IntegException组件处理异常结果。IntegrateFW组件中对于多个service调用作为同一事务来管理,如果调用出错需要进行回滚处理。IntegrateFW组件暴露一个接口IntegrateLogic供IntegrateImpl组件实现,其接口方法如下。/***执行具体的业务集成任务.用于MQ异步通知模式*在IntegrateImpl组件实现该方法,处理具体某一项接口的逻辑调用,一般包括*代码转换、服务拆分、服务变换、DSP判断等*@paramis输入流,是通过MQ接收到的消息内容,xml字节流*@throwsItegrateException例外,如果发生例外需要到例外组件处理*/publicvoidexecute(IBobjobj)throwsItegrateException;组件对外调用的Façade接口调用是IntegratFW类,使用静态方法。/***传递到IntegrateFW组件执行后续任务.用于MQ异步通知模式*@paramis输入流,是通过MQ接收到的消息内容,xml字节流*/publicstaticvoiddeliver(InputStreamis);1.1.2.3.IntegrateImpl组件IntegrateImpl组件是根据报文类型确定的具体的业务集成逻辑的实现。一期需求主要包括:个险增加客户结束开始根据请求来源把消息中所有的标准代码转换为MDM代码根据客户号和lob类型查询MDM数据库确定是否存在该客户是否存在根据已有客户名称调用updatePersonName服务更新姓名否调用在线可疑客户识别程序是成功匹配新增客户,调用AddPerson服务否根据已有客户Id更新基本客户,调用updatePerson服务是根据已有partyid分拆形成客户地址服务,调用changePartyAddress根据已有partyid分拆形成客户电话、电子邮件联系服务,调用changePartyContactMethod根据已有partyid分拆形成客户证件服务,调用changePartyIdentifier个险修改客户基本信息结束开始根据请求来源把消息中所有的标准代码转换为MDM代码根据客户号和lob类型查询MDM数据库确定是否存在该客户是否存在根据已有客户名称调用updatePersonName服务更新姓名是否根据已有客户Id更新基本客户,调用updatePerson服务记录错误信息例外处理个险保全修改客户信息结束开始根据请求来源把消息中所有的标准代码转换为MDM代码根据客户号和lob类型查询MDM数据库确定是否存在该客户是否存在根据已有客户名称调用updatePersonName服务更新姓名是否根据已有客户Id更新基本客户,调用updatePerson服务根据已有partyid分拆形成客户地址服务,调用changePartyAddress根据已有partyid分拆形成客户电话、电子邮件联系服务,调用changePartyContactMethod根据已有partyid分拆形成客户证件服务,调用changePartyIdentifier记录错误信息例外处理网上销售增加客户参见个险增加客户,只是其接口内容稍有差异网上销售修改客户基本信息参见个险修改客户基本信息,只是其接口内容稍有差异网上销售保全修改客户信息参见个险保全修改客户信息,只是其接口内容稍有差异此组件需要处理地址、电话、电子邮件、客户标识等的格式变换,是把输入的对象格式变为标准的MDM扩展服务格式,包括:从粗粒度服务格式转换为updatePersonName服务格式转换为changePartyAddress服务格式–服务中确定具体调用correctPartyAddress还是addPartyAddress还是不做处理;转换为changePartyContactMethod服务格式–服务中定具体调用updatePartyContactMethod还是addPartyContactMethod还是不做处理;从粗粒度服务格式转换为changePartyIdentifer服务格式–服务中定具体调用updatePartyIdentifer还是addPartyIdentifer还是不做处理;具体接口参见《服务接口》和MDM开发文档。服务逻辑参见相关在线服务组合服务设计;1.1.2.4.MsgParser组件信息解析主要是根据xml报文解析其内容。MsgParser组件根据不同的报文类型解析不同的内容。MsgParser组件还负责输出变更后的报文结果。MsgParser是暴露在外的Façade调用界面,通过两个个方法接收外部调用。/***解析xml.*@paramis输入流,是通过MQ接收到的消息内容,xml字节流*/publicstaticIBObjparse(InputStreamis);/***把IBObj根据类型输出为标准的MDMservice报文.*@paramobj输入的IBObj*@return返回一个字节数组,组成xml,使用标准的iso-8859-1格式*/publicstaticbyte[]toServiceXml(IBObjobj);/***根据名称构建新的IBObj对象.*@paramname输入的IBObj名称*@return返回IBObj对象*/publicstaticIBObjconstructIBObj(Stringname);IBObj是用于定义报文的bean,类似MDM中的BObj。I