◎ 浙江大學(xué)控制科學(xué)與工程學(xué)系 田 徑 張光新 侯迪波 黃平捷 周澤魁
近年來,突發(fā)性水質(zhì)污染事故頻頻發(fā)生,不斷地惡化著我國(guó)的水環(huán)境,威脅著人民的用水安全,給社會(huì)經(jīng)濟(jì)帶來了巨大的損失,使得水資源緊張的矛盾愈加突出。如何在面對(duì)復(fù)雜多變的水質(zhì)環(huán)境時(shí),根據(jù)實(shí)際的情況相應(yīng)及時(shí)地進(jìn)行預(yù)警政策調(diào)整,靈活地應(yīng)對(duì)各種突發(fā)性污染事故,建立起健全的水質(zhì)信息預(yù)警系統(tǒng),有效地處理水質(zhì)污染事故,為進(jìn)一步的應(yīng)對(duì)水質(zhì)污染事故提供相關(guān)的決策支持,保障人民用水安全,最大限度地減少各方面的損失變得尤為重要。研究了基于java動(dòng)態(tài)編譯技術(shù)的水質(zhì)預(yù)警信息系統(tǒng)構(gòu)建技術(shù),對(duì)預(yù)警系統(tǒng)水質(zhì)信息數(shù)據(jù)進(jìn)行實(shí)時(shí)錄入,對(duì)水質(zhì)預(yù)警算法及預(yù)警模型邊界條件進(jìn)行實(shí)時(shí)編寫,動(dòng)態(tài)編譯,以滿足復(fù)雜多變的水質(zhì)環(huán)境預(yù)警信息系統(tǒng)功能要求。
基于動(dòng)態(tài)編譯的水質(zhì)預(yù)警信息系統(tǒng)基于Struts 2技術(shù)建立整體架構(gòu),由模型層(Model),視圖層(View)和控制層(Control)構(gòu)成完整的體系,層與層之間構(gòu)成自上而下的依賴關(guān)系,實(shí)現(xiàn)了視圖,數(shù)據(jù)與代碼的分離,動(dòng)態(tài)代碼編譯服務(wù)代碼與具體數(shù)據(jù)的分離,同時(shí)各層之間留有接口,為構(gòu)建功能完善的預(yù)警系統(tǒng)做好準(zhǔn)備。實(shí)現(xiàn)了預(yù)警系統(tǒng)水質(zhì)信息數(shù)據(jù)的動(dòng)態(tài)錄入、水質(zhì)預(yù)警算法及預(yù)警模型邊界條件的動(dòng)態(tài)編寫與動(dòng)態(tài)編譯等功能。系統(tǒng)的信息架構(gòu)見圖1所示。
視圖層采用Jquery技術(shù)用來實(shí)現(xiàn)與用戶的交互功能,展示用戶感興趣的數(shù)據(jù),并且采用Json技術(shù)實(shí)現(xiàn)用戶水質(zhì)信息數(shù)據(jù)的動(dòng)態(tài)錄入,水質(zhì)預(yù)警算法代碼以及預(yù)警模型的邊界條件代碼的動(dòng)態(tài)編寫錄入以及水質(zhì)預(yù)警算法的動(dòng)態(tài)管理包括查詢相關(guān)算法,刪除相關(guān)算法,新建相關(guān)算法,邊界條件編譯和手自動(dòng)運(yùn)行方式選擇等。界面具體見圖2,圖3:
針對(duì)多種多樣的水質(zhì)環(huán)境對(duì)算法和邊界條件進(jìn)行動(dòng)態(tài)編寫是很需要的。通過實(shí)時(shí)輸入算法,輸入邊界條件可以實(shí)現(xiàn)對(duì)不同的污染事故進(jìn)行實(shí)時(shí)預(yù)警,即根據(jù)污染事故發(fā)生不同的水體類型、污染源類型、污染物性質(zhì)等編寫不同的水質(zhì)預(yù)警算法。
在整個(gè)系統(tǒng)中,控制層將針對(duì)視圖層提交的服務(wù)請(qǐng)求,進(jìn)行服務(wù)資源的管理,接受用戶動(dòng)態(tài)輸入的水質(zhì)預(yù)警需求服務(wù)算法代碼及預(yù)警算法的邊界條件服務(wù)代碼,經(jīng)過代碼編譯預(yù)處理優(yōu)化后,調(diào)用java動(dòng)態(tài)編譯技術(shù)進(jìn)行編譯并且運(yùn)行,將預(yù)警結(jié)果返回給用戶。
2.3.1 控制層編譯預(yù)處理
由于系統(tǒng)進(jìn)行動(dòng)態(tài)編譯處理具有很大的風(fēng)險(xiǎn)性,惡性代碼會(huì)給系統(tǒng)帶來不穩(wěn)定性,因此編譯預(yù)處理過程尤為重要。同時(shí),編譯預(yù)處理過程對(duì)執(zhí)行服務(wù)所需要的地址空間、存儲(chǔ)資源、服務(wù)時(shí)間、服務(wù)運(yùn)行注冊(cè)以及服務(wù)注銷等系統(tǒng)資源進(jìn)行管理。具體過程如圖4所示:

圖1 水質(zhì)預(yù)警信息系統(tǒng)架構(gòu)

圖2 視圖層示例-算法的相關(guān)管理

圖3 視圖層示例-動(dòng)態(tài)編寫算法

圖4 編譯預(yù)處理過程
當(dāng)用戶輸入水質(zhì)預(yù)警服務(wù)代碼并且提交請(qǐng)求后,控制層檢查請(qǐng)求服務(wù)資源是否充足。如不足,則掛起請(qǐng)求,在下一周期再次查詢;如果服務(wù)資源滿足,則對(duì)請(qǐng)求進(jìn)行響應(yīng),進(jìn)行詞法分析與語(yǔ)法分析,解析出相關(guān)服務(wù)代碼的關(guān)鍵字后,語(yǔ)法分析輸入代碼語(yǔ)法是否出錯(cuò)。如出錯(cuò),就調(diào)用相關(guān)視圖信息通知用戶。否則,將代碼轉(zhuǎn)換后進(jìn)行動(dòng)態(tài)編譯過程。
2.3.2 控制層動(dòng)態(tài)編譯運(yùn)行水質(zhì)預(yù)警算法
從JDK1.6開始,Java就增加了動(dòng)態(tài)編譯特性,使控制層可以在程序運(yùn)行時(shí)調(diào)用Compiler API實(shí)現(xiàn)水質(zhì)預(yù)警服務(wù)算法的動(dòng)態(tài)編譯。控制層在經(jīng)歷編譯預(yù)處理過程后,將生成的有效地的水質(zhì)預(yù)警算法按照用戶輸入的算法名稱存儲(chǔ)為.java文件。然后就利用Compiler API進(jìn)行動(dòng)態(tài)編譯,生成.class文件并且存儲(chǔ),將相關(guān)的水質(zhì)預(yù)警算法添加進(jìn)算法數(shù)據(jù)庫(kù)以便進(jìn)行管理。
完成動(dòng)態(tài)編譯后,待預(yù)警算法運(yùn)行條件成熟時(shí),將算法注冊(cè),確定算法開始運(yùn)行時(shí)刻,運(yùn)行時(shí)間,動(dòng)態(tài)地控制服務(wù)的開啟與關(guān)閉,從而可避免因資源不足而產(chǎn)生的異常服務(wù)。算法的動(dòng)態(tài)編譯執(zhí)行可以實(shí)現(xiàn)實(shí)時(shí)地對(duì)檢測(cè)到的水質(zhì)信息數(shù)據(jù),如BOD,氨氮,重金屬離子以及相關(guān)的葉綠素等的預(yù)警處理。(如圖5)
模型層采用JavaBean技術(shù),主要實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的交互功能,將用戶輸入代碼與具體數(shù)據(jù)相分離。同時(shí)將數(shù)據(jù)庫(kù)操作算法封裝在JavaBean中,節(jié)省了用戶的編程時(shí)間,同時(shí)加入了相關(guān)的異常捕捉處理,保證了系統(tǒng)的安全性,穩(wěn)定性。
系統(tǒng)包括以下幾個(gè)數(shù)據(jù)庫(kù):
1)水質(zhì)數(shù)據(jù)庫(kù)。記錄日常水質(zhì)監(jiān)測(cè)常規(guī)和非常規(guī)參數(shù)的數(shù)據(jù),便于預(yù)警算法調(diào)用數(shù)據(jù)進(jìn)行預(yù)警處理。記錄包括監(jiān)測(cè)指標(biāo)、監(jiān)測(cè)結(jié)果、監(jiān)測(cè)日期、監(jiān)測(cè)單位、標(biāo)準(zhǔn)級(jí)別等信息。
2)預(yù)警算法數(shù)據(jù)庫(kù)。記錄動(dòng)態(tài)編譯的預(yù)警算法,算法的運(yùn)行狀態(tài),算法編制人員,算法預(yù)警類型,運(yùn)行條件以及相關(guān)的運(yùn)行時(shí)間等信息。
3)算法運(yùn)算結(jié)果庫(kù)。記錄算法運(yùn)行的結(jié)果類型,具體結(jié)果以及結(jié)果運(yùn)算時(shí)間等信息。
面對(duì)復(fù)雜而多變的水質(zhì)環(huán)境,積極靈活的應(yīng)對(duì)突發(fā)性水污染事故,需要建立科學(xué)有效的預(yù)警處理系統(tǒng)。研究了基于java動(dòng)態(tài)編譯技術(shù)的水質(zhì)預(yù)警信息系統(tǒng)構(gòu)建方法。對(duì)水質(zhì)信息數(shù)據(jù)進(jìn)行實(shí)時(shí)地錄入,在系統(tǒng)中根據(jù)實(shí)際水質(zhì)情況實(shí)時(shí)地編寫水質(zhì)預(yù)警算法,輸入預(yù)警模型的邊界條件,并進(jìn)行動(dòng)態(tài)編譯,以便相關(guān)人員根據(jù)實(shí)際險(xiǎn)情動(dòng)態(tài)調(diào)整應(yīng)對(duì)決策。但是,為保證系統(tǒng)的穩(wěn)定性,在一定程度上限制了動(dòng)態(tài)編譯技術(shù)的靈活使用,為了使系統(tǒng)能夠更加完善高效,需進(jìn)一步研究動(dòng)態(tài)編譯限制問題。