| Oracle® Business Rules Language Reference 10g (10.1.3.1.0) Part Number B28964-01 |
|
|
View PDF |
This appendix includes descriptions of differences between the RL Language and Java languages.
RL does not include interfaces or methods.
RL global variables are similar to Java static class variables, but there is one instance for each rule session.
RL does not have a static keyword.
RL has rulesets instead of packages. Rulesets group definitions and actions.
Instances of RL and Java classes can be asserted as facts in working memory.
RL facts are not garbage collected; they must be explicitly retracted.
RL is interpreted. There is no compilation or class loading.The include statement can be used to read and interpret a ruleset at the given URL. Classes and functions must be defined before they are used.
RL classes may not contain constructors or methods, only data fields. The data fields behave like Java bean properties.
Java bean properties can be accessed as fields in RL.
The new operator can explicitly assign values to named properties, regardless of whether or not a constructor is defined. The fact operator can match values to named properties and retrieve, using the var keyword, values from named properties. A property is either a Java bean property, for Java objects, or a field, for RL objects.
RL arrays are limited to one dimension.
The if and while actions must be in a block, enclosed in curly braces ({}).
RL does not include a switch action, continue statement, break statement, or labeled statements for breaking out of nested loops.
An RL for loop cannot contain multiple comma separated initialization or update expressions.
RL does not support bitwise & and | operators.
RL supports function overloading and Java method overloading using first fit.
RL variables must be initialized when they are defined.
For RL and Java objects, == always invokes the object equals method. RL does not allow testing for object reference equality. For objects,!= does not test for inequality of object references, but rather is the negation of the equals methods.
Thus, the statement:
if (object1 != object2){}
Is equivalent to the statement:
if (! (object1.equals(object2)){}
Forward references to classes or functions is not allowed.