[Documentation Index]

WSO2 BRS - Samples : Greeting Service

This guide demonstrates a simple greeting service which uses business rules.

Please follow the User Guide before proceeding with this sample, if you have not already followed the User Guide.

Contents

Greeting Service

Rules

Rule 1 : If the time is between 12 and 18, say good afternoon

Rule 2 : If the time is between 6 and 12, say good morning

Rule 3 : If the time is between 18 and 24, say good night

Facts

There is one fact - A user logged-in into the system. Furthermore , GreetingMessage is used to present the result of the rule execution

package samples.greeting;

import java.util.Calendar;

/**
 * User
 */
public class User {

    private String name ;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int now(){
        Calendar cal = Calendar.getInstance();
        return cal.get(Calendar.HOUR_OF_DAY);
    }
}
    
package samples.greeting;

/**
 * greeting message
 */
public class GreetingMessage {

    private String message ;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

Rule Service Configuration - service.rsl

Here we use inlined rule set within the service.rsl file

<ruleService
       name="GreetingService"
       xmlns="http://wso2.org/carbon/rules"
       targetNamespace="http://com.test/greeting">
    <ruleSet>
       <rule resourceType="regular" sourceType="inline">
           <![CDATA[
               package greeting

               import samples.greeting.GreetingMessage;
               import samples.greeting.User;

               rule "Is Morning" no-loop true
               when
                   user : User()
                   eval((6 < user.now()) && (user.now()< 12))
               then
                   GreetingMessage msg = new GreetingMessage();
                   msg.setMessage("Good Morning  " + user.getName() + " !!! ");
                   insertLogical(msg);
               end

               rule "Is afternoon" no-loop true
               when
                   user : User()
                   eval((12 <= user.now()) && (user.now() < 18))
               then
                   GreetingMessage msg = new GreetingMessage();
                   msg.setMessage("Good Afternoon  " + user.getName() + " !!! ");
                   insertLogical(msg);
               end

               rule "Is Night" no-loop true
               when
                   user : User()
                   eval( (18 <= user.now()) && (user.now() < 24))
               then
                   GreetingMessage msg = new GreetingMessage();
                   msg.setMessage("Good Night  " + user.getName() + " !!! ");
                   insertLogical(msg);
               end
           ]]>
       </rule>
    </ruleSet>
    <operation name="greetMe">
       <input wrapperElementName="user" namespace="http://com.test/greeting">
           <fact elementName="user" namespace="http://com.test/greeting" type="samples.greeting.User"></fact>
       </input>
       <output wrapperElementName="greetingMessage" namespace="http://com.test/greeting">
           <fact elementName="greetingMessage" namespace="http://com.test/greeting" type="samples.greeting.GreetingMessage"></fact>
       </output>
    </operation>
</ruleService>

Deploying Service

You can either create an .aar file and upload or create a rule service using rule service wizard UI. Please refer the User Guide for more information.

Testing Sample

You can use Try-it tool with a request similar to the following.

        <name>your name</name>
   

You can also use the code generation. There is an option for code generation in the services management page. A client using generated stub codes is shown bellow. Codes were generated with option Unpacks the databinding classes.

package org.wso2.carbon.samples;

import java.lang.String;
import org.wso2.carbon.samples.greetingService.greeting.*;
import org.apache.axis2.AxisFault;
import java.rmi.RemoteException;

public class GreetingServiceTestCase {

    public static void main(String[] args) {

        try {
            GreetingServiceStub greetingServiceStub = new GreetingServiceStub("http://localhost:9763/services/GreetingService");

            UserE userRequest = new UserE();
            User user = new User();
            user.setName("your name");
            User[] users = new User[1];
            users[0] = user;
            userRequest.setUser(users);

            GreetingMessage[] greetingMessages = greetingServiceStub.greetMe(users);
            String result = greetingMessages[0].getMessage();
            System.out.println(result);

        } catch (AxisFault axisFault) {
            axisFault.printStackTrace();
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
}

References