...
- Windows, Linux or Solaris operating system should exist.
- WSO2 BRS should be installed. To install the BRS, refer Installing the Product . This also includes installing Apache Ant as one of the Installation Prerequisites.
- WSO2 BRS should be started as described in Running the Product.
Sample
...
configuration
Table of Contents | ||||
---|---|---|---|---|
|
Sample
...
rule definition
Rules
Rule 1 : If a local calls was taken during daytime, then the call rate is two dollars per minute.
...
Facts
There is one fact named A call has been taken (CallLog)
. a charge should be calculated for the call (CallCharge)
is the result of the rule execution.
Code Block | ||
---|---|---|
| ||
package samples.callcharging; import java.util.Calendar; /** * CallLog fact */ public class CallLog { private String type; private double period; public String getType() { return type; } public void setType(String type) { this.type = type; } public double getPeriod() { return period; } public void setPeriod(double period) { this.period = period; } public int now() { Calendar cal = Calendar.getInstance(); return cal.get(Calendar.HOUR_OF_DAY); } } package samples.callcharging; /** * CallCharge fact */ public class CallCharge { private double amount; public double getAmount() { return amount; } public void setAmount(double amount) { this.amount = amount; } } |
Rule
Service Configurationservice configuration (service.rsl)
An in-line rule set is used within the service.rsl file as follows.
Code Block | ||
---|---|---|
| ||
<ruleService name="CallChargingService" xmlns="http://wso2.org/carbon/rules" targetNamespace="http://com.test/callcharging"> <ruleSet> <rule resourceType="regular" sourceType="inline"> <![CDATA[ package callcharging import samples.callcharging.CallLog; import samples.callcharging.CallCharge; rule "Local Call During Daytime" when callLog : CallLog( type == "local") eval((6 < callLog.now()) && (callLog.now()< 18)) then CallCharge c = new CallCharge(); c.setAmount(callLog.getPeriod() * 2); insertLogical(c); end rule "Local Call During Night" when callLog : CallLog( type == "local") eval((18 < callLog.now()) || (callLog.now()< 5)) then CallCharge c = new CallCharge(); c.setAmount(callLog.getPeriod() * 1); insertLogical(c); end rule "IDD Call During Daytime" when callLog : CallLog( type == "idd") eval((6 < callLog.now()) && (callLog.now()< 18)) then CallCharge c = new CallCharge(); c.setAmount(callLog.getPeriod() * 6); insertLogical(c); end rule "IDD Call During Night" when callLog : CallLog( type == "idd") eval((18 < callLog.now()) || (callLog.now()< 5)) then CallCharge c = new CallCharge(); c.setAmount(callLog.getPeriod() * 4); insertLogical(c); end ]]> </rule> </ruleSet> <operation name="charge"> <input wrapperElementName="callCharge" namespace="http://com.test/callCharge"> <fact elementName="callLog" namespace="http://com.test/callCharge" type="samples.callcharging.CallLog"></fact> </input> <output wrapperElementName="callChargeRespone" namespace="http://com.test/callCharge"> <fact elementName="callCharge" namespace="http://com.test/callCharge" type="samples.callcharging.CallCharge"></fact> </output> </operation> </ruleService> |
Executing the
Sampleservice
To execute the sampleservice, run the ant
command from the <PRODUCT_HOME>/samples/callcharging.service
directory to run the CallCharging Service.
Info |
---|
Before executing this sampleservice, it is recommended that you refer Exposing Rules as Services which explains in detail the process of writing and deploying a business rule. |
Deploying and
Testingtesting the
Serviceservice
- Deploy the rule service through the BRS management console. You can follow either of the two methods:
- Bundle all artifacts in an .aar file and upload it (Rule Service -> Upload menu).
- Create using the Rule Service wizard UI (Rule Service -> Create menu).
The above steps are discussed in detail in section Exposing Rules as Services .
- After deployment, click on List under Services in the main tab of the management console. The service will appear in the Deployed Services page.
- Click CallChargingService to access the dashboard of the service.
- Click Try this service in the Client Operations widget of the dashboard to invoke the Try-it tool.
Issue the following request in the Try-it tool:
Code Block language html/xml <type>idd</type> <period>12</period>
You would get the following response:
Code Block language html/xml <amount>48.0</amount>
Issue another request as follows:
Code Block language html/xml <type>local</type> <period>12</period>
You would get the following result:Code Block language html/xml <amount>12.0</amount>
Alternatively, you can use Generate Axis2 Client link in the
Client Operations
widget of the dashboard to invoke the service. A client using generated stub codes is shown below where the codes were generated with the Unpacks the data binding classes check box checked.Code Block language java package test.com.Client; import org.apache.axis2.AxisFault; import test.com.callcharge.CallCharge; import test.com.callcharge.CallChargeE; import test.com.callcharge.CallLog; import test.com.callcharging.CallChargingServiceStub; import java.rmi.RemoteException; public class CallChargingTestCase { public static void main(String[] args) { try { CallChargingServiceStub callChargingServiceStub = new CallChargingServiceStub("http://localhost:9763/services/CallChargingService"); CallChargeE callChargeRequest = new CallChargeE(); CallLog callLog = new CallLog(); callLog.setPeriod(200); callLog.setType("local"); CallLog[] callLogs = new CallLog[1]; callLogs[0] = callLog; callChargeRequest.setCallLog(callLogs); CallCharge[] callCharges = callChargingServiceStub.charge(callLogs); if(callCharges != null){ for (CallCharge callCharge : callCharges){ System.out.println("Tha charge for the call : " + callCharge.getAmount()); } } } catch (AxisFault axisFault) { axisFault.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } } }
Excerpt hidden true Call charging service sample of the WSO2 Business Rules Server samples guide.
...