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://m.hanmeixuan.com/