SOA側(cè)重于解決在分布式的環(huán)境下的系統(tǒng)的集成;而BPM側(cè)重于解決業(yè)務(wù)流程的調(diào)度處理,兩者的結(jié)合就形成了SOA-BPM組合架構(gòu)。SOA-BPM組合架構(gòu)在技術(shù)層面采用WebService、EJB、Spring Bean等眾多的構(gòu)件技術(shù),通過(guò)SOA中間件軟件實(shí)現(xiàn)協(xié)議解藕;在業(yè)務(wù)層面采用BPM系統(tǒng)或工作流系統(tǒng)進(jìn)行業(yè)務(wù)流程建模,從而實(shí)現(xiàn)系統(tǒng)集成。
基于SOA-BPM組合架構(gòu)來(lái)構(gòu)建系統(tǒng)集成平臺(tái)需要解決的首要問(wèn)題就是異構(gòu)系統(tǒng)之間的集成與數(shù)據(jù)交換的問(wèn)題,在此基礎(chǔ)上才能方便地開發(fā)業(yè)務(wù)邏輯。
1 需要解決的具體問(wèn)題
具體來(lái)說(shuō),基于ESB的SOA-BPM系統(tǒng)集成平臺(tái)需要研究出關(guān)鍵的技術(shù)來(lái)解決如下的有關(guān)集成的技術(shù)層面問(wèn)題。
1.1 協(xié)議解耦如何將不同的外界系統(tǒng)提供的服務(wù)進(jìn)行協(xié)議轉(zhuǎn)換,從而在集成平臺(tái)內(nèi)部采用同一種協(xié)議,這需要解決異構(gòu)系統(tǒng)集成時(shí)的構(gòu)件服務(wù)訪問(wèn)方式與規(guī)則不一、開發(fā)語(yǔ)言不同、數(shù)據(jù)表現(xiàn)形式不同的難題。
1.2 路由分發(fā)解決從一個(gè)系統(tǒng)如何將數(shù)據(jù)傳輸?shù)搅硪粋(gè)系統(tǒng)的問(wèn)題,在此基礎(chǔ)之上再通過(guò)整合業(yè)務(wù)流程來(lái)達(dá)到多系統(tǒng)跨企業(yè)協(xié)同工作的目的。
1.3 接口匯聚接入到系統(tǒng)集成平臺(tái)的各種系統(tǒng)都會(huì)有接口連接,這就需要在集成平臺(tái)端將接口匯聚起來(lái),集中進(jìn)行歸一處理,形成總線式的可熱插撥的接口配置方式。
解決以上三個(gè)問(wèn)題之后能夠形成一個(gè)面向服務(wù)的系統(tǒng)集成基礎(chǔ)性平臺(tái),也就是面向服務(wù)的ESB集成總線。在ESB集成總線之上通過(guò)業(yè)務(wù)流程的映射與整合,進(jìn)行業(yè)務(wù)需求與設(shè)計(jì)之后,以業(yè)務(wù)流程的感知、協(xié)同、流轉(zhuǎn)來(lái)支持更高層面的業(yè)務(wù)運(yùn)營(yíng)。
2 解決問(wèn)題的關(guān)鍵技術(shù)
構(gòu)建基于ESB的SOA-BPM系統(tǒng)集成平臺(tái)的主要關(guān)鍵技術(shù)是協(xié)議轉(zhuǎn)換技術(shù)、數(shù)據(jù)交換技術(shù)和通用的XML報(bào)文處理技術(shù)。
2.1 協(xié)議轉(zhuǎn)換技術(shù)
協(xié)議轉(zhuǎn)換技術(shù)是指在EJB、WebService、JMS等異種服務(wù)構(gòu)件間進(jìn)行協(xié)議轉(zhuǎn)換的技術(shù),比如可以將一個(gè)Java Bean或Spring Bean綁定發(fā)布采用Web Service方式或RMI對(duì)外發(fā)布;一個(gè)位于外部系統(tǒng)中的EJB,可以通過(guò)引用綁定的方式,在平臺(tái)中進(jìn)行協(xié)議轉(zhuǎn)換,綁定為WebService,這樣訪問(wèn)者訪問(wèn)平臺(tái)中的Web Service,但實(shí)質(zhì)上卻是訪問(wèn)的外部系統(tǒng)中的EJB服務(wù),Tuscany正是理想的選擇,如圖1所示。
圖1 服務(wù)構(gòu)件間進(jìn)行協(xié)議轉(zhuǎn)換的技術(shù)
2.2 數(shù)據(jù)交換技術(shù)
數(shù)據(jù)交換的主要情形可以分成3種:(1)外部系統(tǒng)接入時(shí),將XML報(bào)文發(fā)送到SOA-BPM集成平臺(tái),該XML報(bào)文稱為接入報(bào)文;(2)SOA-BPM集成平臺(tái)轉(zhuǎn)發(fā)XML報(bào)文,該報(bào)文稱為轉(zhuǎn)發(fā)報(bào)文;(3)從SOA-BPM集成平臺(tái)主動(dòng)發(fā)起發(fā)送XML報(bào)文,該報(bào)文稱為接出報(bào)文。上述3種情形如圖2所示,可以涵蓋到數(shù)據(jù)交換的所有情形。
圖2 數(shù)據(jù)交換的三種情形
SOA-BPM系統(tǒng)集成平臺(tái)針對(duì)外部系統(tǒng)需要明確以下2個(gè)方面的配置:(1)目標(biāo)系統(tǒng)的命名標(biāo)識(shí),必須在集成平臺(tái)內(nèi)部唯一,這樣從XML報(bào)文中就能夠解析出目標(biāo)系統(tǒng)結(jié)點(diǎn)的值,如果目標(biāo)系統(tǒng)不是平臺(tái)本身則進(jìn)行轉(zhuǎn)發(fā);(2)調(diào)用外部系統(tǒng)統(tǒng)服務(wù)的參數(shù)配置,以便于Tuscany在引用調(diào)用時(shí)可以正確連接外部系統(tǒng)中的構(gòu)件。
2.3 通用的XML報(bào)文處理技術(shù)
需要形成一系列的工具類和包,比如將業(yè)務(wù)數(shù)據(jù)打包為XML報(bào)文的工具、XML報(bào)文依據(jù)XMLSchema進(jìn)行校驗(yàn)的工具、對(duì)XML報(bào)進(jìn)行加密解密工具、對(duì)XML報(bào)文進(jìn)行拆包處理得到業(yè)務(wù)數(shù)據(jù)的工具。
作為集成平臺(tái)可以起到統(tǒng)一數(shù)據(jù)報(bào)文格式的作用。XML報(bào)文具有良好的數(shù)據(jù)結(jié)構(gòu)表現(xiàn)能力,但是格式還是過(guò)于自由,這時(shí)可以通過(guò)Schema和DTD約束。SOA-BPM系統(tǒng)集成平臺(tái)可以對(duì)自身發(fā)起的業(yè)務(wù)進(jìn)行數(shù)
據(jù)打包時(shí)嚴(yán)格檢驗(yàn),但對(duì)于其它接入集成的平臺(tái)來(lái)看并不能保證數(shù)據(jù)格式就是統(tǒng)一按標(biāo)準(zhǔn)來(lái)打包的,這時(shí)就需要利用XMLSchema來(lái)對(duì)數(shù)據(jù)的格式規(guī)范進(jìn)行規(guī)定。
3 接入情形的處理
下面以接入情形為例,如圖3所示。發(fā)送來(lái)的XML報(bào)文需要保存到數(shù)據(jù)庫(kù)的接收?qǐng)?bào)文表中,然后再在SOA-BPM系統(tǒng)集成平臺(tái)內(nèi)部的任務(wù)表中插入一條記錄表示接收到一個(gè)新的XML報(bào)文,表示在系統(tǒng)調(diào)度任務(wù)隊(duì)列中入隊(duì)一個(gè)解析XML報(bào)文的任務(wù)。
圖3 接入情形的處理過(guò)程
保存報(bào)文之前需要進(jìn)行數(shù)據(jù)解密和數(shù)據(jù)檢驗(yàn),為便于更改解密的方式和數(shù)據(jù)檢驗(yàn)的方法,采用了Spring進(jìn)行AOP開發(fā),這樣就進(jìn)行的構(gòu)件的解耦。保存XML報(bào)文的構(gòu)件操作較為簡(jiǎn)單,將接收到的XML報(bào)文自動(dòng)采用insert SQL語(yǔ)句對(duì)接收的數(shù)據(jù)和情況在數(shù)據(jù)庫(kù)中作持久化處理,這就需要根據(jù)XML報(bào)文結(jié)構(gòu)的描述情況來(lái)動(dòng)態(tài)地構(gòu)造inser tSQL語(yǔ)句了,算法思想描述如下:
//根據(jù)業(yè)務(wù)類型解析對(duì)應(yīng)的XML報(bào)文結(jié)構(gòu)描述文件得到非葉子結(jié)點(diǎn)描述
MessageNodemessageNodeDescArray[]=
getMessageParentNodesDescArray(bussiness);
//循環(huán)非葉子結(jié)點(diǎn)數(shù)組,得到非葉子結(jié)點(diǎn)的所有葉子結(jié)點(diǎn)名稱,生成SQL語(yǔ)句,存儲(chǔ)數(shù)據(jù)
for(inti=0;i<messageNodeDescArray.size();i++){
//得到當(dāng)前非葉子結(jié)點(diǎn)的葉子結(jié)點(diǎn)列表
MessageNodesonNodeArray[]=
messageNodeDescArray1get(i)._
getSonNodeArray();
//循環(huán)葉子結(jié)點(diǎn)數(shù)組,生成insertSQL語(yǔ)句(表名根據(jù)業(yè)務(wù)類型和非葉子結(jié)點(diǎn)名稱生成)
StringsqlStr="insertinto表名(";
for(intj=0;j<sonNodeArray.size();j++){
//根據(jù)XML報(bào)文結(jié)構(gòu)描述文件得到當(dāng)前結(jié)點(diǎn)名稱(即業(yè)務(wù)數(shù)據(jù)表中的字段名)
if(j==sonNodeArray1size()-1)sqlStr+=
sonNodeArray.get(j).getNodeName()+",")values(";
elsesqlStr+=
sonNodeArray.get(j).getNodeName()+","; }
for(intj=0;j<sonNodeArray1size();j++){
//解析XML報(bào)文得到當(dāng)前結(jié)點(diǎn)的值
if(j==sonNodeArray.size()-1)
sqlStr+="’"+parseXMLAndgetCurrent_
NodeValue(sonNodeArray.get(j))+"’)";
else
sqlStr+=parseXMLAndgetCurrent_
NodeValue(sonNodeArray.get(j))+","; }
//執(zhí)行數(shù)據(jù)插入操作
DbOperation.executeUpdate(sqlStr);}
數(shù)據(jù)解密和數(shù)據(jù)校驗(yàn)應(yīng)當(dāng)在保存XML報(bào)文前就要完成,這兩者如果有一個(gè)沒(méi)有通過(guò),則說(shuō)明必然存在在有問(wèn)題,比如XML報(bào)文打包有誤、數(shù)據(jù)被篡改等。
日志在數(shù)據(jù)解密、數(shù)據(jù)校驗(yàn)和保存報(bào)文之前需要進(jìn)行前置增強(qiáng),而在保存后又要進(jìn)行日志后置增強(qiáng),SOA2BPM系統(tǒng)集成平臺(tái)使用了Spring的AOP方法根據(jù)增強(qiáng)XML配置進(jìn)行。
4 任務(wù)隊(duì)列調(diào)度
報(bào)文在數(shù)據(jù)庫(kù)中存儲(chǔ)后僅僅是只是完成了數(shù)據(jù)緩沖存儲(chǔ)的功能,根據(jù)數(shù)據(jù)交換的3種基本情形,需要進(jìn)行以下事項(xiàng):(1)如果是接入報(bào)文,則解析XML報(bào)文存入數(shù)據(jù)庫(kù)表中,以為高層的業(yè)務(wù)開發(fā)提供數(shù)據(jù)源。(2)如果是轉(zhuǎn)發(fā)報(bào)文,則轉(zhuǎn)發(fā)至目標(biāo)系統(tǒng)。(3)如果是接出報(bào)文,則將報(bào)文發(fā)至目標(biāo)系統(tǒng)。
根據(jù)這個(gè)設(shè)計(jì)思想,需要有3個(gè)調(diào)度隊(duì)列:(1)針對(duì)接入報(bào)文處理的接入任務(wù)隊(duì)列;(2)針對(duì)轉(zhuǎn)發(fā)報(bào)文的轉(zhuǎn)發(fā)任務(wù)隊(duì)列;(3)針對(duì)接出報(bào)文的接出任務(wù)隊(duì)列。
以上3個(gè)調(diào)度隊(duì)列需要解決兩個(gè)問(wèn)題:(1)持久化處理的問(wèn)題;(2)調(diào)度優(yōu)先級(jí)的問(wèn)題。SOA-BPM系統(tǒng)集成平臺(tái)中隊(duì)列的持久化處理方法是:在數(shù)據(jù)庫(kù)中建立相應(yīng)的隊(duì)列表,使用Hiber-nate來(lái)作O-R映射,并在隊(duì)列靜態(tài)對(duì)象之上開發(fā)一系的API供業(yè)務(wù)邏輯類和接入報(bào)文處理類調(diào)用,設(shè)計(jì)思想如圖4所示。
對(duì)于接入報(bào)文和接出報(bào)文需要解決數(shù)據(jù)庫(kù)表結(jié)構(gòu)與報(bào)文結(jié)構(gòu)匹配的問(wèn)題,理想的情形是開發(fā)一個(gè)可視化的配置功能界面,供技術(shù)人員使用,因?yàn)槠脚_(tái)接入的系統(tǒng)越來(lái)越多,如果不自動(dòng)進(jìn)行形報(bào)文數(shù)據(jù)庫(kù)表結(jié)構(gòu)的生成和報(bào)文的解包、存儲(chǔ)工作,開發(fā)人員的編程工作量將是無(wú)法想象的。SOA-BPM系統(tǒng)集成平臺(tái)研發(fā)出的工具操作界面如圖5所示。
圖5 SOA-BPM系統(tǒng)集成平臺(tái)的配置管理操作界面
在技術(shù)人員配置了XML報(bào)文結(jié)構(gòu)后,存儲(chǔ)該種業(yè)務(wù)類型的數(shù)據(jù)一旦進(jìn)入SOA-BPM系統(tǒng)集成平臺(tái)就會(huì)被自動(dòng)存儲(chǔ)到數(shù)據(jù)庫(kù)表。
接入隊(duì)列的優(yōu)先級(jí)問(wèn)題較好解決,在定義接入接口時(shí)給出一個(gè)數(shù)值就可以了,因?yàn)閷?duì)于接入來(lái)說(shuō)平臺(tái)的服務(wù)是是被動(dòng)調(diào)用方;但是對(duì)于轉(zhuǎn)發(fā)和接出這兩種情形由于是主動(dòng)調(diào)用其它系統(tǒng)的服務(wù),優(yōu)先級(jí)需要根據(jù)網(wǎng)絡(luò)情況來(lái)判斷。我們是采用如下的方式來(lái)進(jìn)行的,每隔一個(gè)時(shí)間片通過(guò)測(cè)試服務(wù)調(diào)用檢查各個(gè)外部系統(tǒng)的服務(wù)質(zhì)量,根據(jù)延時(shí)的情況標(biāo)出權(quán)值,值越大表示優(yōu)先級(jí)越高,在調(diào)度發(fā)送任務(wù)隊(duì)列時(shí)根據(jù)外部系統(tǒng)的權(quán)值情況,如果隊(duì)列中有多個(gè)任務(wù)則選擇權(quán)值較高的先行執(zhí)行。
5 集成實(shí)驗(yàn)情況
經(jīng)過(guò)平臺(tái)的多次測(cè)試,SOA-BPM系統(tǒng)集成平臺(tái)與市面上已有的一些典型的系統(tǒng),包括倉(cāng)儲(chǔ)管理系統(tǒng)、運(yùn)輸管理系統(tǒng)、GoogleEarth系統(tǒng)進(jìn)行了實(shí)驗(yàn)性對(duì)接,都已經(jīng)成功的實(shí)現(xiàn)了集成,情況如圖6所示。
圖6 SOA-BPM系統(tǒng)集成平臺(tái)的業(yè)務(wù)展現(xiàn)
6 改進(jìn)思路
SOA-BPM系統(tǒng)集成平臺(tái)在實(shí)驗(yàn)時(shí)也發(fā)現(xiàn)了一些問(wèn)題,需要進(jìn)一步改進(jìn),比如任務(wù)在網(wǎng)絡(luò)質(zhì)量不穩(wěn)定時(shí)出現(xiàn)的“饑餓”現(xiàn)象、報(bào)文的判重問(wèn)題等,比如針對(duì)這兩個(gè)典型的問(wèn)題擬如此改進(jìn):
(1)對(duì)每種業(yè)務(wù)類型的XML報(bào)文增加特征碼定義功能,在報(bào)文存儲(chǔ)處理前加入前置增強(qiáng)來(lái)根據(jù)特征碼來(lái)判斷報(bào)文是否重復(fù),如果重復(fù)就簡(jiǎn)單丟棄。這里不打算采用報(bào)文內(nèi)容直接模式匹配的思想,畢竟報(bào)文的內(nèi)容冗長(zhǎng),比較算法開銷過(guò)大。
(2)外部系統(tǒng)的優(yōu)先級(jí)與轉(zhuǎn)發(fā)、接出任務(wù)隊(duì)列中的任務(wù)掛鉤。實(shí)現(xiàn)的思想是在轉(zhuǎn)發(fā)和接出任務(wù)的數(shù)據(jù)結(jié)構(gòu)中增加優(yōu)先級(jí)權(quán)值歷史數(shù)據(jù)鏈表,一旦發(fā)現(xiàn)變化不穩(wěn)定,且當(dāng)前進(jìn)行高值期則將當(dāng)前任務(wù)隊(duì)列優(yōu)先級(jí)權(quán)值設(shè)為高值
7 結(jié)束語(yǔ)
SOA-BPM系統(tǒng)集成平臺(tái)目前已經(jīng)研發(fā)成型,并經(jīng)過(guò)多輪內(nèi)部測(cè)試和外部系統(tǒng)接入、轉(zhuǎn)發(fā)、接出聯(lián)測(cè),該平臺(tái)解決了協(xié)議解耦、路由分發(fā)、接口匯聚3大問(wèn)題,實(shí)現(xiàn)了協(xié)議轉(zhuǎn)換技術(shù)、通用的XML報(bào)文處理技術(shù)、數(shù)據(jù)交換技術(shù)這3個(gè)關(guān)鍵的技術(shù)。SOA-BPM系統(tǒng)集成平臺(tái)針對(duì)接入的不同業(yè)務(wù)類型的XML報(bào)文處理提供了自動(dòng)化的解密、報(bào)文校驗(yàn)、日志記錄、報(bào)文解包、報(bào)文存儲(chǔ)功能;針對(duì)接出的實(shí)現(xiàn)了在發(fā)送任務(wù)隊(duì)列基礎(chǔ)上的優(yōu)先級(jí)的調(diào)度策略,自動(dòng)進(jìn)行報(bào)文打包、加密、日志記錄、任務(wù)調(diào)度,此后還將進(jìn)一步改進(jìn)。
核心關(guān)注:拓步ERP系統(tǒng)平臺(tái)是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊(yùn)涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴品牌。
轉(zhuǎn)載請(qǐng)注明出處:拓步ERP資訊網(wǎng)http://www.ezxoed.cn/
本文標(biāo)題:基于ESB的SOA-BPM系統(tǒng)集成平臺(tái)關(guān)鍵技術(shù)研究與實(shí)現(xiàn)
本文網(wǎng)址:http://www.ezxoed.cn/html/solutions/1401888030.html