此部分描述SCA Assembly Model Specification V1.0.0---1.8 SCA Definitions与1.9 SCA扩展模型。主要表述了SCA中的definition.xml的作用以及SCA是如何通过扩展来对其它的接口、实现和绑定的支持。
SCA有一些部件(artifact),它们一般是很有用的,但是它们对特殊的构件或特殊的组件不是很明确。这些共享的部件包括意图(intents)、策略集(policy sets)、绑定(bindings)、绑定类型定义(binding type definitions)和实现类型定义(implementation type definitions)。
一个SCA域里的所有的这些部件被定义在一个全局的、SCA域范围的叫definitions.xml文件里。definitions.xml文件包含了一个definitions元素,它符合下面的伪模式(pseudo-schema)片段:
- <?xml version="1.0" encoding="ASCII"?>
- <!-- Composite schema snippet -->
- <definitions xmlns="http://www.osoa.org/xmlns/sca/1.0"
- targetNamespace="xs:anyURI">
-
- <sca:intent/>*
-
- <sca:policySet/>*
-
- <sca:binding/>*
-
- <sca:bindingType/>*
-
- <sca:implementationType/>*
-
- </definitions>
definitions元素有下面的属性:
l targetNamespace(必需):命名空间,definitions元素的子元素被放到这个命名空间里(用于部件解析)。
definitions元素包含了可选的子元素:intent、policySet、binding、bindingtype和implementationType。此规范的其它地方或the SCA Policy Framework specification [10]都描述了这些元素。在definitions元素里被声明的这些元素的使用在the SCA Policy Framework specification [10]和the JMS Binding specification [11]里被描述。
1.9 扩展模型(Extension Model)
组装模型可以被扩展来支持新的接口类型(interface types)、实现类型(implementation types)和绑定类型(binding types)。扩展模型基于XML模式置换群(XML schema substitution groups)。在SCA命名空间中,分别为接口类型、实现类型和绑定类型定义了三种XML模式置换群的头:interface、implementation和binding。
SCA Client and Implementation specifications与SCA Bindings specifications [1]使用这些XML模式置换群去定义一些基本的接口类型、实现类型和绑定类型,但是其它类型可以像必需的一样被定义,对这些额外的支持可以从运行时(runtime)获得。这些在SCA 规范中定义的接口类型元素、实现类型元素、绑定类型元素是SCA命名空间(“http://www.osoa.ort/xmlns/sca/1.0”)的所有部分。使用扩展模型定义的新的接口类型、实现类型和绑定类型(不是SCA规范里的部分)必须定义在不同于SCA命名空间的命名空间里。
符号“.”用来命名元素,如<implementation.java … />、<interface.wsdl … />、<binding.ws … />,这不是作为一个相应的扩展方法,而是一个命名惯例,它可以提高SCA组装语言的可用性。
注意:如何在SCA中使用SCA模型扩展及它们的运行时功能将在此规范后面的版本中定义。
1.9.1 定义Interface Type
下面的代码片段展示了sca-core.xsd里的interface元素和Interface类型的基本定义(base definition);完整模式参见附录。
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- (c) Copyright SCA Collaboration 2006 -->
- <schema xmlns="http://www.w3.org/2001/XMLSchema"
- targetNamespace="http://www.osoa.org/xmlns/sca/1.0"
- xmlns:sca="http://www.osoa.org/xmlns/sca/1.0"
- elementFormDefault="qualified">
- ...
-
- <element name="interface" type="sca:Interface" abstract="true"/>
- <complexType name="Interface"/>
- ...
-
- </schema>
下面的代码片段展示了这些基本(base)定义如何被扩展来支持Java接口。片段展示了包含在sca-interface-java.xsd的interface.java元素和JavaInterface类型的定义。
- <?xml version="1.0" encoding="UTF-8"?>
- <schema xmlns="http://www.w3.org/2001/XMLSchema"
- targetNamespace="http://www.osoa.org/xmlns/sca/1.0"
- xmlns:sca="http://www.osoa.org/xmlns/sca/1.0">
- <element name="interface.java" type="sca:JavaInterface"
- substitutionGroup="sca:interface"/>
- <complexType name="JavaInterface">
- <complexContent>
- <extension base="sca:Interface">
- <attribute name="interface" type="NCName" use="required"/>
- </extension>
- </complexContent>
- </complexType>
- </schema>
下面的代码片段展示了一个例子,此例用来说明这些基本定义如何通过其它规范被扩展来支持一个新的不在SCA规范中定义的接口。片段展示了my-interface-extension元素和my-interface-extension-type类型。
- <?xml version="1.0" encoding="UTF-8"?>
- <schema xmlns="http://www.w3.org/2001/XMLSchema"
- targetNamespace="http://www.example.org/myextension"
- xmlns:sca="http://www.osoa.org/xmlns/sca/1.0"
- xmlns:tns="http://www.example.org/myextension">
-
- <element name="my-interface-extension" type="tns:my-interface-extension-type"
- substitutionGroup="sca:interface"/>
- <complexType name="my-interface-extension-type">
- <complexContent>
- <extension base="sca:Interface">
- ...
- </extension>
- </complexContent>
- </complexType>
- </schema>
1.9.2 定义Implementation Type
下面的代码片段展示了包含在sca-core.xsd里的implementation元素与Implementation类型的基本定义;完整的模式参见附录。
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- (c) Copyright SCA Collaboration 2006 -->
- <schema xmlns="http://www.w3.org/2001/XMLSchema"
- targetNamespace="http://www.osoa.org/xmlns/sca/1.0"
- xmlns:sca="http://www.osoa.org/xmlns/sca/1.0"
- elementFormDefault="qualified">
- ...
-
- <element name="implementation" type="sca:Implementation" abstract="true"/>
- <complexType name="Implementation"/>
- ...
-
- </schema>
下面的代码片段展示了这些基本定义如何被扩展来支持Java实现(implementation)。片段展示了包含在sca-implementation-java.xsd里的implementation.java元素和JavaImplementation类型的定义。
- <?xml version="1.0" encoding="UTF-8"?>
- <schema xmlns="http://www.w3.org/2001/XMLSchema"
- targetNamespace="http://www.osoa.org/xmlns/sca/1.0"
- xmlns:sca="http://www.osoa.org/xmlns/sca/1.0">
-
- <element name="implementation.java" type="sca:JavaImplementation"
- substitutionGroup="sca:implementation"/>
- <complexType name="JavaImplementation">
- <complexContent>
- <extension base="sca:Implementation">
- <attribute name="class" type="NCName" use="required"/>
- </extension>
- </complexContent>
- </complexType>
- </schema>
下面的代码片段展示了一个例子,此例用来说明这些基本定义如何被其它规范扩展来支持一个新的不在SCA规范中定义的实现类型。片段展示了my-impl-extension元素和my-impl-extension-type类型。
- <?xml version="1.0" encoding="UTF-8"?>
- <schema xmlns="http://www.w3.org/2001/XMLSchema"
- targetNamespace="http://www.example.org/myextension"
- xmlns:sca="http://www.osoa.org/xmlns/sca/1.0"
- xmlns:tns="http://www.example.org/myextension">
-
- <element name="my-impl-extension" type="tns:my-impl-extension-type"
- substitutionGroup="sca:implementation"/>
- <complexType name="my-impl-extension-type">
- <complexContent>
- <extension base="sca:Implementation">
- ...
- </extension>
- </complexContent>
- </complexType>
- </schema>
除了对新的实现实例元素的定义,还需要一个相关的implementationType元素,它提供了关于新的实现类型的元数据。下面的代码片段展示了implementationType元素的伪(pseudo)模式:
- <implementationType type="xs:QName"
- alwaysProvides="list of intent xs:QName"
- mayProvide="list of intent xs:QName"/>
implementationType有下面的属性:
l type(必需):implementationType元素应用于实现的类型。它应该是implementation元素的限定名(QName),比如:“sca:implementation.java”。
l alwaysProvides(可选):实现类型始终提供的一个意图集。参见the Policy Framework specification [10]。
l mayProvide(可选):实现类型可能提供的一个意图集,参见the Policy Framework specification [10]。
1.9.3 定义Binding Type
下面的代码片段展示了包含在sca-core.xsd里的binding元素和Binding类型的基本定义;完整模式见附录。
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- binding type schema snippet -->
- <!-- (c) Copyright SCA Collaboration 2006, 2007 -->
- <schema xmlns="http://www.w3.org/2001/XMLSchema"
- targetNamespace="http://www.osoa.org/xmlns/sca/1.0"
- xmlns:sca="http://www.osoa.org/xmlns/sca/1.0"
- elementFormDefault="qualified">
- ...
- <element name="binding" type="sca:Binding" abstract="true"/>
- <complexType name="Binding">
- <attribute name="uri" type="anyURI" use="optional"/>
- <attribute name="name" type="NCName" use="optional"/>
- <attribute name="requires" type="sca:listOfQNames" use="optional"/>
- <attribute name="policySets" type="sca:listOfQNames" use="optional"/>
- </complexType>
- ...
- </schema>
下面的代码片段展示了基本定义如何被扩展来支持Web service绑定。片段展示了sca-binding-webservice.xsd里的的binding.ws元素和WebServiceBinding类型的定义。
- <?xml version="1.0" encoding="UTF-8"?>
- <schema xmlns="http://www.w3.org/2001/XMLSchema"
- targetNamespace="http://www.osoa.org/xmlns/sca/1.0"
- xmlns:sca="http://www.osoa.org/xmlns/sca/1.0">
-
- <element name="binding.ws" type="sca:WebServiceBinding"
- substitutionGroup="sca:binding"/>
- <complexType name="WebServiceBinding">
- <complexContent>
- <extension base="sca:Binding">
- <attribute name="port" type="anyURI" use="required"/>
- </extension>
- </complexContent>
- </complexType>
- </schema>
下面的代码片段展示了一个例子,此例说明了基本定义是如何被其它规范扩展来支持一个新的不在SCA规范里定义的绑定。片段展示了my-binding-extension元素和my-binding-extension-type类型的定义。
- <?xml version="1.0" encoding="UTF-8"?>
- <schema xmlns="http://www.w3.org/2001/XMLSchema"
- targetNamespace="http://www.example.org/myextension"
- xmlns:sca="http://www.osoa.org/xmlns/sca/1.0"
- xmlns:tns="http://www.example.org/myextension">
-
- <element name="my-binding-extension" type="tns:my-binding-extension-type"
- substitutionGroup="sca:binding"/>
- <complexType name="my-binding-extension-type">
- <complexContent>
- <extension base="sca:Binding">
- ...
- </extension>
- </complexContent>
- </complexType>
- </schema>
除了对新的绑定实例元素的定义,还需要一个相关的bindingType元素,它提供了关于新的绑定类型的元数据。下面的代码片段展示了bindingType元素的伪(pseudo)模式:
- <bindingType type="xs:QName"
- alwaysProvides="list of intent QNames"?
- mayProvide = "list of intent QNames"?/>
bindingType有下面的属性:
l type(必需):bindingType元素应用于绑定的类型。它规定为binding元素的限定名(QName),比如:“sca:binding.ws”。
l alwaysProvides(可选):绑定类型始终提供的一个意图集。参见the Policy Framework specification [10]。
l mayProvide(可选):绑定类型可能提供的一个意图集,参见the Policy Framework specification [10]。
此部分结束,还有最后一节1.10 打包与发布,敬请关注。。。。。。。。
|