張小銀 陳國勝 時刻
【摘要】針對目前校園調(diào)頻發(fā)射臺使用中存在的需要專人值守操作問題,提出一種由聽眾在線點播,發(fā)射臺按時自動播放,實現(xiàn)無需專人值守的解決方案,在應(yīng)用Flex和JavaEE中的Spring、Hibernate框架等技術(shù)基礎(chǔ)上,詳細(xì)闡述了方案中的關(guān)鍵技術(shù),實現(xiàn)了基于Flex的調(diào)頻發(fā)射臺點播系統(tǒng)。系統(tǒng)已在某高校外語聽力教學(xué)中正常運行,效果較好。
【關(guān)鍵詞】調(diào)頻發(fā)射臺;點播系統(tǒng);解決方案;校園應(yīng)用
【中圖分類號】G40-057 【文獻(xiàn)標(biāo)識碼】A 【論文編號】1009—8097(2013)04—0068—04
引言
校園調(diào)頻發(fā)射臺由小功率無線調(diào)頻廣播發(fā)射機(jī)、饋電系統(tǒng)、發(fā)射天線構(gòu)成。具有音響效果好、覆蓋面積大,成本低、使用便捷等特點,在學(xué)校教學(xué)、管理和校園文化生活中發(fā)揮了重要的作用。為便于管理、提高效率,針對調(diào)頻發(fā)射臺在實際使用中存在的需要專人管理節(jié)目播放等問題,根據(jù)學(xué)校實際情況,設(shè)計開發(fā)了調(diào)頻發(fā)射臺點播系統(tǒng),系統(tǒng)結(jié)構(gòu)模型如圖1所示。
調(diào)頻發(fā)射臺點播系統(tǒng)采用Flex和Java技術(shù)實現(xiàn)。Flex是RIA領(lǐng)域的佼佼者,具備強(qiáng)大的UI渲染能力。Flex技術(shù)在表現(xiàn)力、交互性、跨平臺性以及與應(yīng)用服務(wù)器的通信方面均超越了其他RIA(如Ajax等)技術(shù)?;赟2SH(Struts2-Spring-Hibernate)框架的JavaEE應(yīng)用已經(jīng)得到廣泛應(yīng)用。參考JavaEE的S2SH架構(gòu),考慮到Flex與Struts2在功能上重合,采用Flex代替Struts2,本文采用Flex和Java組合應(yīng)用的整合架構(gòu)方案,即由Flex框架承擔(dān)展現(xiàn)層邏輯的工作,Spring框架用來構(gòu)建業(yè)務(wù)邏輯層,Hibernate框架用來建立持久層完成數(shù)據(jù)存取的工作。將三者進(jìn)行整合,保證了應(yīng)用系統(tǒng)的運行效率與可維護(hù)性。
一 相關(guān)技術(shù)原理
1 Flex技術(shù)
Flex能輕松快速地構(gòu)建界面友好直觀,用戶方便易用,而且可以脫機(jī)使用和強(qiáng)大高效的應(yīng)用程序。
Flex是高效率的開放源碼框架。它提供了更加簡潔的組件開發(fā)機(jī)制,能快速構(gòu)建新的組件。
Flex及其框架使用了一套產(chǎn)生、廣播、處理事件的機(jī)制,被傳遞的信息都是以事件流的方式處理。Flex中的事件觸發(fā)機(jī)制基于觀察者模式來實現(xiàn)的。
Flex使用數(shù)據(jù)綁定技術(shù),當(dāng)數(shù)據(jù)源對象的數(shù)據(jù)發(fā)生變化時,目標(biāo)對象的數(shù)據(jù)會自動更新,不需要再編寫代碼去強(qiáng)制更新。
Flex使用共享對象在客戶端或服務(wù)器端保存一些特定的數(shù)據(jù),然后在多個客戶端swf文件和對象之間實現(xiàn)數(shù)據(jù)共享。
2 JavaEE的Spdng與Hibernate框架
輕量級JavaEE中的Spring和Hibernate兩種框架技術(shù)在當(dāng)今各自的領(lǐng)域中都是應(yīng)用廣泛而且成熟的技術(shù),它們針對特定領(lǐng)域開發(fā)都提供了很好的解決方案。
在Hibernate與spring的整合框架中,Spring充當(dāng)了一個JavaBean容器的作用,Spring使用IOC和AOP技術(shù)接管了Hibernate的DAO、事務(wù)和Service業(yè)務(wù)層,從而能充分地管理事務(wù)和代理Request請求。經(jīng)過IOC容器的處理后,針對面向接口的編程使軟件項目的分層更明確。
由Spring統(tǒng)一管理Hibernate,Spring提供注入Hibernate所需要的基礎(chǔ)資源。此時,Spring接管如下內(nèi)容:Hibernate創(chuàng)建SessionFactory必需的DataSource,執(zhí)行持久化必需的Session和訪問持久層必需的事務(wù)控制等,而不需通過代碼進(jìn)行控制:SessionFactory和TransactionManager作為Spring容器中的bean,這些bean放在applicationContext.xml配置文件中管理,而把數(shù)據(jù)庫連接的內(nèi)容放在hibemate.cfg.xml配置文件中來管理。這樣可為系統(tǒng)提供很好的解耦。
Spring對Hibernate的DAO進(jìn)行了非常好的封裝,使開發(fā)者完全不必關(guān)注于事務(wù),可以把精力更多地集中在業(yè)務(wù)處理方面。繼承HibemateDaoSupport的DAO類具有Spring封裝Hibernate操作數(shù)據(jù)庫的完全功能,
繼承HibemateDaoSupport的目的是讓Spring管理事務(wù),DAO具有面向編程接口的特點,多態(tài)性使DAO類的實現(xiàn)多樣化。在Spring管理下,數(shù)據(jù)庫操作、事務(wù)處理也都變成自動化了。
二 系統(tǒng)設(shè)計
1系統(tǒng)總體架構(gòu)設(shè)計
在Flex和Java的應(yīng)用中,“展現(xiàn)層”邏輯完全運行在客戶端的Flash虛擬機(jī)中,而“業(yè)務(wù)邏輯層”和“數(shù)據(jù)持久層”邏輯則運行在服務(wù)器端的Java虛擬機(jī)中??蛻舳讼到y(tǒng)和服務(wù)器端系統(tǒng)完全分離,各自運行在不同的CPU和虛擬機(jī)中。因此,F(xiàn)lex和Java組合開發(fā)的應(yīng)用系統(tǒng)為異構(gòu)的分布式系統(tǒng)。
Flex和Java應(yīng)用的系統(tǒng)架構(gòu)圖如圖2所示。
展現(xiàn)層利用Flex框架技術(shù),可以實現(xiàn)顯示與邏輯的分離,代碼清晰易讀性及可維護(hù)性高。
Spring負(fù)責(zé)業(yè)務(wù)邏輯層,通過Spring配置文件定義應(yīng)用程序的業(yè)務(wù)邏輯,實現(xiàn)應(yīng)用程序邏輯與代碼的分離。
Hibernate數(shù)據(jù)持久層簡化了數(shù)據(jù)庫操作,節(jié)約了開發(fā)人員編寫大量的SQL語句所花費的時間,縮短了軟件開發(fā)周期。
2 數(shù)據(jù)庫設(shè)計
根據(jù)業(yè)務(wù)需求和功能邏輯分析,確定調(diào)頻發(fā)射臺點播系統(tǒng)采用以下數(shù)據(jù)表:用戶表(Users)、媒體節(jié)目表(Mediafile)、點播預(yù)約表(Playreservation)、固定節(jié)目表(Fixedschedule)、公告通知表(Announcement)、用戶日志表(Userlog)。其中部分?jǐn)?shù)據(jù)表之間包含相關(guān)關(guān)系。
用戶表存放用戶的詳細(xì)信息,其中字段包括用戶標(biāo)識、用戶名、用戶口令、用戶權(quán)限等級、用戶實名、工號(學(xué)號)、身份證號、部門、郵件地址、用戶類別、注冊時間、注冊IP地址、注冊MAC地址、手機(jī)號、固定電話、是否鎖定、性別、地址、登錄次數(shù)等信息。用戶權(quán)限等級設(shè)定如下:超級管理員為1,普通管理員為2,普通用戶為3,廣播發(fā)射用戶為4。
媒體節(jié)目表存放媒體節(jié)目的詳細(xì)信息,其中字段包括節(jié)目標(biāo)識、節(jié)目名稱、節(jié)目類別、節(jié)目簡介、節(jié)目文件名、節(jié)日時長、上傳用戶標(biāo)識、上傳時間、文件大小、存放路徑、是否審核、審核人標(biāo)識、瀏覽次數(shù)、點播次數(shù)、播放次數(shù)等。
點播預(yù)約表存放節(jié)目被點播的有關(guān)信息,其中字段包括點播標(biāo)識、點播用戶標(biāo)識、點播節(jié)目標(biāo)識、操作時間、預(yù)約播放時間、節(jié)目時長、點播級別、點播結(jié)果等信息。
固定節(jié)目表存放管理員發(fā)布的固定或特殊播放節(jié)目的信息,其中字段包括固定(發(fā)布)節(jié)目標(biāo)識、發(fā)布人標(biāo)識、發(fā)布節(jié)目標(biāo)識、操作時間、播放時間、節(jié)目時長等信息。
用戶日志表存放權(quán)限用戶(包括普通用戶及管理員)的登錄、注銷等信息,還存放管理員一些關(guān)鍵操作的日志信息。
公告通知表存放由管理員發(fā)布的一些通知公告信息。
3 系統(tǒng)功能模塊設(shè)計
本系統(tǒng)分為五大功能模塊,如圖3所示。
(1)登錄模塊:普通用戶和管理員可利用用戶名或密碼登錄系統(tǒng),通過驗證方可進(jìn)入系統(tǒng);匿名用戶直接點“匿名登錄”即可,不用經(jīng)過驗證。
(2)節(jié)目上傳模塊:普通用戶及管理員用戶均可上傳節(jié)目(只能上傳mp3格式的聲音文件)。節(jié)目上傳以后,必須等待管理員經(jīng)視聽審核方可被點播。匿名用戶不能上傳節(jié)目。
(3)點播節(jié)目模塊:所有進(jìn)入系統(tǒng)的用戶(包括匿名用戶)可以根據(jù)已有節(jié)目列表來點播節(jié)目。點播策略為:正在廣播的節(jié)目不能中斷:管理員可以發(fā)布節(jié)目(一般為固定和特殊節(jié)目),權(quán)限最高,普通用戶次之,匿名用戶最低;點播時間沖突時,權(quán)限高的用戶可以點播成功,權(quán)限低的用戶點播的節(jié)目被取消。
(4)廣播節(jié)目模塊:單獨設(shè)定廣播發(fā)射用戶,在發(fā)射機(jī)所在客戶機(jī)上登錄系統(tǒng),此時客戶機(jī)的聲卡輸出即作為調(diào)頻發(fā)射機(jī)的音頻源。根據(jù)服務(wù)器數(shù)據(jù)庫中點播表的播放時間,采用定時器方式來定時播放節(jié)目。系統(tǒng)輪詢點播節(jié)目表,輪詢時間間隔可根據(jù)實際情況設(shè)定為2秒或5秒等。一般每個校區(qū)設(shè)置有一臺發(fā)射機(jī)。由于采用定時器,發(fā)射機(jī)之間可實現(xiàn)同步。無點播節(jié)目(可定義為距下一個點播節(jié)目時間長度大于某個時間間隔,如10秒)時,可從節(jié)目表中隨機(jī)選擇節(jié)目來廣播,直至點播節(jié)目播放時間點到來為止。
(5)管理模塊:包含幾個管理子模塊,如:用戶管理子模塊、節(jié)目管理子模塊、點播管理子模塊、日志管理子模塊、公告管理子模塊等,為管理員提供對各種資源(或?qū)ο螅┻M(jìn)行增刪改查等管理功能。
三系統(tǒng)相關(guān)問題研究及實現(xiàn)
1 Flex客戶端和Java服務(wù)器端之間的通信
本系統(tǒng)中,客戶端和服務(wù)器端的通信(遠(yuǎn)程過程調(diào)用,即RPC)采用HTFP協(xié)議。大量數(shù)據(jù)通信時是采用RemoteObject組件完成的,使用AMF(Action Message Format)格式交換數(shù)據(jù),同時需要采用第三方框架配合。AMF是Adobe公司定義的一種二進(jìn)制數(shù)據(jù)格式,其數(shù)據(jù)轉(zhuǎn)換和傳輸效率更高,第三方框架用于解釋AMF格式數(shù)據(jù)。
在Java平臺下,本系統(tǒng)第三方框架采用Adobe官方開源軟件BlazeDS,安裝配置在服務(wù)器端。
2 Flex客戶端和Java服務(wù)器端的整合
由圖2可知,F(xiàn)lex客戶端與Java服務(wù)器端整合的關(guān)鍵就是Flex與Spring的整合。
Flex與Spring的整合需要一個工廠類SpringFaetory,負(fù)責(zé)為Flex目的文件提供已經(jīng)完成初始化(依賴注入)的Springbeans實例。
在BlazeDS的services-config.xml文件中添加factory元素,指向該工廠。
在應(yīng)用中,services-config.xml文件有如下配置:
class="cn.edu.ahut,fmrs.flex_spring.Spring Factory"/>
此外需要配置BlazeDS的remoting-config.xml文件,該文件定義各個目的文件元素,指定Spring工廠以及對應(yīng)的業(yè)務(wù)層服務(wù)組件bean的id。
如對媒體節(jié)目來說,remoting-config.xml文件有如下配置:
mediafileAction
這樣,通過BlazeDS,F(xiàn)lex客戶端就可以實現(xiàn)通過遠(yuǎn)程方法調(diào)用的方式訪問服務(wù)器端Spring提供的組件服務(wù)。
3異構(gòu)系統(tǒng)之間遠(yuǎn)程數(shù)據(jù)的請求與調(diào)用
Flex客戶端使用RomoteObjecct對象通過BlazeDS框架調(diào)用服務(wù)器端的Remote Facade對象中的方法,Remote Facade對象方法則調(diào)用“業(yè)務(wù)邏輯層”中“業(yè)務(wù)邏輯對象”或“業(yè)務(wù)邏輯服務(wù)對象”的方法完成客戶端請求。此為遠(yuǎn)程外觀(Remote Facade)模式,是客戶端和服務(wù)器端的接口。
“DTO/VO模式用于遠(yuǎn)程方法調(diào)用過程中的傳輸數(shù)據(jù),DTO(服務(wù)器傳輸對象)是服務(wù)器端普通Java對象,它不承擔(dān)任何業(yè)務(wù)邏輯;VO(值對象)是客戶端ActionScript對象,它只承擔(dān)數(shù)據(jù),不含任何業(yè)務(wù)界面邏輯;DTO與VO——對應(yīng),成對出現(xiàn)”。
在客戶端與服務(wù)器端的通信過程中,VO和DTO兩種對象通過遠(yuǎn)程方法調(diào)用,經(jīng)過BlazeDS框架對兩種對象進(jìn)行相互轉(zhuǎn)換,完成異構(gòu)系統(tǒng)之間數(shù)據(jù)的請求與調(diào)用。
以刪除媒體文件處理為例,客戶端在進(jìn)行有關(guān)配置后,采用MediafileAction.deletemediafile(mediafile)語句來調(diào)用服務(wù)器端的deletemediafile(Mediafile mediafile)方法來刪除媒體文件;前者語句中的參數(shù)mediafile即為客戶端VO對象,后者方法中的參數(shù)mediafile即為服務(wù)器端VTO對象。
4 系統(tǒng)權(quán)限管理的實現(xiàn)
(1)權(quán)限用戶登錄成功后,能獲取到用戶權(quán)限等級,等級為1至4級。匿名用戶登錄后,用戶權(quán)限等級設(shè)為5。
(2)登錄用戶通過菜單導(dǎo)航條可以進(jìn)入不同功能菜單。菜單導(dǎo)航條通過MenuBar、XMLList、State等組件實現(xiàn)。MenuBar是菜單組件;XMLList組件提供數(shù)據(jù)集,數(shù)據(jù)集表示菜單的具體項和子項;單擊每個菜單項都跳轉(zhuǎn)至相應(yīng)的狀態(tài)(或頁面),不同的狀態(tài)由State組件提供。
根據(jù)登錄用戶的用戶權(quán)限等級進(jìn)入到不同的狀態(tài),也即進(jìn)入到不同的(子)菜單,即擁有了不同權(quán)限。
為提高程序的可重用性,采用對某個狀態(tài)(或頁面)移除或增加部分組件來實現(xiàn)。
(3)采用Flex共享對象在本地保存用戶登錄信息,用戶注銷時,清除本地共享對象。
5 發(fā)射客戶端廣播的實現(xiàn)
采用Flex 4系統(tǒng)Sound類的play方法播放服務(wù)器上的rap3格式文件,使發(fā)射客戶端聲卡發(fā)出聲音,經(jīng)過發(fā)射機(jī)后廣播出去。采用Sound類的stop方法停止播放節(jié)目。
6 系統(tǒng)實現(xiàn)環(huán)境
調(diào)頻發(fā)射臺點播系統(tǒng)采用CentOS 5.5系統(tǒng),Web服務(wù)器采用Tomcat 7.0,數(shù)據(jù)庫采用MySQL 5.0,編程語言采用Java 6.0,開發(fā)框架采用Spring 3.0,Hibernate 3.3,F(xiàn)lex 4,BlazeDS 4.0。
Tomcat和MySQL部署在一臺服務(wù)器上,發(fā)射客戶端采用兩臺PC機(jī),分別放置在兩個校區(qū),連接到各自的發(fā)射機(jī)上。
實際應(yīng)用環(huán)境中,考慮到網(wǎng)絡(luò)延遲產(chǎn)生的問題,兩個發(fā)射機(jī)采用不同的頻率發(fā)射廣播。由于采用無人值守方式,發(fā)射客戶端系統(tǒng)還考慮每天定時開機(jī)關(guān)機(jī)問題,以及在網(wǎng)絡(luò)瞬間斷開重連后播放模塊的自動啟動問題。
系統(tǒng)運行實際效果截圖(局部)如圖4所示。
四 結(jié)束語
根據(jù)國家關(guān)于校園調(diào)頻廣播的頻率分配,我校調(diào)頻廣播發(fā)射機(jī)工作在67MHz至87MHz之間的米波波段。這個波段的接收機(jī)使用很短的天線就可以獲得滿意的接收效果,很適合英語聽力耳機(jī)附加的調(diào)頻收音機(jī)功能來收聽高保真的英語聽力練習(xí)或文藝類節(jié)目。另外,還可以作為鄉(xiāng)鎮(zhèn)小型廣播電臺,用來自辦節(jié)目或轉(zhuǎn)播省市廣播電臺的節(jié)目。該系統(tǒng)在企業(yè)應(yīng)用開發(fā)中也會有很好的借鑒和示范作用。目前,該校園調(diào)頻發(fā)射臺點播系統(tǒng)運行正常。