CN101794223A - Wade服务消息架构的设计方法 - Google Patents
Wade服务消息架构的设计方法 Download PDFInfo
- Publication number
- CN101794223A CN101794223A CN201010105966A CN201010105966A CN101794223A CN 101794223 A CN101794223 A CN 101794223A CN 201010105966 A CN201010105966 A CN 201010105966A CN 201010105966 A CN201010105966 A CN 201010105966A CN 101794223 A CN101794223 A CN 101794223A
- Authority
- CN
- China
- Prior art keywords
- data
- api
- wsma
- message
- java
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 51
- 238000013461 design Methods 0.000 title claims abstract description 12
- 230000008859 change Effects 0.000 claims abstract description 13
- 238000006243 chemical reaction Methods 0.000 claims abstract description 10
- 239000008186 active pharmaceutical agent Substances 0.000 claims description 35
- 238000011161 development Methods 0.000 abstract description 17
- 238000004891 communication Methods 0.000 abstract description 8
- 230000018109 developmental process Effects 0.000 description 14
- 230000006870 function Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 5
- 238000010276 construction Methods 0.000 description 4
- 239000012634 fragment Substances 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- LZDYZEGISBDSDP-UHFFFAOYSA-N 2-(1-ethylaziridin-1-ium-1-yl)ethanol Chemical compound OCC[N+]1(CC)CC1 LZDYZEGISBDSDP-UHFFFAOYSA-N 0.000 description 3
- 238000013499 data model Methods 0.000 description 3
- 238000007667 floating Methods 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 238000012544 monitoring process Methods 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 230000001174 ascending effect Effects 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 230000002688 persistence Effects 0.000 description 2
- 241000976416 Isatis tinctoria subsp. canescens Species 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000007935 neutral effect Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 230000033772 system development Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
一种WADE服务消息架构(WSMA)的设计方法,具体是包括WSMA的接口(API)定义和基本实现。1.WSMA API包括动态数据API、数据类型自检API和数据变化跟踪API,分别定义于IDataset和IData接口之中。2.WSMA的基本实现包括DatasetList和DataMap,基于Java和Javascript均有实现。有益效果是,本方法采用统一的编程模型实现各种服务间通信和消息转换,有效屏蔽了各种服务协议和编程模型的差异。提高了通信效率的同时,还降低因异构引起的程序复杂度。很好地满足了复杂环境中多协议、大容量、高并发应用的服务通信需求,特别适应在国内电信行业快速发展过程中IT系统普遍项目工期短、大团队开发协作等高负荷开发场景。
Description
技术领域
本发明涉及的是一种支持企业IT系统中的数据通信与转换的方法技术领域,具体是一种WADE服务消息架构的设计方法。
背景技术
1.Java
Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。
Java编程语言是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。
2.JavaScript
Javascript是一种由Netscape的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
JavaScript的正式名称是“ECMAScript”。这个标准由ECMA组织发展和维护。ECMA-262是正式的JavaScript标准。这个标准基于JavaScript(Netscape)和JScript(Microsoft)。Netscape(Navigator 2.0)的Brendan Eich发明了这门语言,从1996年开始,已经出现在所有的Netscape和Microsoft浏览器中。ECMA-262的开发始于1996年,在1997年7月,ECMA会员大会采纳了它的首个版本。在1998年,该标准成为了国际ISO标准(ISO/IEC 16262)。这个标准仍然处于发展之中。在2005年12月,ECMA发布ECMA-357标准(ISO/IEC 22537)出台,主要增加对扩展标记语言XML的有效支持。
3.服务数据对象(Service Data Objects,SDO)
服务数据对象(Service Data Objects,SDO)是ORACLE(BEA)和IBM最近共同发布的一项规范,正由JSR-235专家组进行标准化以通过JCP(Java Community Process)审核。SDO是一种数据编程架构和API,它统一了不同数据源类型的数据编程,提供了对通用应用程序模式的健壮支持,并使应用程序、工具和框架更容易查询、读取、更新和检查数据。关于SDO架构的高级概述,请参考白皮书Next-Generation Data Programming:Service Data Objects(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,SDO)规范问世以后,对比发现WSMA同SDO规范不谋而合,但需要进行相关改造,使之完全符合规范要求,并力图成为标准化组织中的重要成员参与规范建设。
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的既有特性,尽量避免不必要的学习门槛,做到不但通俗易懂,而且应用方便。使用时仅仅需要引用相应JAR包或JS文件即可,开发人员上手比较快,部署方便,运行时可靠性也很高。
WSMA接口是一个泛化的动态数据API,泛化是针对特化的相对概念,泛化可以理解为从若干具有共性的类中抽取出基类;相反的,继承某一个基类,去描述某个特定的业务,则属于特化。同样,动态也是针对静态的相对概念,是基于API在使用中输入输出参数个数和类型是否可以改变而提出,可变的称为动态,不可变称为静态。在数据模型当中,通常有“强类型”和“弱类型”的区分。采用面向对象建模方法建立的数据模型被称为“强类型”,是针对具体业务场景中各种各样业务对象的分别建模,期望唯一、准确地描述特定业务对象模型特征。“强类型”采用“特化的静态数据API”,诸如设置客户姓名、获取用户电话号码等,都是具体到特定的业务属性,并且输入输出参数个数及类型都是确定的,不能在使用中改变。“弱类型”是一种事先定义好、不会随业务场景变化而发生改变的数据模型,使用中仅仅通过其承载的数据内容来区分具体属于哪一个业务对象。“泛化的动态数据API”是为“弱类型”专门设计的,用来操作业务场景中所有业务对象的全部属性特征描述,同时也包括各个业务对象本身的特征描述。例如同样是设置客户姓名,“泛化的动态数据API”表述为获取字段名称为姓名的字段值。“弱类型”相比“强类型”更加灵活,更适合在复杂多变的业务场景中被使用。
有益效果是,本方法采用统一的编程模型实现各种服务间通信和消息转换,有效屏蔽了各种服务协议和编程模型的差异。提高了通信效率的同时,还降低因异构引起的程序复杂度。很好地满足了复杂环境中多协议、大容量、高并发应用的服务通信需求,特别适应在国内电信行业快速发展过程中IT系统普遍项目工期短、大团队开发协作等高负荷开发场景。
附图说明
图1是基于WADE框架的WEB化应用中WSMA的所处位置示意图;
图2.1和2.2是基于SOA的企业IT系统中WSMA的所处位置示意图;其中,
图2.1是SOA Foundation中所有服务都可以使用WSMA客户端作为服务消息基础架构示意图;
图2.2是以数据服务(Data Access Service)为例详细表现了WSMA在服务实现中的具体位置示意图;
图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、getInt等数据类型自检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的重载,DataMap是java.util.HashMap的重载;
在Javascript应用环境中,DatasetList和DataMap是采用面向对象的私有实现,使用类似于java.util.ArrayList和java.util.HashMap;充分利用Java和Javascript的既有特性,尽量避免不必要的学习门槛。
本例中,上述的API定义和基本实现都可以用现有编程语言实现,不再进一步限制,下面是各类API的举例说明:
IDataset(多列数据结构,实现了List接口的所有方法,并扩展以下方法):
1.public Object get(int index);获取一行数据
2.public Object get(int index,String name);获取一行数据(IData)中指定列名的数据值
3.public Object get(int index,String name,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、newDatasetList(String str):根据一串文本构造DatasetList,文本格式和DatasetList.toString()生成的文本格式一样。
IData(单列数据结构,实现了Map接口的所有方法,并扩展以下方法):
1.public Object get(String name);获取指定列名的数据值
2.public Object get(String name,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 getInt(String name);获取指定列名的整型数据值,如果值为空或为空串,取0
7.public int getInt(String name,int defaultValue);获取指定列名的整型数据值,如果值为空或为空串,取defaultValue默认值
8.public double getDouble(String name);获取指定列名的浮点型数据值,如果值为空或为空串,取0
9.public double getDouble(String name,double defaultValue);获取指定列名的浮点数据值,如果值为空或为空串,取defaultValue默认值
10.public boolean getBoolean(String name);获取指定列名的布尔型数据值,如果值为空或为空串,取false
11.public boolean getBoolean(String name,boolean defaultValue);获取指定列名的布尔数据值,如果值为空或为空串,取defaultValue默认值
12.public IData getData(String name);获取指定列名的IData数据值
13.public IDataset getDataset(String name);获取指定列名的IDataset数据值
14.public IDataset toDataset();将数据转换为IDataset形式,注:必须要保证data的每个元素都是一个IDataset或List接口的对象
15.常用实现类,DataMap(适用于自定义构造IData对象),DataOraMap
16.DataMap构造方式,new DatasetList():(构造一个空DatasetList)、newDatasetList(List list):构造一个List对象为DatasetList、newDatasetList(String str):根据一串文本构造DatasetList,文本格式和DatasetList.toString()生成的文本格式一样。
17.注:获取值转换成原生数据类型时,如果获取的为空或空串,会自动赋默认值,如getInt获取的值为空或空串时会转为0
IDataset接口提供的排序功能:
1.使用方法:
例1:(对NAME列进行升序排列)
dataset.sort(″NAME″,IDataset.TYPE_STRING,IDataset.ORDER_ASCEND);
例2:(在对NAME列进行升序排列的基础上再对AGE列进行降序排列)
dataset.sort(″NAME″,IDataset.TYPE_STRING,IDataset.ORDER_ASCEND,″AGE″,IDataset.TYPE_INTEGER,IDataset.ORDER_DESCEND);
2.备注:
可以依据特定的数据类型进行排序,现有的数据类型有(字符串:
IDataset.TYPE_STRING;整数:IDataset.TYPE_INTEGER;浮点型:
IDataset.TYPE_DOUBLE)。
下面是基本实现的举例说明:
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.DataMap类似单列数据结构的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])方法 判断是否包含指定名称的数据项
11.clear()方法 清空所有数据项
12.first()方法 获取第一项数据
13.last()方法 获取最后一项数据
14.fillFormElements(form[domelement])方法,将对象包含的值填充到和项名称匹配的表单元素中
数据转换方式:
1、IDataset转字符串
(1、)简单数据结构输出结果(IDataset每个元素为IData)
代码片段:
//定义IDataset
IDataset s1=new DatasetList();
//定义IData
IData d1=new DataMap();
//加入元素
d1.put(″KEY11″,″value11″);
d1.put(″KEY12″,″value12″);
d1.put(″KEY13″,″value13″);
//添加到IDataset中
s1.add(d1);
IData d2=new DataMap();
d2.put(″KEY21″,″value21″);
d2.put(″KEY22″,null);
d2.put(″KEY23″,″value23″);
s1.add(d2);
System.out.println(s1);
输出结果:
[{KEY11=[″value11″],KEY12=[″value12″],KEY13=[″value13″]},{KEY22=[″″],KEY23=[″value23″],KEY21=[″value21″]}]
说明:
若对应的值为空,会自动转为″″空字符串,每个元素的值通过=[..]来表示,若为数组,通过,号分隔
(2、)复杂数据结构输出结果(IData和IDataset相互嵌套)
代码片段:
IDataset s1=new DatasetList();
IData d1=new DataMap();
d1.put(″KEY11″,″value11″);
d1.put(″KEY12″,″value12″);
d1.put(″KEY13″,″value13″);
s1.add(d1);
IData d2=new DataMap();
d2.put(″KEY21″,″value21″);
d2.put(″KEY22″,null);
d2.put(″KEY23″,″value23″);
s1.add(d2);
IDataset s2=new DatasetList();
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
s1.add(s2);
System.out.println(s1);
输出结果:
[{KEY11=[″value11″],KEY12=[″value12″],KEY13=[″value13″]},{KEY22=[″″],DATA=[{KEY33=[″value33″]
,KEY32=[″value32″],KEY31=[″value31″]}],KEY23=[″value23″],KEY21=[″value21″]},″[{KEY22=[″″],
DATA=[″{KEY33=[″value33″],KEY32=[″value32″],KEY31=[″value31″]}″],KEY23=[″value23″],KEY21=[″value21″]}]″]
说明:
IDataset和Data之间可以互相嵌套使用
2、IData转字符串
(1、)简单数据结构输出结果(IDatas每个元素为非集合对象)
代码片段:
//定义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 s1=new DatasetList();
IData d1=new DataMap();
d1.put(″KEY11″,″value11″);
d1.put(″KEY12″,″value12″);
d1.put(″KEY13″,″value13″);
s1.add(d1);
IData d2=new DataMap();
d2.put(″KEY21″,″value21″);
d2.put(″KEY22″,null);
d2.put(″KEY23″,″value23″);
s1.add(d2);
//加入IDataset,元素为IData对象
d3.put(″DATASET″,s1);
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 DatasetList();
s2.add(″VALUE1″);
s2.add(″VALUE2″);
s2.add(″VALUE3″);
s2.add(″VALUE4″);
d3.put(″LIST″,s2);
System.out.println(d3);
输出结果:
{KEY33=[″value33″],DATASET=[{KEY11=[″value11″],KEY12=[″value12″],KEY13=[″valu
e13″]},{KEY22=[″″],KEY23=[″value23″],KEY21=[″value21″]}],KEY32=[″value32″],
LIST=[″VALUE1″,″VALUE2″,″VALUE3″,″VALUE4″],KEY31=[″value31″]}
3、字符串转IDataset
String str=″[{KEY11=[″value11″],KEY12=[″value12″],KEY13=[″value13″]},{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(0)
JavaScript数据结构的使用:
根据字符串来创建DataMap对象
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,totalcount){
alert(’共’+totalcount+’项,这是第’+(index+1)+’项,值为:’+
item);
});
将对象输出成字符串格式:d4.toString();
根据字符串来创建DatasetList对象
var ds4=new Wade.DatasetList(’[{KEY11=[″value11″],KEY12=[″value12″],
KEY13=[″value13″]},{KEY22=[″″],KEY23=[″value23″],KEY21=[″value21″]}]’);
在这个例子中,DatasetList对象里嵌套了DataMap对象
根据行标删除多列数据集中的一列ds4.removeAt(0);
增加多列数据集的列
var newd=new Wade.DataMap();
newd.put(’KEY33’,’value33’);
newd.put(’KEY43’,’value43’);
ds4.add(newd);
获取多列数据集中的一列,ds4.get(0),获取列中的项值ds4.get(0,’KEY33’)
直接删除多列数据集中的列数据d4.remove(newd);
遍历多列数据集中的数据列
ds4.each(function(item,index,totalcount){
alert(’共’+totalcount+’列,这是第’+(index+1)+’列,输出为字符串是:’
+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.getParameter(″info″));//将串转成Dataset对象,pd.getParameter(″info″)表示获取name=″info″的隐藏框的值
2、ajax交互
(1).客服端发起请求:
ajaxDirect(this,’listener’,params);
(2).服务器传递数据到页面:
pd.setAjaxDataset(dataset);
(3).客户端获取数据:
this.afterAction=″funcl()″;//必须通过afterAction才能获取数据,
this.afterAction写在ajaxDirect方法之后
function funcl(){
var dataset=thi s.ajaxDataset;//获取服务器端数据
...
}
Claims (2)
1.一种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。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101059663A CN101794223B (zh) | 2010-02-03 | 2010-02-03 | Wade服务消息架构的设计方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101059663A CN101794223B (zh) | 2010-02-03 | 2010-02-03 | Wade服务消息架构的设计方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101794223A true CN101794223A (zh) | 2010-08-04 |
CN101794223B CN101794223B (zh) | 2012-11-28 |
Family
ID=42586935
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010101059663A Expired - Fee Related CN101794223B (zh) | 2010-02-03 | 2010-02-03 | Wade服务消息架构的设计方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101794223B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105159664A (zh) * | 2015-08-07 | 2015-12-16 | 苏州博优赞信息科技有限责任公司 | 基于javascript实现键值对存储的方式 |
CN106528072A (zh) * | 2015-09-15 | 2017-03-22 | 阿里巴巴集团控股有限公司 | 一种JavaScript代码转译方法及装置 |
CN108399151A (zh) * | 2017-02-06 | 2018-08-14 | 百度在线网络技术(北京)有限公司 | 数据比对系统和方法 |
CN108520448A (zh) * | 2018-03-07 | 2018-09-11 | 阿里巴巴集团控股有限公司 | 事件管理方法及装置 |
CN110795168A (zh) * | 2018-08-02 | 2020-02-14 | 武汉斗鱼网络科技有限公司 | 一种获取数据的方法及相关装置 |
CN118233936A (zh) * | 2024-05-24 | 2024-06-21 | 国网甘肃省电力公司电力科学研究院 | 一种基于卫星通信和短波通信的融合组网方法与系统 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100619844B1 (ko) * | 2004-03-30 | 2006-09-13 | 엘지전자 주식회사 | Mms 콘텐츠 전송방법 |
CN1956421A (zh) * | 2005-10-26 | 2007-05-02 | 北京航空航天大学 | Web服务消息可靠传递方法 |
CN100426241C (zh) * | 2005-12-28 | 2008-10-15 | 中国科学院计算技术研究所 | 一种面向服务体系结构中消息层软中断处理方法 |
-
2010
- 2010-02-03 CN CN2010101059663A patent/CN101794223B/zh not_active Expired - Fee Related
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105159664A (zh) * | 2015-08-07 | 2015-12-16 | 苏州博优赞信息科技有限责任公司 | 基于javascript实现键值对存储的方式 |
CN106528072A (zh) * | 2015-09-15 | 2017-03-22 | 阿里巴巴集团控股有限公司 | 一种JavaScript代码转译方法及装置 |
CN106528072B (zh) * | 2015-09-15 | 2019-06-21 | 阿里巴巴集团控股有限公司 | 一种JavaScript代码转译方法及装置 |
CN108399151A (zh) * | 2017-02-06 | 2018-08-14 | 百度在线网络技术(北京)有限公司 | 数据比对系统和方法 |
CN108399151B (zh) * | 2017-02-06 | 2022-02-15 | 百度在线网络技术(北京)有限公司 | 数据比对系统和方法 |
CN108520448A (zh) * | 2018-03-07 | 2018-09-11 | 阿里巴巴集团控股有限公司 | 事件管理方法及装置 |
CN108520448B (zh) * | 2018-03-07 | 2022-05-17 | 创新先进技术有限公司 | 事件管理方法及装置 |
CN110795168A (zh) * | 2018-08-02 | 2020-02-14 | 武汉斗鱼网络科技有限公司 | 一种获取数据的方法及相关装置 |
CN110795168B (zh) * | 2018-08-02 | 2022-11-11 | 武汉斗鱼网络科技有限公司 | 一种获取数据的方法及相关装置 |
CN118233936A (zh) * | 2024-05-24 | 2024-06-21 | 国网甘肃省电力公司电力科学研究院 | 一种基于卫星通信和短波通信的融合组网方法与系统 |
Also Published As
Publication number | Publication date |
---|---|
CN101794223B (zh) | 2012-11-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Sevilla Ruiz et al. | Inferring versioned schemas from NoSQL databases and its applications | |
CN102341781B (zh) | 软件测试台生成 | |
KR101122841B1 (ko) | 중첩된 표로 스키마 없는 데이터 매핑을 위한 시스템과방법 | |
US10990577B2 (en) | Service registry for saving and restoring a faceted selection | |
CN105989150B (zh) | 一种基于大数据环境的数据查询方法及装置 | |
US11907203B2 (en) | Path encoded tree structures for operations | |
US20040031015A1 (en) | System and method for manipulation of software | |
Frischmuth et al. | Ontowiki–an authoring, publication and visualization interface for the data web | |
US20090077091A1 (en) | System for development and hosting of network applications | |
CN101794223B (zh) | Wade服务消息架构的设计方法 | |
JP2007531157A (ja) | 基幹業務アプリケーション統合のためのアダプタフレームワーク | |
CN101788994A (zh) | 一种数据展示模型建立方法、数据展示方法及装置 | |
US20080027782A1 (en) | Managing provenance of the evolutionary development of workflows | |
CN102270137B (zh) | 一种获取体系结构描述语言的方法和一种建模工具 | |
US7818328B2 (en) | API for obtaining unambiguous representation of objects in a relational database | |
WO2000075849A2 (en) | Method and apparatus for data access to heterogeneous data sources | |
CN103914290A (zh) | 一种操作命令处理方法及装置 | |
US11341418B2 (en) | Ascriptive and descriptive entities for process and translation: a limited iterative ontological notation | |
US10776351B2 (en) | Automatic core data service view generator | |
CN114168149A (zh) | 一种数据转换方法及装置 | |
US20130268834A1 (en) | Creating interactive forms from applications' user interface | |
US9471640B2 (en) | Automatic conversion of units of measure during data stream processing | |
Youn et al. | Survey about ontology development tools for ontology-based knowledge management | |
Nguyen | Model-based version and configuration management for a web engineering lifecycle | |
McGrath | Data format description language: Lessons learned, concepts and experience |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20121128 |