This chapter describes how to use a decision function to call rules from a Java application, from a composite, or from a BPEL process.
The chapter includes the following sections:
A decision function is a module of execution that can be invoked to reason on the inputs to arrive at outputs by applying a given ruleset or other decision functions.
A decision function contains the following declarations:
Input facts.
Rulesets and nested decision functions.
Output facts.
A decision function performs the following operations:
Asserts inputs as rule facts into the Oracle Business Rules Engine working memory.
Runs rulesets configured in the current decision function and in nested decision functions in order.
Returns output facts from the Oracle Business Rules Engine working memory.
You can create a decision function to simplify the use of Oracle Business Rules from a Java application or from a BPEL process. In a decision function the rules you want to use can be organized into several rulesets, and those rulesets can be executed in a prescribed order. Facts may flow to the first ruleset, and this ruleset may assert additional facts that flow to the second and subsequent rulesets until finally facts flow back to the decision function as decision function output.
You use Rules Designer to add a decision function.
To add a decision function:
To edit an existing decision function:
To change the order of inputs:
To change the order of outputs:
The Rule Firing Limit allows you to set the maximum number of steps (rule firings) that are allowed at runtime.
Using this option and specifying a value other than unlimited can help you debug certain rule design problems and in some cases might help prevent java.lang.OutOfMemoryError
errors at runtime. This is can be useful when debugging infinitely recursive rule firings.
When you choose a value other than unlimited, and choose Rule Firing Limit is Error, the system throws an error once the limit is reached.
Oracle Business Rules generates a corresponding RL Language function for each decision function.
The signature of a generated decision function is similar to:
function <name>(InputFactType1 input1, ... InputFactTypeN inputN) returns List
In a decision function, each parameter is generated depending on the List option, with the decision function input, as follows:
Input argument, List option unselected: for FactTypei the input must be a single object and the assertion applies only to that single input object.
Input List option selected: for List<FactTypei> the input must be a List
of objects and the assertion applies to each object in the input List
(java.util.List
).
The generated RL Language function includes calls either to assert
or assertTree
for each argument, depending on the decision function Input option, Tree. When Tree is cleared, the input is asserted using the assert
function. When Tree is selected, the input is asserted using the assertTree
function. When selected, all objects referenced by the root object(s) are asserted.
For the decision function selected rulesets, as specified in the Rulesets and Decision Functions area Selected box, the generated RL Language function includes a call to run()
with the selected rulesets in the selected ruleset stack order.
The generated RL Language function returns a list. The list has an element for each decision function output in order. If the output is declared to be a list, then the corresponding element is a list. However, if the output is not declared to be a list, then the corresponding element is the output fact or null (if there is no output fact of the declared type). If an output is not declared to be a list, and more than one output fact of the specified type is found in the working memory of Oracle Business Rules Engine, then an exception is thrown.
After you edit a decision function, for example, to change or add inputs and outputs, the changes are visible in BPEL for new Business Rule activities. However, the changes are not visible to existing Business Rule activities. For more information, see "Getting Started with Oracle Business Rules" in the Developing SOA Applications with Oracle SOA Suite.
A decision function supports either stateful or stateless operation. The Stateless check box in the Edit Decision Function dialog provides support for these two modes of operation.
By default the Stateless check box is selected which indicates stateless operation. With stateless operation, at runtime, the rule session is released after each invocation of the decision function.
When Stateless is cleared, the underlying Oracle Business Rules object is kept in the memory of the Business Rules service engine, so that it is not given back to the Rule Session Pool when the operation is finished. A subsequent use of the decision function re-uses the cached RuleSession object, with all its state information from the previous invocation. Thus, when Stateless is cleared, the rule session is saved for a subsequent request and a sequence of decision function invocations from the same process should always end with a stateless invocation.