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]