Wade服务消息架构的设计方法

文档序号:6597974阅读:251来源:国知局
专利名称:Wade服务消息架构的设计方法
技术领域
本发明涉及的是一种支持企业IT系统中的数据通信与转换的方法技术领域,具 体是一种WADE服务消息架构的设计方法。
背景技术
1. Java Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言(以 下简称Java语言)和Java平台的总称。 Java编程语言是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构
中立的,可移植的,性能优异、多线程的动态语言。 2. JavaScript Javascript是一种由Netsc即e的LiveScript发展而来的原型化继承的面向对 象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。 JavaScript的正式名称是"ECMAScript"。这个标准由ECMA组织发展和维 护。ECMA-262是正式的JavaScript标准。这个标准基于JavaScript (Netsc即e)和 JScript (Microsoft) 。 Netscape (Navigator 2.0)的Brendan Eich发明了这门语言,从 1996年开始,已经出现在所有的Netscape和Microsoft浏览器中。ECMA-262的开发始于 1996年,在1997年7月,ECMA会员大会采纳了它的首个版本。在1998年,该标准成为了国 际ISO标准(IS0/IEC 16262)。这个标准仍然处于发展之中。在2005年12月,ECMA发布 ECMA-357标准(IS0/IEC 22537)出台,主要增加对扩展标记语言XML的有效支持。
3.月艮务数据对象(Service Data Objects, SD0) 服务数据对象(Service Data Objects, SD0)是0RACLE(BEA)禾P IBM最近共同发 布的一项规范,正由JSR-235专家组进行标准化以通过JCP(Java Community Process)审 核。SDO是一种数据编程架构和API,它统一了不同数据源类型的数据编程,提供了对通用 应用程序模式的健壮支持,并使应用程序、工具和框架更容易查询、读取、更新和检查数据。 关于SD0架构的高级概述,请参考白皮书Next-Generation Data Programming :Service Data 0bjects(pdf)。 WADE框架是基于J2EE体系架构的应用系统开发框架,可广泛的做为B/S架构下的 应用系统的底层开发框架,特别在电信业务支撑系统中积累了大量的不同场景下的实现方 案和丰富的业务组件,更适合做为基于B/S架构的门户网站和各种业务管理系统的底层开 发框架,对于企业级应用系统能够提供更好的使用操作的一致性、应用系统的稳定可靠性 以及可扩展性等。 WADE框架通过以下四个层次来支撑应用系统的开发和维护 wade-studio :开发环境,基于eclipse的插件方式,提供开发向导,开发模板,开 发配置及代码生成等,最大限度的简化开发者的开发效率。
wade-runtime :运行环境,基于配置方式运行,提供页面流程,操作逻辑,页面元素 配置以及丰富的组件库,最大限度地提高功能的配置化。 wade-console :配置监控,基于wade应用的配置监控,如流程的配置监控,页面布 局配置,页面生成配置以及在线系统版本和升级的管理等。 wade-helper :辅助使用,基于wade网站及论坛,提供框架版本发布,开发工具、文 档等的下载,提供开发沟通交流平台,解决开发者问题。 基于WADE的WEB化应用内部各层之间都是通过服务借助消息进行通信,应用和应 用之间也是如此,就需要统一的服务消息架构成为WEB化应用框架需要的基础类库。

发明内容
发明目的为WEB化应用所处体系结构及其内部层次结构涉及的跨协议、跨编程 模型等异构环境下服务通信和消息转换提供统一的消息模型和架构支持,具体技术方案如 下 —种WADE服务消息架构(WSMA)的设计方法,具体是包括WSMA的接口 (API)定义 和基本实现。 1. WSMA API包括动态数据API、数据类型自检API和数据变化跟踪API,分别定义 于IDataset禾口 IData接口之中。 动态数据API是一种常见的技术,JDBC ResultSet和RowSet API是用于关系数据 的动态数据API,而DOM API(尤其是节点和元素)是用于XML数据的动态数据API。 WSMA 接口是一个泛化的动态数据API,这意味着可以独立于任何特定的持久化机制或串行化格 式而被使用,这样设计,可良好处理对象数据、关系数据、表列数据和XML,使得更高级别的 框架(例如WADE)得以处理来自多个异构数据源的数据。 本方法设计的WSMA为了保持简单的结构以获取较高性能,更为关注表列数据型 消息的承载。 WSMA使用了消息数据集和消息数据。消息数据集是消息数据的有序集合,相当 于表列数据的多行记录,对应IDataset接口。消息数据由若干键值对组成,键和值分别对 应消息数据的属性和属性值,相当于表列数据的一行记录,对应IData接口。 IDataset和 IData定义了若干动态数据API,包括增加消息数据(add)、移除消息数据(remove)、获取消 息数据(getData)、设置属性值(put)、获取属性值(get)、获取属性名称集(getNames)等, 用于构造和访问服务消息数据,支持包括动态查询、未知数据类型和可扩展模式等情况的 通用框架。 WSMA接口定义了类似getString、getInt等数据类型自检API ,用于属性取值时类 型检查和转换。消息数据的属性取值默认是未知数据类型(Java. lang. Object),支持包括 String、int等在内的基本数据类型。另外,消息数据或消息数据集本身也在支持的数据类 型之列,可以通过建立层次关系来承载对象数据、关系数据、XML。例如服务通信中某一消息 的内容是客户信息,则可以创建一个IData型的实例。该客户的帐户信息则定义成IData 实例的一个属性,该属性的类型为IDataset,对应一个IDataset型实例,包含该客户的若 干帐户信息,每一帐户信息又都是IData型。 WSMA参照SDO规范被设计成具备记忆能力,数据集和数据被创建之后的所有更改以通过数据变化跟踪API来获取这些更改。这一点非常有益于富客户 端(UI层)实现用户对数据操作的撤销、重做,以及数据持久化时提供数据变更记录等所有 关心数据变化过程的应用场景。服务数据对象(Service Data Objects, SD0)规范问世以 后,对比发现WSMA同SDO规范不谋而合,但需要进行相关改造,使之完全符合规范要求,并 力图成为标准化组织中的重要成员参与规范建设。 2. WSMA的基本实I见包f舌DatasetList禾口 DataMap,基于Java禾口 Javascript i匀有 实现 在Java平台中,DatasetList是Java. util. ArrayList的重载,DataM即是Java, util. HashMap的重载;在Javascript应用环境中,DatasetList禾口 DataMap是采用面向对 象的私有实现,使用类似于Java. util. ArrayList和Java. util. HashM即。充分利用Java 和Javascript的既有特性,尽量避免不必要的学习门槛,做到不但通俗易懂,而且应用方 便。使用时仅仅需要引用相应JAR包或JS文件即可,开发人员上手比较快,部署方便,运行 时可靠性也很高。 WSMA接口是一个泛化的动态数据API,泛化是针对特化的相对概念,泛化可以理 解为从若干具有共性的类中抽取出基类;相反的,继承某一个基类,去描述某个特定的业 务,则属于特化。同样,动态也是针对静态的相对概念,是基于API在使用中输入输出参数 个数和类型是否可以改变而提出,可变的称为动态,不可变称为静态。在数据模型当中,通 常有"强类型"和"弱类型"的区分。采用面向对象建模方法建立的数据模型被称为"强类 型",是针对具体业务场景中各种各样业务对象的分别建模,期望唯一、准确地描述特定业 务对象模型特征。"强类型"采用"特化的静态数据API",诸如设置客户姓名、获取用户电话 号码等,都是具体到特定的业务属性,并且输入输出参数个数及类型都是确定的,不能在使 用中改变。"弱类型"是一种事先定义好、不会随业务场景变化而发生改变的数据模型,使用 中仅仅通过其承载的数据内容来区分具体属于哪一个业务对象。"泛化的动态数据API"是 为"弱类型"专门设计的,用来操作业务场景中所有业务对象的全部属性特征描述,同时也 包括各个业务对象本身的特征描述。例如同样是设置客户姓名,"泛化的动态数据API"表 述为获取字段名称为姓名的字段值。"弱类型"相比"强类型"更加灵活,更适合在复杂多变 的业务场景中被使用。 有益效果是,本方法采用统一的编程模型实现各种服务间通信和消息转换,有效 屏蔽了各种服务协议和编程模型的差异。提高了通信效率的同时,还降低因异构引起的程 序复杂度。很好地满足了复杂环境中多协议、大容量、高并发应用的服务通信需求,特别适 应在国内电信行业快速发展过程中IT系统普遍项目工期短、大团队开发协作等高负荷开 发场景。


图1是基于WADE框架的WEB化应用中WSMA的所处位置示意图;
图2. 1和2. 2是基于S0A的企业IT系统中WSMA的所处位置示意图;其中,
图2. 1是S0A Foundation中所有服务都可以使用WSMA客户端作为服务消息基础 架构示意图; 图2. 2是以数据服务(Data Access Service)为例详细表现了 WSMA在服务实现
5中的具体位置示意图; 图3是WSMA消息模型示例示意图。
具体实施例方式
下面结合附图与具体实施方式
对本发明作进一步说明 —种WADE服务消息架构的设计方法,其特征是WADE服务消息架构即WSMA的设计
步骤包括API的定义和基本实现; 1)所述WSMA的API定义设计包括 所述WSMA的API包括动态数据API 、数据类型自检API和数据变化跟踪API ,分别 定义于IDataset禾口 IData接口之中; 1. 1)所述WSMA的API定义了动态数据API包括JDBC ResultSet和RowSet API以 及DOM API ;所述JDBC ResultSet和RowSet API是用于关系数据的动态数据API ;DOMAPI 是用于XML数据的动态数据API ; 在WSMA中使用了消息数据集和消息数据;所述消息数据集是消息数据的有序集 合,相当于表列数据的多行记录,对应IDataset接口 ;所述消息数据由若干键值对组成,键 和值分别对应消息数据的属性和属性值,相当于表列数据的一行记录,对应IData接口 ;由 所述IDataset和IData接口定义了多个动态数据API,包括增加消息数据add、移除消息 数据remove、获取消息数据getData、设置属性值put、获取属性值get和获取属性名称集 getNames,用于构造和访问服务消息数据,支持包括动态查询、未知数据类型和可扩展模式 等情况的通用框架; 1. 2) WSMA的API还定义了类似getString、getlnt等数据类型自检API,用于属性 取值时类型检查和转换;消息数据的属性取值默认是未知数据类型Java. lang. Object,支 持包括String、 int等在内的基本数据类型;消息数据或消息数据集本身也在支持的数据 类型之列,可以通过建立层次关系来承载对象数据、关系数据、XML ;
1. 3) WSMA的API还定义了数据变化跟踪API : WSMA参照SDO规范被设计成具备记忆能力,数据集和数据被创建之后的所有更改 均会被逐一记录,可以通过数据变化跟踪API来获取这些更改; 2) WSMA的基本实现包括DatasetList和DataMap,基于Java和Javascript实现
在Java平台中,DatasetList是Java. util. ArrayList的重载,DataM即是Java, util. HashM即的重载; 在Javascript应用环境中,DatasetList和DataMap是采用面向对象的私有实现, 使用类似于Java. util. ArrayList禾口 Java. util. HashM即;充分利用Java禾口 Javascript的 既有特性,尽量避免不必要的学习门槛。 本例中,上述的API定义和基本实现都可以用现有编程语言实现,不再进一步限 制,下面是各类API的举例说明 IDataset (多列数据结构,实现了 List接口的所有方法,并扩展以下方法)
1. public Object get (int index);获取一行数据 2. public Object get (int index, String謹e);获取一行数据(IData)中指定 列名的数据值
3. public Object get(int index, String n咖e, Object defaultValue);获取一 行数据(IData)中指定列名的数据值,如果值为空,取defaultValue默认值
4. public IData getData(int index);获取一行IData结构的数据
5. public String[]getNames();获取列名数组 6. public int count ();获取列表总数,如果分页中获取的为分页总记录,否则同 size方法 7. public IData toData();将IDataset转成IData, data的每个名字放置一 个List,这种方式适用于传递多行数据给后台调用,如前台拼传获取IDataset,然后转成 IData后callTuxedoSvc 8. public IDataset filter (String filter);根据条件过滤并获取符合条件的 数据集,如filter为〃 KEY1 = VALUE1〃或〃 KEY1 = VALUE1,KEY2 = VALUE2〃的数据,多 个提交用,号分隔 9. public IDataset distinct (String fieldName);根据指定列获取排重(不重 复)的数据集,比如传入fieldName为〃 USER_ID〃时,将过滤后只获取数据集中USER_ID 值不重复的数据 10.常用实现类,DatasetList(适用于自定义构造IDataset对象)、DataFmpMap、 DatasetResult。 11. DatasetList构造方式,new DatasetList():(构造 一 个空 DatasetList) 、 newDatasetList (List list):构造 一 个List对象为DatasetList、 固DatasetList (String str):根据 一 串文本构造DatasetList,文本格式禾口 DatasetList. toString()生成的文本格式一样。 IData (单列数据结构,实现了 M即接口的所有方法,并扩展以下方法) 1. public Object get (String name);获取指定列名的数据值 2. public Object get (String謹e, Object defaultValue);获取指定列名的数
据值,如果值为空,取defaultValue默认值 3. public String[]getNames();获取列名数组 4. public String getString(String name);获取指定列名的字符型数据值,如 果值为空,返回空对象,不会自动转为空串 5. public String getString (String name, String defaultValue);获取指定列 名的字符型数据值,如果值为空,取defaultValue默认值 6. public int getlnt (String name);获取指定列名的整型数据值,如果值为空 或为空串,取O 7. public int getlnt (String薩e,int defaultValue);获取指定列名的整型数 据值,如果值为空或为空串,取defaultValue默认值 8. public double getDouble (String name);获取指定列名的浮点型数据值,如 果值为空或为空串,取O 9. public double getDouble (String name, double defaultValue);获取指定列 名的浮点数据值,如果值为空或为空串,取defaultValue默认值 10. public boolean getBoolean(String謹e);获取指定列名的布尔型数据值,如果值为空或为空串,取false 11. public boolean getBoolean(String name, boolean defaultValue);获取指
定列名的布尔数据值,如果值为空或为空串,取defaultValue默认值 12. public IData getData(String謹e);获取指定列名的IData数据值 13. public IDataset getDataset (String謹e);获取指定列名的IDataset数据
值 14. public IDataset toDataset ();将数据转换为IDataset形式,注必须要保 证data的每个元素都是一个IDataset或List接口的对象 15.常用实现类,DataM即(适用于自定义构造IData对象),DataOraMap
16. DataMap构造方式,new DatasetList ():(构造 一 个空DatasetList)、 newDatasetList (List list):构 造 一 个List对 象 为DatasetList、 固DatasetList (String str):根据 一 串文本构造DatasetList,文本格式禾口 DatasetList. toString()生成的文本格式一样。 17.注获取值转换成原生数据类型时,如果获取的为空或空串,会自动赋默认
值,如getlnt获取的值为空或空串时会转为0 IDataset接口提供的排序功能 1.使用方法 例1 :(对NAME列进行升序排列) dataset. sort(" NAME" , IDataset. TYPE—STRING, IDataset. ORDER—ASCEND); 例2 :(在对NAME列进行升序排列的基础上再对AGE列进行降序排列) dataset. sort (〃 NAME〃 , IDataset. TYPE_STRING, IDataset. 0RDER_
ASCEND, 〃 AGE" , IDataset. TYPE—INTEGER, IDataset. ORDER—DESCEND); 2.备注 可以依据特定的数据类型进行排序,现有的数据类型有(字符串
IDataset. TYPE—STRING ;整数IDataset. TYPE—INTEGER ;浮点型
IDataset. TYPE_D0UBLE)。
下面是基本实现的举例说明
Javascript中对应的数据结构 Wade. DatasetList类似多列数据结构的Javascript实现,主要包括以下方法和 属性 1. length属性得到所包含的数据行数长度 2. get (index [int], key [string])方法获取一行数据,如果设置了 key,并且获
取的数据是Wade. DataMap格式的数据,则返回其中名称为key的项 3. each (fn[function] , scope [object])方法遍历数据 4. add(o[object])方法增加一行数据 5. remove (o [object])方法删除数据列中的一列6. removeAt(index[int])方法删除数据列中的一列 7. indexOf(o[object])方法获取某列数据的行标 8. getCount()方法获取所包含的数据行记录数
Wade. DataM即类似单列数据结构的Javascript实现,主要包括以下方法和属性 1. length属性得到所包含的数据项长度 2. get (name [string], defaultValue [string])方法获取项数据,如果值为空并 且设置了默认值则返回默认值 3. each (fn [function], scope [object])方法遍历所有数据项 4. eachKey(fn[function] , scope [object])方法遍历所有数据项名称 5. put (name [string] , value [object])方法增力口一项数据 6. remove (o [object])方法删除数据中的一项 7. removeKey (name[string])方法根据项名称来删除数据中的一项 8. getCount()方法获取所包含的数据项总数 9. contains (o [object])方法判断是否包含指定的数据项 10. containsKey (name[string])方法判断是否包含指定名称的数据项 ll.clear()方法清空所有数据项 12. first()方法获取第一项数据 13. last()方法获取最后一项数据 14. fillFormElements(form[domelement])方法,将对象包含的值填充到和项名 称匹配的表单元素中 数据转换方式 1、 IDataset转字符串 (1、)简单数据结构输出结果(IDataset每个元素为IData) 代码片段 〃定义IDataset IDataset si = new DatasetList(); 〃定义IData IData dl = new DataMap (); 〃加入元素 dl.put(〃 KEY11" , 〃 valuell"); dl.put(〃 KEY12" , 〃 valuel2"); dl.put(〃 KEY13" , 〃 valuel3"); //添力口至lj IDataset中 si. add(dl); IData d2 = new DataMap (); d2.put(〃 KEY21" , 〃 value21"); d2.put(" KEY22" , null); d2.put(〃 KEY23" , 〃 value23"); sl.add(d2); System, out. println (si); 输出结果 [{KEY11=[" valuell" ],KEY12=[〃 valuel2" ],KEY13=[〃 valuel3" ]},],KEY23=[" value23" ],KEY21=[" value21" ]}]
空字符串,每个元素的值通过=[..]来表示,
KEY22 =[ 〃 0135] 说明
0136] 若对应的值为空,会自动转为 若为数组,通过,号分隔
0137] (2、)复杂数据结构输出结果(IData和IDataset相互嵌套) 代码片段
IDataset si = new DatasetListO ; IData dl = new DataMap(); dl.put(〃 KEY11" , 〃 valuell dl.put(〃 KEY12" , 〃 valuel2 dl.put(〃 KEY13" , 〃 valuel3 si. add(dl);
IData d2 = new DataMap(); d2.put(〃 KEY21" , 〃 value21 d2. put(" KEY22" , null); d2.put(〃 KEY23" , 〃 value23 sl. add(d2);
IDataset s2 = new DatasetListO s2. add(d2);
IData d3 = new DataMap(); d3.put(〃 KEY31" , 〃 value31" d3.put(〃 KEY32" , 〃 value32" d3.put(〃 KEY33" , 〃 value33" 〃加入一个IData d2.put(" DATA" , d3); 〃力口入一个IDataset sl.add(s2);
System, out. println (si);
输出结果,KEY12 :[〃 〃 ],DATA = [ {KEY33 =[
0138] 0139] 0140] 0141] 0142] 0143] 0144] 0145] 0146] 0147] 0148] 0149] 0150] 0151] 0152] 0153] 0154] 0155] 0156] 0157] 0158] 0159] 0160] 0161] 0162] KEY22 0163] KEY21 = 0164]
],KEY13= [〃 valuel3" ]},
,KEY32 =[ 〃 ["value21 DATA =[ 〃
value32" ],KEY31=[' ']}, 〃 [{KEY22 =[" {KEY33 = [ 〃 value33 KEY23 = [" value23〃
'value31" "],
'],KEY32 ],KEY21 =
value31" ]} 0165] 说明
0166] IDataset和Data之间可以互相嵌套使用 0167] 2、IData转字符串
0168] (1、)简单数据结构输出结果(IDatas每个元素为非集合对象)
]}],KEY23= [〃 value23"],
=[〃 value32 〃 ], KEY31 = [〃 value21〃 ]}]〃 ]
10
代码片段 〃定义IData IData d3 = new DataMap (); d3.put(〃 KEY31" , 〃 value31"); d3.put(〃 KEY32" , 〃 value32"); d3.put(〃 KEY33" , 〃 value33"); System, out. println (d3); 输出结果 {KEY33=[〃 value33" ],KEY32=[〃 value32" ],KEY31=[〃 value31" ]} 说明 每个值通过[〃 〃 ]表示,若为值为数组通过[〃 〃 , 〃 〃 ]表示 (2、)复杂数据结构输出结果(IData和IDataset相互嵌套) 代码片段 IData d3 = new DataMap (); d3.put(〃 KEY31" , 〃 value31"); d3.put(〃 KEY32" , 〃 value32"); d3.put(〃 KEY33" , 〃 value33"); IDataset sl = new DatasetList(); IData dl = new DataMap (); dl.put(〃 KEY11" , 〃 valuell"); dl.put(〃 KEY12" , 〃 valuel2"); dl.put(〃 KEY13" , 〃 valuel3"); sl. add(dl); IData d2 = new DataMap (); d2.put(〃 KEY21" , 〃 value21"); d2.put(" KEY22" , null); d2.put(〃 KEY23" , 〃 value23"); sl. add(d2); 〃力口入IDataset,元素为IData对象 d3.put(〃 DATASET〃 , sl); IData d4 = new DataMap (); d4.put(〃 KEY41" , 〃 value41"); d4.put(〃 KEY42" , 〃 value42〃 ); d4.put(〃 KEY43" , 〃 value43〃 ); d4.put(" DATA" , d4); 〃加入IDataset,元素为String对象 IDataset s2 = new Datase让ist 0 ; s2. add(" VALUE 1〃 ); s2. add(" VALUE2〃 );
11s2. add(" VALUE3〃 );
s2. add(" VALUE4〃 );
d3. put(" LIST" , s2);
System, out. println (d3);
输出结果 {KEY33 = [ 〃 value33 〃 ], DATASET = [{KEY11 = [ 〃 valuell 〃 ], KEY12 = ["valuel2" ],KEY13=[" valu e13 〃 ]}, {KEY22 = [ 〃 〃 ] , KEY23 = [ 〃 value23 〃 ],KEY21 = ["value21" ]}],KEY32=[" value32"],LIST = [〃 VALUE1〃 , 〃 VALUE2 〃 , 〃 VALUE3 〃 , 〃 VALUE4 〃 ],KEY31 =} 3 、字符串转IDataset String str = 〃 [{KEY11 = [ 〃 valuell 〃 ], KEY12 = [ 〃 valuel2 〃 ], KEY13 = [ 〃 valuel3 〃 ]}, {KEY22 = [ 〃 〃 ], KEY23 = [ 〃 value23 〃 ], KEY21 = ["value21〃 ]}]"; IDataset dataset = new DatasetList(str);
4、字符串转IData String str =〃 {KEY33 = [〃 value33" ],KEY32=[〃 value32" ],KEY31 = [〃 value31〃 ]}〃 ;IData data = new DatasetList (str);
注 1 、字符串与IData、 IDataset对象灵活转换 2、转换时不依赖于IData、 IDataset的结构、可以无限层次嵌套, 3、若从字符串转换为IData、 IDataset结构时,子嵌套的对象直接通过 data, get(〃 key" ) , dataset. get (0)获取,如果要获取子对象,需要强制转换,
如((IData) data, get (" key" )).get(O) JavaScript数据结构的使用 根据字符串来创建DataM即对象 var d4 = new Wade. DataMap (, {KEY33 = [ 〃 value33 〃 ] , KEY32 = ["value32〃 ],KEY31=[" value31〃 ]},); 获取对象中的数据项var v = d4. get(' KEY33', , defaultValue,); 增加对象的数据项d4. put (' KEY34' , , value34'); 根据项名删除对象中的数据项d4. removeKey(' KEY34');遍历对象中的数据项d4. each (function (item, index, totalco皿t) { alert(,共,+totalcoimt+,项,这是第,+ (index+1)+,项,值
为,+ item); }); 将对象输出成字符串格式d4. toString();
根据字符串来创建DatasetList对象
12
var ds4 = new Wade. DatasetList (, [{KEY11 = [ 〃 valuell 〃 ], KEY12 = ["valuel2〃 ], KEY13 = [〃 valuel3" ]}, {KEY22 = [〃 〃 ] , KEY23 = [〃 value23" ],KEY21 =[〃 value21〃 ]}],); 在这个例子中,DatasetList对象里嵌套了 DataM即对象 根据行标删除多列数据集中的一列ds4. removeAt (0); 增加多列数据集的列 var newd = new Wade. DataMap (); newd. put (, KEY33, , ' value33,); 固d. put (, KEY43, , , value43,); ds4. add (newd); 获取多列数据集中的一列,ds4. get(O),获取列中的项值ds4. get(O, ' KEY33') 直接删除多列数据集中的列数据d4. remove (newd); 遍历多列数据集中的数据列 ds4. each (function (item, index, totalco皿t) { alert('共'+totalcount+'列,这是第'+(index+l)+'列,输出为字符串 是' +item); }); 输出多列数据集成字符串格式ds4.toString(); 推荐的服务器端与客户端数据交互方式 1、普通交互 (1).服务器传递数据到页面 pd. setTransfer(〃 info" , dataset. toString()); 在页面端会生成〈input id=〃 info" name = 〃 info" type = 〃 hidden" value =〃 [{KEY1=[〃 VALUE1" ],KEY2=[〃 VALUE2" ]}]〃 />这种数据 (2).客服端获取数据对象 var dataset = new DatasetList (getElementValue (〃 info"));〃将串转成 Dataset对象,getElementValue(" info")表示获取name = 〃 info"的隐藏框的值 (3).服务器获取数据对象 IDataset info = new DatasetList (pd. getPar謙ter(〃 info"));〃将串转
成Dataset对象,pd. getParameter(" info")表示获取name = 〃 info"的隐藏框的值 2、ajax交互 (1).客服端发起请求 ajaxDirect (this, , listener, , par咖s); (2).服务器传递数据到页面 pd. setAjaxDataset (dataset); (3).客户端获取数据 this. afterAction = 〃 f皿cl () 〃 ;〃必须通过afterAction才會緣取数据,
this. afterAction写在ajaxDirect方法之后 function funcl () { var dataset = thi s. ajaxDataset ;//获取月艮务器端数据 ... }
权利要求
一种WADE服务消息架构的设计方法,其特征是WADE服务消息架构即WSMA的设计步骤包括API的定义和基本实现;1)所述WSMA的API定义设计包括所述WSMA的API包括动态数据API、数据类型自检API和数据变化跟踪API,分别定义于IDataset和IData接口之中;1.1)所述WSMA的API定义了动态数据API包括JDBC ResultSet和RowSet API以及DOM API;所述JDBC Resul tSet和RowSet API是用于关系数据的动态数据API;DOMAPI是用于XML数据的动态数据API;在WSMA中使用了消息数据集和消息数据;所述消息数据集是消息数据的有序集合,相当于表列数据的多行记录,对应IDataset接口;所述消息数据由若干键值对组成,键和值分别对应消息数据的属性和属性值,相当于表列数据的一行记录,对应IData接口;由所述IDataset和IData接口定义了多个动态数据API,包括增加消息数据add、移除消息数据remove、获取消息数据getData、设置属性值put、获取属性值get和获取属性名称集getNames,用于构造和访问服务消息数据,支持包括动态查询、未知数据类型和可扩展模式等情况的通用框架;1.2)WSMA的API还定义了类似getString、getInt等数据类型自检API,用于属性取值时类型检查和转换;消息数据的属性取值默认是未知数据类型java.lang.Object,支持包括String、int等在内的基本数据类型;消息数据或消息数据集本身也在支持的数据类型之列,可以通过建立层次关系来承载对象数据、关系数据和XML;1.3)WSMA的API还定义了数据变化跟踪API参照SDO规范,WSMA被设计成具备记忆能力;数据集和数据被创建之后的所有更改均会被逐一记录,可以通过数据变化跟踪API来获取这些更改;2)WSMA的基本实现包括DatasetList和DataMap的设计,它们是基于Java和Javascript实现在Java平台中,DatasetList是java.util.ArrayList的重载,DataMap是java.util.HashMap的重载;在Javascript应用环境中,DatasetList和DataMap是采用面向对象的私有实现,使用类似于java.util.ArrayList和java.util.HashMap;充分利用Java和Javascript的既有特性,尽量避免不必要的学习门槛。
2. 根据权利要求1所述的WADE服务消息架构的设计方法,其特征是所述WSMA的API 采用的是泛化的动态数据API。
全文摘要
一种WADE服务消息架构(WSMA)的设计方法,具体是包括WSMA的接口(API)定义和基本实现。1.WSMA API包括动态数据API、数据类型自检API和数据变化跟踪API,分别定义于IDataset和IData接口之中。2.WSMA的基本实现包括DatasetList和DataMap,基于Java和Javascript均有实现。有益效果是,本方法采用统一的编程模型实现各种服务间通信和消息转换,有效屏蔽了各种服务协议和编程模型的差异。提高了通信效率的同时,还降低因异构引起的程序复杂度。很好地满足了复杂环境中多协议、大容量、高并发应用的服务通信需求,特别适应在国内电信行业快速发展过程中IT系统普遍项目工期短、大团队开发协作等高负荷开发场景。
文档编号G06F9/44GK101794223SQ20101010596
公开日2010年8月4日 申请日期2010年2月3日 优先权日2010年2月3日
发明者孙力斌, 张有根, 张翅, 张青, 李智, 梁斌, 陈杰 申请人:南京联创科技集团股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1