SOA侧重于解决在分布式的环境下的系统的集成;而BPM侧重于解决业务流程的调度处理,两者的结合就形成了SOA-BPM组合架构。SOA-BPM组合架构在技术层面采用WebService、EJB、Spring Bean等众多的构件技术,通过SOA中间件软件实现协议解藕;在业务层面采用BPM系统或工作流系统进行业务流程建模,从而实现系统集成。
基于SOA-BPM组合架构来构建系统集成平台需要解决的首要问题就是异构系统之间的集成与数据交换的问题,在此基础上才能方便地开发业务逻辑。
1 需要解决的具体问题
具体来说,基于ESB的SOA-BPM系统集成平台需要研究出关键的技术来解决如下的有关集成的技术层面问题。
1.1 协议解耦如何将不同的外界系统提供的服务进行协议转换,从而在集成平台内部采用同一种协议,这需要解决异构系统集成时的构件服务访问方式与规则不一、开发语言不同、数据表现形式不同的难题。
1.2 路由分发解决从一个系统如何将数据传输到另一个系统的问题,在此基础之上再通过整合业务流程来达到多系统跨企业协同工作的目的。
1.3 接口汇聚接入到系统集成平台的各种系统都会有接口连接,这就需要在集成平台端将接口汇聚起来,集中进行归一处理,形成总线式的可热插拨的接口配置方式。
解决以上三个问题之后能够形成一个面向服务的系统集成基础性平台,也就是面向服务的ESB集成总线。在ESB集成总线之上通过业务流程的映射与整合,进行业务需求与设计之后,以业务流程的感知、协同、流转来支持更高层面的业务运营。
2 解决问题的关键技术
构建基于ESB的SOA-BPM系统集成平台的主要关键技术是协议转换技术、数据交换技术和通用的XML报文处理技术。
2.1 协议转换技术
协议转换技术是指在EJB、WebService、JMS等异种服务构件间进行协议转换的技术,比如可以将一个Java Bean或Spring Bean绑定发布采用Web Service方式或RMI对外发布;一个位于外部系统中的EJB,可以通过引用绑定的方式,在平台中进行协议转换,绑定为WebService,这样访问者访问平台中的Web Service,但实质上却是访问的外部系统中的EJB服务,Tuscany正是理想的选择,如图1所示。
图1 服务构件间进行协议转换的技术
2.2 数据交换技术
数据交换的主要情形可以分成3种:(1)外部系统接入时,将XML报文发送到SOA-BPM集成平台,该XML报文称为接入报文;(2)SOA-BPM集成平台转发XML报文,该报文称为转发报文;(3)从SOA-BPM集成平台主动发起发送XML报文,该报文称为接出报文。上述3种情形如图2所示,可以涵盖到数据交换的所有情形。
图2 数据交换的三种情形
SOA-BPM系统集成平台针对外部系统需要明确以下2个方面的配置:(1)目标系统的命名标识,必须在集成平台内部唯一,这样从XML报文中就能够解析出目标系统结点的值,如果目标系统不是平台本身则进行转发;(2)调用外部系统统服务的参数配置,以便于Tuscany在引用调用时可以正确连接外部系统中的构件。
2.3 通用的XML报文处理技术
需要形成一系列的工具类和包,比如将业务数据打包为XML报文的工具、XML报文依据XMLSchema进行校验的工具、对XML报进行加密解密工具、对XML报文进行拆包处理得到业务数据的工具。
作为集成平台可以起到统一数据报文格式的作用。XML报文具有良好的数据结构表现能力,但是格式还是过于自由,这时可以通过Schema和DTD约束。SOA-BPM系统集成平台可以对自身发起的业务进行数
据打包时严格检验,但对于其它接入集成的平台来看并不能保证数据格式就是统一按标准来打包的,这时就需要利用XMLSchema来对数据的格式规范进行规定。
3 接入情形的处理
下面以接入情形为例,如图3所示。发送来的XML报文需要保存到数据库的接收报文表中,然后再在SOA-BPM系统集成平台内部的任务表中插入一条记录表示接收到一个新的XML报文,表示在系统调度任务队列中入队一个解析XML报文的任务。
图3 接入情形的处理过程
保存报文之前需要进行数据解密和数据检验,为便于更改解密的方式和数据检验的方法,采用了Spring进行AOP开发,这样就进行的构件的解耦。保存XML报文的构件操作较为简单,将接收到的XML报文自动采用insert SQL语句对接收的数据和情况在数据库中作持久化处理,这就需要根据XML报文结构的描述情况来动态地构造inser tSQL语句了,算法思想描述如下:
//根据业务类型解析对应的XML报文结构描述文件得到非叶子结点描述
MessageNodemessageNodeDescArray[]=
getMessageParentNodesDescArray(bussiness);
//循环非叶子结点数组,得到非叶子结点的所有叶子结点名称,生成SQL语句,存储数据
for(inti=0;i<messageNodeDescArray.size();i++){
//得到当前非叶子结点的叶子结点列表
MessageNodesonNodeArray[]=
messageNodeDescArray1get(i)._
getSonNodeArray();
//循环叶子结点数组,生成insertSQL语句(表名根据业务类型和非叶子结点名称生成)
StringsqlStr="insertinto表名(";
for(intj=0;j<sonNodeArray.size();j++){
//根据XML报文结构描述文件得到当前结点名称(即业务数据表中的字段名)
if(j==sonNodeArray1size()-1)sqlStr+=
sonNodeArray.get(j).getNodeName()+",")values(";
elsesqlStr+=
sonNodeArray.get(j).getNodeName()+","; }
for(intj=0;j<sonNodeArray1size();j++){
//解析XML报文得到当前结点的值
if(j==sonNodeArray.size()-1)
sqlStr+="’"+parseXMLAndgetCurrent_
NodeValue(sonNodeArray.get(j))+"’)";
else
sqlStr+=parseXMLAndgetCurrent_
NodeValue(sonNodeArray.get(j))+","; }
//执行数据插入操作
DbOperation.executeUpdate(sqlStr);}
数据解密和数据校验应当在保存XML报文前就要完成,这两者如果有一个没有通过,则说明必然存在在有问题,比如XML报文打包有误、数据被篡改等。
日志在数据解密、数据校验和保存报文之前需要进行前置增强,而在保存后又要进行日志后置增强,SOA2BPM系统集成平台使用了Spring的AOP方法根据增强XML配置进行。
4 任务队列调度
报文在数据库中存储后仅仅是只是完成了数据缓冲存储的功能,根据数据交换的3种基本情形,需要进行以下事项:(1)如果是接入报文,则解析XML报文存入数据库表中,以为高层的业务开发提供数据源。(2)如果是转发报文,则转发至目标系统。(3)如果是接出报文,则将报文发至目标系统。
根据这个设计思想,需要有3个调度队列:(1)针对接入报文处理的接入任务队列;(2)针对转发报文的转发任务队列;(3)针对接出报文的接出任务队列。
以上3个调度队列需要解决两个问题:(1)持久化处理的问题;(2)调度优先级的问题。SOA-BPM系统集成平台中队列的持久化处理方法是:在数据库中建立相应的队列表,使用Hiber-nate来作O-R映射,并在队列静态对象之上开发一系的API供业务逻辑类和接入报文处理类调用,设计思想如图4所示。
对于接入报文和接出报文需要解决数据库表结构与报文结构匹配的问题,理想的情形是开发一个可视化的配置功能界面,供技术人员使用,因为平台接入的系统越来越多,如果不自动进行形报文数据库表结构的生成和报文的解包、存储工作,开发人员的编程工作量将是无法想象的。SOA-BPM系统集成平台研发出的工具操作界面如图5所示。
图5 SOA-BPM系统集成平台的配置管理操作界面
在技术人员配置了XML报文结构后,存储该种业务类型的数据一旦进入SOA-BPM系统集成平台就会被自动存储到数据库表。
接入队列的优先级问题较好解决,在定义接入接口时给出一个数值就可以了,因为对于接入来说平台的服务是是被动调用方;但是对于转发和接出这两种情形由于是主动调用其它系统的服务,优先级需要根据网络情况来判断。我们是采用如下的方式来进行的,每隔一个时间片通过测试服务调用检查各个外部系统的服务质量,根据延时的情况标出权值,值越大表示优先级越高,在调度发送任务队列时根据外部系统的权值情况,如果队列中有多个任务则选择权值较高的先行执行。
5 集成实验情况
经过平台的多次测试,SOA-BPM系统集成平台与市面上已有的一些典型的系统,包括仓储管理系统、运输管理系统、GoogleEarth系统进行了实验性对接,都已经成功的实现了集成,情况如图6所示。
图6 SOA-BPM系统集成平台的业务展现
6 改进思路
SOA-BPM系统集成平台在实验时也发现了一些问题,需要进一步改进,比如任务在网络质量不稳定时出现的“饥饿”现象、报文的判重问题等,比如针对这两个典型的问题拟如此改进:
(1)对每种业务类型的XML报文增加特征码定义功能,在报文存储处理前加入前置增强来根据特征码来判断报文是否重复,如果重复就简单丢弃。这里不打算采用报文内容直接模式匹配的思想,毕竟报文的内容冗长,比较算法开销过大。
(2)外部系统的优先级与转发、接出任务队列中的任务挂钩。实现的思想是在转发和接出任务的数据结构中增加优先级权值历史数据链表,一旦发现变化不稳定,且当前进行高值期则将当前任务队列优先级权值设为高值
7 结束语
SOA-BPM系统集成平台目前已经研发成型,并经过多轮内部测试和外部系统接入、转发、接出联测,该平台解决了协议解耦、路由分发、接口汇聚3大问题,实现了协议转换技术、通用的XML报文处理技术、数据交换技术这3个关键的技术。SOA-BPM系统集成平台针对接入的不同业务类型的XML报文处理提供了自动化的解密、报文校验、日志记录、报文解包、报文存储功能;针对接出的实现了在发送任务队列基础上的优先级的调度策略,自动进行报文打包、加密、日志记录、任务调度,此后还将进一步改进。
核心关注:拓步ERP系统平台是覆盖了众多的业务领域、行业应用,蕴涵了丰富的ERP管理思想,集成了ERP软件业务管理理念,功能涉及供应链、成本、制造、CRM、HR等众多业务领域的管理,全面涵盖了企业关注ERP管理系统的核心领域,是众多中小企业信息化建设首选的ERP管理软件信赖品牌。
转载请注明出处:拓步ERP资讯网http://www.toberp.com/