葛萬(wàn)標(biāo) 李江冰
摘要:隨著WEB工程的應(yīng)用,在使用的過(guò)程中會(huì)遇到大量的數(shù)據(jù)或者文件的生成,同時(shí)在處理數(shù)據(jù)或者文件的時(shí)候,需要?jiǎng)討B(tài)的展示處理的結(jié)果,這就增加了WEB工程的復(fù)雜性和難度.異步處理數(shù)據(jù)的DWR框架和Quartz定時(shí)調(diào)度有效的解決了這一問(wèn)題.本文簡(jiǎn)要闡述Quartz與DWR的原理以及在WEB工程中的綜合應(yīng)用。
關(guān)鍵詞: DWR;Quartz;WEB工程
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)28-6761-03
在WEB工程中,為了提高整個(gè)應(yīng)用的功能性問(wèn)題,有些工作需要間隔一段時(shí)間去執(zhí)行,并且需要將執(zhí)行的結(jié)果呈現(xiàn)出來(lái),將處理的過(guò)程動(dòng)態(tài)的加載,提高工作效率,同時(shí)也增加客戶的友好性體驗(yàn),以文件的生成為例,Quartz主要是負(fù)責(zé)定時(shí)調(diào)度任務(wù)創(chuàng)建文件,DWR框架用來(lái)獲取處理結(jié)果,并給出提示信息.
1 Quartz與DWR的原理
1.1 Quartz作業(yè)調(diào)度框架
Quartz是OpenSymphony開源組織在Job scheduling領(lǐng)域又一個(gè)開源項(xiàng)目,它可以與J2EE與J2SE應(yīng)用程序相結(jié)合也可以單獨(dú)使用。Quartz可以用來(lái)創(chuàng)建簡(jiǎn)單或?yàn)檫\(yùn)行十個(gè),百個(gè),甚至是好幾萬(wàn)個(gè)Jobs這樣復(fù)雜的程序.Jobs可以做成標(biāo)準(zhǔn)的Java組件或 EJBs.
Quartz提供了強(qiáng)大任務(wù)調(diào)度機(jī)制, 允許開發(fā)人員靈活地定義觸發(fā)器的調(diào)度時(shí)間表,并可以對(duì)觸發(fā)器和任務(wù)進(jìn)行關(guān)聯(lián)映射.提供了調(diào)度運(yùn)行環(huán)境的持久化機(jī)制,可以保存并恢復(fù)調(diào)度現(xiàn)場(chǎng),即使系統(tǒng)因故障關(guān)閉,任務(wù)調(diào)度現(xiàn)場(chǎng)數(shù)據(jù)并不會(huì)丟失.
Quartz的幾個(gè)核心概念:
CronTriggerBean:調(diào)度觸發(fā)器:觸發(fā)器定義了對(duì)作業(yè)的調(diào)度,一旦被調(diào)用就會(huì)根據(jù)cron表達(dá)式里面的設(shè)置對(duì)作業(yè)進(jìn)行調(diào)度.cron表達(dá)式包括以下7個(gè)字段:秒、分、小時(shí)、月內(nèi)日期、月、周內(nèi)日期、年(可選字段),主要設(shè)置作業(yè)運(yùn)行的時(shí)間
MethodInvokingJobDetailFactoryBean:作業(yè)工廠.觸發(fā)的具體的作業(yè)執(zhí)行的方法, 在具體執(zhí)行待調(diào)度任務(wù)的method前后加入公用邏輯,比如記錄開始、結(jié)束日期、判斷該task是否由該臺(tái)服務(wù)器執(zhí)行、任務(wù)執(zhí)行完成之后將運(yùn)行結(jié)果進(jìn)行持久化或者發(fā)email等
SchedulerFactoryBean:調(diào)度器.調(diào)度器可以包含具體的JobDetail+CronTrigger的組合,其中一個(gè)JobDetail可以和多個(gè)CronTrigger關(guān)聯(lián)
1.2 DWR框架
DWR是一個(gè)便于從JavaScript調(diào)用Java函數(shù)和從Java調(diào)用JavaScript函數(shù)遠(yuǎn)程過(guò)程調(diào)用協(xié)議,它可以允許運(yùn)行在瀏覽器中的代碼執(zhí)行WEB服務(wù)器上的代碼,用JavaScript腳本語(yǔ)言直接調(diào)用后臺(tái)業(yè)務(wù)商業(yè)組件的解決方案,采用無(wú)刷新頁(yè)面的方式從遠(yuǎn)程服務(wù)端獲取數(shù)據(jù),不僅提高頁(yè)面的響應(yīng)時(shí)間,而且也不會(huì)影響到用戶因?yàn)樗⑿马?yè)面帶來(lái)的心理感覺(jué).
DWR采用純JavaScript在瀏覽器中實(shí)現(xiàn),并且會(huì)根據(jù)瀏覽器類型采用最高的執(zhí)行效率的遠(yuǎn)程調(diào)用機(jī)制,同時(shí)WEB開發(fā)人員必須配置哪些JAVA類可以安全的被外部使用
2 在WEB工程中的綜合應(yīng)用
2.1配置調(diào)度任務(wù)
<!—lazy-init設(shè)置為false表明容器啟動(dòng)就會(huì)自動(dòng)加載—>
<!—可以定義多個(gè)調(diào)度觸發(fā)器—>
<!— 定時(shí)生成文件 —>
<!—createFilesActuatorBean為具體的方法—>
<!— 每隔30秒執(zhí)行一次 創(chuàng)建文件 —>
2.2 DWR配置(導(dǎo)入相應(yīng)的jar包)
在web.xml里面配置,配置文件如下
<!—初始化參數(shù)—>
}}});
}
<%— 啟動(dòng)頁(yè)面定時(shí)任務(wù)(創(chuàng)建文件) —%>
function startTaskCreateFile(){
timerTask = setInterval("checkCreateFileStatus()",taskPeriod*1000);
}