This documentation is for WSO2 Enterprise Service Bus version 4.9.0 . View documentation for the latest release.

All docs This doc

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Objective: Demonstrate the use of reusable database connection pools

Table of Contents

Introduction

This sample demonstrates how you can setup reusable connection pools for the DBLookup and DB Report mediators.

Prerequisites

Building the sample

The XML configuration for this sample is as follows: 

Code Block
languagehtml/xml
<!-- Reusable database connection pool -->
<definitions xmlns="http://ws.apache.org/ns/synapse">
     <sequence name="myFaultHandler">
        <makefault>
<makefault response="true">
            <code value="tns:Receiver" xmlns:tns="http://www.w3.org/2003/05/soap-envelope" value="tns:Receiver"/>
            <reason expression="get-property('ERROR_MESSAGE')"/>
        </makefault>
         <property name="RESPONSE" value="true"/>
        <header name="To" expression="get-property('ReplyTo')"/>
        <send/>
        <drop/>
    </sequence>
     <sequence name="main" onError="myFaultHandler">
        <in>
            <log level="custom">
                <property name="text"                           value="** Looking up from the Database **"/>
            </log>
            <dblookup>
                <connection>
                    <pool>
                        <dsName>lookupdb</dsName>
                        <icClass>com.sun.jndi.rmi.registry.RegistryContextFactory</icClass>
                        <url>rmi://localhost:2199</url>
                        <user>esb</user>
                        <password>esb</password>
                    </pool>
                </connection>
                <statement>
                    <sql>select * from company where name =?</sql>
                    <parameter xmlns:m0="http://services.samples" expression="//m0:getQuote/m0:request/m0:symbol"
                               xmlns:m0="http://services.samples/xsd" type="VARCHAR"/>
                    <result name="company_id" column="id"/>
                </statement>
            </dblookup>
             <switch source="get-property('company_id')">
                <case regex="c1">
                    <log level="custom">
                        <property name="text"                                   expression="fn:concat('Company ID - ',get-property('company_id'))"/>
                    </log>
                    <send>
                        <endpoint>
                            <address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
                        </endpoint>
                    </send>
                </case>
                <case regex="c2">
                    <log level="custom">
                        <property name="text"                                   expression="fn:concat('Company ID - ',get-property('company_id'))"/>
                    </log>
                    <send>
                        <endpoint>
                            <address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
                        </endpoint>
                    </send>
                </case>
                <case regex="c3">
                    <log level="custom">
                        <property name="text"                                   expression="fn:concat('Company ID - ',get-property('company_id'))"/>
                    </log>
                    <send>
                        <endpoint>
                            <address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
                        </endpoint>
                    </send>
                </case>
                <default>
                    <log level="custom">
                        <property name="text" value="** Unrecognized Company ID **"/>
                    </log>
                    <makefault>
                        <code value="tns:Receiver"<makefault response="true">
                        <code      xmlns:tns="http://www.w3.org/2003/05/soap-envelope" value="tns:Receiver"/>
                        <reason value="** Unrecognized Company ID **"/>
                    </makefault>
                    <property name="RESPONSE" value="true"/>
                    <header name="To" action="remove"/>
                    <send/>
                    <drop/>
                </default>
            </switch>
            <drop/>
        </in>
         <out>
            <log level="custom">
                <property name="text"                           value="** Reporting to the Database **"/>
            </log>
            <dbreport>
                <connection>
                    <pool>
                        <dsName>reportdb</dsName>
                        <icClass>com.sun.jndi.rmi.registry.RegistryContextFactory</icClass></pool>
                        <url>rmi://localhost:2199</url></connection>
                <statement>
       <user>esb</user>             <sql>update company set price=? where name =?</sql>
     <password>esb</password>                     </pool>
                </connection><parameter xmlns:m0="http://services.samples" xmlns:m1="http://services.samples/xsd"
                <statement>                     <sql>update company set price=? where name =?</sql>
                    <parameter expression="//m0:return/m1:last/child::text()" type="DOUBLE"/>
                              <parameter xmlns:m0="http://services.samples" xmlns:m1="http://services.samples/xsd"
type="DOUBLE"/>                     <parameter           expression="//m0:return/m1:symbol/child::text()"                                xmlns:m0="http://services.samples" xmlns:m1="http://services.samples/xsd" type="VARCHAR"/>
                </statement>
            </dbreport>
            <log level="custom">
                <property name="text"                           value="** Looking up from the Database **"/>
            </log>
            <dblookup>
                <connection>
                    <pool>
                        <dsName>reportdb</dsName>
                        <icClass>com.sun.jndi.rmi.registry.RegistryContextFactory</icClass>
                        <url>rmi://localhost:2199</url>
                        <user>esb</user>
                        <password>esb</password>
                    </pool>
                </connection>
                <statement>
                    <sql>select * from company where name =?</sql>
                    <parameter expressionxmlns:m0="http://m0:return/m1:symbol/child::text()services.samples" xmlns:m1="http://services.samples/xsd"
                               xmlns:m0expression="http://services.samples" xmlns:m1="http://services.samples/xsdm0:return/m1:symbol/child::text()" type="VARCHAR"/>
                    <result name="stock_price" column="price"/>
                </statement>
            </dblookup>
            <log level="custom">
                <property name="text"                           expression="fn:concat('Stock price - ',get-property('stock_price'))"/>
            </log>
            <send/>
         </out>
     </sequence>

</definitions>

Prerequisites: Setting up DataBase and DataSources according to the sample setup guide.

  • Start the Synapse configuration numbered 363: i.e. wso2esb-samples -sn 363
  • Start the Axis2 server and deploy the SimpleStockQuoteService if not already done

Runs the client as follows

...

This configuration file  synapse_sample_363.xml is available in the <ESB_HOME>/repository/samples directory.

When you go through this configuration, you will see that there are two instances of the dblookup mediator and a single instance of the dbreport mediator. 

To build the sample

  1. Start the ESB with the sample 363 configuration. For instructions on starting a sample ESB configuration, see Starting the ESB with a sample configuration.

    The operation log keeps running until the server starts, which usually takes several seconds. Wait until the server has fully booted up and displays a message similar to "WSO2 Carbon started in n seconds."

  2. Start the Axis2 server. For instructions on starting the Axis2 server, see Starting the Axis2 server.

  3. Deploy the back-end service SimpleStockQuoteService. For instructions on deploying sample back-end services, see Deploying sample back-end services.

Executing the sample

The sample client used here is the Stock Quote Client, which can operate in several modes. For further details on this sample client and its operation modes, see Stock Quote Client.

To execute the sample client

  • Run the following command from the <ESB_HOME>/samples/axis2Client directory.

    Code Block
    languagebash
    ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/

...

Analyzing the

...

output

If you look at debug log output on the ESB console, you will see the following:

Code Block
 
INFO LogMediator text = ** Looking up from the Database **
    ...
 INFO LogMediator text = Company ID - c1
    ...
 INFO LogMediator text = ** Reporting to the Database **
    ...
 INFO LogMediator text = ** Looking up from the Database **
    ...
 INFO LogMediator text = Stock price - 183.3635460215262

When you analyze the log, you will understand that the ESB the logs the above output as it reads from and writes to the database.