◎ 浙江大学控制科学与工程学系 田 径 张光新 侯迪波 黄平捷 周泽魁
近年来,突发性水质污染事故频频发生,不断地恶化着我国的水环境,威胁着人民的用水安全,给社会经济带来了巨大的损失,使得水资源紧张的矛盾愈加突出。如何在面对复杂多变的水质环境时,根据实际的情况相应及时地进行预警政策调整,灵活地应对各种突发性污染事故,建立起健全的水质信息预警系统,有效地处理水质污染事故,为进一步的应对水质污染事故提供相关的决策支持,保障人民用水安全,最大限度地减少各方面的损失变得尤为重要。研究了基于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动态编译技术的水质预警信息系统构建方法。对水质信息数据进行实时地录入,在系统中根据实际水质情况实时地编写水质预警算法,输入预警模型的边界条件,并进行动态编译,以便相关人员根据实际险情动态调整应对决策。但是,为保证系统的稳定性,在一定程度上限制了动态编译技术的灵活使用,为了使系统能够更加完善高效,需进一步研究动态编译限制问题。