讨论关于SOA注册(Registry)的声音还没有退去,人们又更多地意识到SOA中另一个关键的组件存储库(Repository)。注册和存储库之间究竟有什么区别呢?在ZapThink网站最近举办的一次关于注册与存储库的网络广播中,大多数人认为注册存放的是对事物的引用,而存储库中则存放事物本身。
很多人认为注册保存元数据信息而存储库则用来存放数据。这个区别似乎不是很明显,但是事实上情况要复杂得多。元数据就是关于数据的数据,对吗?如果是这样的话,那么文档是什么呢?比如,现在有一个微软的Word格式文档,那么我们可以把它看作是数据本身对吗?先别急,因为文档是描述服务的,所以我们可以把它当作是元数据。然而,微软又承诺,MicrosoftOffice系列文档的基本格式是XML,那么XML是否应该被看作是Word文档的元数据呢?其实,要区别数据和元数据的关键是它们之间的关系,很有可能一个人的数据是另一个人的元数据。而在现实生活中,某种数据极有可能刚开始扮演数据的角色,然后变更为元数据的角色,最后又回到数据的角色,不停的变换。
可以说,这就是为什么数据和元数据界限的模糊性是一个成熟的市场越来越趋向于提供集成的注册/存储库解决方案的原因。
有很多的区别可以帮助人们找出数据和元数据的界限。一个很有效的方法是找出设计时间和运行时间的不同。注册和存储库两者都包含了设计时间和运行时间两个特性。设计时间元数据绝大多数情况下专注于描述和发现,而运行时间元数据则专注于分发合约和策略信息。设计时间通常反映出人工时间,例如代码的编写,所以通常设计时间存储库使用一些类似CVS(协同版本系统)的标准。而运行时间的存储库则通常存储消息并提供查询、审核、登录或一些归档的能力。
很明显,除此之外,在这方面的产品还会附带很多其他的功能,例如管制、联合、发布与提醒、安全性、验证、报告、以及管理等。Infravio自从其第一个产品(被称作X-Registry)开始就提供了对一个集成的注册/存储库模型的支持。X-Registry使用了JAXR进行开发,JAXR是用于在标准注册顶层开发应用程序的Java编程API,它包含了统一描述、发现和集成(UDDI)、ebXMLRIM以及注册信息模型。
Sun微系统公司年初也曾发布了一款轻量级的注册(Registry)产品,该举动证明这种解决方案的认可程度。这款产品是基于FreebXML代码基础的,并集成了注册和存储库的功能,同时支持JAXR。
此外,Systinet公司最初的产品只基于UDDI注册,现在也改变了策略。该公司代号为Blizzard的产品的下个版本将集成基于XQuery接口的运行时间存储库。
如此繁杂的产品和技术也许会给我们带来一个疑问,和存储库相关的标准究竟是什么呢?
要回答这个问题,我们需要关注一下SOA生命周期以及相关的功能。在设计时间里,类似CVS这样的标准用于存储人工数据,例如代码,这就是一种存储库。而当你进入SOA运行时间,你可能需要存储信息数据。比如你希望获得信息查询的能力,那么你就需要使用XQuery作为逻辑接口。XQuery允许用户对分布式XML数据进行查询,整个过程看起来就像是对一个数据库进行操作一样。除此之外,如果你期望获得更丰富的信息模型和类似可审核信息日志这样的东西,那么你可能会需要ebXML注册技术。
最后,人们越来越多地把注册和存储器作为SOA“平台”的一个整合部分来看待了。而当你需要在注册技术和存储器之间做出选择时,可以根据你所关注的内容是设计时间还是运行时间来考虑。只要你理解了在SOA服务生命周期中需要什么样的功能,你就能够做出一个更好的选择。
来源:希赛网