admin 管理员组

文章数量: 1086019


2024年4月20日发(作者:dedecms编辑教程)

维普资讯

12・ Computer Era No.11 2006 

基于×M L的网络管理系统界面自动生成技术 

崔贺超,陈旭东 

(北京交通大学网络管理研究中心,北京100044) 

摘要:在网络管理系统中存在大量的配置管理界面,为每一个配置管理界面编写专门的代码是一项繁杂、重复性的工 

作。文章提出一种基于XML的网管系统界面自动生成技术,通过实例阐述了界面描述的XML文档格式、组件事件处理 

方法和界面生成器的实现方案。该技术能大大提高用户界面的开发效率,并增强软件的可维护性。 

关键词:XML;网络管理系统;用户界面;自动生成 

0引言 

类动态加载进来,并与对应的组件绑定。当某一组件的事件被 

在网管系统的开发中,涉及大量配置管理操作。在通常情况 

触发时,就会执行它的事件监听类中定义的操作。 

下,需要对每一项配置管理功能对应的用户界面编写专门的代 

界面生成器是整个界面自动生成技术的核心,它负责解析 

码。这是一项繁琐的工作,会占用开发人员大量的时间和精力。 

界面描述XML文档,识别文档中定义的组件信息,根据组件信 

本文提出一种基于XML的网管系统界面自动生成技术, 

息和所使用的编程语言的组建库创建相应的组件,设置其属 

使用XML文件作为界面描述文档,程序运行时通过解析该 

性,绑定对应的事件监听类,并把组件添加到一个组件容器中, 

XMk文件自动生成界面。 

最后把自动生成的界面对象返回给调用者。 

该界面自动生成技术具有如下优点: 

2界面自动生成的实现 

(1)实现了表现层和功能层的分离,提高了程序的可维护 

下面以网元管理的部分代码为例,提供一个网管系统界面 

性和可重用性; 

自动生成技术的Java实现方案。 

(2)通过修改界面描述的XML文档,可以在不重新编译源 

程序的情况下实现对用户界面的修改; 

2.1界面描述XML文档 

(3)可以极大地减少界面开发中繁杂、重复性的工作,使开 

修改网元的界面描述XML文档如下: 

<?xml version= 1.0”encoding= UTF一8”?> 

发人员更加专注于业务逻辑,提高效率。 

<ui> 

1界面自动生成的原理 

<panel height= 20 width= 400 > 

基于XML的界面自动生成技术涉及界面描述的XML文 

<FlowLayout align=”1”> 

档、界面组件事件监听类、界面生成器和编程语言的组件库等。 

<label text=”网元名称”,> 

界面生成器通过解析界面描述XML文档,调用编程语言的组 

<textField name= neNameText'’defaultText=’”’ 

件库构建组件,为组件绑定相应的事件监听类,自动生成所需 

COIS= 1 0 ,> 

要的用户界面。界面自动生成的原理如图1所示 

<lFIowLayout> 

</panel> 

I 自动生成的界面 l 

<panel height=”1 0”width=’'400’’> 

<FlowLayout align= 1 > 

田。; f d BE l… 一 

<label text=”所属局站”,> 

<comboBox name= siteCombo”,> 

<lFIowLayout> 

图1界面自动生成技术框架图 

</panel> 

<panel height=”1 0’’width="400 > 

要生成一个界面,首先要提供界面描述XML文档和界面 

<FlowLayout align= 1”> 

组件事件监听类。界面描述XML文档使用XML描述界面上 

<label text=”网元类型”,> 

所有组件及其属性,包括名称、大小、位置、布局以及与之相对 

<comboBox name=”neTypeCombo”,> 

应的事件监听类等。界面描述XML文档可以用XML编辑器 

<lFIowLayout> 

来编写,也可以从其他数据源自动生成 

</panel> 

界面组件事件监听类负责监听并处理对应界面描述XML 

<panel height=”20”width="400 > 

文档中组件的事件,比如按钮点击事件等,由组件事件引发的 

<FlowLayout align= 1”> 

系列操作都由该类来实现。在界面描述XML文档的解析过 

<button name= ok"text=”确定 action=”xmlgui. 

程中,界面生成器会根据文档中的组件事件属性值把事件监听 

AddNeActionListener"/> 

维普资讯

计算机时代2006年第1 1期 

<bu ̄on name= cancel”text=”取消 > 

</FlowLayout> 

</panel> 

</ui> ‘ 

・l3・ 

以上代码中参数xmlFile是待解析的界面描述XML文档 

的文件名;initData是组件的初始化数据,比如组合框的选项, 

用于初始化界面组件;curData是组件的当前值,比如修改网元 

对话框中原来的网元名称、所属局站和网元类型等,用于设定 

文本框的文本值和组合框的当前选项等。initData和curData均 

为简单起见,在“修改网元”界面上只提供了与网元名称、 

所属局站和网元类型三个属性相关的组件以及操作按钮。其 

中,网元名称是一个文本框,让用户输入;所属局站和网元类型 

为HashMap类型,可以存放多组数据。 

GuiGenerator类中build方法负责初始化XML文档的解 

析,初始化过程又将引发一系列的事件发生,这些事件将引导 

界面组件的构造过程。在build方法中,首先将SAX解析器的 

都是组合框,供用户选择。操作按钮包括“确定”和“取消”。每个 

组件都有一个惟一的nalile属性标识,该属性值在界面生成器 

中初始化组件、设定组件当前值和组件事件监听类中获取组件 

信息时需要用到。 

2.2组件事件监听类 

组件事件监听类中定义了组件的某—事件被触发时需要执行 

的操作,在界面描述XML文档中用“action”属性来指定。比如,在 

“修改网元”的界面描述XML文档中,“确定”按钮的事件监听类指 

定为“xmlguLAddNeActionListener"oAddNeActionListener实现了 

AcfionListener接口,在actionPerformed方法中定义了“确定”按钮 

¨……’0…—…………u 

在组件事件监听类中处理相关事件的时候往往需要获取 

有关组件的信息。比如在处理“修改网元”的事件时,需要网元 

名称、所属局站和网元类型等信息,这些都在“修改网元”界面 

的有关组件中记录着,在AddNeActionListener类中需要获取并 

处理这些组件的信息。可以把相关组件所在的容器引用传递给 

组件事件监听类,在actionPerform方法中遍历容器中所有的组 

件,在遍历过程中通过比较组件的name属性值来确定并获取 

所需组件的信息。 

2.3界面生成器 

本文提供的界面自动生成技术采用SAX解析器解析界面描 

述XML文档。SAX是一种事件驱动的用来解析XML文档的编 

程接口。图2阐述了从SAX事f牛创建Java组件对象的过程。为了 

能够直接访问每个组件元素的属性,需要使用SAX2.0版。 

L塑件_,I 

厂 一_l 

臣妇 

XML 

组件元素 用户界面 

图2使用一个SAX解析器向用户界面发送事件 

界面生成器用一个Java类GuiGenerator来实现,该类继承 

DefaultHandler类。DefaultHandler类来自SAX API,它实现了 

错误处理和文档处理的接口,提供了一种更简单的方式处理 

SAX事件。GuiGenerator类构造方法代码如下: 

public GuiGenerator(String xmlFile,HashMap initData, 

HashMap curData){ 

super(); 

this.xmlFile。xmlFile; 

this.initData=initData; 

this.curData=curData; 

) 

内容处理接口设置为GuiGenerator类,由此指示解析器向这个 

类发送所有事件。然后,通过调用该解析器的parse()方法初始 

化XML文档的解析过程。在parse()方法中用构造函数中指定 

的XML文件作为输入流创建一个InputSource对象,用它来读 

入界面描述XML文档。 

当文档的解析过程开始时,事件将被逐个激活。这里值得 

注意的事件就是遇到元素的开始。当遇到每一个元素时,就调 

用已经重写的startElement方法,访问元素的名称以及附加在 

元素上的属性列表。 

下列代码说明了如何处理表示元素开始的事件: 

public void startElement(String namespaceURI.String name. 

String qName.Attributes atts){ 

if(name.equals( button“)){ 

JButton button=new JButton(atts.getValue(”text”)): 

Class actionClass=null; 

try{ 

actionClass=Class.forName(atts.getValue(”action )): 

Constructor constructo r=-actionClass.getConstructor 

(JPane1.class); 

button.addActionListener((ActionListener)constructor. 

newlnstance(primaryContainer)); 

)catch(Exception ex){ 

ex.printStackTrace0; 

) 

primaryContainer.add(button); 

) 

) 

) 

在上述示例中通过检索nalile参数的值来确定希望添加的 

组件的类型。如果该参数的值为“button”,那么就知道要创建的 

组件是一个JButton。使用new操作符,并将text属性的值传递 

给构造函数以便创建一个按钮。按钮创建以后,通过Java类的 

动态加载机制把按钮与它的事件监听类绑定。最后将这个按钮 

添加到预先声明的JPanel上。 

startElement方法依次处理网管系统中用到的各种组件,根 

据界面描述XML文档中的属性值设置组件属性,用initData 

初始化组件,用curData设置组件当前值,最后把组件添加到 

JPanel上。 

t述过程会一直持续下去直到解析完整个文档。因为build0 

(下转第16页) 

维普资讯

l6・ Computer Era No.1 1 2006 

索服务、图形化执行计划管理服务、挖掘结果可视化服务。 

3.3动态数据流挖掘算法 

型存储结构和线性扫描方法,解决时间效率与节省存贮开销的 

矛盾,从而提高数据流挖掘微观效率。宏观效率方面,指出数据 

流挖掘通常是分布式应用问题,通过网格技术透明而有效地利 

动态数据流频繁模式挖掘的基础算法。对数据流采用线性 

扫描的方法,通过混合型数据组织体系,以压缩形式表达相关 

信息。混合型数据组织体系由内存、外存数据结构相结合而成, 

用计算资源,可以提高其整体挖掘效率。 

本文下一步是参与数据挖掘网格标准化的国际合作,使所 

并且具有可扩展 

针对动态数据流挖掘频繁模式的要求,它由穿线树、变长线性 

提出平台模型不仅与现有网格基础结构兼容,

表、垂直位图、水平位图等组成。引入频繁模式集随时间变动的 

性,以便将来新算法与工具的集成。本文成果可以广泛应用于 

差异度和挖掘结果的容错率,给出频繁模式集增量更新的近似 

方法。根据数据流的类型、更新方式和速度,自动估计差异度, 

对挖掘结果进行增量更新。发展前期研究中提出的“伺机挖掘 

思想”,根据计算与存储资源约束以及局部数据流片段的特性, 

自动调整挖掘所采用的搜索策略、子集表示法及投影方法,在 

静态海量数据集挖掘算法OpportuneProject和CROP的基础 

各类信息化应用项目,如管理信息系统与决策支持系统、电子 

商务、电子政务等。 

参考文献: 

【11 lan Foster,Carl Kesselman.The Grid:Blueprint for a New 

Computing Infrastructure,Second Ediiton.USA:Moran Kauf- 

mann Publishers,2003. 

上,设计了一组高性能的动态数据流频繁模式挖掘的基础算 

法。进而设计出频繁模式随时间变动序列的挖掘算法,并拓展 

到数据流序列模式挖掘。 

网格环境下的动态数据流频繁模式的分布式挖掘。结合网 

【2】R.MOORE.Knowledge-Based Grids.Technical Report TR一2001 

02,San Diego Supercomputer Center.2001. 

【3】V.Ganti,et a1.Mining Data Streams under Block Evolution. 

IEEE Computer,1999.32(9):38-45 

【4】A.Arasu,et a1.STREAM:The Stanford Stream Data Manag— 

er.In Proc.of the SIGMOD,2003. 

格服务的透明性特点,针对单数据流多节点和多数据流多节点 

的挖掘问题,实现多个网格结点间协同机制所必需的“服务”功 

能,包括协调数据流更新、挖掘任务分配、知识维护,建立一种 

【5】S.Chandrasekaran and M.Franklin.Streaming Queries over 

Streaming Data.In Proc.of the VLDB,2002. 

通用的动态数据流挖掘框架,提出挖掘任务分割、挖掘结果集 

【6】Y.Chen,et a1.Mulit-Dimensional Regression Analysis of 

成与共享的方法。设计了适合于网格环境的动态数据流频繁模 

Time—Series Data Streams.In Proc.of VLDB,2002. 

式挖掘的分布式算法。 

数据流挖掘描述语言。在前期研究提出的类SQL描述语 

言MDL基础上,定义与OMG推荐元数据交换标准的公共仓库 

【7】Junqiang Liu,Yunhe Pan,Ke Wang,Jiawei Han.Mining 

Frequent Item Sets by Opportunistic Proje on.In Proc.Of 

he 8tth ACM sIGKDD Intemational Confe・rence on Knowl— 

edge Discovery and Data Mining,2002. 

模型CWM等兼容的数据流挖掘描述语言,包括:网格数据流 

致化描述、数据流预处理描述,数据流挖掘任务描述、以及挖 

从技术层面上讲,“网格环境下动态数据流分布挖掘”系统 

【8】G.Hulten,et a1.Mining Time—Changing Data Streams.In 

Proc.7th ACM SIGKDD Intemational Conference on Knowl— 

edge Discovery and Data Mining,San Francisco,CA,USA,2001: 

97-106 

掘结果表达形式描述。 

原型,是“基于移动代理的数据挖掘平台”运用GIobus Toolkit 

V3.0进行重构的结果。 

l9l G.S.Manku and R.Motwani.Approximate Frequency Counts 

over Data Streams.In Proc.of the 2002 ACM Symp.on 

4结束语 

观效率结合起来。微观效率方面,发展伺机挖掘思想:指出任何 

Principles of Database Systems,2002. 

oso,et a1.Mining Frequent Itemsets in Evolving 

本文核心思想是将提高动态数据流挖掘的微观效率与宏 

【10】A.Vel

Databases.In Proc.of the S 

Data Mining,2002. 

ntIemational Conference orl 

数据流都不能简单地归入某个单一特性类别,不同时问片段会 

特性变化不断地调整存储结构和变换搜索方式,通过采用混合 

11】刘君强等.移动型数据挖掘平台模型.微电子学与计算机, 

有截然不同的特性,数据流挖掘过程应根据局部数据流片段的 

2003・2 :82~84囡 

(上接第13页) 

方法的返回类型为JDialog,所以界面生成器将返回—个对话框, 

该对话框E添加了所有的组件。 

XML文档;界面生成器的功能还可以增强,以满足各种复杂界 

面的生成需要。 

参考文献: 

【1】Mike Jasonwski.Java,XML,and Web Service Bible[MI.电子工业 

出版社,2002. 

3结束语 

界面自动生成技术,根据描述界面的XML文档,在运行时 

动态生成用户界面。使用该技术可以快速开发出网管系统的配 

置管理界面,代码简洁清晰。当然该技术还可以进一步优化。比 

如,可以开发一个可视化的工具,通过鼠标拖拽构建界面描述 

【2】张敦华.一种界面自动生成技术【JJ.计算机与数字工程,2004.32(5】 :

20~24园 


本文标签: 界面 挖掘 组件 数据流 事件