UDDI v2 新特性:关联关系和发布者断言
( 本文最初由 IBM developerWorks 中国网站发表,其网址是 http://www.ibm.com/developerWorks/cn/ )
( 本文是我在 developerWorks 专栏发表的 UDDI v2新特性: 关联关系和发布者断言
的缩减版,需要浏览未缩减版原文,请访问 http://www.ibm.com/developerWorks/cn/ )
企业的需求促成了关联关系特性
随着 UDDI 1.0 注册中心的发布和测试使用的进行中,许多大型的企业集团,以及一些诸如交易市场和贸易团体等的虚拟商业实体认为 UDDI 规范第 1 版对于注册复杂的商业信息的支持不够。同时,对于 UDDI 规范第 1 版的实现的反馈信息表明,为每个独立的商业实体复制服务和绑定信息 ( 可能他们使用了同一个服务 ) 可实施性很强,但是不够优化。另外,另一些反馈表明要求用户对于区分商业实体,仅能使用的这一商业实体的一个名称来实现,这常常使的用户感到迷惑 ( 因为一些企业往往有多个习惯使用的名称 ) 。
而在 2001 年 7 月发布的 UDDI 规范 2.0 版为了解决这一使用中的核心问题,引入了一个基于 ” 发布者断言 (publisher assertion)” 的断言特性。发布者断言是这样一种机制的基础,这种机制能令多于一个的已注册的 businessEntity 元素以某种方式互相链接,用以表示一种特定类型的关联关系。这也是这一特性常常被成为关联关系特性的原因。发布者断言一旦完整创建,即被用于在已注册的数据中建立公共可见的关联关系,这样一种断言的表现结果将可通过新增的 UDDI v2 中的通用查询消息 find_relatedBusinesses 进行证实, find_relatedBusinesses 是用于在 UDDI 注册中心中寻找与指定 businessEntity 具备某种关联关系的那些 businessEntity 的 API 调用。
围绕使得商业实体能在不同的组成部分之间描述关联关系的设计目标是为了满足大型商业实体为在 UDDI 中描述数据的需要,使得他们在 UDDI 注册中心中能以多个组成部分的形式来实施注册。毕竟,大型商业实体是由很多小型的组成部分所组成的,同时对于其中的每个商业个体都有很多不同种类的 Web 服务需要描述。在 UDDI 规范 2.0 版之前,那些想对非常复杂的商业实体进行建模的注册者是无法完成需要的功能的。
为了使得关联关系中的任一方对于关联关系的公共可见性都具有一定的控制能力,因此另一个设计目标就是确保在一个潜在的关联关系中双方在同一时刻都表示同意该假设事实,那么才使该关联关系可见。这个设计目标是针对以下潜在问题的:当一个实体虚假地宣称其注册的 businessEntity 数据是一个大公司的一个组成部分,那么将会对这个未同意该断言的大公司带来损失。对于该项注册数据的阅读者而言,他们就有可能被虚假地引导,而相信这个注册的商业实体的的确确是那另一个大公司的组成部分。
关联关系模型
在 UDDI v2 中,关联关系的基本模型是使用了 publisherAssersion 这个断言元素,一个发布者断言 (publisherAssertion) 表示了一个用户对 businessEntity 之间的关联关系的断言。发布者断言 (publisherAssertion) 的基本结构如下:
1<publisherassertion>
2<fromkey> [businessKey] </fromkey>
3<tokey> [businessKey] </tokey>
4<keyedreference [relationship]”="" keyname="”[relationship_name]”" keyvalue="”" tmodelkey="”uuid:tbd”"></keyedreference>
5</publisherassertion>
一个发布者断言 (publisherAssertion) 由三个子元素 fromKey 、 toKey 和 keyedReference 组成,形成了如下图所示的有向关系:
其中 fromKey 和 toKey 分别是一个 businessKey ,指向一个现有的已注册的 businessEntity 。 keyedReference 表示了从 fromKey 所指代的 businessEntity 到从 toKey 指代的 businessEntity 之间的是何种关系。
我们看到, keyedReference 元素仍然遵循 UDDI v1 中的 keyedReference 的结构, tModelKey 指明了是使用何种关联关系定义的规范,这里用了 ”uuid:tbd” 是 UDDI 内置的关联关系表示规范。 keyValue 指明了关联关系的代码,而 keyName 则是 keyValue 所指明的关联关系代码的名称描述。
管理关联关系的可见性
发布者 API 定义了若干条消息,以使得 UDDI 发布者能够管理断言。这些消息可以分为两大类:协助管理功能和维护功能。协助管理类别的消息为发布者提供检阅他所管理的商业实体所关联的断言。特别的, get_assertionStatusReport 对于判断发布者所管理的所有商业实体所涉及的断言是否完整非常有用。该消息不仅能使你发现那些断言是你尚需要去完成的,同时也可以让你发现是否有其他发布者在尝试创建与你的商业实体相关的断言,而这个断言可能是你并不知道的或者不同意的。
维护功能类消息能够使发布者既能对所有断言执行单条操作 ( 如, add_publisherAssertions 和 delete_publisherAssertions) 也能对所有断言作为一组 ( 如, get_publisherAssetions 和 set_publisherAssertions) 一起操作。如果发布者在某个时刻想要增加一条断言,但又不想在此刻了解其之前所下的所有断言,那么使用那些面向单条断言的消息是非常方便的。
注意: set_publisherAssertions 消息能够通过在一次调用中删除所有断言而用于令所有断言不再有效。