3
Using the Command-line Interface 3-1
3
Using the Command-line Interface
This chapter describes the RL command-line that reads rulesets from System.in and writes output from the functions println, watch, and, show to System.out.
This chapter includes the following topics:
■
Section 3.1, Starting and Using the Command-Line Interface
■
Section 3.2, RL Command-Line Options
■
Section 3.3, RL Command-Line Built-in Commands
3.1 Starting and Using the Command-Line Interface
The following invocation provides a simple command-line interface, with the prompt, RL. Example without Java Beans:
java -jar SOA_ORACLE_HOMEsoamodulesoracle.rules_11.1.1rl.jar -p RL Where SOA_ORACLE_HOME is where SOA modules are installed for example,
c:OracleMiddleware. The –p option specifies the prompt. The following shows how an RL Language command-line can be started that can
access this Java bean: java -classpath SOA_ORACLE_HOMEsoamodulesoracle.rules_11.1.1rl.jar;BeanPath
oracle.rules.rl.session.CommandLine -p RL Where BeanPath is the classpath component to any supplied Java Bean classes.
To exit the command-line interface, use the special action exit; at the command prompt. The exit; action cannot be in an included ruleset. Alternatively, to exit you
can invoke the System.exitint method in any action.
The RL command-line interface accumulates input line by line, and interprets the input when the input stream includes either:
■
A complete named ruleset
■
One or more complete import, include, ruleset, definition, action commands within an unnamed ruleset.
3-2 Oracle Fusion Middleware Language Reference Guide for Oracle Business Rules
Example 3–1 Sample RL Command-Line Input Processing
RL int i = 1; RL if i 0 {printlni positive;}
nothing happens - waiting for possible else ;
i positive RL
Input must be complete at the end of a line. For example, if an action ends in the middle of a line, then that action is not interpreted until some following action is
complete at the end of a line.
Example 3–2 Sample Command-Line Input Processing - Waiting for End of Line
RL printlndelayed ; printlnhello
; printlnworld; delayed
hello world
RL
Notes for using command-line input processing:
1.
The command-line segments its input into blocks and then feeds each block to the interpreter. If you never type a closing brace or semicolon, no error is raised
because the command line waits for input before it does a full parse of the block
2.
The command-line interpreter, when used interactively or with the –i option, collapses the input, for line numbering purposes, into small rulesets ending at a
newline. Errors are reported with numbers within the ruleset.
For example, if the input consists of the following: int i = 0; i = 1; this is a ruleset
i = i; this is another ruleset For this example, command-line reports an error as follows:
Oracle Business Rules RL: type check error ConversionException: cannot convert from type java.lang.String to type int
at line 1 column 5 in main
To avoid this behavior, you can explicitly enclose the input in a ruleset. For example,
ruleset main { int i = 0; i = 1;
i = i; }
Note: The if,else and try, catch, and finally actions require
lookahead to determine where they end. In order to execute an if without an else clause, or a try without a finally clause at the RL
command-line, you should add a semicolon terminator.
This is not necessary if you execute RL using include, or using the RuleSession API.
Using the Command-line Interface 3-3
Now, the error is on line 3 or, you can include the input file using an include.
3.2 RL Command-Line Options