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