sca-assembly message
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
| [List Home]
Subject: ASSEMBLY-227: Promotion of consumers and producers undermines composability
- From: Mike Edwards <mike_edwards@uk.ibm.com>
- To: "OASIS Assembly" <sca-assembly@lists.oasis-open.org>
- Date: Tue, 22 Jun 2010 15:07:40 +0100
Folks,
In last weeks' TC meeting, Scott said
something that finally enabled me to understand the meaning of "promoting
a channel" which several previous
weeks of discussion had not got through
to me. Perhaps I was just being dense (most likely) or the light
had not fallen on the right part of the concept.
So, if I have it right now, then "promotion
of a channel" from a composite is perhaps better described as "the
channel has a settable channel resource",
in the same way that a composite can
have a settable property value that is used by one or more of its containing
components. We're not really
promoting the channel here, rather we're
trying to say
"this composite uses a channel
as part of its configuration, but the exact channel that is used can be
set by the assembler when the composite is used
as the implementation of some higher
level component"
So today:
<composite name=.....>
<property name="foo"
type="xxx">
<value/>
</property>
<component name="bar">
<implementation
..../>
<property name="xxx"
source="$foo"/>
</component>
</composite>
This ensures that the composite has
a property "foo" in its componentType, which is thus settable
when the composite is used as the implementation of
some component. However, there
is a value declared and so if the using component does not set a value
for that property, the composite will use that
value as a default.
OK, so let's now turn to Event Processing
and Channels:
<composite name="CompositeX"...>
<consumer
name="Bar_Handling"
promotes="Component2/FooHandling"/>
<component
name="Component1">
<implementation.java class="org.example.Component1Impl"/>
<producer name="Foo_Events" target="ChannelA"/>
</component>
<component
name="Component2">
<implementation.java class="org.example.Component3Impl"/>
<consumer name="Foo_Handling"
source="ChannelA"/>
</component>
<channel
name="ChannelA" externallySettable="true"/>
</composite>
Here is a simple composite with 2 components
and a channel. I've added a @externallySettable attribute to the
channel - what I intend this to mean is
something along the lines of "this
channel can be configured by the component that uses this composite as
an implementation". The using component
might look something like this:
<component
name="HigherComponent">
<implementation.composite name="CompositeX"/>
<consumer name="Bar_Handling"
source="ChannelZ"/>
<configureChannel channelName="ChannelA" useChannel="ChannelW"/>
</component>
...
<channel
name="ChannelW"/>
...
<channel
name="ChannelZ"/>
So, "HigherComponent" does
its usual configuration of the <consumer/> exposed by the composite
CompositeX, but now in addition it does some
configuration of the externallySettable
channel that the composite also exposes - setting that channel to "ChannelW",
which is declared in the higher
composite. In this case "ChannelA"
in the lower composite is simply overridden and replaced by "ChannelW".
One big problem that I have with this
is that it makes implementation.composite not quite the same as implementation.xxx
eg implementation.java,
since these other types will not have
replaceable channels of this type. I don't like non-uniformity of the componentType
and lack of replaceability
of one implementation with another.
Perhaps this calls for an alternative
approach which makes it plain that these things are unique to composites,
by placing the configuration into the
<implementation.composite/> element,
like this:
<component
name="HigherComponent">
<implementation.composite name="CompositeX">
<configureChannel channelName="ChannelA" useChannel="ChannelW"/>
<implementation.composite>
<consumer name="Bar_Handling" source="ChannelZ"/>
</component>
Well, enough ramblings of the confused
for now - what do you think of this direction?
Yours, Mike.
Strategist - Emerging Technologies, SCA & SDO.
Co Chair OASIS SCA Assembly TC.
IBM Hursley Park, Mail Point 146, Winchester, SO21 2JN, Great Britain.
Phone & FAX: +44-1962-818014 Mobile: +44-7802-467431
Email: mike_edwards@uk.ibm.com
Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number
741598.
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6
3AU
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
| [List Home]