OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

sca-policy message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Issue 15: Logical, Virtaul Domain Infoset for External Policy Attachment




When we discussed External Policy Attachment at the f2f we came up with 
the idea of a virtual, logical infoset for the domain. The External 
Policy Attachment mechanism would specify the elements with which 
policies and policySets were to be associated by navigating down this 
infoset.

This note is based on a conversation between Michael Rowley and myself. 
The final words are mine
and may not capture faithfully what Michael intended for which I apologize.

The following is a description of how the virtual, logical infoset would 
be constructed for a domain. If we can agree on this, then we can 
specify how External Policy Attachment works over this infoset.

1. The root of the infoset is a composite element that stands in for the 
domain. This composite can have all the attributes of a normal 
composite. The values of the attributes are domain-specific and 
implementation dependent.

(Detail: The constraintingType attribute should not be set)

2. The children of this domain-composite are all the domain-level 
components within the domain. Note that this loses the contribution 
where the components come from. To remedy this we add a new attribute: 
installedFrom="contribution_uri/of/the/deployment/composite"

The infoset will also contain the result of deployment time processing. 
Some detail below:

- The results of autowire processing and explicit <wire> elements will 
both be represented in the infoset as explicit values for the 
appropriate reference/@target attributes.

- Inherited required intents and policySets will be explicitly 
represented on any element that inherits them.

- PolicySets that that are chosen by the policySet selection algorithm 
will be represented as values of @policySet attributes.

- All components will have @uri attributes (not just domain-level 
components), which contain the URI of the component. The URI will 
contain path elements from all of the composites that the component is 
embedded under. This makes it possible to write XPath expressions that 
target a single buried component.

* The following binding processing happens _/after/_ the bindings have 
been moved, as described in (4), (5) and (6) below.

- Explicit binding.sca elements will be present rather than just implied.

- Bindings will all have @uri attributes, whose value is the absolute 
URI that the runtime is using (or possibly multiple URI in the case of 
references).

3. For each <implementation.composite> include all of the contents of 
the named composite as child elements of <implementation.composite>. 
This is done recursively.

This gets us all SCDL elements within the domain. There is, however, a 
requirement to attach policies to interface elements such as "operation" 
and "message". Since the interface is identified in the SCDL by a URI, 
we can use the Document function in XPath to open the file and then 
navigate down it starting from the root element. This is certainly 
possible, but some find it awkward. It also doesn’t allow us to do 
post-processing on the port-type, for things such as inserting policySet 
attributes.

So, we propose an alternate method by which the interface elements are 
included directly within the virtual, logical infoset. This requires a 
bit of work.

4. Remove the <binding> elements from the infoset.

5. Include the contents of the interface file below the appropriate 
<service> or <reference> elements. Note that the WSDL port type that is 
included may need to be generated, based on whatever interface language 
is actually used for the service or reference.

6. Reinstate the <binding> elements that were removed as child elements 
of each <input>, <output> or <error> element of the interface.

The result of the above 3 steps may look like:

<service> or <reference>
<portType name="StockQuotePortType">
<operation name="GetLastTradePrice">
<input message="tns:GetLastTradePriceInput">
<binding ... />
</input>
<output message="tns:GetLastTradePriceOutput">
<binding ... />
</output>
</operation>
</portType>
</service> or </reference>

We will also have to change the @name attribute of the port type to be a 
QName. In WSDL, it is assumed to be a local name for the targetNamespace 
of the WSDL.

-- 
All the best, Ashok & Michael


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]