面向移動設備的可配置RFID中間件設計與實現
0 引言
射頻識別(Radio Frequency Identification, RFID)中間件是在物理RFID閱讀器和上層應用軟件之間的一層軟件,RFID中間件屏蔽了各種不同的閱讀器傳輸標準,使上層應用軟件得到統一、不變的數據和控制接口;另外,它還能對原始數據進行整合和過濾,產生用戶定制的數據報表。在大規模應用RFID技術時,將產生海量數據,應用RFID中間件將使數據處理和傳輸變得相對簡單。中間件的承上啟下作用使RFID系統設計更為靈活,維護更為簡單,不論是后端應用程序的變化,還是前端閱讀器變化,都不會影響另外一端,省去維護多對多連接的復雜性問題。
RFID中間件是RFID技術應用領域和應用規模發展的產物,當今市場上已有一些產品,如:SUN、Microsoft和BEA的RFID中間件產品,然而,這些產品大都是運行在PC機或服務器端,由于網絡帶寬有限,海量的數據要通過網絡傳輸,大量無效的數據都要集中在服務器端,服務器必須對海量的數據進行篩選、過濾并按照確定的業務規則使數據轉化成用戶需要的、有意義的數據,這種復雜的處理必會增加服務器的壓力,影響系統的性能。在發生網絡故障時,也容易造成數據的丟失等。
隨著技術的進步,移動設備(如PDA等)的內存存儲能力、CPU的處理能力不斷增強,這也使得設計一種面向移動設備的RFID中間件成為可能。針對這種技術發展趨勢,本文提出了一種面向移動設備的可靈活部署的RFID中間件SeaMobileMiddleware(SMM)。SMM能有效利用移動設備的內存、CPU等空閑資源,在數據發往服務器之前做一系列的預處理,優化原始數據,降低網絡和服務器壓力,并在網絡故障時自動存儲數據,保證數據的一致性。
1 RFID中間件SMM系統架構
系統架構對系統整體性能有很大影響,針對移動設備特點,給出了一種面向移動設備的可靈活配置RFID中間件SMM系統架構,如圖1所示。
SMM的系統整體架構包括三大模塊,其中:最下層為Device模塊,負責把物理的真實設備抽象為系統的Device對象;中間層為Task Manager模塊,是SMM的核心模塊,負責處理用戶和上層應用系統的一切命令,把標準的XML命令轉化系統的Task對象并執行,以用來控制Device對象;最上層是用戶接口(User Interface,UI)模塊,是基于標準的Java swing開發的圖形界面,使用戶可以在本地方便地控制Device對象。同時,SMM也提供標準Web service接口,方便其他遠程系統控制和管理移動設備。
通過為移動設備提供本地UI和遠程管理接口,SMM可以使用戶自定義流程,通過過濾和篩選將原始標簽數據轉化成用戶想要的有意義數據。Task Manger提供的基于XML的標準接口也為SMM提供了很好的擴展性和兼容性。

1.1 Device模塊
由于目前的Tag、Reader等種類繁多,標準各不相同,RFID中間件的核心功能一個就是屏蔽閱讀器傳輸標準的差異,為上層提供統一的接口。SMM通過抽象,把不同種類RFID閱讀器、PDA等移動設備作為不同類型Device對象進行處理,并為每種Device配置Rule、Dispatcher和Driver三種屬性。不同Tag發出的原始數據通過Driver適配變為統一的數據格式,通過Rule將統一的數據格式轉化成上層系統需要的數據,然后通過Dispatcher把數據發送到所需的上層應用程序中。
1)Driver:考慮到實際應用中的Tag、Reader的多樣性,Driver對不同類型Reader數據進行適配處理,對數據進行統一和格式化。SMM架構中內置了缺省的Driver,負責處理當前大部分流行的Reader.同時,針對特殊需求,用戶可以開發特定Driver完成特殊Reader及Tag的數據標準化。
2)Rule:Rule可以自定義特定業務邏輯和數據過濾規則,從而把數據轉化成上層應用程序需要的有意義的數據。
比如:通過Rule配置提取同一個廠商生產的Tag的數據。
3)Dispatcher:Dispatcher定義數據分發路徑,為數據提供路由功能。可以自定義Dispatcher,從而把數據發送到用戶需要的上層應用程序中。另外,系統提供了離線Dispatcher,用于設備離線時的數據處理。當設備處于離線狀態時,系統會把數據保存在嵌入式移動數據庫"Olite"上,當系統連線時,離線Dispatcher自動將保存在"Olite"數據庫的歷史事件發送到上層應用程序中,從而實現數據自動同步。
基于抽象思想,Device模塊把各種不同RFID閱讀器等抽象成不同對象。通過配置Rule、Dispatcher和Drive屬性等管理真實設備,將來源不同的Tag數據格式化為統一標準的數據,并按用戶定義的規則過濾數據,轉發到對應的上層系統中。
1.2 Task Manager模塊
RFID中間件的另一核心功能是對外提供標準接口,便于上層應用程序調用和二次開發[10].SMM中Task Manager模塊通過管理所有命令和任務執行提供標準輸入輸出。
Task Manager模塊具有如下功能:1)接受各種XML命令,解析XML命令找到對應的任務對象并執行后把結果封裝成標準的XML返回給調用者;2)提供高效的任務隊列來處理各種各樣的XML命令;3)提供動態的日志隊列使用戶能夠實時監控設備的相關信息。
基于Task Manager模塊,SMM提供圖形界面和Web Service兩種類型的請求來控制和管理移動設備,以使用戶獲取所需的數據。如果是SMM內部請求,則提供標準的Java API;如果是外部請求,則提供基于XML的標準Web接口。圖3給出了Task Manager的實現流程。在模塊中,上層應用程序通過HTTP協議把標準XML命令發送到SMM,SMM通過內嵌的輕型HTTP Server Jetty處理各種HTTP請求。Jetty接受到標準的XML請求后,把各種XML命令給Task Manager模塊,Task Manager解析XML格式的命令后,通過Java反射得到對應的Task對象。如果Task對象是同步的,則調用Task執行方法,返回相應結果并轉化成標準XML給Jetty服務器;如果Task對象是異步的,則放到任務隊列里面去,返回為空。

任務隊列通過線程按照先進先出的方法來執行任務。為展示Task執行過程,本文給出設備啟動過程展現上層應用程序控制設備的過程。
上層應用通過HTTP(POST)方法把標準的XML命令發送到Jetty服務器上,格式如下:

Task Manager根據"action"的內容,通過Java提供的反射機制得到相應任務Start Device Task實例,并把相應的設備名稱作為參數交給Start Device Task實例。由于Start Device Task是異步的,所以Start Device Task會放到任務隊列中執行并且返回空。當任務隊列執行到Start Device Task任務時,Task Manager日志隊列會實時寫日志改變dev21和dev22的狀態,并返回到SMM的UI。
{$page$}
同理,上層應用也通過HTTP(GET)方法得到設備信息。
由于得到設備信息的Task是同步的,所以Jetty服務器會返回如下格式的XML信息給上層系統,包括:設備名、用戶定義的掃描時間間隔、設備狀態,以及driver、rule和dispatcher等相關信息。同理,外部應用程序可以通過HTTP方法來增加、啟動、更新等操作來控制設備,從而可以動態改變"Device"的Driver,Rule,Dispatcher等屬性,有效篩選、過濾并按照確定的業務規則使數據轉化成需要的、有意義的數據。
1.3 SMM的整合
作為一種面向移動設備的可配置RFID中間件,SMM需要與底層和上層進行有效整合,以發揮其功能。本文給出了一種SMM整合方案,如圖3所示。
本文提出的SMM的底層基于J2ME,可以安裝部署于WinCE、Linux、Symbain等多個面向移動設備的操作系統上。
在SMM整合架構中,SMM安裝在各種不同的移動設備上,讀取不同類型的Tag、Smart Card的數據等,原始數據通過SMM轉化成用戶或者系統需要的數據,然后發送到上層系統中。

2 SMM性能分析
為了分析SMM性能,本文在PC機上使用微軟的移動設備模擬器Device Emulator搭建了WindowsMobile6.0仿真環境,并在仿真環境中安裝Java虛擬機crème.其中:仿真器處理器為ARM9207,主頻400GHz,內存94.16MB.仿真實驗步驟如下。
1)啟動Windows CE的Java虛擬機,系統檢測顯示的內存圖如表1.
2)基于CrEme啟動SMM,系統檢測顯示的內存圖如表2所示。
3)關閉SMM的嵌入式服務Jetty,系統檢測顯示的內存圖如表3所示。

由表1~3可知,運行CrEme的所需的內存為Mc=559KB,SMM運行所需的總內存Mt=1143KB,不開啟Jetty服務器所需的內存為Mnj=847KB,SMM的嵌入式服務器Jetty所需的內存為Mj=Mt-Mnj=296KB.關閉Jetty并除去CrEme消耗的內存,SMM所需的資源Ms=Mt-Mj-Mc=288KB.可見,SMM對資源要求較低,完全可以適合資源有限的移動設備。

3 結語
針對RFID移動設備的發展趨勢,本文提出一種面向移動設備的可靈活配置RFID中間件SMM.SMM可以使上層系統和用戶靈活配置和管理移動設備,并在出現網絡故障時,保證數據同步和一致性。SMM對資源消耗較小,在移動設備資源有限的情況下可以充分利用移動設備的資源,通過過濾、分析等操作處理原始數據,為上層提供有意義的數據,并減少上層應用程序的資源消耗,提高系統效率。