Receiving Notifications from Data Services

This site contains the documentation that is relevant to older WSO2 product versions and offerings.
For the latest WSO2 documentation, visit https://wso2.com/documentation/.

Receiving Notifications from Data Services

You can create an event trigger from a query as explained below. 

Introduction

Eventing support is provided by the WS-Eventing Web services standard. When a data service request or response triggers an event, the subscribers listening to those events receive notifications. The criteria for triggering an event as well as the destination to which the event notifications should be sent are defined per data service query. When a certain event-trigger is activated, emails will be sent to all the respective subscribers. You can set an event trigger as an input or an ouput event trigger in a data service query. Let's look at the usage of the two approaches.

Input event trigger

When an input event trigger is applied to a query, the event trigger is evaluated when the parameters are received by the query. An event-trigger executes an XPath expression against an XML element. This XML element is built from the input parameters that are represented by the element of the parameters wrapped by an element with the name of the query.

For example, take the following query:

<query id="incrementEmployeeSalaryQuery" useConfig="default"> <sql>update Employees set salary=salary+? where employeeNumber=?</sql> <param name="increment" paramType="SCALAR" sqlType="DOUBLE" type="IN" ordinal="1" /> <param name="employeeNumber" paramType="SCALAR" sqlType="INTEGER" type="IN" ordinal="2" /> </query>

Assuming that the values of increment and employeeNumber are value1 and value2 respectively, the XML element to be evaluated with the XPath expression is as follows. Also note that this XML element doesn't not have any namespaces associated with it.

<incrementEmployeeSalaryQuery> <increment>value1</increment> <employeeNumber>value2</employeeNumber> </incrementEmployeeSalaryQuery>

Output event trigger

In this case, the event trigger is evaluated when a specific query is returning its result. There isn't a specific creation of an XML element that is used with the XPath expression like in the input event trigger. But the full result XML is used to evaluate it. The result will be namespace qualified. Therefore, you must write the XPath expressions accordingly.


Get started!

Follow the steps given below.

Before you begin

  • Update email configurations: Open the axis2_client.xml file from the <EI_HOME>/conf/axis2 folder and add the following XML element:

    <transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender"> <parameter name="mail.smtp.from">esb.sample@gmail.com</parameter> <parameter name="mail.smtp.user">esb.sample</parameter> <parameter name="mail.smtp.password">esb*sample8</parameter> <parameter name="mail.smtp.host">smtp.gmail.com</parameter> <parameter name="mail.smtp.port">587</parameter> <parameter name="mail.smtp.starttls.enable">true</parameter> <parameter name="mail.smtp.auth">true</parameter> </transportSender>
  • Set up a datasource:

    1. Install the MySQL server.

    2. Download the JDBC driver for MySQL from here and copy it to your <EI_HOME>/lib directory.

    3. Create the following database: Company

    4. Create the ACCOUNT table in the Company database:

      CREATE TABLE ACCOUNT(AccountID int NOT NULL,Branch varchar(255) NOT NULL, AccountNumber varchar(255),AccountType ENUM('CURRENT', 'SAVINGS') NOT NULL,Balance FLOAT,ModifiedDate DATE,PRIMARY KEY (AccountID));
    5. Enter the following data into the ACCOUNT table:

      INSERT INTO ACCOUNT VALUES (1,"AOB","A00012","CURRENT",231221,'2014-12-02');

Enabling an input event notification for a query

Let's create a data service using the Create Data Service wizard:

  1. Log into the management console of the ESB of WSO2 EI and click Create in the Data Service menu.

  2. Add a name for the data service and go to the next step.

  3. Connect to the Company database that you defined above.

    1. Enter the URL to your MySQL database in the URL field:  jdbc:mysql://localhost:3306/Company

    2. Enter the username and password to connect to your MySQL database. By default the username is root and the password is blank. 

  4. Click Next to go to the Queries screen.

  5. Click Add New Query to specify the query details:

    1. Enter UpdateAccBalance as the query ID.

    2. Enter the following SQL dialect:

      UPDATE ACCOUNT SET Balance=:Balance WHERE AccountID=:AccountID
  6. Click Generate Input Mapping to automatically generate input mappings for the AccountID and Balance fields.



  7. At the bottom of the page you will find the Events section:

  8. Click Manage Events and add a new event as shown below:

     

    The fields in the Add Events screen are explained below.

    1. Event Idaccount_balance_low_trigger

    2. Xpath/UpdateAccBalance/Balance<200

    3. Target Topicproduct_stock_low_topic

    4. Event Sink URLmailto:youremail@wso2.com 

  9. Save the event.

  10. You can now add the event as an event trigger for the query as shown below. Since the event sends notifications related to data input, you need to add the event as an Input Event Trigger.


  11. Save the UpdateAccBalance query.

  12. Create an operation for the UpdateAccBalance query as shown below.

  13. Save the operation.

  14. Click Finish to navigate to the Deployed Services window from where you can manage data services.