Jim,

I have been working on some of the stuff you have outlined below. Please see comments inline.

Ta
Meeraj


From: Jim Marino <[EMAIL PROTECTED]>
Reply-To: tuscany-dev@ws.apache.org
To: tuscany-dev@ws.apache.org
Subject: wire post processing and implementation vs. contract metadata
Date: Fri, 16 Feb 2007 12:41:21 -0800

In doing the wiring refactor to support distribution, it struck me that we need to modify how and when wire post processing takes place, as well as how related metadata is tracked in the runtime.

In terms of wire post processing in general, I think we need to move it to the master. Here is how I see that process working:

- On the master, the logical assembly model is processed in multiple stages (I'm leaving details out in order to focus on wire post processing). When the model is processed, PhysicalComponentDefinitions and WireDefinitions will be created. A WireDefinition contains a list of InterceptorDefinitions that constitute a Wire. I propose we move the existing wire post processor implementations (DataBinding and AllowsPassByValue) to the phase where WireDefinitions are created since they deal with defining a wire and not post-processing it. They will deal with logical model objects and produce an InterceptorDefinition, something to the effect of:

buildWireDefinition(WireDefinition definition, ModelObject source, ModelObject target)

There may be a post-process step along the way but it will not be to add new InterceptorDefinitions.

- WireDefinitions will be marshalled to a slave (potentially along with PhysicalComponentDefinitions)
We already have the framework for marshalling and unmarshalling physical component definitions. I will extend this to support wire definitions. Basically, the unit of information that is passed from the master to slave is an instance of PhysicalChangeSet which contains a set of PCDs and WDs.

- On the slave, the WireDefinitions will be reconstituted. They will then be passed to the Connector which will have one method:
The marshaller framework also supports unmarshalling physical change sets. I am assuming the new builder framework will be used to build all the physical components corresponding to the PCDs and they are started and registered with the component manager, before the conenctor is called.

Connector.connect(WireDefinition wd) throws WiringException

- The connector will create a Wire (WireService will no longer exist and it's proxy creation functions will be moved to a ProxyService)

- The connector will dispatch to InterceptorBuilders to add interceptors to the wire and then will attach the Wire to its source.

The above process will mean that the existing WireProcessors will need to be moved to the master as part of a InterceptorDefinitionBuilder (we can change the name) and that PolicyBuilders will go away. We will also need to add InterceptorBuilders which run on the slave and create interceptors based on InterceptorDefinitions created by the InterceptorDefinitionBuilder.
I am assuming some of this will be done within the assembly service that Jeremy was working on.

In regards to the second issue, how wire-related metadata is tracked, I believe we may be conflating service contract vs. implementation metadata, and that we need to make a distinction. Specifically:

- Databinding technology is not reflected in the service contract but in the implementation contract. For example, different component implementations may choose different databinding technologies. Currently, we pass this information as part of Operation, which is part of the ServiceContract.

- AllowsPassByReference is set on AtomicComponentExtension but should be per-operation and not on the extension class. Again, it should be in an implementation contract.

I propose we introduce metadata on the ComponentType for the purpose of tracking this component implementation-related metadata for operations offered by a component implementation. For composite services and references, we can add the metadata to BindingDefinition. For the latter, it would be the job of the Binding implementation (e.g. Axis, CXF, etc.) to add the metadata based on its capabilities or configuration. This will allow us to move databinding information out of SCDL.

I'm in the process of making the Wiring changes to kernel now. After that, I'd like to tackle the problems I outlined above. Is anyone interested in working on this and/or have suggestions or alternatives in mind?

Jim



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


_________________________________________________________________
Get Hotmail, News, Sport and Entertainment from MSN on your mobile. http://www.msn.txt4content.com/


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to