You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by hi...@apache.org on 2010/12/27 13:57:49 UTC

svn commit: r1053061 - in /synapse/trunk/scratch/hiranya/website/src/site/xdoc/userguide: samples.xml samples/sample380.xml samples/sample381.xml

Author: hiranya
Date: Mon Dec 27 12:57:49 2010
New Revision: 1053061

URL: http://svn.apache.org/viewvc?rev=1053061&view=rev
Log:
Class mediator samples

Modified:
    synapse/trunk/scratch/hiranya/website/src/site/xdoc/userguide/samples.xml
    synapse/trunk/scratch/hiranya/website/src/site/xdoc/userguide/samples/sample380.xml
    synapse/trunk/scratch/hiranya/website/src/site/xdoc/userguide/samples/sample381.xml

Modified: synapse/trunk/scratch/hiranya/website/src/site/xdoc/userguide/samples.xml
URL: http://svn.apache.org/viewvc/synapse/trunk/scratch/hiranya/website/src/site/xdoc/userguide/samples.xml?rev=1053061&r1=1053060&r2=1053061&view=diff
==============================================================================
--- synapse/trunk/scratch/hiranya/website/src/site/xdoc/userguide/samples.xml (original)
+++ synapse/trunk/scratch/hiranya/website/src/site/xdoc/userguide/samples.xml Mon Dec 27 12:57:49 2010
@@ -159,8 +159,8 @@
                 <h4>Class Mediator (Writing Mediation Logic in Java)</h4>
                 <p>
                     <ul>
-                        <li><a href="#Sample380">Sample 380: Writing your own custom mediation in Java</a></li>
-                        <li><a href="#Sample381">Sample 381: Implementing CBR for binary messages using the class mediator</a></li>
+                        <li><a href="samples/sample380.html">Sample 380: Writing custom mediation logic in Java</a></li>
+                        <li><a href="samples/sample381.html">Sample 381: Class mediator for CBR of binary messages</a></li>
                     </ul>
                 </p>
                 <h4>XQuery Mediator</h4>

Modified: synapse/trunk/scratch/hiranya/website/src/site/xdoc/userguide/samples/sample380.xml
URL: http://svn.apache.org/viewvc/synapse/trunk/scratch/hiranya/website/src/site/xdoc/userguide/samples/sample380.xml?rev=1053061&r1=1053060&r2=1053061&view=diff
==============================================================================
--- synapse/trunk/scratch/hiranya/website/src/site/xdoc/userguide/samples/sample380.xml (original)
+++ synapse/trunk/scratch/hiranya/website/src/site/xdoc/userguide/samples/sample380.xml Mon Dec 27 12:57:49 2010
@@ -23,7 +23,7 @@
         <title>Apache Synapse - Sample 380</title>
     </properties>
     <body>
-        <section name="Sample 380: ">
+        <section name="Sample 380: Writing Custom Mediation Logic in Java">
             <div class="xmlConf">&lt;definitions xmlns="http://ws.apache.org/ns/synapse"&gt;
 
     &lt;sequence name="fault"&gt;
@@ -54,7 +54,8 @@
 &lt;/definitions&gt;</div>
             <subsection name="Objective">
                 <p>
-
+                    Demonstrate the use of class mediator to extend the mediation functionality of
+                    Synapse
                 </p>
             </subsection>
             <subsection name="Pre-requisites">
@@ -74,11 +75,128 @@
                 </p>
             </subsection>
             <subsection name="Executing the Client">
-                <div class="command">ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/</div>
+                <p>
+                    In this configuration, Synapse hands over the request message to the specified
+                    endpoint, which sends it to the Axis2 server running on port 9000. But the response
+                    message is passed through the class mediator before sending it back to the client.
+                    Class mediator in turns hands over the message to the specified Java class for
+                    further processing. In that regard, the class mediator acts as a delegating
+                    mediator which delegates the message to a custom Java class for processing.
+                    Two parameters named 'discountFactor' and 'bonusFor' are passed to the mediator
+                    implementation class (i.e. samples.mediators.DiscountQuoteMediator) before each
+                    invocation. Source of the mediator implementation class is shown below. 
+                </p>
+                <div class="consoleOutput">package samples.mediators;
+
+import org.apache.synapse.MessageContext;
+import org.apache.synapse.Mediator;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.soap.SOAPFactory;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.xml.namespace.QName;
+
+public class DiscountQuoteMediator implements Mediator {
+
+    private static final Log log = LogFactory.getLog(DiscountQuoteMediator.class);
+
+    private String discountFactor=&quot;10&quot;;
+
+    private String bonusFor=&quot;10&quot;;
+
+    private int bonusCount=0;
+
+    public DiscountQuoteMediator(){}
+
+    public boolean mediate(MessageContext mc) {
+
+        String price= mc.getEnvelope().getBody().getFirstElement().getFirstElement().
+                getFirstChildWithName(new QName(&quot;http://services.samples/xsd&quot;,&quot;last&quot;)).getText();
+
+        //converting String properties into integers
+        int discount=Integer.parseInt(discountFactor);
+        int bonusNo=Integer.parseInt(bonusFor);
+        double currentPrice=Double.parseDouble(price);
+
+        //discounting factor is deducted from current price form every response
+        Double lastPrice = new Double(currentPrice - currentPrice * discount / 100);
+
+        //Special discount of 5% offers for the first responses as set in the bonusFor property
+        if (bonusCount &lt;= bonusNo) {
+            lastPrice = new Double(lastPrice.doubleValue() - lastPrice.doubleValue() * 0.05);
+            bonusCount++;
+        }
+
+        String discountedPrice = lastPrice.toString();
 
-                <div class="consoleOutput">Sat Nov 18 21:01:23 IST 2006 SimpleStockQuoteService :: Generating quote for : IBM</div>
+        mc.getEnvelope().getBody().getFirstElement().getFirstElement().getFirstChildWithName
+                (new QName(&quot;http://services.samples/xsd&quot;,&quot;last&quot;)).setText(discountedPrice);
 
+        System.out.println(&quot;Quote value discounted.&quot;);
+        System.out.println(&quot;Original price: &quot; + price);
+        System.out.println(&quot;Discounted price: &quot; + discountedPrice);
+
+        return true;
+    }
+
+    public String getType() {
+        return null;
+    }
+
+    public void setTraceState(int traceState) {
+        traceState = 0;
+    }
+
+    public int getTraceState() {
+        return 0;
+    }
+
+    public void setDiscountFactor(String discount) {
+        discountFactor=discount;
+    }
+
+    public String getDiscountFactor() {
+        return discountFactor;
+    }
+
+    public void setBonusFor(String bonus){
+        bonusFor=bonus;
+    }
+
+    public String getBonusFor(){
+        return bonusFor;
+    }
+}</div>
+                <p>
+                    All classes developed for the class mediator should implement the 'Mediator'
+                    interface, which contains the mediate(...) method. The mediate(...) method of the
+                    above class is invoked for each response message mediated through the main
+                    sequence, with the message context of the current message as the parameter. All
+                    details of the message including the SOAP headers, SOAP body and properties of
+                    the context hierarchy can be accessed from the message context. In this sample,
+                    the body of the message is retrieved and the discount percentage is subtracted
+                    from the quote price. If the quote request number is less than the number specified
+                    in the 'bonusFor' property in the configuration, a special discount is given.
+                </p>
+                <p>
+                    To test the custom code and the class mediator, invoke the test client as
+                    follows.
+                </p>
+                <div class="command">ant stockquote -Dsymbol=IBM -Dmode=quote -Daddurl=http://localhost:8280</div>
+                <p>
+                    You will see the below output in the client console with the discounted quote value.
+                </p>
                 <div class="consoleOutput">Standard :: Stock price = $95.26454380258552</div>
+                <p>
+                    If you check the Synapse console, you will notice the messages printed by the
+                    custom mediator during mediation.
+                </p>
+                <div class="consoleOutput">Quote value discounted.
+Original price: 162.30945327447262
+Discounted price: 138.77458254967408</div>
             </subsection>
         </section>
         <p><a href="../samples.html">Back to Catalog</a></p>        

Modified: synapse/trunk/scratch/hiranya/website/src/site/xdoc/userguide/samples/sample381.xml
URL: http://svn.apache.org/viewvc/synapse/trunk/scratch/hiranya/website/src/site/xdoc/userguide/samples/sample381.xml?rev=1053061&r1=1053060&r2=1053061&view=diff
==============================================================================
--- synapse/trunk/scratch/hiranya/website/src/site/xdoc/userguide/samples/sample381.xml (original)
+++ synapse/trunk/scratch/hiranya/website/src/site/xdoc/userguide/samples/sample381.xml Mon Dec 27 12:57:49 2010
@@ -23,7 +23,7 @@
         <title>Apache Synapse - Sample 381</title>
     </properties>
     <body>
-        <section name="Sample 381: ">
+        <section name="Sample 381: Class Mediator for CBR of Binary Messages">
             <div class="xmlConf">&lt;definitions xmlns="http://ws.apache.org/ns/synapse"&gt;
 
     &lt;proxy name="JMSBinaryProxy" transports="jms"&gt;
@@ -68,14 +68,20 @@
 &lt;/definitions&gt;</div>
             <subsection name="Objective">
                 <p>
-
+                    Demonstrate an advanced content based routing (CBR) scenario using a custom mediator
                 </p>
             </subsection>
             <subsection name="Pre-requisites">
                 <p>
-                    <ul>
+                    <ul>                
+                        <li>
+                            Setup and start a JMS broker (Apache ActiveMQ can be used as the
+                            JMS broker for this scenario. Refer JMS setup guide for information on
+                            how to run ActiveMQ.)
+                        </li>
                         <li>
-                            Deploy the SimpleStockQuoteService in the sample Axis2 server and start Axis2
+                            Enable the JMS transport receiver and sender of Synapse (Refer JMS setup
+                            guide for more details)
                         </li>
                         <li>
                             Start Synapse using the configuration numbered 381 (repository/conf/sample/synapse_sample_381.xml)
@@ -88,11 +94,39 @@
                 </p>
             </subsection>
             <subsection name="Executing the Client">
-                <div class="command">ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/</div>
-
-                <div class="consoleOutput">Sat Nov 18 21:01:23 IST 2006 SimpleStockQuoteService :: Generating quote for : IBM</div>
-
-                <div class="consoleOutput">Standard :: Stock price = $95.26454380258552</div>
+                <p>
+                    In this configuration, a proxy service has been defined to accept incoming JMS 
+                    messages. JMS messages contain binary payloads. User configures the offset, length,
+                    and binary encoding of the text literal that Synapse should use for CBR. Configuration
+                    simply routes the messages based on this text to different endpoints.
+                </p>
+                <p>
+                    A JMS producer and two instances of a consumer used to demonstrate the CBR functionality.
+                </p>
+                <p>
+                    Now run the first consumer using the following command.
+                </p>
+                <div class="command">ant mddconsumer -Djms_topic=mdd.MSFT</div>
+                <p>
+                    Now run the second consumer using the following command.
+                </p>
+                <div class="command">ant mddconsumer -Djms_topic=mdd.GOOG</div>
+                <p>
+                    Now run the market data producer to genenrate market data for symbol 'MSFT' using
+                    the following command.
+                </p>
+                <div class="command">ant mddproducer -Dsymbol=MSFT</div>
+                <p>
+                    Now run the market data producer to genenrate market data for symbol 'GOOG' using
+                    the following command.
+                </p>
+                <div class="command">ant mddproducer -Dsymbol=GOOG</div>
+                <p>
+                    You will see the below output in the client console(s) based on the symbol.
+                </p>
+                <div class="consoleOutput">mddconsumer:
+     [java]  Market data recived for symbol : topic://mdd.MSFT
+     [java]  Market data recived for symbol : topic://mdd.MSFT</div>
             </subsection>
         </section>
         <p><a href="../samples.html">Back to Catalog</a></p>