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