WS-Policy解决的问题
我们知道在SOA架构中,最重要的基石就是Service,而业务上对于服务约束来自于业务的契约Contract,那么我们如何在服务的实现过程中体现相应的contract约束呢?
对于SOA规范中标准化的Web Service来讲,体现这些约束的标准就是WS-Policy,而其他的规范像WS-Addressing,WS-RM,WS-Security都可以看做WS-Policy的特例。
另外在SOA的实践中提出的新的Service Governance的概念,Service Governance中就包含了对Policy的管理。Policy的管理包含两个部分内容:一是要在设计和运行时规定服务策略(Service Policy)的定义,交换和强制执行的方式和方法;二是要有基于标准(比如 WS-*)和组织内部规章。那么我就可以看到WS-Policy在SOA项目实施过程中,或者说在SOA的管控(governance)领域实际的应用意义。
WS-Policy相对于WS-Addressing要稍微复杂一些。除了配置的工作外,如果开发者要实现自己特定的Policy,还需要实现某些Inteceptor接口来完成指定的操作。
WS-Policy中重要的概念
断言(Assertion)
它是策略(Policy)的基本组成单元,每个断言可以通过它们的限定名 ( QName) 来识别。断言可以是一个简单的字符串或带多个子元素和属性的复杂对象。断言是要表示服务行为的个性化要求、能力或其他特性。例如,可以创建一个断言,定义这样一个安全要求:必须使用受信任的X.509证书签名SOAP消息主体。
替代(Alternative)
替代只是对于断言的另外形式的表现,或者说是断言的组合形式。
标准化(Normalization)
标准化的目的是为了进行融合(Merge)和交集(Intersection)的操作,把策略简化为标准格式。
融合(Merge)
融合是将多个子策略组合在一起形成一个单一策略的过程。
交集(Intersection)
交集是比较用于公用替代的 2 个 Web 服务策略的过程。只有双方至少对一个策略替代达成一致,才会产生交集。
WS-Policy的应用
Weblogic
Weblogic中也提供了对WS-Policy的支持,支持需要程序员在开发时使用@policy声明来关联WS-Policy使用的文件,管理员不能通过控制台的配置来关联WS-Policy使用的文件,但是可以关联其他与WS-Policy相关的文件。
Weblogic 10 中对于WS-Policy配置的文档: