基基于SOA應用JMX和JMS技術(shù)的RFID中間件設計
無(wú)線(xiàn)射頻識別RFID(Radio Frequency Identification)技術(shù)近年來(lái)得到了快速的發(fā)展,目前已進(jìn)入商業(yè)化應用階段。
企業(yè)實(shí)施RFID方案的最終目的是將RFID產(chǎn)生的海量信息為業(yè)務(wù)所用。這就需要解決企業(yè)現有的業(yè)務(wù)系統如何與RFID系統接口的問(wèn)題,包括連接RFID設備、處理RFID數據、將其轉換成業(yè)務(wù)信息等。為了避免因標簽種類(lèi)變化、系統業(yè)務(wù)邏輯改變而需要重新編寫(xiě)業(yè)務(wù)信息的情況,需要將RFID硬件模塊的連接控制、中間數據處理與上層應用軟件分開(kāi),因此引入了RFID中間件的概念。
此外,利用SOA系統具有可擴展性高、可維護性好的特點(diǎn),以便為用戶(hù)提供靈活的維護服務(wù),還引入了面向服務(wù)體系架構SOA(Service Oriented Architecutures)。
基于上述分析,本文提出了一種基于SOA的RFID中間件方案。該方案可把各個(gè)應用RFID技術(shù)的功能抽象成服務(wù),應用基于J2EE構建方法,綜合應用JMX、JMS、Struts等技術(shù)。企業(yè)應用系統通過(guò)請求服務(wù)的方式來(lái)獲取RFID中間件提供的服務(wù)。用XML進(jìn)行數據傳輸,并提供Web Service接口。
1 技術(shù)基礎
1.1 RFID中間件
RFID中間件是實(shí)現RFID硬件設備與應用系統之間數據傳輸、過(guò)濾、數據格式轉換的一種中間程序,將RFID閱讀器讀取的各種數據信息,經(jīng)過(guò)中間件提取、解密、過(guò)濾、格式轉換、導入企業(yè)的管理信息系統,并通過(guò)應用系統反映在程序界面上,供操作者瀏覽、選擇、修改、查詢(xún)。中間件技術(shù)也降低了應用開(kāi)發(fā)的難度,使開(kāi)發(fā)者不需要直接面對底層架構,而是通過(guò)中間件進(jìn)行調用。
RFID中間件是一種消息導向的軟件中間件,信息是以消息的形式從一個(gè)程序模塊傳遞到另一個(gè)或多個(gè)程序模塊。消息可以非同步的方式傳送,所以傳送者不必等待回應。RFID中間件是在企業(yè)應用原有的中間件發(fā)展的基礎上,結合自身應用特性進(jìn)一步擴展并深化了中間件的應用,使得RFID應用系統的開(kāi)發(fā)變得更容易,提高了軟件的可移植性,增強了系統的可維護性和可靠性,所以它的架構設計解決方案是RFID應用的一項極為重要的核心技術(shù)[1]。
目前提供RFID中間件平臺的廠(chǎng)商主要有IBM、Oracle、Microsoft、SAP、Sun公司。對于這些廠(chǎng)商,RFID中間件只是其現有軟件的擴展,其RFID產(chǎn)品可以迅速方便地與各自現有的軟件產(chǎn)品線(xiàn)集成在一起。但缺點(diǎn)是其產(chǎn)品對該廠(chǎng)商其他軟件產(chǎn)品的依賴(lài)性比較大。
1.2 面向服務(wù)的體系結構SOA
面向服務(wù)的體系結構是一種技術(shù)架構風(fēng)格,它代表了一種開(kāi)放的、敏捷的、可擴展的、可組合的架構[2],定義了服務(wù)提供者和消費者之間的松散耦合關(guān)系。其業(yè)務(wù)敏捷的特點(diǎn),幫助企業(yè)把業(yè)務(wù)變得更加靈活,能夠適時(shí)、快速地響應變化。SOA的核心概念就是服務(wù)[3],其基本結構如圖1所示。其中包含服務(wù)的3個(gè)基本角色:服務(wù)提供者、服務(wù)請求者和服務(wù)注冊。在這些角色之間使用了3種操作:服務(wù)發(fā)布、服務(wù)發(fā)現和服務(wù)綁定。作為SOA的一種實(shí)現技術(shù),Web Services提供了基于XML的標準接口,具有完好的封裝性、松散的耦合性、協(xié)議規范的標準性以及高度的可集成性等特點(diǎn),能夠良好地滿(mǎn)足SOA應用模式的需求。
Java管理擴展JMX(Java Management Extensions)是一個(gè)為應用程序、設備、系統等植入管理功能的框架。在JMX規范中,管理組件是一個(gè)能代表管理資源的Java對象,遵從一定的設計模式,實(shí)現該規范定義的特定的接口。該定義保證了所有的管理組件以一種標準的方式來(lái)表示被管理資源。管理接口就是被管理資源暴露出的一些信息,通過(guò)對這些信息的修改能夠控制被管理資源。管理接口包括:能被接觸的屬性值、能夠執行的操作、能發(fā)出的通知事件等[4]。
JMS(Java Message Service)是訪(fǎng)問(wèn)企業(yè)消息系統的標準API,定義了Java中訪(fǎng)問(wèn)消息中間件的接口,但JMS只是接口,并沒(méi)有給予實(shí)現,實(shí)現JMS接口的消息中間件稱(chēng)為JMS提供者(JMS Provider)。在JMS框架中運轉的方法如下:
(1)得到1個(gè)JNDI初始化上下文(Context)。
(2)根據上下文以查找1個(gè)連接工廠(chǎng)。
(3)從連接工廠(chǎng)得到1個(gè)連接(Connect)。
(4)通過(guò)連接以建立1個(gè)會(huì )話(huà)(Session)。
(5)查找目的地(Topic/Queue)。
(6)根據會(huì )話(huà)以及目的地以建立消息制造者(TopicPub
lisher/QueueSender)和消費者(TopicSubscrib-er/QueueReceiver)。
2 基于SOA的RFID中間件架構
利用SOA松耦合、面向業(yè)務(wù)的特點(diǎn),結合RFID中間件實(shí)現的應用系統集成的方案可提供豐富的接口,能夠幫助實(shí)現對RFID設備的管理以及對數據的處理,簡(jiǎn)化了對底層設備應用的支持,避免了對底層設備的低級別接口的處理。利用Web Service技術(shù)實(shí)現RFID中間件與企業(yè)系統的集成,完成兩者的松耦合集成。
基于SOA的RFID中間件架構,其基礎架構層分為設備管理層、事件處理層和服務(wù)接口層,并通過(guò)Web Service技術(shù)包裝了每1層相應的功能,且進(jìn)行了具體實(shí)現。本文重點(diǎn)介紹該RFID中間件架構中的基礎架構的3個(gè)功能層[5]。這3個(gè)層次有著(zhù)明確的功能劃分和層間的交互接口。RFID中間件架構如圖2所示。
中間件設計包括RFID設備管理組件和事件過(guò)程管理組件。RFID設備管理組件是分布式的代理,負責第1級的事件過(guò)濾;設備管理包括設備詢(xún)問(wèn)器,對每1個(gè)閱讀器和傳感器設備,代理必須互相作用。過(guò)程管理組件是通過(guò)RFID事件下一級的過(guò)濾,把事件放置到交易環(huán)境中,然后發(fā)布應用層事件ALE(Application Layer Event)[5]。
2.1設備管理層
設備管理層位于架構的最底層,直接與閱讀器交互,實(shí)現的主要功能包括:
(1)采集射頻卡上的數據。
(2)對于來(lái)自不同類(lèi)型的閱讀器的數據進(jìn)行適配處理,得到統一的、格式化的數據,并進(jìn)行數據校驗。
(3)將校驗無(wú)誤的數據按照用戶(hù)定義的協(xié)議進(jìn)行封包,并將消息包發(fā)送到事件處理層的消息系統。
依據其實(shí)現的功能,分別針對射頻卡閱讀器模塊、閱讀器接口、數據校驗和數據打包4個(gè)方面進(jìn)行研究和開(kāi)發(fā)。閱讀器模塊是根據硬件供應商提供的規范進(jìn)行編碼實(shí)現的;閱讀器接口主要解決將來(lái)自協(xié)議格式的數據轉化為系統所需要的EPC碼;數據校驗采用CRC校驗;數據打包先依據獲取的卡片編碼中“數據分類(lèi)”內容,判斷出該標簽數據屬于哪種類(lèi)型,然后按照這種數據類(lèi)型將標簽數據封裝成相應的消息包。
由于每個(gè)ALE閱讀器事件流可能來(lái)自多個(gè)物理設備配置表,因此設備管理器為每個(gè)設備表創(chuàng )建1個(gè)詢(xún)問(wèn)器,并通知詢(xún)問(wèn)器哪種傳感器被綁定到指定的閱讀器上。詢(xún)問(wèn)器發(fā)送傳感器事件流到設備管理器,設備管理器將1個(gè)或多個(gè)傳感器事件流構造成閱讀器事件。設備管理器把初步處理的閱讀器事件發(fā)送到ALE服務(wù)器。
詢(xún)問(wèn)器代理:1個(gè)設備管理器的配置由它管理的設備和它要咨詢(xún)的詢(xún)問(wèn)器組成,然后與它所對應的設備管理器交互。每個(gè)設備概要表由物理設備屬性和詢(xún)問(wèn)器配置組成。物理設備屬性是被命名過(guò)的傳感器(例如天線(xiàn)和1個(gè)金屬傳感器)。
事件信息空間:事件信息空間類(lèi)似于公共的容錯事件信息經(jīng)紀人。它支持異步接收來(lái)自設備管理器的事件、ALE事件以及其他來(lái)自事件過(guò)程管理的配置需求。事件信息空間同時(shí)提供一個(gè)存儲轉發(fā)機制,確保重要的事件在中斷的網(wǎng)絡(luò )或其他組件失效的情況下不丟失[5]。
在系統中,將每個(gè)閱讀器模塊的遠程方法調用封裝為1個(gè)管理組件(MBean)作為JMX服務(wù)器的實(shí)例注冊到JMX服務(wù)器中。通過(guò)JMX框架對閱讀器進(jìn)行監控和管理,使RFID中間件系統能提供管理、監控閱讀器的功能。本部分描述為閱讀器管理組件添加時(shí)間服務(wù),以達到定時(shí)控制閱讀器的目的。
2.2 事件處理層
在RFID系統中,一方面是各種應用程序以不同的方式頻繁地從RFID系統中取得數據;另一方面卻是有限的網(wǎng)絡(luò )帶寬,其存在的矛盾,使其有必要設計1套消息傳遞系統,使設備管理層產(chǎn)生的事件能夠傳遞到消息系統中,由事件管理過(guò)程進(jìn)行處理,然后把數據傳遞到相關(guān)的應用系統。在這種模式下,閱讀器不必關(guān)心哪個(gè)應用系統需要什么數據。同時(shí),應用程序也不需要維護與各個(gè)閱讀器之間的網(wǎng)絡(luò )通道,僅需要將需求發(fā)送到消息系統中即可。由此,設計出的消息系統應具有如下功能:(1)數據緩存功能;(2)基于內容的路由功能;(3)數據分類(lèi)存儲功能[6]。
下面將描述創(chuàng )建一個(gè)MBean來(lái)實(shí)現一個(gè)數據處理節點(diǎn)。消息組件可以按照MBean來(lái)部署。消息處理組件執行功能:從源隊列中獲取消息,對消息執行處理,然后將結果消息放置到目標隊列。消息處理UML圖如圖3所示。
JBossMQ是通過(guò)xml文件jbossmq-destinations-service.xml進(jìn)行配置的。以下是獲得JBOSS JNDI初始化上下文(Context)的代碼:
Hashtable props=newHashtable();
props.put(Context.INITIAL CONTEXT FACTORY,"org.jnp.interfaces.NamingContextFactory");
props.put (Context. PROVIDER URL, ip +":1099");
props.put("java.naming.rmi.security.manager","yes");
props.put(Context.URL PKG PREFIXES,"org. jboss.naming");
Context context=new InitialContext(props);
來(lái)自消息系統的消息以臨時(shí)XML文件的形式和磁盤(pán)文件方式保存,供數據接口使用。消息系統完成消息緩存、分類(lèi)整合、路由轉發(fā)、臨時(shí)存放等操作[4]。
事件過(guò)程管理EPM(Event Process Managment)由ALE服務(wù)、配置管理、復雜事件過(guò)程以及交易規則執行組成,對EVP的訪(fǎng)問(wèn)能通過(guò)HTTP、JMS以及網(wǎng)絡(luò )服務(wù)接口實(shí)現。
EPM登記/訂閱其感興趣的事件,當在信息空間中有事件發(fā)生時(shí),即會(huì )通知EPM,一旦接收到這些事件,隨后會(huì )應用復雜事件處理(過(guò)濾器),結合交易規則對這些事件進(jìn)行處理。另一種情況下是:外部的客戶(hù)端(如EPC-IS)已經(jīng)注冊接收ALE,這些過(guò)濾后的事件會(huì )被發(fā)送到ALE客戶(hù)端指定的位置。
2.3 服務(wù)接口層
來(lái)自事件處理層的數據最終是分類(lèi)的XML文件。同一類(lèi)型的數據以XML文件的形式保存,并提供給相應的1個(gè)或多個(gè)應用程序使用。而服務(wù)接口層主要是對這些數據進(jìn)行過(guò)濾、入庫操作,并提供訪(fǎng)問(wèn)相應數據庫的服務(wù)接口。具體操作如下:
(1)將存放在磁盤(pán)上的XML文件進(jìn)行批量入庫操作,當XML數據量達到一定數量時(shí),啟動(dòng)數據入庫功能模塊,將XML數據移植到各種數據庫中。
(2)在數據移植前將重復的數據過(guò)濾掉。
(3)為企業(yè)內部和企業(yè)外部訪(fǎng)問(wèn)數據庫提供Web Services
接口。
其中,數據過(guò)濾過(guò)程是在處理臨時(shí)存放的XML文件的過(guò)程中完成的。方法是:將同一個(gè)卡號的多條記錄按照讀入的時(shí)間戳進(jìn)行比較,若相鄰記錄的時(shí)間戳差值小于用戶(hù)定義的閾值,則認為重復讀取發(fā)生,剔出后1條記錄。依次類(lèi)推,剔出掉所有冗余數據。利用Web Services技術(shù)將對數據庫的訪(fǎng)問(wèn)以服務(wù)的形式發(fā)布,供企業(yè)內部應用程序和企業(yè)合作伙伴調用[2]。以數據過(guò)濾為例,其核心代碼如下:
for(int i=1;irowcount;i++)
{span=EndTime.Subtract(StartTime);
spantiIDe=sPan.Seconds; //相鄰記錄的時(shí)間戳之差
if(spantime=0.002)
{subtime[i]=i;}
//若相鄰時(shí)間戳差值小于2 ms,
//標記第2條記錄為冗余數據
else subtime[i]=0;}
for(int j=1;jrowcount;j++) //刪除冗余記錄
{if(subtime[j].ToString()!="0")
{ds.Tables[0].Rows[j].Delete();j=j-1;
rowcount=rowcount11;}
}
以下是服務(wù)接口層向應用系統發(fā)送SOAP響應,返回處理結果的部分代碼[7]。
report xmlns="">
process procInsID="503" givenID="231" givenName="
ShipOut">
event eventType="report_tag_event">
header>Product Quantity Match Success
/header>
status>success/status>
tagList>
tag ID="00110011"detectTime="2008-11-01 T13:13:
00.110+08:00"/>
/tagList>
3 RFID中間件的實(shí)現及測試
RIFD中間件系統開(kāi)發(fā)工具采用Eclipse3.2,應用服務(wù)器軟件采用JBOSS4.0, Web容器為T(mén)omcat5.5。此外,服務(wù)器端采用了基于Struts的MVC多層次結構框架,數據服務(wù)層則采用MySQL5.0數據庫。
實(shí)驗中,終端通過(guò)485網(wǎng)絡(luò )組網(wǎng),應用系統使用的是倉庫管理系統。倉庫管理系統作為服務(wù)請求者,根據服務(wù)接口層公布的入庫信息核對服務(wù)WSDL,得到該服務(wù)的接口定義和服務(wù)端偵聽(tīng)地址,由入庫管理模塊通過(guò)服務(wù)代理接口向Web服務(wù)發(fā)送SOAP請求消息,請求入庫信息核對服務(wù),Web服務(wù)平臺收到該服務(wù)請求后,向RFID中間件發(fā)送消息,創(chuàng )建一個(gè)出庫信息核對服務(wù)的實(shí)例,設備管理層根據服務(wù)請求參數,啟動(dòng)相應的RFID閱讀器讀取標簽信息。然后將讀取的標簽信息經(jīng)處理后打包傳給事件處理層,根據服務(wù)請求的參數與捕獲的標簽信息進(jìn)行核對處理,處理后向服務(wù)接口層返回核對數據正確或者錯誤的信息,如圖4所示。最后,服務(wù)接口層向倉庫管理系統發(fā)送SOAP響應,返回處理結果[5]。
實(shí)驗表明,原來(lái)的應用系統僅僅支持1種固定卡型的閱讀器,采用RFID中間件以后,可以在1個(gè)系統中采用各種卡型的閱讀器,而上層程序不需要再進(jìn)行修改,增加了系統的可擴展性和易維護性,節約了時(shí)間和成本。系統穩定性也有大的提高,有效解決了企業(yè)應用中所關(guān)心的問(wèn)題。
本文提出了一個(gè)基于SOA,綜合應用JMX、JMS等技術(shù)的RFID中間件架構,并說(shuō)明了RFID中間件各部分的含義和作用及基礎架構的實(shí)現。這種中間件結構能很好地屏蔽低端各種物理設備的信息。由于采取了模塊化的結構,可以根據需要進(jìn)行裁減,在需要的時(shí)候再加入相應的模塊,例如,可根據需要是否添加認證和安全模塊。通過(guò)Web Service,可實(shí)現對RFID中間件更高層次包裝,保證了RFID基礎架構中3個(gè)功能層之間的相互獨立和協(xié)同工作。
評論