业务数据集成.docx
《业务数据集成.docx》由会员分享,可在线阅读,更多相关《业务数据集成.docx(41页珍藏版)》请在冰豆网上搜索。
业务数据集成
1.1.1.功能概述
业务数据集成是指MDMServer与外围系统之间的数据交换时需要中间处理的模块应用层。
如图所示,外围系统主要通过三种模式与MDMServer交互(这里不考虑ETL):
直接的webservice访问–主要通过http协议联机访问,一般不通过业务集成层而直接访问数据服务层
近实时的消息通知–主要通过MQ消息访问,需要在业务集成层进行必要的处理
批量处理–主要通过文件进行数据传递,需要在业务集成层进行处理
业务集成服务层的主要内容包括:
近实时的消息通知
⏹数据标准代码的转换
⏹交易xml的拆分
⏹其他规则
批量处理
⏹标准代码的转换
⏹入库方式判断处理,判断是否是新增还是更改
⏹交易拆分
⏹其他规则
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扩展服务格式,包括:
从粗粒度服务格式转换为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。
IBObj主要定义xml中的bobj对象,IBObj内部可以嵌套。
其暴露的接口如下。
/**
*设置IBObj的类型.是指对象类型,如TCRMPersonBObj、
*TCRMAdminContEquivBObj、TCRMPartyAddressBObj、TCRMAddressBObj等。
*/
publicvoidsetType(Stringname);
publicStringgetType();
/**
*设置服务的类型.
*/
publicvoidsetTCRMTxType(Stringtype);
pubicStringgetTCRMTxType();
/**
*设置服务的对象类型.
*/
publicvoidsetTCRMTxObject(Stringobj);
publicStringgetTCRMTxObject();
/**
*设置IBObj对象.
*/
publicvoidsetIBObj(IBObjobj);
/**
*根据名字获取IBObj对象.只能获取下一级对象.
*/
publicIBObj[]getIBObj(Stringtype);
publicStringgetAttribute(Stringtype);
/**
*设置属性.自动区分处理Extension属性.
*/
publicStringsetAttribute(Stringtype,Stringvalue);
/**
*设置服务头.
*/
publicvoidsetHeader(Stringheader);
publicStringgetHeader();
/**
*设置请求控制部分.
*/
publicvoidsetRequestControl(Stringrc);
publicStringgetRequestControl();
/**
*设置请求控制部分的请求名称.
*/
publicvoidsetRequestName(Stringrn);
publicStringgetRequestName();
/**
*设置请求控制部分的LOB.
*/
publicvoidsetRequestLOB(Stringrlob);
publicStringgetRequestLOB();
1.1.2.5.DSPRule组件
处理DSP规则,具体参见DSP设计中在线可疑客户识别。
1.1.2.6.CDRule组件
处理标准代码的转换,根据requestName来判断来源,并把源系统标准代码转换为MDM标准代码。
CDRule组件由CDPool从数据库中装载标准代码数据映射。
映射关系是各个源系统指向MDM。
sources.properites文件是每个源系统接口中的需要转换的代码定义,其格式如下:
CSCMQ=GenderType|HighestEducationType|TCRMAdminContEquivBObj.AdminSystemType|…
TOLMQ=GenderType|…
格式以Key=Value方式存放,key为源系统提交的requestName,而值是以’|’分割的多个数据域,每个数据域都需要进行标准代码替换。
如果该数据域是在接口的更底层,以’.’作为路径分割,如TCRMAdminContEquivBObj.AdminSystemType表示是在该对象中的TCRMAdminContEquivBObj对象下的AdminSystemType需要进行代码转换。
具体的实现类CDRule则根据输入IBObj对象和相应数据定义进行代码转换任务。
RuleFW是对外暴露的调用类,提供静态方法。
/**
*规则调用处理.
*@paramtype规则类型,根据此类型确定是调用哪个规则实现
*@paramobj输入输出对象,规则实现对其进行处理,并形成结果返回
*/
publicstaticvoidcallRule(Stirngtype,IBObjobj)throwsIntegrateException;
一期需要进行的代码转换为:
个险
数据域
源系统代码
源系统值
MDM代码
MDM值
GenderType
M
男
M
男
F
女
F
女
U
未知
U
未知
TCRMPartyIdentificationBObj
.IdentificationType
0
身份证
00
其它
1
参字第
10
后字第
11
空文字第
12
北文字
13
护照
14
装字第
15
北文字第
RelationshipType
1
本人
2
丈夫
3
妻子
4
父亲
5
母亲
6
儿子
HighestEducationType
'01'
'文盲'
'02'
'小学'
'03'
'初中'
'04'
'高中'
'05'
'大专'
'06'
'本科'
'07'
'研究生及以上'
'08'
'中专'
未知
MaritalStatusType
0
未婚
0
未婚
1
已婚
1
已婚
2
离婚
2
离婚
3
鳏寡
3
鳏寡
AddressUsageType
B
单位地址
2
单位地址
P
邮递地址
3
邮递地址
R
家庭地址
1
家庭地址
电商网上销售
银保
养老金
团险
1.1.2.7.Utils组件
Utils组件是工具类组件,主要包括
服务调用组件,负责进行MDM服务的调用
通过IIOP方式访问MDM的EJB(DWLServiceController)来处理webservice格式的请求,具体请参考MDMworkbench中的com.ibm.mdm.training.testerDWLServiceControllerTester。
数据库访问
1.1.2.8.IntegException组件
例外处理的组件,如果处理过程中有例外,则需要记录例外的原因和状态,并把该服务请求xml保存到数据库。
例外后需要保存的内容如下:
字段
代码
类型
备注
错误流水号
ERRLOGID
BigInt
PK,自增型
时间
LOG_DT
Timestamp
错误返回消息
ERRMESSAGE
Varchar(255)
exception.getMessage()
或者业务逻辑错误说明,如找不到该客户等
错误提交消息
REQUESTXML
Xml字段
错误堆栈同样需要记录到log4j日志中。
1.1.3.批量数据集成(基于批量/XML)
批量处理的主要内容类似业务数据集成章节的近实时处理部分,主要是FileParser模块管理各个业务系统上传的批量文件,并调用MsgParser模块解析具体的数据内容,同样,根据规则处理各个业务逻辑规则,然后形成具体的批量文件,并调用MDM的BatchProcessor进行批量处理。
具体模块关系如下图所示。
批量处理的部分将会复用较多的近实时处理部分的业务组件,包括:
MsgParser组件
IntegException组件
CDRule组件
1detectFile–守护线程,检查各个系统相应目录下的上穿文件是否ready;
2Constructor–读入文件,形成文件输入流和输出流,并调用批量处理,根据源系统类型实例化具体的业务逻辑处理实例,传递输入流;
3readOneService–从输入流读取一个service块;
4readOneService–返回读取的service块;
5parse–调用MsgParser把servie块的xml格式解析成为一个IBObj;
6parse–返回IBObj;
7callRule–调用代码转换rule,转换客户证件类型、地址类型、联系类型为MDM标准代码;
8callRule–调用返回;
9writeTmp–把客户关键信息写入数据库,内容参见临时表定义;
10writeTmp–返回;
以上从3到10循环处理,直到文件输入流到尾端;
11resetFile–把文件输入流重新定位到开始;
12resetFile–返回重新定位后的文件输入流;
13callRule–调用批量客户识别的规则处理;
13.1updateTmp–根据规则处理结果更新临时表,确定客户增加、修改类型以及客户的地址、联系、证件类型更改类型;
13.2updateTmp–处理临时表结束;
14callRule–调用规则返回;
15readOneService–从文件输入流读入一个servicexml块;
16readOneService–返回service块;
17parse–调用MsgParser解析为一个IBObj;
18parse–返回IBObj;
19readTmp–读入一条与IBObj匹配的临时表记录;
20readTmp–读入返回数据;
21callRule–调用格式转换规则处理,根据临时表类型标志,转换IBObj的内容为标准服务的IBObj;
22callRule–返回转换完毕的IBObj;
23toServiceXml–把IBObj转换为标准的xml格式;
24toServiceXml–xml结果;
25writeXml2File–把xml结果写入文件输出流;
26writeXml2File–返回;
以上15到26循环处理,直到文件处理完毕;
27runbatch.sh–关闭相应资源,调用MDM的BatchProcessor进行批量处理,完成后处理相应输入输出及中间文件;
1.1.1.1.批量处理接口
批量处理主要包括三个外部系统接口:
银保增加客户
养老金增加客户
团险增加客户
具体接口格式参见《服务接口》
外部系统输出符合接口规范的数据文件,并FTP到规定的目录,具体参见《服务接口》中“批量接口模式”。
1.1.1.2.FileParser组件
FileParser组件是解析文件的处理,其主要处理客户的上传数据文件,同时新建输出结果文件。
解析整体文件格式;包括输入输出,输出文件每个servicexml只能是一行;
FileParser调用IntegrateFW组件以处理不同的业务集成逻辑。
FileParser组件暴露一个抽象类IntegrateBatchLogic供IntegrateImpl组件实现,其抽象方法如下。
/**
*执行具体的业务集成任务.用于批量模式
*在IntegrateImpl组件实现该方法,处理具体某一项接口的逻辑调用,一般包括
*代码转换、服务拆分、服务变换、DSP判断等
*@paramis输入流,是通过MQ接收到的消息内容,xml字节流
*@throwsItegrateException例外,如果发生例外需要到例外组件处理
*/
publicabstractvoidexecuteBatch(InputStreamis,OutputStreamos)throwsItegrateException;
在IntegrateBatchLogic中还实现必要方法:
✧resetFile–重置文件指针到文件头;
✧callBatchSDP–调用批量客户识别规则;
✧callRule–调用代码转换规则;
✧getService–获取文件的下一个service块;
✧callMDMBatch–调用MDM的runbatch.sh
1