The chapter includes the following sections:
For more information, see Section 1.1.8, "What Are Dictionaries?".
To implement the data model portion of an Oracle Business Rules application you create a dictionary and add data model elements. To complete the dictionary, you create one or more rulesets containing rules that use or depend upon these data model elements.
For more information, see:
A dictionary is an Oracle Business Rules container for facts, functions, globals, bucketsets, links, decision functions, and rulesets. A dictionary is an XML file that stores the rulesets and the data model for an application. Dictionaries can link to other dictionaries. You can create as many dictionaries as you need. A dictionary may contain any number of rulesets. Using Oracle Business Rules, a data model is contained in one or more dictionaries. All the data model elements referenced by the rulesets must be available in the dictionary.
A dictionary is stored in a
Each Oracle Business Rules dictionary lets you include links to other dictionaries. Each dictionary that you create also includes the built-in dictionary; this dictionary includes standard functions and types that all Oracle Business Rules applications need. In addition to the main dictionary, you create one or more application-specific dictionaries, such as
PurchaseItems.rules. You can read and write the properties of these dictionaries.
The complete data model defined by a dictionary and its linked dictionaries is called a combined dictionary. You can create multiple links to the same dictionary; in this case, all but the first link is ignored.
For more information, see Section 2.2.7, "What You Need to Know About Dictionary Linking".
Oracle JDeveloper provides many ways to create a dictionary for Oracle Business Rules. This shows one way you can create a dictionary in an SOA project. You can create a dictionary for use in an SOA application.
A typical SOA composite design pattern is to provide each application with its own dictionary. When different applications need access to the same parts of a common data model, you can use dictionary links to include a target application's dictionary in the dictionary of a source application. Doing so copies the target application's dictionary into the source application. Therefore, when you work with a dictionary that contains links the linked contents are referred to as local contents.
You may also create a dictionary in the business tier, for use outside of an SOA application. For more information, see Section 9.2.4, "How to Create an Oracle Business Rules Dictionary in the Grades Project".
In the Application Navigator, select an SOA application and select or create an SOA project.
Right-click, and from the list select New....
In the New Gallery select the Current Project Technologies tab and, in the Categories area, expand SOA Tier as shown in Figure 2-1.
In the New Gallery window, in the Items area, select Business Rules.
Click OK. This displays the Create Business Rules dialog.
In the Create Business Rules dialog, enter fields as shown in Figure 2-2:
In the Name field, enter the name of your dictionary. For example, enter
In the Package field, enter the Java package to which your dictionary belongs. For example,
To specify the inputs and outputs:
Click the Add icon and select Input to create an input or Output, to create an output.
In the Type Chooser dialog, expand the appropriate XSD and select the appropriate type.
Click OK to close the Type Chooser dialog.
You can later add inputs or outputs, or remove the inputs or outputs. For more information, see Chapter 6, "Working with Decision Functions".
Oracle JDeveloper creates the dictionary in a file with a
.rules extension, and starts Rules Designer as shown in Figure 2-3.
Oracle JDeveloper also creates a Decision component in composite.xml. To view this component double-click the
composite.xml file, as Figure 2-4 shows.
The simplest way to create a rules dictionary is using Rules Designer. You can create a dictionary for use in the business tier, outside of an SOA application. For information on using Oracle Business Rules without SOA, see Chapter 9, "Creating a Rule-enabled Non-SOA Java EE Application".
In Oracle JDeveloper, select an Oracle Business Rules dictionary.
In Rules Designer, click the Dictionary Settings icon.
In the Dictionary Settings dialog, in the Alias field, change the alias to the name you want to use. This field is shown in Figure 2-5.
You can link to a dictionary in the same application or in another application using the Links navigation tab in Rules Designer. To link to another dictionary you need at least one other dictionary available.
In Rules Designer, click the Links navigation tab as shown in Figure 2-6.
In the Links area, click the Create icon and from the list select Resource Picker. This displays the SOA Resource Browser dialog.
In the SOA Resource Browser dialog navigate to select the dictionary you want to link to as shown in Figure 2-7.
When you work with ADF Business Components Facts you should create a link to the Decision Point Dictionary. For more information, see Chapter 10, "Working with Oracle Business Rules and ADF Business Components".
In Rules Designer, click the Links navigation tab.
In the Links area, click Create and from the list select Decision Point Dictionary. This operation takes awhile. You need to wait for the Decision Point Dictionary to load.
When you have a dictionary, for example a dictionary named Project_rules1 that links to another dictionary, for example, a dictionary named Shared_rules you need to see any changes made to either dictionary in both dictionaries. Using Rules Designer you can modify the Shared_rules dictionary and see those modifications in Project1_rules1 by updating the Project_rules1 dictionary, or you can close and then reopen Rules Designer.
Using these sample dictionary names click the Save icon to save the Shared_rules dictionary.
Select the Project_rules1 dictionary.
Select the Links navigation tab.
Click the Dictionary Cache... icon.
In the Dictionary Finder Cache dialog, select the appropriate linked dictionary.
Click the Clear icon.
In the Dictionary Finder Cache dialog, click Close.
Click the Validate icon.
Data Model Sharing, to share portions of a data model within a project. When you link to a dictionary in another project it is copied to the local project.
For example, consider a project where you would like to share some Oracle Business Rules Functions. You can create a dictionary that contains the functions, and name it
DictCommon. Then, you can create two dictionaries,
DictApp2 that both link to
DictCommon, and both can use the same Oracle Business Rules functions. When you want to change one of the functions, you only change the version in
DictCommon. Then, both dictionaries use the updated function the next time RL Language is generated from either
In Oracle Business Rules a fully qualified dictionary name is called a DictionaryFQN and this consists of two components:
Dictionary Package: The package name
Dictionary Name: The dictionary name
A dictionary refers to a linked dictionary using its DictionaryFQN and an alias. Oracle Business Rules uses the DictionaryFQN to find a linked dictionary.
Within a combined dictionary the full names of the dictionaries, including the package and name, must be distinct. In addition, the dictionary aliases must be distinct.
Oracle Business Rules requires that the aliases of data model definitions of a particular kind, for example, function, Oracle RL class, or bucketset, must be unique within a dictionary.
Within a combined dictionary, a definition may be qualified by the alias of its immediately containing dictionary. Definitions in the top and main dictionaries do not have to be qualified. Definitions in other dictionaries must be qualified.
Ruleset names must be unique within a dictionary. When RL Language for a ruleset is generated, the dictionary alias is not part of any generated name. For example, if the dictionary named dict1 links to dict2 to create a combined dictionary, and dict1 contains ruleset_1 with rule_1 and dict2 also contains ruleset_1 with rule_2, then in the combined dictionary both of these rules, rule_1 and rule_2 are in the same ruleset (ruleset_1).
All rules and Decision Tables must have unique names within a ruleset.
For example, within a combined dictionary that includes dictionary d1 and dictionary d2, dictionary d1 may have a ruleset named
Ruleset_1 with a rule rule_1. If dictionary d2 also has a ruleset named
Ruleset_1 with a rule_2, then when Oracle Business Rules generates RL Language from the combined, linked dictionaries, both rules rule_1 and rule_2 are in the single ruleset named
Ruleset_1. If you violate this naming convention and do not use distinct names for the rules within a ruleset in a combined dictionary, Rules Designer reports a validation warning similar to the following:
RUL-05920: Rule Set Ruleset_1 has two Rules with name rule_1
For more information, see Appendix A, "Oracle Business Rules Files and Limitations".
When you create a dictionary link using the resource picker, the dictionary is copied to the source project (the project where the dictionary that you are linking from resides). Thus, this type of linking creates a local copy of the dictionary in the project. This is not a link to the original target, no matter where the target dictionary is. Thus, Rules Designer uses a copy operation for the link if you create a link with the resource picker.
When you are using Rules Designer you can browse a deployed composite application and any associated Oracle Business Rules dictionaries in the MDS connection. However, you cannot create a dictionary link to a dictionary deployed to MDS.
Oracle Business Rules accesses input and output variables by type only, and not by name. Thus, if you have two inputs of the same type, input1 and input2, the rules are not able to distinguish which is input1 and which is input2. The variable names are only useful in the BPEL process definition. The mapping for the Oracle Business Rules business terms default to fact type.property, and there may be no relationship to the BPEL variable name.
In Oracle Business Rules a global is similar to a public static variable in Java. You can specify that a global is a constant or is modifiable.
You can use global definitions to share information among several rules and functions. For example, if a 10% discount is used in several rules you can create and use a global Gold Discount, so that the appropriate discount is applied to all the rules using the global.
Using global definitions can make programs modular and easier to maintain.
You can use Rules Designer to add globals.
In Rules Designer, select the Globals navigation tab.
In the globals table, click the Create icon. This adds a global and displays the Edit Global dialog, as shown in Figure 2-8.
In the Name field, enter a name or accept the default value.
In the Type field, select the type from the list.
Optionally, in the Bucketset field, select a value from the list.
In the Value field, enter a value, select a value from the list, or click the Expression Builder icon to enter an expression. For more information, see Section 4.10, "Working with Expression Builder".
If the global is a constant, then select the Constant checkbox. When selected, this option specifies that the global is a constant value. For more information, see Section 2.3.3, "What You Need to Know About the Final and Constant Options".
If the global is a nonfinal, then deselect the Final checkbox. When unselected, this option specifies that the global is modifiable, for instance, in an assign action.
You can use Rules Designer to edit globals.
In Rules Designer, select the Globals navigation tab.
Double-click the globals icon in a row in the Globals table. When you double-click the globals icon in a row this displays the Edit Global - Global Name window as shown in Figure 2-9. In this window you can edit a global and change field values, including the Final field and the Constant field (the Constant field is only shown when you double-click a global to display the Edit Global dialog.
Note the following when you use globals:
When you deselect Final, this specifies that the global is modifiable, for instance, in an assign action.
When you select Final, this specifies that you can use the globals in a test in a rule (nonfinal globals cannot be used in a test in a rule).
When you select Final, this specifies that the global is initialized one time at runtime and cannot be changed.
When you select the Constant option in the Edit Global dialog, this specifies the global is a constant. In Oracle Business Rules a constant is a string or numeric literal, a final global whose value is a constant, or a simple expression involving constants and
Selecting the Constant option for a global has three effects:
You do not have to surround string literals with double quotes.
Only constants appear in the expression value choice list.
The expression value must be a constant to be valid.
Selecting the Constant option is optional. Note that bucket values, bucket range endpoints, and ruleset filter values are always constant.
The data model includes decision functions. For information on working with decision functions, see Section 6.1, "Introduction to Decision Functions".
Oracle Business Rules provides functions to hide complexity when you create rules. Oracle Business Rules lets you use built-in or user-defined functions in rule and Decision Table conditions and actions.
In Oracle Business Rules you define a function in a manner similar to a Java method, but an Oracle Business Rules function does not belong to a class. You can use Oracle Business Rules functions to extend a Java application object model so that users can perform operations in rules without modifying the original Java application code.
You can use an Oracle Business Rules function in a condition or in an action associated with a rule or a Decision Table.
You can also use an Oracle Business Rules function definition to share the same or a similar expression among several rules, and to return results to the application.
An Oracle Business Rules function includes the following:
Name: The Oracle Business Rules function name.
Return Type: A return type for the Oracle Business Rules function, or void if there is no return value.
Bucketset: The bucketset to associate with the Oracle Business Rules function.
Arguments: The function arguments. Each function argument includes a name and a type.
Function Body: The function body includes predefined actions. Using predefined actions Rules Designer assures that an Oracle Business Rules function is well formed and can be validated.
You can also use functions to test rules from within Rules Designer. For more information, see Section 8.1.5, "How to Test a Decision Function Using an Oracle Business Rules Function".
In Rules Designer, select the Functions navigation tab.
Select the Create... icon.
Enter the function name in the Name field, or use the default name.
Select the return type from the Return Type list. For example, select
Optionally, select a bucketset to associate with the function return type from the list in the Bucketset field.
Optionally, in the Description field enter a description.
In the Arguments table, click Add to add one or more arguments for the function.
For each argument in the Type field, select the type from the list.
For each argument in the Bucketset field, to limit the argument values as specified by a bucketset constraint, select a bucketset from the list.
In the Body area, enter actions and arguments for the function body. You can add any required action ranging from
modify to even conditional actions such as
(advanced). For example, see Figure 2-10.