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>
> *
> *
>

Reply via email to