OGSI规范中关于ServiceData部分的内容._第1页
OGSI规范中关于ServiceData部分的内容._第2页
免费预览已结束,剩余11页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、OGSI 规范中关于 ServiceData 部分的内容papayahpcc.t on .c n为了实现 OGSI 中提出的有状态的 Web 服务,需要有一种通用的机制,使得服务的请 求者可以对服务实例的状态数据进行查询、更新和当这些数据发生变化时收到相应的通知。 这里使用“服务数据”(serviceData )来表示这些体现服务实例状态的数据。由于这个概念对于任何 Web 服务都适用而并不只适用于网格应用,因此我们提出一种展现Web 服务的状态数据,也就是服务数据的通用的方法。我们也正致力于将这个概念在整个Web 服务领域中推广。在对一个有状态的 Web 服务(也就是网格服务)

2、的接口进行进行完整的描述时,也应该对这个服务中向外界表示其状态的元素进行描述。向外界表示状态,指的是在服务本身的内部实现不考虑具体的客户端的情况下,通过预先声明的服务的接口向服务的客户端展示服务的状态。将服务数据作为服务对外接口的一部分紧盯声明,大致相当于在面向对象的接口定义语言(IDL )中将对象的属性作为面向对象接口的一部分进行声明。对外展示的服务数 据可供用于读取、更新或者作为发送消息通知的依据。在 WSDL 中已经为每个 portType 定义了相应的操作和消息,因此外界对服务状态的访 问只能通过在服务的接口中定义的服务操作进行。为了避免对每一个服务数据元素都定义特定的服务数据操作,在

3、所有网格服务都必须实现的接口Grid Service portType 中提供了通过名称处理服务数据的基本操作。例如接口 foo 中有三个操作 op1、op2 和 op3。同时这个接口中还有三个可以被外界访 问的数据元素 de1、de2 和 de3。在描述 foo 接口时可以使用标准的 WSDL 描述它的操作, 而使用 OGSI 中对WSDL 在服务数据方面的扩展部分表述接口foo 中的状态 de1、de2 和 de3是否可以被外界全部或部分地访问。实现了这样定义的接口的有状态服务实例,将可以简化与服务状态有关的操作的执行过程。简单的说,对于服务数据的声明,就是将服务中表示其对外可访问的服务状

4、态的元素作为服务接口的一部分进行描述的机制。可以通过服务接口中的操作,例如本规范中所定义的操作,对服务数据元素进行访问。而服务的私有的内部状态不作为服务接口的一部分,因此不会通过服务数据的声明而对外展现。1 1、产生动机与 JavaBeanJavaBean 属性的比较OGSI 规范引进服务数据的概念, 目的是提供一种灵活的, 以属性的形式对 Web 服务的 状态数据进行访问的方式。 这个概念与 Java, C+和 Smalltalk 等面向对象语言中的具有 public 属性的实例变量或字段有相似之处。服务数据也类似于 JavaBean 中的属性(properties)oJavaBear 模型

5、中规定了访问相应属 性的方法的命名法则 (getXXX/setXXX )以及说明相应属性的辅助类(Beanlnfo)。而在 OGSI中,使用服务数据元素和 XML schema 中的类型来达到类似的目的。尽管在服务的具体实现时可以使用类似于getXXX 和 setXXX 的方法安全明确地访问某个服务数据元素,但在 OGSI 规范中没有这样的要求,而是为查询(相当于get)、更新(相当于 set)和订阅服务数据元素变更通知定义了具有扩展性的操作。OGSI 要求这些操作支持译者:岳峰同济大学计算机系papaya21c简单的表达式参数,根据服务数据元素的相对于服务实例的名称进行访问。这种将名称作为参

6、数的操作可以提供与 JavaBean 和 EJB 程序员所熟悉的 getXXX 和 setXXX 方法几乎一样的功 能。另外,这种 OGSI 操作还可以被服务的其他接口所扩展,以支持更丰富的查询、更新和 订阅语义,例如在某个服务实例中对多个服务数据元素进行复杂的复合查询。在网格的基本 portType 中定义了一个名为 serviceDataName 的数据元素。这个元素相当于JavaBean 中的 Beanlnfo 类。不同之处在于 OGSI 中以 XML ( WSDL )文档的格式提供这个元素 的相关信息,而在 Bea nlnfo 模型中则是使用一个可序列化的类来实现。2 2、带有服务数据

7、的 portTypeportType 的扩展服务数据定义了一个新的 portType 子元素 serviceData,用于定义该 portType 相关的服务数 据元素,或者说 SDE。这些服务数据元素的定义同时也作为服务数据声明被引用(SDD )。用 static 标记的服务数据元素, 可以在 portType 中通过 staticServiceDataValues 元素来指定其初 始值。所有服务数据元素的值,无论是在portType 中静态声明的还是在 Web 服务实例的运行期间赋予的值,都被称作服务数据元素值或者SDE 值。在使用 gwsdl:portType 时,其中也允许出现来自其他

8、命名空间的元素。vgwsdl:portType n ame=NCName例如,下面的 portType 声明了两个服务数据元素,全名分别为tns:sd1”和tns:sd2”。任何实现该 portType 的服务,都必须在其服务状态中包含这两个服务数据元素。wsdl:operati on n ame= ini tValue 2.1 服务数据的声明结构声明服务数据的元素中所需的字段和XML Schema 中的 xsd:element中使用的字段非常相似,因此对后者稍作修改使其可用于服务数据元素的声明。另外还明确规定了每个服务数据元素只能包含下述属性:xsd:element中的 annotation

9、 ,name,type , minOccursmaxOccurs ,nillable ; OGSI 扩展的 mutability 和 modifiable,以及内容模型中的开放属性。targetNamespace =“ /namespaces/2003/serviceData”xml ns:sd =“ /namespaces/2003/03/serviceData”xsd:complexType name=“ ClosedServiceDataElementType ” mixed= ” true ”x

10、sd:restriction base=” xsd:element ”xsd:complexType name= ” ServiceDataType ” mixed= ” true ”xsd:extension base=” sd:ClosedServiceDataElementType” v/xsd:attributexsd:attribute name=modifiable type=” xsd:boolean ”default= ” false ”v/xsd:complexC ontentv/xsd:complexTypexsd:complexType name= ” ServiceDa

11、taValuesType ”各元素详解如下:maxOccurs =(非负整数|unbounded):默认值为 1该值表示在服务实例的服务数据值或者portType的静态服务数据值中该服务数据元素值的最大数目。min Occurs =非负整数:默认值为 1该值表示在服务实例的服务数据值或者portType的静态服务数据值中该服务数据元素值的最小数目。如果该值为 0,表示该服务数据元素可选n ame = NCName禾口 target n amespace在 wsdl:defi niti ons元素所定义的命名空间中,服务数据元素的名称必须在所有 sd:serviceData禾口 xsd:elem

12、e nt元素中唯一。服务数据元素的名称和 wsdl:defi nitio ns元素定义的目标命名空间的组合得到该服务数据元素的 QName,作为该服务数据元素的专用标识。nillable =布尔值:默认为 false表示该服务数据元素是否可以有空值,也就是属性xsi:nil 的值为 true 的值。例如下面的服务数据声明:vserviceDataElement name= ” foo ” type= ” xsd:string ”nillable=true” /可以有如下的合法 SDE 值:vfoo xsi:nil= ” true ” /type = QName定义服务数据元素值的 XML Sc

13、hema 类型modifiable = 布尔值:默认为 false若为 true ,则允许服务的请求者在符合( mi nOccurs, maxOccurs)规定的值的数目和 mutability属性的情况下,通过 setServiceData 操作直接更新改服务数据的值若为 false,则该服务数据元素的值对于请求者来说是只读的。但是它的值可以因为服务接口的其他操作的结果而改变。mutability =static | constant | extendable | mutable ” : 默认为exte ndable表示该服务数据元素的值是否可以改变及具体的改变方式。非 schema 命名空

14、间中的任意属性允许将服务数据的属性声明为其他开放内容内容anno tati on允许注释作为服务数据声明的子元素出现。开放的内容元素模型,任意XML Schema 之外的其他命名的元素都可以作为服务数据元素的子元素。开放的内容元素模型,mutability 和 modifiable属性的定义是对 xsd:element的扩展。另外,这样定义服务数据,可以使portType中的操作以符合服务数据声明的值作为参数。2.2 GridService portType中使用服务数据的例子下面通过一个 GridService portType中的例子来说明服务数据的使用。在这个例子中服务数据的声明(非标准

15、格式)如下:wsdl:defi niti onsvgwsdl:portType name= ” GridService ”wsdl:operati on n ame= F 面是 Grid Service中一组服务数据元素值的例子。xmlns:crm= ” /namespaces/2002/11/crm xmlns:tns= ” http:/ ”xnlns= ” http:/ ” crm:GenericOSPT ogsi:GridServiceogsi:i nterface ogsi:serviceDataName ogsi:factoryHa ndle o

16、gsi:gridServiceHa ndle ogsi:gridServiceRefere nee ogsi:fi ndServiceDataExte nsibility ogsi:term in ati on Time ogsi:setServiceDataExte nsibility 2.32.3 SDESDE 值的可变性服务数据元素声明中的可变性(mutability )这一属性表示该服务数据元素的值在其生命周期之中的变化情况。mutability= static”:表示该 SDE 在 WSDL 声明中(staticServiceDataValue )赋值且在portType 的所有实例

17、中都有效。一个” static ”的 SDE 相当于编程语言中的类的静态成员变量。mutability= constant”:表示该 SDE 在网格服务实例创建时赋值,且一旦赋值则在网someURI someURI someOtherURI 格服务实例的整个生命周期中都不能更改。mutability= extendable”:表示已经在 SDE 值中的元素,在网格服务实例的生命周期 剩下的部分中将一直作为该SDE 值的一部分。新的元素可以加入到 SDE 值中,但是一旦加入,就不能删除。mutability= mutable”:表示该 SDE 值中的任意元素都可以在任意时间删除,而其他 元素同样

18、也可以在任意时间加入。这里所定义的功能不同于 XML Schema 的元素定义中的fixed 和default属性。尽管 XMLSchema 中的 fixed 属性可以表示一个 OGSI 中的 static 值,但是在描述上述可附加”或 者可变”等属性时就需要另外使用单独的可变性属性变量。当 mutability= constant时表示一旦赋值就不会再更改,尽管在服务描述中并不对其赋值,但是要求在运行期间得到初始化。3 3 服务数据值每个服务实例都有一个相关的服务数据元素集合,其中有些服务数据元素在定义该服务接口的各个 portType 中定义,而另外一些服务数据元素则可能是在运行期间动态的

19、添加进来 的。我们将与某个服务实例相关联的服务数据元素的集合称为该服务实例的服务数据集。-个服务数据集也可以指在 portType 的继承层次关系中各个 portType 定义的所有服务数据元素 的集合。针对每个服务数据元素都必须有一个逻辑上的XML 文件,其根元素为serviceDataValues,包含有这个服务数据元素的值。前面已经给出了一个serviceDataValues元素的例子。服务在实现的时候可以自由的选择如何存储它的SDE 值。例如可以不用 XML文件而是使用实例变量来存储SDE 值,需要时再将实例变量转换成XML 文件或其他编码格式。处理服务数据元素的各个操作的wsdl:b

20、inding 中规定了服务请求者和服务提供者之间数据的编码格式。例如,某个 binding 可能会规定服务数据元素值以序列化的Java 对象作为其编码格式。3.13.1 在 PortTypePortType 中定义 SDESDE 值的初始值在 portType 中可以为其服务数据集中任一可变性 (mutability)为static”的服务数据元素深 声明初始值,无论该服务数据元素是在当前portType 中定义的,还是在当前 portType 所继承的某个 portType 中定义的。初始值也可以在 portType 的继承层次中在多个 portType 中多次定 义,只要服务数据元素的初始

21、值总数没有超过该服务数据元素的maxOccurs 属性的限制。在这种情况下,该服务数据元素的初始值为所有这些初始值的集合。例如下面合法地声明了元素tns:otherSD 的两个初始值:initial value 1 和initial value 2 i ni tial value 1v/gwsdl:portTypegwsdl:portType n ame=exampleSDUse exte nds“ tn s:otherPT ”wsdl:operati on n ame= wsdl:operati on n ame= a n in itial valuei ni tial value 2对于

22、mutability 值不是 static 的服务数据元素,不能声明其初始值。4 4 portTypeportType 继承层次结构中服务数据元素的集结WSDL1.2 规范中引入了多 portType 继承的概念。在 OGSI 中的 gwsdI 命名空间中已经实现 了这种继承结构。一个 portType 可以继承 0 个或多个其它 portType。一个 wsdl:service 和用 WSDL 语法描述的它所支持的portType 之间没有直接的关系。一个服务所实现的portType 的集合可以通过服务(service)元素的 port 子元素和从这些 port 元素引用的 binding

23、元素导出。 这样一个 portType 集合,以及所有被它们继承的portType,就构成了该服务的完整的接口。服务的接口定义的服务数据集是服务所实现的各个接口对应的portType 中声明的所有的服务数据元素的并集。由于服务数据元素依靠其QName 唯一的标识,服务数据元素集中每个服务数据元素至多只能出现一次。例如名为pt1 和名为 pt2 的两个 portType 都声明有名为tns:sd1的服务数据, 则名为 pt3且同时继承 pt1和 pt2的 portType中只有一个, 而不是两个名为 tn s:sd1的服务数据元素。以下是一个例子:gwsdl:portType n ame=” p

24、t4 ”exte nds“ pt2 pt3 ”则分别实现以上四个 portType 的服务中所含有的服务数据元素如下表:如果服务实现了接口服务数据集中包含Pt1sd1Pt2sd1, sd2Pt3sd1, sd3Pt4sd1, sd2, sd3, sd44.14.1 在 portTypeportType 继承层次结构中静态 SDESDE 的初始值静态(static)SDE 的初始值可以顺 portType 的继承层次自上而下的集结而得。同时还必 须符合相应的数量限制(mi nO ccurs 和 maxOccurs )。例如下面的例子中实现了pt1 的服务实例将会有一个名为 sd1,初始值为1的服

25、务数据元素。vgwsdl:portType name= ” pt1 ”1而下面的例子中实现了pt2 的服务实例将会继承名为 sd1,值为1的 SDE,同时也含有名为 sd2,值为2的 SDE。gwsdl:portType name= ” pt2 ” extends “ pt1 ”2实现了 pt3 的服务实例的名为 sd3 的 SDE 有两个值:3a和3b。同 时还含有继承自 pt1 的服务数据元素 sd1 以及它的初始值。gwsdl:portType name= ” pt3 ” extends“ pt1 ”3a3b实现了 pt4 的服务实例从 pt1 继承了 sd1 的值。由于没有相应的 st

26、aticServiceDataValues 元 素,使得 sd4 没有任何初始值(继承了 pt4 的其它 portType 可能会定义 sd4 的初始值)。vgwsdl:portTypename= ” pt4 ” extends “ pt1 ”v/gwsdl:portType实现了 pt5 的服务不可能生成相应的服务实例。因为 sd5 没有任何初始值,但其 min Occurs值大于 0。因此在创建它的实例时会报错。portType 的设计者可能会将此类 portType 作为抽象portType,供其它 portType 继承并为 minOccurs 值不为 0 的服务数据元素定义具体的初始

27、值。gwsdl:portType name= ” pt5 ” extends “ pt1 ”实现了 pt6 的服务也不可能生成相应的服务实例。因为在这个 portType 中声明了服务数据元素 sd1 另外的一个初始值,连同在pt1 中已经声明的初始值,已经超过了sd1 的 maxOccurs 的限制。因此在创建它的实例时会报错。此类portType 本身就是错误的,不应该出现。gwsdl:portType name= ” pt6 ” extends “ pt1 ”6实现了 pt7 的服务实例有一个很有意思的服务数据元素初始值的集合。首先,它的SDEsd1 有唯一的初始值1。尽管 pt7 所直

28、接或间接继承的 pt1,pt2 和 pt3 中都有 sd1 的初始 值,但它们并不会在 pt7 中重复出现。 另外 pt7 还有继承自 pt2 的 sd2 的唯一初始值2。SDE pt3有三个初始值:继承自pt3 的3a,3b和 pt7 自己定义7。最后,还有 pt7 自己定义的 SDE sd7 及其初始值7。gwsdl:portTypename= ” pt7 ” extends “ pt2 pt3 ”77综上所述,静态(static)SDE 的初始值可以顺 portType 的继承层次自上而下的集结而得。 如果如此得到的服务数据元素值的集合与服务数据元素的容量限制相冲突(初始值的数目小于 m

29、inOccurs 值或者大于 maxOccurs 值),则在创建 Web Service 的实例是会报错。5 5 动态服务数据元素尽管很多服务数据元素很容易在服务接口定义中定义,也会有需要向服务实例动态的添加或从服务实例动态的删除服务数据。这种动态的更新过程是同具体的实现相关的,例如,一个服务可以实现一个特定的操作来完成一个新的服务数据元素的动态添加。在 GridService portType 中展示了如何使用动态的服务数据元素。里面有一个名为“ serviceData ”的服务数据元素,其中有当前已经定义的服务数据元素列表。服务实例的这 个属性可以返回以定义服务的GWSDL 中声明的所有服务数据元素为子集的服务数据元素集,使得服务请求者通过注册(subscribe)操作在服务数据集发生变化时得到相应的消息通 知,也可以通过 findServiceData 操作获得当前服务数据集中的具体值。GridService portType 中包含下列服务数据元素:in terface该服务实例完整的接口定义中所涉及到的所有portType 的 QName 集合。该集合包含这个服务所实现的 portT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论