<?xml version="1.0" encoding="ISO-8859-1" ?>
<!--
  ~  Licensed to the Apache Software Foundation (ASF) under one
  ~  or more contributor license agreements.  See the NOTICE file
  ~  distributed with this work for additional information
  ~  regarding copyright ownership.  The ASF licenses this file
  ~  to you under the Apache License, Version 2.0 (the
  ~  "License"); you may not use this file except in compliance
  ~  with the License.  You may obtain a copy of the License at
  ~
  ~   http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~  Unless required by applicable law or agreed to in writing,
  ~  software distributed under the License is distributed on an
  ~   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~  KIND, either express or implied.  See the License for the
  ~  specific language governing permissions and limitations
  ~  under the License.
  -->

<document>
    <properties>
        <title>Apache Synapse - Sample 300</title>
    </properties>
    <body>
        <section name="Sample 300: Introduction to Synapse Tasks">
            <div class="xmlConf">&lt;definitions xmlns="http://ws.apache.org/ns/synapse"&gt;

    &lt;task class="org.apache.synapse.startup.tasks.MessageInjector" name="CheckPrice"&gt;
        &lt;property name="to" value="http://localhost:9000/services/SimpleStockQuoteService"/&gt;
        &lt;property name="soapAction" value="urn:getQuote"/&gt;
        &lt;property name="message"&gt;
            &lt;m0:getQuote xmlns:m0="http://services.samples"&gt;
                &lt;m0:request&gt;
                    &lt;m0:symbol&gt;IBM&lt;/m0:symbol&gt;
                &lt;/m0:request&gt;
            &lt;/m0:getQuote&gt;
        &lt;/property&gt;
        &lt;trigger interval="5"/&gt;
    &lt;/task&gt;

    &lt;sequence name="main"&gt;
        &lt;in&gt;
            &lt;send/&gt;
        &lt;/in&gt;
        &lt;out&gt;
            &lt;log level="custom"&gt;
                &lt;property xmlns:ax21="http://services.samples/xsd"
                          xmlns:ns="http://services.samples" name="Stock_Quote_on"
                          expression="//ns:return/ax21:lastTradeTimestamp/child::text()"/&gt;
                &lt;property xmlns:ax21="http://services.samples/xsd"
                          xmlns:ns="http://services.samples" name="For_the_organization"
                          expression="//ns:return/ax21:name/child::text()"/&gt;
                &lt;property xmlns:ax21="http://services.samples/xsd"
                          xmlns:ns="http://services.samples" name="Last_Value"
                          expression="//ns:return/ax21:last/child::text()"/&gt;
            &lt;/log&gt;
        &lt;/out&gt;
    &lt;/sequence&gt;

&lt;/definitions&gt;</div>
            <subsection name="Objective">
                <p>
                    Demonstrate how to schedule tasks in the Synapse runtime for periodic execution
                </p>
            </subsection>
            <subsection name="Pre-requisites">
                <p>
                    <ul>
                        <li>
                            Deploy the SimpleStockQuoteService in the sample Axis2 server and start Axis2
                        </li>
                        <li>
                            Start Synapse using the configuration numbered 300 (repository/conf/sample/synapse_sample_300.xml)
                            <div class="command">
                                Unix/Linux: sh synapse.sh -sample 300<br/>
                                Windows: synapse.bat -sample 300
                            </div>
                        </li>
                    </ul>
                </p>
            </subsection>
            <subsection name="Executing the Client">
                <p>
                    The above configuration adds a scheduled task to the Synapse runtime. The task
                    is configured to run every 5 seconds (note the 'interval' attribute on the 'trigger'
                    element).
                </p>
                <p>
                    One can write his/her own tasks implementing the org.apache.synapse.task.Task
                    interface and programming the 'execute' method to run the necessary logic. For
                    this particular sample we have used the MessageInjector class which just injects
                    a message into Synapse environment. In the configuration we have set the message
                    payload to be the stock quote request payload.
                </p>
                <p>
                    In this sample, injected messages will be sent to the sample Axis2 server which
                    will send back a response to Synapse. So every 5 seconds you will notice that Axis2
                    is generating a quote and Synapse is receiving the stock quote response.
                </p>
            </subsection>
        </section>
        <p><a href="../samples.html">Back to Catalog</a></p>        
    </body>
</document>