...
Code Block | ||
---|---|---|
| ||
<ruleService name="BankingService" scope="transportsession" xmlns="http://wso2.org/carbon/rules" targetNamespace="http://com.test/Banking"> <ruleSet> <rule resourceType="regular" sourceType="inline"> <![CDATA[ package Banking; import samples.banking.Account; import samples.banking.Deposit; import samples.banking.DepositAccept; import samples.banking.WithdrawAccept; import samples.banking.WithdrawReject; import samples.banking.Withdraw; rule "Deposit with amount higher than 1000 in an Existing Account" dialect "mvel" no-loop true salience 6 when $deposit : Deposit( amount > 1000 ) $account : Account( accountNumber == $deposit.accountNumber ) then $account.increment($deposit.amount * 1.05); DepositAccept depositAccept = new DepositAccept(); depositAccept.setMessage("Deposit was successfully done. 5 percentage credits is given because the deposit amount is higher than 1000. Amount was : " + $deposit.amount + ". Your account balance is now : "+ $account.balance); insertLogical(depositAccept); end rule "Deposit with amount higher than 1000 in a new Account" dialect "mvel" no-loop true salience 5 when $deposit : Deposit( amount > 1000) not( Account( accountNumber == $deposit.accountNumber ) ) then Account account = new Account(); account.setAccountNumber($deposit.accountNumber); account.increment($deposit.amount * 1.05); DepositAccept depositAccept = new DepositAccept(); depositAccept.setMessage("Deposit was successfully done.5 percentage credits is given because the deposit amount is higher than 1000. Amount was : " + $deposit.amount + ". Your account balance is now : "+ account.balance); retract($deposit); insert(account); insertLogical(depositAccept); end rule "Deposit in an Existing Account" dialect "mvel" no-loop true salience 4 when $deposit : Deposit( amount <= 1000 ) $account : Account( accountNumber == $deposit.accountNumber ) then $account.increment($deposit.amount); DepositAccept depositAccept = new DepositAccept(); depositAccept.setMessage("Deposit was successfully done. 5 percentage credits would be given if the deposit amount was higher than 1000. Amount was : " + $deposit.amount + ". Your account balance is now : "+ $account.balance); insertLogical(depositAccept); end rule "Deposit in a new Account" dialect "mvel" no-loop true salience 3 when $deposit : Deposit( amount <= 1000) not( Account( accountNumber == $deposit.accountNumber) ) then Account account = new Account(); account.setAccountNumber($deposit.accountNumber); account.increment($deposit.amount); DepositAccept depositAccept = new DepositAccept(); depositAccept.setMessage("Deposit was successfully done.5 percentage credits would be given if the deposit amount was higher than 1000. Amount was : " + $deposit.amount + ". Your account balance is now : "+ account.balance); retract($deposit); insert(account); insertLogical(depositAccept); end rule "Withdrawing Allow" dialect "mvel" no-loop true salience 2 when $withdraw : Withdraw() $account : Account( accountNumber == $withdraw.accountNumber ) eval($account.balance > $withdraw.amount) then $account.decrement($withdraw.amount); WithdrawAccept withdrawAccept = new WithdrawAccept(); withdrawAccept.setMessage("Withdraw was successfully done. Amount was : " + $withdraw.amount + ". Your new account balance is : "+ $account.balance); insertLogical(withdrawAccept); end rule "Withdrawing Deny" dialect "mvel" no-loop true salience 1 when $withdraw : Withdraw() $account : Account( accountNumber == $withdraw.accountNumber ) eval($account.balance < $withdraw.amount) then WithdrawReject withdrawReject = new WithdrawReject(); withdrawReject.setReason("Withdrawing is only allowed if the account balance is higher than the requested amount. Your account balance is : "+ $account.balance); insertLogical(withdrawReject); end ]]> </rule> </ruleSet> <operation name="withDraw"> <input wrapperElementName="withDraw" namespace="http://com.test/withDraw"> <fact elementName="withDraw" namespace="http://com.test/withDraw" type="samples.banking.Withdraw"></fact> </input> <output wrapperElementName="withDrawRespone" namespace="http://com.test/withDraw"> <fact elementName="withdrawAccept" namespace="http://com.test/withDraw" type="samples.banking.WithdrawAccept"></fact> <fact elementName="withdrawReject" namespace="http://com.test/withDraw" type="samples.banking.WithdrawReject"></fact> </output> </operation> <operation name="deposit"> <input wrapperElementName="deposit" namespace="http://com.test/deposit"> <fact elementName="deposit" namespace="http://com.test/deposit" type="samples.banking.Deposit"></fact> </input> <output wrapperElementName="depositRespone" namespace="http://com.test/deposit"> <fact elementName="depositAccept" namespace="http://com.test/deposit" type="samples.banking.DepositAccept"></fact> </output> </operation> </ruleService> |
Executing the Sample
To execute the sample, run the ant
command from the <PRODUCT_Home>HOME>/samples/banking.service
directory to run the Banking Service.
Info |
---|
Before executing this sample, it is recommended that you refer Exposing Rules as Services which explains in detail the process of writing and deploying a business rule. |
...