cookbook oracle soa business rules

Post on 02-Jun-2015

9.079 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

How to create a simple decision table in Oracle SOA Suite 11g

TRANSCRIPT

Business Rules Composite

Cookbook on how to create a simple Business Rule Composite in Oracle

SOA Suite

Create New SOA Project

Enter Project Name and Directory

Begin with Empty Composite

(or Composite With Business Rule)

Drag Business Rule in the composite.xml, enter Name and Package and click +

Input…

Define Input Message by importing types from MDS

Do not ‘Copy to Project’ !

You don’t want to have copies of shared xsd’s (xsd’s used by multiple composites and/or systems) scattered around in multiple projects. Only xsd’s which are only used within a composite are stored within a composite project.

Select Input Type

Click + Output…

Define Output Message by importing types from MDS

Again do not ‘Copy to Project’ !

Select Output Type

Select tab Advanced to enter a nice Service Name

Finally Select OK

Open composite

Drag a Mediator to the Components lane, enter Name and select

Synchronous Interface

Always use a Mediator to expose to the outside world! It offers routing and mapping flexibility for future changes.

Select as Input same type as Business Rule Engine, so first import types

Again do not ‘Copy to Project’ !

Select same Input Type

Same applies for output type.Make sure “Create Composite Service

with SOAP Bindings” is checked

Press OK

Drag the arrow of the Mediator to the Rule Engine to wire execute method to

callFunctionStateless method

Double click on Mediator and click on button to create a mapping

Provide meaningfull name for the new Mapper file

In the mapper on the right side expand node parameterList, right click on NOM-

details and select Add XSL Node > copy-of

Select “Replace the selected Node with the results of the copy-of”

Drag the NOM-details on the left side to the copy-of

In the mapper on the right click, right-click on attribute name and select Set Text >

Enter Text…

Enter text “NominationRulesService” (name of the service in the business rule

engine)

Save all, close mapper, open mediator again and create reply mapping

Copy in the same way VAL-answer from resultList to Val-answer target

Save all, close mapper and mediator and open NominationRules by double

click in the composite

Select Ruleset1 and Create Decision Table

Click on the table name to enter a meaningful name

Click on <insert condition>

Double click on C1 <edit condition> and select TNOMDetails.status

Click on ? below R1 and select INITIAL

Click on button Gap Analysis…

Select the checkbox to fill the gap

Click on tab Functions

Click on + to create a function and enter Name, select void as Return Type

and enter a meaningful Description

Click on <insert action> in the Body part and create the following code:

assert new TVALAnswer( <edit properties> )

Click on <edit properties> and select null and true as constant values

The same for new function validateNOK with null and false as constant values

Don’t worry, we’re gonna fill the error part later on.

Navigate back to DecisionTable NomStatus in Ruleset1, click on <insert action> and

select Call

Double click on ‘A1 call(’ and select function validateOK

Click on + and select Action > Call

Select validateNOK for A2, select A1 as action for R1 and A2 for R2

Test this basic setup by deploying the composite and using soapUI.

Retrieve WSDL url from Test tab in Enterprise Manager.

Create new Project in soapUI with WSDL url

Fill request with test data and invoke

Nominaton status value ‘initial’ results to true as nomination response

Open NominationRules again and select the Facts tab

Select subtab Java Facts (bottom screen), press + button, browse and search for

java.util.ArrayList

Select! (checkbox) and press OK

Select tab Functions and select validateNOK function to change it

Add two arguments of type String with the + button of the Arguments section

and name them code and message

With right click next to statement you can delete, insert new statements, etc

Create code for function validateNOK:

Select Ruleset1 and double click on action A2 to edit argument settings

Check Parameterized checkbox for both arguments and press OK

Fill arguments for R2 with code “001” message “Invalid Nomination”

Deploy and assert arguments are returned in output

In decision table create two more rules and split up R2 into separate values

and enter their arguments for A2

If you, by accident provide arguments, for unused A2 call, you can not delete them! Run time this doesn’t matter, but you can set them to null value for readability.

Deploy and test again

Select tab Globals and with + button create variable MaxNomAmount of type int, value 10000 and check both Constant and Final

Select tab Bucketsets and with + button create new bucketset of type “List of

Ranges”

Edit this new bucketset by selecting it and the pencil button

(or double click on bucketset icon) and first provide a decent name

Use the + button to create 0 value endpoint and again to create Endpoint of Global value MaxNomAmount. Uncheck

checkbox Included Endpoint, so MaxNomAmount will be allowed.

Press OK to save the bucketset

Select Ruleset1 again and add condition with + button

Double click on C2 and select TNOMDetails.totalAmount

Select C2 and assign NominationAmountBuckets to it

Set [0..MaxNomAmount] as value for R1 with status INITIAL and OK result

Enter - , a dash, as value for R2-R4 meaning ‘otherwise’

Create two rules for status INITIAL with < 0 and > MaxNomAmount buckets,

assign validateNOK and provide decent arguments

Deploy and test your end result

top related