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

圖1 水質預警信息系統架構

圖2 視圖層示例-算法的相關管理

圖3 視圖層示例-動態編寫算法

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