文獻標識碼: A
文章編號: 0258-7998(2012)06-0132-03
隨著數采監控系統SCADA(Supervisory Control and Data Acquisition)業務集成的深入發展,敏捷、不受限制的采集數據的集成已成為關鍵的業務需求。企業的發展不僅需要引進一些新的應用數據服務器系統,而且要整合舊的數據應用服務器系統,以實現整個企業之間甚至不同企業之間的采集數據信息的共享和更新。為實現異構協議數據應用服務器之間的信息共享,需對其傳輸的數據信息進行變換,實現各傳輸協議之間的集成轉換。
解決協議集成轉換的典型方法,主要有“ESB服務總線”、“Mule服務總線”、“基于JBI的ServiceMix服務總線”以及“CXF服務總線”[1],但這些方法只支持標準的數據傳輸協議,不能集成各種異構數據應用服務器自定義的協議,無法滿足企業的各種采集數據信息共享與升級的實際需求。有鑒于此,對異構數據自定義協議集成的研究和分析,具有一定的現實意義。
1 系統設計
針對目前市場上協議轉換方法的不足,本文構建一個能支持自定義協議集成的系統。該系統通過用戶配置其自定義協議,不僅實現接收自定義應用傳輸協議的數據流并進行解析,而且能發送自定義應用協議的數據給其他異構通信應用服務器。此外,系統能支持用戶自定義協議解析規則,具有良好的擴展性,并具有穩定可靠、處理能力強、管理方便等特點。
1.1 系統結構設計
系統可分為應用層、業務層與資源層三個部分。應用層負責對異構數據協議的各種應用管理及動態展示實時數據等應用功能。業務層是整個系統的核心層,不僅負責監聽計算機各不同端口,對接收的數據流進行識別、解析以及存儲、分發等各種處理,而且為整個系統提供數據支撐,及各種數據的增、刪、查、改等數據操作功能;資源層包括本系統所有的數據資源,即數據庫、系統臨時數據及外部采集系統發送的數據流。系統的結構如圖1所示。
1.2 異構數據協議解析規則分析及其管理設計
協議解析規則是在解析協議時對協議數據流的處理手段。綜合分析各種標準應用協議及各用戶自定義協議,大致有三種不同的協議解析規則:(1)控制規則:協議解析時對整體數據流的處理手段,如協議是否需要回復、校驗和及協議序列號等;(2)數據前處理規則:對單個協議數據解析前的處理手段,如解析前對單個數據字節大小端進行的變換;(3)數據解析后處理規則:對已解析出來的單個數據進行處理的規則,如將解析出的數據乘以標定。
規則管理設計原則是用戶能方便地加載自己定制的協議解析規則,使得系統具有更強的擴展性。本系統擬采取數據庫機制,在系統的應用層增加管理功能實現。
1.3 自定義異構數據協議模型設計
協議格式模型的設計原則是保證協議格式能符合大部分用戶的需求,使得系統具有高度的靈活性和廣泛的適應性。
異構協議的具體幀格式由用戶自由配置。協議格式由包頭、命令區、數據區以及包尾組成,格式配置模型如圖2所示。
考慮到實際應用中各自定義的數據協議格式因需而異,協議格式框架中的包頭、命令區以及包尾是協議的可選部分,在配置時可根據協議具體需求選擇。數據區是協議不可缺少的部分,協議的數據流包含的類型有數據類型與非數據類型。數據類型是字節型、短整型、整型、長整型、浮點型及雙精度型以及它們各自的數組類型組成;非數據類型為字符串類型。
命令區存放的是協議的控制數據流,解析協議數據流時按命令區類型進行解析。當命令區參數不為空時,將解析結果與參數相比對,相等則調用對應的協議控制規則;當命令區參數為空時,可直接調用對應的協議控制規則進行校驗。
數據區存放的是協議的消息數據,其類型為數據類型,用戶可對數據在解析前后進行必要的處理。
2 系統實現
系統使用基于J2EE平臺設計,從而實現了跨平臺、可復用、易維護等特性。系統整體使用了Spring+Hibernate框架進行開發。系統依賴于Spring的IOC功能對各JavaBean進行管理,促進系統功能模塊間的松耦合。同時系統使用Spring對數據資源進行事務管理,保證系統數據的完整性和系統性能的高效性[2]。系統采用Hibernate框架,以完全面向對象的思想對數據進行管理與優化,完全隔離了底層數據庫機制,使得系統適用于Mysql、Sql Server及Oracle等數據庫[3]。
系統包括通信模塊、應用管理模塊和數據管理模塊三個部分。模塊之間有連接接口或者由數據池進行控制連接。通信模塊與應用管理模塊為本系統的核心部分,數據管理模塊為其他模塊提供數據支撐。
2.1 通信模塊
系統采取NIO Socket通信技術以及多線程機制進行實現通信模塊,提高了系統的并發處理能力、優化了系統的響應速度。通信模塊的組成如圖3所示。
2.1.1 數據接收及協議識別、解析模塊
協議的識別與解析是系統的核心功能,正確、高效地進行協議的識別與解析是系統運行的保障。在此功能模塊中,系統基于Mina通信框架進行擴展、開發。Mina框架是由Java技術開發的一種用于開發高性能和高可用性的網絡應用程序的基礎框架,該框架具有多協議支持、多端口監聽、異步通信等優點[4]。利用Mina框架,不僅可在同一端口監聽不同協議的數據流,而且可在多個端口監聽獲取數據流。模塊解析數據時,考慮到網絡延遲及TCP/IP的數據采用的是分組傳輸方式,將上次解碼剩余的碼流存放起來,與下次同一Session接收的數據流合并進行整合解碼。 模塊解析數據工作流程如圖4所示。
系統根據動態注冊的協議判別監聽不同的端口,接收各采集系統發送的數據流,利用Mina框架的數據過濾機制和數據緩沖機制,對數據流實現“收”慢—“解析”快的策略。合并數據流之后,模塊聯合協議端口匹配、特征匹配等多種協議匹配方式對數據進行協議匹配,確保協議匹配的精準性。
2.1.2 對外數據接口模塊
系統采用一個線程實現此功能模塊。線程在系統啟動時初始化運行,用于維護解析成功數據的哈希表并分發數據。當有解析成功的數據放入表中時,此線程從休眠狀態被喚醒,取出哈希表中的數據,進行三方面的分發:(1)如果此協議正在被用戶查看實時數據,則線程向界面推送協議的實時數據進行顯示; (2)發送給數據存儲模塊,進行協議數據的存儲;(3)查詢系統與外部數據請求系統進行通信的(協議,Session)哈希表,根據條件將數據發送給對外數據接口模塊,使其向外部請求數據系統發送實時數據。如此輪詢分發完畢解析成功的數據后,線程進入休眠狀態。線程采取“休眠—喚醒”機制,減少了系統占用的內存資源,優化了系統的性能。
2.1.3 對外數據接口功能
外部系統的數據請求分為兩種:實時數據請求與歷史數據請求。系統與外部系統建立連接,根據外部系統的請求類型進行不同的處理:(1)實時數據請求:維護系統的通信(協議,Session)哈希表,發送所請求協議的實時數據;(2)歷史數據請求:根據所請求的協議時間范圍查詢數據庫,返回相應的數據。
2.2 數據管理模塊
數據管理模塊充分利用Hibernate框架出色的對象/關系數據庫映射、靈活的數據庫數據池管理、面向對象的HQL語言等優點,為其他模塊提供數據存儲、數據更新、數據查詢等功能。
2.3 應用管理模塊
應用管理模塊負責系統應用層的功能管理,包括協議編輯管理、協議解析規則管理、協議生命周期管理及實時數據顯示四個應用功能模塊。協議編輯管理與協議解析規則管理主要以數據管理模塊為支撐,而協議生命周期管理和實時數據顯示模塊是與通信模塊進行交互實現。
2.3.1 協議編輯管理功能模塊
協議編輯管理功能模塊包括對數據協議的增、刪、查、改四個應用功能。系統以異構數據協議模型為原型,建立數據協議格式的配置界面。協議的新增、修改與查看功能通過協議格式配置界面進行相應操作。
2.3.2 自定義協議規則管理功能模塊
系統將自定義的協議控制規則和數據處理策略存儲在數據庫中。用戶可以采用Java語言開發實現系統定義的規則接口,開發自己的協議規則,將生成的.class文件導入系統數據庫。用戶也可以通過界面刪除相應的協議控制規則或者數據處理策略。
2.3.3 協議生命周期管理功能模塊
協議的生命周期是協議在系統中動態注冊至撤銷的時間周期,其管理功能模塊包括協議動態注冊與撤消兩個功能。此功能模塊與通信模塊進行交互,利用通信模塊中Mina框架的動態多端口監聽的特性,向框架實例進行動態注冊與撤消,從而維護系統協議哈希表中的協議。
2.3.4 實時數據顯示功能
系統利用Java的Swing庫為每個注冊協議動態生成一個JPanel,通過單例模式管理每個JPanel的句柄。當通信模塊分發解析出協議數據時,系統通過句柄調用相應的JPanel并向其增添實時數據。當用戶查看相應協議的實時數據時,系統將該協議的JPanel設置為可視狀態,從而向用戶展示實時接收到的整體數據。
本文設計并實現了一種基于Java語言開發的異構數據協議集成通信系統,介紹了異構數據協議格式模型以及該系統的各功能模塊。系統核心部分采用NIO Socket技術以及多線程機制實現,使系統的性能得以極大提高,同時具有良好的靈活性、平臺無關性及高擴展性。本系統為采集數據的轉換集成提供了一種新的實現途徑,具有一定的創新和實用價值。
參考文獻
[1] 梁愛虎. SOA思想、技術與系統集成應用詳解[M].北京:電子工業出版社,2007.
[2] WALLS C, BREIDENBACH R. Spring in Action[M].America: Manning Publications, 2005.
[3] BAUER C, KING G. Hibernate in action[M]. Ameircn: Manning Publications,2004.
[4] The Apache Software Foundation. Apache Mina[EB/OL].[2011-06-16]. http://mina.apache.org.