Udayanga, +1 for the approach.
However, I have several concerns
Could this and the endpoint template proposed by Supun be similar?
Personally, I believe it would be better to reduce language constructs
defined by the language. As the synapse language supposed to be a DSL, I
think making it simple, domain specific, and intutive would be important.
Supun used 'endpoint-template' and in your configuration it is 'template'
(is this a sequence-template?).
We may be able to use 'template' for Both or at least the same way of doing
- conceptual integrity.
Defining a template ( analogous to a Class)
<template name="[func name]">
<parameter name="p1" />*
<any synapse construct> {i.e endpoint, sequence, proxy, task}
</template>
Calling a template (analogous to Creating an instance of a Class)
Creating a sequence from a template
<sequence name="" template-ref="">
<parameter name="p2" value="{any xpath} | plain-value"/>*
<sequence>
Creating an endpoint
<endpoint name="" template-ref="">
<parameter name="p2" value="{any xpath} | plain-value"/>*
<endpoint>
.....................
....................
It may be accepatble to use 'endpoint-template', 'sequence-template',
'proxy-template', etc ...but I believe we should do that in the same way
(i.e using parameter tags and template-ref )- conceptual integrity.
Thanks,
Indika
On Tue, Mar 8, 2011 at 9:07 PM, Udayanga Wickramasinghe
<[email protected]>wrote:
> Hi Devs,
> We thought of implementing $subject for Synapse. At the moment a large
> portion of ESB configuration are at the micro level. Because of this Users
> have to individually configure each and every mediator to achieve some high
> level task. But what we need is a high level abstraction that users can
> easily use to model such scenarios .
> For example if we consider following scenario ,
>
> <proxy name="SplitAggregateProxy">
> <target>
> <inSequence>
> <iterate expression="//m0:getQuote/m0:
> request"
> preservePayload="true"
> attachPath="//m0:getQuote"
> xmlns:m0="http://services.samples">
> <target>
> <sequence>
> <send>
> <endpoint>
> <address
>
> uri="http://localhost:9000/services/SimpleStockQuoteService"/>
> </endpoint>
> </send>
> </sequence>
> </target>
> </iterate>
> </inSequence>
> <outSequence>
> <aggregate>
> <onComplete expression="//m0:getQuoteResponse"
> xmlns:m0="http://services.samples">
> <send/>
> </onComplete>
> </aggregate>
> </outSequence>
> </target>
> </proxy>
>
> Here what user really wants to look at is three configuration parameters ,
>
> 1. Two XPath expressions
> 2. An endpoint address
>
> We believe we can hide a lot of this complexity by introducing a 'template'
> configuration that parameterize(like a function does) a known pattern such
> as this one.Parameterization can be done using xpath expressions..
>
> implementation of function templates will look like following in synapse
> config,
> 1) we have Function Template in the form ;
>
> <template name="[func name]">
> <params>
> <parameter name="p1" />*
> </params>
> <any sequence>+
> </template>
>
> -->A Template is an extension of Sequence , hence template body can contain
> any sequence in general
> --> any mediator/comp inside template body can refer to its parameters just
> like a normal function does ,by xpath function scope (ie:-func) variable
> ie:- <aggregate>
> <onComplete xmlns:m0="http://services.samples"
>
> expression="$func:p2">
> <log level="full" />
> <send/>
> </onComplete>
> </aggregate>
> OR
> <log level="custom">
> <property name="p1-value" expression="$func:p1"/>
> <property name="p2-value"
> expression="get-property('func','p2')"/>
> </log>
>
>
> --> we have to define template at top level so that it is a reusable
> function that can be referred by others
> -->A func template can execute other functions or execute recursively
> (using Invoke mediator)
>
> 2)To invoke a template in synapse we have to use a Invoke mediator which
> will be defined in the following form. Using a invoke mediator ,from
> within any sequence we would be able to invoke a template with the passed on
> values for parameters such as p1,p2,etc.... :
> <invoke target="[target func template]">
> <parameter name="p2" value="{any xpath} | plain-value"/>*
> </invoke>
>
>
> IMO this will greatly reduce complexity of the configurations and would be
> able to eliminate redundancy...WDYT?.. really appreciate feedback regarding
> this
> Regards,,
> Udayanga
>
>
> --
> *Udayanga Wickramasinghe*
> Software Engineer; WSO2 Inc.; http://wso2.com,
> *email: **[email protected]* <[email protected]>* cell: +94 (77) 983-4365
> blog: **http://udayangawiki.blogspot.com*<http://udayangawiki.blogspot.com/>
> *
> twitter: **http://twitter.com/udayanga_wick*<http://twitter.com/udayanga_wick>
> *
> *
>