Hi Guys
The Oracle Business Rules engine that comes as part of the SOA
Suite provides a declarative mechanism for defining business rules
externally to our application. This not only ensures that each rule is
used in a consistent fashion, but in addition, it makes it simpler and
quicker to modify. We only have to modify a rule once and can do this
with almost immediate effect, thus increasing the agility of our
solution.
In this article, we will introduce the new rules editor and look at how
we can use it to define a decisions service to automate the approval of
leave requests. Then, once we've done this, we'll see how to invoke the
rule from the leave approval BPEL process.
Business rule concepts
Before we implement our first rule, let's briefly introduce the key components which make up a business rule. These are:
- Facts: Represent the data or business objects that rules are applied to.
- Rules: A rule consists of two parts, namely, an IF part that consists of one or more tests to be applied to a fact(s), and a THEN part that lists the actions to be carried out, should the test evaluate to true.
- Rule Set: As the name implies, it is just a set of one or more related rules that are designed to work together.
- Dictionary: A dictionary is the container of all components that make up a business rule. It holds all the Facts, Rule Sets, and Rules for a business rule.
Leave approval business rule
To begin with, we will write a simple rule to automatically approve a
leave request that is of the type Vacation and only for one day's
duration. This is a pretty trivial example, but once we've done this, we
will look at how to extend this rule to handle more complex examples.
Creating Soa Composite
Within JDeveloper, open up your LeaveApproval application . Open up the composite.xml file for the application and then from the Component Palette, drag-and-drop a Business Rule onto the composite.This will launch the Create Business Rules dialog, as shown in the following screenshot:
The first step is to give our dictionary a name, such as LeaverequestRules, and a corresponding
In addition, we need to specify the Input and Output
facts that we will pass to our decision service. For our purpose, we
will pass in a single leave request. The rule engine will then apply the
rules that we define and update the status of the leave request to
either Approved or Manual
Next, click the Advanced tab. Here we can see that JDeveloper has given the default name LeaveApprovalRules_DecisionService_1 to our decision service. Give it a more meaningful name such as LeaveApprovalDecisonService.
Implementing our business rules
The rules editor allows you to view/edit the various components which
make up your business rules. To select a particular component, such as
Facts, Functions, Globals, and so on, just click on the corresponding
tab down the left-hand side.
To add a rule, click the green plus symbol on the top-right-hand
corner, and select Create Rule, as shown in the following screenshot
(alternatively click on the Create Rule button, circled in the following
screenshot).
For our leave approval rule, we need to define two tests, one to
check that the request is only for a day in duration, which we can do by
checking that the start date equals the end date, and the second to
check that the request is of type Vacation.
To define the first test, click on <insert test>. This will add the line <operand> = = <operand> under the IF statement where we can define the test condition.
The rule editor allows us to choose from the following action types:
- assert new: We use this to create and assert a new fact, for example, a new LeaveRequest. Once asserted, the new fact will be evaluated by the rules engine against the ruleset.
- modify: We can use this to either assign a value to a variable or a fact attribute; in our case we want to assign a status of Approved to the requestStatus property.
- retract: This enables you to retract any of the facts matched in the pattern (for example, TLeaveRequest) so that it will no longer be evaluated as part of the ruleset.
- call: This allows you to call a function to perform one or more actions.
The actions assert new and retract are important when we are dealing
with rulesets that deal with multiple interdependent facts, as this
allows us to control which facts are being evaluated by the rule engine
at any particular time.
For our purposes, we want to update the status of our leave, so select modify
Calling a business rule from BPEL
Save the rule, and then switch back to our composite and double-click the LeaveRequest BPEL process to edit it. Drag a Business Rule from the BPEL Activities and Components palette into your BPEL process
Once we've specified the service, we need to specify how we want to invoke the decision service. We specify this through the Operation attribute. Here we have two options:
- Execute function and reset the session
- Execute function
If we choose the option Execute function and thus don't reset
the session, if we were then to call the decision service several times
within the same instance of our BPEL process, each new invocation would
reuse the same session and would also evaluate facts asserted in any
previous invocation. For our purposes, we just need to assert a single
fact and run the ruleset, so accept the default value of Execute function and reset the session.
We are ready to go with testing
In my next post we will discuss about Using Functions in BussinessRules
Happy Learning
By DeepthiReddy
No comments:
Post a Comment