Versions Compared

Key

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

...

The queries used in this sample is as follows. 

The first query keeps each arrival event for 2 minutes and then emits it to overdue_deliveries_stream which is then used in the second query.

The second query uses a pattern. It looks for a pattern where, there an arrival event (through the arrivals_stream) which is followed by a delivery event (through deliveries_stream) or else an overdue delivery event (this is an arrival event which is 2 minutes old, coming through the overdue_deliveries_stream)

Now, if the pattern detects an arrival event followed by an overdue delivery event with no delivery event, that means the package is not delivered within the 2 minute time limit. 

To detect whether the delivery event is null, we use the third query isNull(deliveryId) where the deliveryId will be null if the delivery event is null.

Code Block
from arrivals_stream#window.time(2 minutes)
select *
insert expired events into overdue_deliveries_stream;


from every arrivalEvent = arrivals_stream ->
deliveryEvent = deliveries_stream[arrivalEvent.trackingId == trackingId] 
    or overdue_delivery = overdue_deliveries_stream[arrivalEvent.trackingId == trackingId]
select arrivalEvent.trackingId as trackingId, arrivalEvent.customerName as customerName, arrivalEvent.telephoneNo as telephoneNo, deliveryEvent.trackingId as deliveryId 
insert into filter_stream;


from filter_stream [ isNull(deliveryId)]  
select trackingId, customerName, telephoneNo
insert into alert_stream;  

 

The first query keeps each arrival event for 2 minutes and then emits it to overdue_deliveries_stream which is then used in the second query.

The second query uses a pattern. It looks for a pattern where, there an arrival event (through the arrivals_stream) which is followed by a delivery event (through deliveries_stream) or else an overdue delivery event (this is an arrival event which is 2 minutes old, coming through the overdue_deliveries_stream)

Now, if the pattern detects an arrival event followed by an overdue delivery event with no delivery event, that means the package is not delivered within the 2 minute time limit. 

To detect whether the delivery event is null, we use the third query isNull(deliveryId) where the deliveryId will be null if the delivery event is null.

Prerequisites

  • See Prerequisites in CEP Samples Setup page for generic prerequisites. (copy apache axiom.jar to <CEP_HOME>/samples/lib directory to send XML event types)

...

  1. Open a new terminal, go to <CEP_HOME>/samples/consumers/axis2generic-log-service and run the command below. It builds the sample axis2 log service web app and deploys in the axis2 the webapps repository that is relevant to the sample.

    Code Block
    ant -DsampleNo=0105
  2. See the logs in CEP server when logger service is deploying. For example,

    Image Removed Image Added
    After deployment, the Web service app is able to receive messages sent from the CEP server. Next, let's create a topic in the local broker and subscribe LogService on that topic to receive output events from the CEP server. 

  3. Go to the management console and select the Try this service option . (Main --> Services )

  4. Then you will redirected to a UI shown below, then change the endpoint and body as shown below and click on send.

    Endpoint - http://10.100.0.44:9763/services/SoapInputAdaptor/ATMTransactionStats
    Body - Event 1

    Code Block
    <body>
    	<atmdata:ATMTransactionStatsStream xmlns:atmdata="http://samples.wso2.org/">
    		<atmdata:ATMTransactionStat>
    		<atmdata:CardNo>ED936784773</atmdata:CardNo>
    		<atmdata:CardHolderName>Mohan</atmdata:CardHolderName>
    		<atmdata:AmountWithdrawed>80</atmdata:AmountWithdrawed>
    		<atmdata:TransactionTime>PDT 11:00</atmdata:TransactionTime>
    		<atmdata:Location>Newyork</atmdata:Location>
    		<atmdata:BankName>Bank of Newyork</atmdata:BankName>
    		<atmdata:AccountNo>8957836745</atmdata:AccountNo>
    		<atmdata:CardHolderMobile>9667339388</atmdata:CardHolderMobile>
    		</atmdata:ATMTransactionStat>
    	</atmdata:ATMTransactionStatsStream>
    </body>
  5. Similarly send the following ATM stat events as well through the try it feature.

    Event 2

    Code Block
    <body>
    	<atmdata:ATMTransactionStatsStream xmlns:atmdata="http://samples.wso2.org/">
    		<atmdata:ATMTransactionStat>
    		<atmdata:CardNo>BC78946623</atmdata:CardNo>
    		<atmdata:CardHolderName>John</atmdata:CardHolderName>
    		<atmdata:AmountWithdrawed>1000</atmdata:AmountWithdrawed>
    		<atmdata:TransactionTime>PDT 01:00</atmdata:TransactionTime>
    		<atmdata:Location>California</atmdata:Location>
    		<atmdata:BankName>Bank of Wonder</atmdata:BankName>
    		<atmdata:AccountNo>PDT 12:00</atmdata:AccountNo>
    		<atmdata:CardHolderMobile>94729327932</atmdata:CardHolderMobile>
    		</atmdata:ATMTransactionStat>
    	</atmdata:ATMTransactionStatsStream>
    </body>

    Event 3

    Code Block
    <body>
    	<atmdata:ATMTransactionStatsStream xmlns:atmdata="http://samples.wso2.org/">
    		<atmdata:ATMTransactionStat>
    		<atmdata:CardNo>GH679893232</atmdata:CardNo>
    		<atmdata:CardHolderName>Tom</atmdata:CardHolderName>
    		<atmdata:AmountWithdrawed>900</atmdata:AmountWithdrawed>
    		<atmdata:TransactionTime>PDT 02:00</atmdata:TransactionTime>
    		<atmdata:Location>Texas</atmdata:Location>
    		<atmdata:BankName>Bank of Greenwich</atmdata:BankName>
    		<atmdata:AccountNo>783233422</atmdata:AccountNo>
    		<atmdata:CardHolderMobile>98434345532</atmdata:CardHolderMobile>
    		</atmdata:ATMTransactionStat>
    	</atmdata:ATMTransactionStatsStream>
    </body>

    Event 4

    Code Block
    <body>
    	<atmdata:ATMTransactionStatsStream xmlns:atmdata="http://samples.wso2.org/">
    		<atmdata:ATMTransactionStat>
    		<atmdata:CardNo>ED936784773</atmdata:CardNo>
    		<atmdata:CardHolderName>Mohan</atmdata:CardHolderName>
    		<atmdata:AmountWithdrawed>15000</atmdata:AmountWithdrawed>
    		<atmdata:TransactionTime>PDT 03:00</atmdata:TransactionTime>
    		<atmdata:Location>Newyork</atmdata:Location>
    		<atmdata:BankName>Bank of Newyork</atmdata:BankName>
    		<atmdata:AccountNo>8957836745</atmdata:AccountNo>
    		<atmdata:CardHolderMobile>9667339388</atmdata:CardHolderMobile>
    		</atmdata:ATMTransactionStat>
    	</atmdata:ATMTransactionStatsStream>
    </body>
  6. From the terminal opened when starting the CEP server, you can see the processed events which emitted by CEP.

    For example, given below is part of the console output of the consumer when sending events through Try-it service.