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 and data model elements. A data model can be contained in one or more dictionaries. All the data model elements referenced by the rulesets must be available in the dictionary either directly or through links.
A dictionary is stored in a
When you create a dictionary, you give it a name and a package, similar to a Java class. You can create data model elements and rulesets inside this dictionary, and you can also reference the data models and rulesets of other dictionaries by creating a dictionary link and specifying the name and package of the target dictionary. Each dictionary logically contains the built-in dictionary. This dictionary includes standard functions and types that all Oracle Business Rules applications need. You cannot modify the built-in dictionary.
In addition to the main dictionary, you can create one or more application-specific dictionaries, such as
PurchaseItems.rules. You can modify 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 section shows one of the ways to create a dictionary in a SOA project. You can create a dictionary for use in a SOA application.
A typical SOA composite design pattern provides each application with its own dictionary or dictionaries. This makes each application self-contained and it can be deployed independently. When different applications need access to the same parts of a common data model, you can use dictionary links to include dictionary of a target application in the dictionary of a source application. When you do this, application copies the dictionary of target application into the source application and retains the contents of the copies linked to the source. When you use the linked elements, they are shown as local contents.
You may also create a dictionary in the business tier, for use outside of a SOA application. For more information, see Section 9.2.5, "How to Create an Oracle Business Rules Dictionary in the Grades Project".
In the Application Navigator, select a SOA application and select or create a 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.
Use Rules Designer to create a rules dictionary for use in the business tier, outside of a 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, open 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 Browse Existing Dictionaries. 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 Project_rules1 that links to another dictionary, for example, Shared_rules you need to see changes made to either dictionaries in both. For example, you can modify the Shared_rules dictionary and see those modifications in Project_rules1 by updating the Project_rules1 dictionary, or by closing and reopening the 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.
The full names of the dictionaries, including the package and name, must be distinct. In addition, the dictionary aliases must be distinct.
The aliases of data model definitions of a particular kind, for example, function, Oracle RL class, or bucketset, must be unique within a dictionary.
A definition may be qualified by the alias of its immediately containing dictionary. Definitions in the top and built-in dictionaries do not have to be qualified. Definitions in other dictionaries must be qualified and this qualification is controlled by the prefix linked names property of the dictionary link.
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.
Decision function inputs are available as variables to the initial actions of the decision function. When the inputs are facts, the facts are asserted into working memory and rules must match the facts based on type and property values and not on decision function input name. For example, if you have inputs of same type, input1 and input2, rules distinguish these inputs based on type or property values and not on the different names they have.When the inputs are not visible facts, for example String or int, then a wrapper type named <decision function name> is created, and rules must match this type.
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.
You can localize the names, aliases and descriptions of rules resources. This enables better control of these resources in Workspace and SOA Composer. You can localize most of the resources like Buckets, Bucketsets, Globals, Rulesets, Rules and so on.
When you create these resources, you can add locale-specific information from the Translations tab. Each locale is stored in a separate resource bundle.
You should not manually edit the resource bundle to add or edit localized strings. You must edit the resource bundle using the Translation tab of the Rules Designer in JDeveloper or SOA Composer.
You can use the Rules Designer of JDeveloper to localize the resources of a business rule.
In Rules Designer, select the Translations tab.
Click the Create Resource Bundle icon.
Create Resource Resource Bundle screen appears.
Select the Locale from the list.
Each locale that you add appears as a column in the Resource Bundle Translations table. Each resource of the business rule appears as a row in this table. Each locale is stored as a separate resource bundle
Double click the cell of the table corresponding to the resource and locale and enter the localized text.