基于RIA插件式测井解释软件设计与实现
2015-05-09承达瑜王卫吴非谢关宝
承达瑜, 王卫, 吴非, 谢关宝
(中国石化石油工程技术研究院测录井研究所, 北京 100029)
0 引 言
测井解释软件在测井资料储层评价工作中具有图形显示速度快、用户交互性强等特点[1]。测井解释软件网络化、Web化、易扩展的发展方向已经成为共识。GeoFrame、eXpress、CIFLog测井软件、Lead平台以及Forward系列等软件[2-5]其实现模式都以客户端/服务器(Client/Server,C/S)为主。这些软件的安装、部署、升级和更新和维护需要专业人员完成。传统的基于HTML页面的Web应用技术因其难以满足测井图件的快速显示和快速交互的需要,并不适用于测井解释软件开发。如何在Web环境下实现功能强大、灵活扩展的测井解释软件是一大难题。
富互联网应用RIA(Rich Internet Applications)具有桌面应用程序丰富的交互体验和传统Web应用无客户端、部署灵活的优点。本文采用RIA技术,试图构建插件式的测井解释软件体系结构,设计面向RIA的插件框架、插件接口和通讯协议;采用JavaFX开发一个原型系统验证其设计的正确性。
1 RIA与插件技术
1.1 RIA技术及其选取
RIA综合了B/S和C/S架构的优势,是一种全新的Web应用模式,具有桌面应用程序交互性强、反应快的优点,又继承了传统Web应用程序普遍应用和灵活部署的特性[6]。RIA具有富客户技术[7],“富”的概念是指包含丰富的数据模型和用户界面。它充分利用了客户端的计算处理能力,能提供响应速度快和图形丰富的用户界面,平衡了客户端和服务器端的负载。RIA技术为实现Web化的测井解释软件提供丰富完善的解决方案,也使得在Web环境下实现系统插件化成为可能。
主流的RIA实现技术有Flex、Silverlight以及JavaFX等。其中,Flex[8]是Adobe公司提供的RIA开发和部署的平台,包括Flex Enterprise Services2、Flex Builder 2、Flex Framework等,主流版本是4.X[9];Silverlight[10]是微软公司开发的RIA应用程序技术,提供跨客户平台、跨浏览器的能力;JavaFX[11]是SUN公司利用Java运行环境进入RIA领域的开发技术,在JavaFX 2.0以后的版本完全兼容Java。这3种技术各有优势,Flex最早推出RIA技术,相对比较成熟;Silverlight的先天优势是有Windows平台的支持;JavaFX与Java一脉相承,具有开源的优势,提供所有熟悉的语言功能(如泛型、注释和多线程)、高性能的软硬件加速图形(Prism)和媒体引擎,支持二维和三维图形、图像、多媒体、动画等,并且兼容Java的Swing和AWT,能够开发具有丰富用户体验的界面,实现复杂的图形处理、显示。服务器和客户端平台都采用Java技术,降低了投资风险,减少了业务解决方案的复杂性。选取JavaFX更适合作为测井解释软件的RIA开发工具。
1.2 插件技术
插件技术是一种提高软件复用性和扩展性的有效方法[12],基本思想就是在软件的设计和研发过程中把待开发的目标软件划分为主体程序(或称平台)和插件(按照预定接口实现的软件功能构件)2部分。在不需要重新编译整个程序的前提下,可以在应用程序开发完毕后以补丁的形式对其修改,从而使得应用程序可被定制、更灵活、更具有动态性。
插件大致有3类[13]。①命令行插件,即应用程序向用户提供一些基本命令,用户使用这些命令编写插件。该类插件一般是文本文件,开发比较简单,但是功能单一。②用脚本语言实现插件,即用户通过脚本语言编写插件。该类方法的优点在于制作插件时不需要使用其它工具,软件本身就可以实现,普遍出现于各种办公自动化软件中。③基于接口方式实现插件,即应用程序规定插件调用接口,用户依据接口规范编写插件。这类插件封装性好,灵活性强,能够真正意义上实现“平台+插件”的软件结构,但是软件设计的难度大,对开发人员要求高。根据在线测井解释软件的具体需求,测井解释系统采用了基于接口的插件实现方法。
2 软件架构与插件设计
2.1 系统架构设计
根据RIA具有富客户端、异步通信的特点,系统设计的主要思想是将测井解释涉及到的数据处理、算法、图形显示功能封装成插件存储在服务端,通过配置文件暴露插件接口,提供插件下载;在客户端则依据插件原理设计测井解释插件框架,根据用户需求,动态地从服务器下载和管理插件,完成各插件的注册、加载和管理,实现按需服务、动态扩展。
遵循该设计思想,采用B/S设计模式,以多层架构的方式进行设计该架构,总体上分为客户端表示层、业务逻辑层和数据访问层等3层架构(见图1)。与传统的B/S模式不同的是,由于RIA具有丰富的数据模型、界面元素,使得浏览器客户端具有C/S模式中客户端的计算、展示能力,减轻了服务端的负载。业务逻辑层、数据访问层除了能够在线处理提供客户端的请求,还可以提供功能插件的下载,加强客户端的处理能力,甚至可以实现客户端离线工作功能。
该系统架构中,表示层为用户提供一个丰富的、具有高度用户体验的可视化界面,以图文一体化的方式进行各种测井解释业务的处理解释。在本文的系统架构中,表示层设计重点是插件式测井解释软件客户端。整个表示层主要由基础组件、插件框架和本地存储等3部分组成,①基础组件为用户提供测井解释所必须的曲线处理、交会图、用户交互等功能;②插件框架提供统一的插件注册接口,同时管理每一个插件,负责在运行时动态加载可用插件、提供插件间的通信机制及卸载插件;③本地存储保存了客户端的配置信息、功能插件,提高客户端的启动效率,同时也使得客户端可以离线使用。业务逻辑层处于数据访问层与表示层中间,起到了承上启下的作用,是系统架构中的核心部分,主要负责实现数据预处理(如曲线拼接、环境校正)、数据分析、处理解释以及成图等测井解释业务功能。数据层是系统应用的基础,负责对测井数据的存取、维护和管理,提供测井数据的访问接口。
2.2 插件设计
2.2.1 插件框架设计
插件框架支撑着整个插件式测井解释软件的结构,是测井解释软件客户端核心的部分,负责管理和承载各类插件,根据插件配置生成交互界面,协调平台、插件以及插件之间的互操作等。图1为客户端插件框架结构图,整个框架主要包含插件信息列表、插件管理器及通讯控制。插件信息表依据插件配置在运行时维护所有注册插件的基本信息,如插件名称、版本和访问接口等,是插件运行时进行管理的基础。插件管理器负责不同插件的全生命周期管理,实现插件的注册、加载、调用、注销、以及卸载等整个运行过程的管理。通信控制负责平台和插件、插件与插件之间的通信,将消息机制引入通信控制,定义消息类型,通过管理插件消息传递,将“插件-插件”的通信的关系变为“源插件-消息总线-目的插件”关系,降低了插件之间的耦合度,使得插件的修改、替换和升级更加方便。
图1 系统架构
2.2.2 接口设计
接口实质上是软件模块的调用规范。在插件式测井解释系统中,接口在主程序中起到了桥梁作用,提供了插件的接入点,使得插件功能可被主程序调用。一个描述插件标识、插件状态和行为等基本信息,提供插件共性操作的通用插件接口(IPlugin)是系统所必需的。IPlugin是所有插件必须实现的顶级接口。依据测井解释业务和系统框架2部分,将插件划分为解释业务插件与框架插件2个大类,对应于这两类插件,可将测井解释系统的接口集合划分为框架接口和测井解释业务接口。
为了便于开发,对于图形显示模块采用图元化设计,即通过图元的组合、拼装构建多样的图形。相对于图元设计,图形绘制接口提供测井基本图元和复合图元接口。同时,依据解释习惯及输入、输出数据的特性,可将算法接口细分为预处理接口、常规测井接口、工程测井接口、生产测井接口及特殊测井接口等算法接口。具体的接口关系见图2;每类接口含义见表1。
2.2.3 通信机制
实现测井解释平台和插件、插件与插件之间的通信、调用是插件式测井解释系统主要的关键技术,必须建立一套既能保证各插件之间的通信又可维持其独立性的控制机制。借鉴Java的委派事件模型[14](Delegation Event Model,DEM)构建测井解释插件通信机制,以观察者(又称为发布/订阅)模式处理插件间各类事件的激发与响应。插件通信机制包含事件源(插件事件处理类)、事件监听对象和事件对象(具体事件对象)三要素(见图3)。其中,事件源提供各类测井解释插件事件处理功能,事件监听对象实现事件的添加、卸载和执行,事件对象传递与事件相关的信息,触发某个具体插件的调用。
图2 测井解释插件接口集
接口说明IPlugin顶层接口,类似于基类,所有插件必须继承该接口,内含插件标识、版本信息、插件类型、插件状态、行为以及插件提供者信息等描述信息。IToolCommand系统级工具条,非插件内部的工具条。IMenuCommand系统级菜单类。IBasicGRA提供测井曲线、阵列、道信息、线段、图头、文本注释等基本图形绘制接口。ICompositeGRA提供地质类、油藏类、工程类、辅助及解释成果等图形绘制接口。IConventional提供泥质砂分析、复杂岩性分析等常规测井算法的封装。IPreconditioning提供深度校正、平滑滤波、环境校正等数据预处理算法。IProuduction提供产液、产气剖面处理、中子寿命处理、RMT处理、GR-GR测井处理、固井质量评价、氧活化测井处理及电磁探伤等算法接口。IEngineering包括固井质量评价、套损套变检测、油藏工程措施效果评价、地质工程参数计算等算法接口。ISpecial提供多臂(4、6、8臂)地层倾角处理、介电、能谱、碳氧比、全波列、FMT/RFT和井斜等处理算法接口。IDataAccess提供不同格式测井数据的读写,如测井WIS文件、oracle数据库。
图3 消息通信模型
使用该通讯模型的前置条件是初始化插件事件监听器,即将各类插件处理事件添加到事件监听器中,构建监听事件列表。在具体进行通信时,事件对象将外部动作需求以消息的方式传递到插件事件监听器;通过解析需求消息,事件监听器激活具体的事件处理,响应外部的动作,实现平台、各类插件之间的通信。通过这种设计有效地实现各应用模块之间的实时响应与协同,模块之间完全解耦,保证了平台良好的独立性和扩展性,便于应用模块的并行开发。
2.2.4 插件运行方式
程序启动,初始化内核与插件管理,主程序通过解释相应的配置文件向插件管理器插件加载请求,插件管理器根据配置信息,查找相关插件,检查插件的合法性,完成插件的注册、加载。在运行过程中,当有事件发送时,插件管理器解析事件类型,调用相应的插件进行处理。程序结束时,插件管理器把当前所用插件配置写回配置文件,注销插件。其流程见图4。
图4 插件运行时序图
3 系统实现
3.1 Web表示层的实现
Web表示层的实现利用JavaFX主要开发3个方面内容,①作为测井解释的可视化交互接口(即客户端基本组件的开发),包括各种测井曲线图、图形上进行各种操作、测井数据表和数据录入界面、直方图、散点图、交会图;②测井数据的呈现、与服务器的数据交换,完成相关功能。③实现插件管理。这样,大部分的测井解释的操作和功能都在客户端完成,减轻了服务器端的压力。
3.2 插件实现
在系统中,插件采用“程序集+插件说明”的结构实现,除了基本组件以外的算法、图形绘制等,其他功能模块都依据测井解释插件接口规范以JAR文件包的方式进行封装。在每一个JAR文件中包含META-INF目录,其中必包含有一个MANIFEST.MF,这个文件描述了该JAR文件的很多信息,并支持定义属性。MANIFEST.MF是专为提高效率设计的,与XML一样具有可读性,比XML读取效率更高。通过将插件标识、插件运行依赖项、插件制作背景等信息记录到MANIFEST.MF文件实现对插件的说明,便于插件注册、搜索和管理。
3.3 插件管理实现
插件管理在系统中以PluginManager类实现,包含loadPlugin()、unloadPlugin()、stopPlugin()等函数,实现与所有插件相关的操作。JavaFX全面兼容Java语言,在具体实现时采用了Java反射机制[15]与消息传递的结合,增强了插件管理的灵活性、动态性。以loadPlugin()操作为例,利用URLClassloader和Java反射调用被加载插件的Plugin类中的init化方法。这样加载的插件可通过MsgProxy.class与框架通信,还可在自身的功能实现中调用MsgProxy.class提供的方法。
4 结 论
(1) 在分析现有测井解释软件优缺点的基础上,结合RIA和插件技术,以B/S模式设计插件式测井解释软件,满足用户在线测井解释分析的需求。
(2) 介绍了RIA和插件技术特点,选择以JavaFX作为RIA的开发工具和基于接口的插件开发方式。以分层设计的思想,构建了包含表示层、业务逻辑层和数据访问层的系统架构,分别设计插件框架、测井解释插件接口集合和插件间的通信模型。
(3) 这种松散耦合的架构方式降低了软件设计开发的难度,提高了开发效率,也保障了系统的灵活高效稳定,为复杂多变的测井解释应用程序开发提供了良好的支持,是未来专业测井解释系统设计开发的重要架构方式之一。
(4) 由于要下载插件,系统首次初始化时效率不高,这也是下一步研究的有待解决的问题。
参考文献:
[1] 原宏壮, 陆大卫, 张辛耘. 测井技术新进展综述 [J], 地球物理学进展, 2005, 20(3): 786-795.
[2] 杜飚. GeoFrame软件在测井评价中的应用 [J]. 江汉石油科技, 2006, 16(1): 15-17.
[3] 余春昊, 李长文. LEAD测井综合应用平台开发与应用 [J]. 测井技术, 2005, 29(5): 396-398.
[4] 姜涛. 新一代测井地质综合应用网络平台FORWARD. NET 2.0 [J]. 石油工业计算机应用, 2005, 13(3): 9-11.
[5] 李宁, 王才志, 刘英明. 基于Java-NetBeans的第三代测井软件CIFLog [J]. 石油学报, 2013, 34(1): 192-200.
[6] 希赛网. RIA技术专题[EB/OL]. http: ∥tech.csai.cn/zt/RIA/index.htm,2010.
[7] Preciado J C, Linaje M, Sanchez F, et al. Necessity of Methodologies to Model Rich Internet Applications [C]∥Proceedings of the Seventh IEEE International Symposium on Web Site Evolution, 2005: 7-13.
[8] 汪林林, 胡德华, 王佐成, 等. 基于Flex的RIA WebGIS研究与实现 [J]. 计算机应用, 2008, 28(12): 3257-3260.
[9] Michael Labriola, Jeff Tapper, Matthew Boles. Flex 4权威指南 [M]. 北京: 人民邮电出版社, 2012: 52-58.
[10] 丁士峰. 精通Silverlight: RIA开发技术详解 [M]. 北京: 人民邮电出版社, 2008: 48-55.
[11] DiMarzio J F. 新手学JavaFX [M]. 北京: 清华大学出版社, 2013: 12-15.
[12] 李俊娥, 周洞汝. “平台/插件”软件体系结构风格 [J]. 小型微型计算机系统, 2007, 28(5): 876-881.
[13] 陈云云, 马捷中, 蒋泽军. 基于插件的组态软件设计与实现 [J]. 计算机测量与控制, 2013, 21(2): 436-438.
[14] 宋淼, 袁兆山, 陈刚, 等. Java事件处理机制中设计模式的分析 [J]. 合肥工业大学学报: 自然科学版, 2004, 27(11): 1382-1386.
[15] 赵宏利, 李秀冰, 李大林. 基于反射机制的插件系统软件设计 [J]. 计算机工程与设计, 2010, 31(2): 348-355.