4 コマンドライン・インタフェースの使用
ルールセットをSystem.in
から読み込み、関数println
、watch
およびshow
からの出力をSystem.out
に書き込むRLコマンドラインの概要を取得します。
4.1 コマンドライン・インタフェースの開始と使用
次のコマンドは、プロンプトRL>
を使用して、単純なコマンドライン・インタフェースを起動します。
この例ではJava Beanが含まれていません。
java -jar SOA_ORACLE_HOME/soa/modules/oracle.rules_11.1.1/rl.jar -p "RL> "
ここで、SOA_ORACLE_HOMEは、SOAモジュールがインストールされる場所です(例: c:/Oracle/Middleware
)。-p
オプションはプロンプトを指定します。
次に、このBeanにアクセスするためのRL Languageコマンドラインの開始方法を示します。
java -classpath SOA_ORACLE_HOME/soa/modules/oracle.rules_11.1.1/rl.jar;BeanPath oracle.rules.rl.session.CommandLine -p "RL> "
BeanPathは提供されているJava Beanクラスへのクラスパス・コンポーネントです。
このコマンドライン・インタフェースを終了するには、コマンド・プロンプトで特殊なアクションexit;
を使用します。exit;
アクションをルールセットに含めることはできません。かわりに、任意のアクションでSystem.exit(
int)
メソッドを起動して終了できます。
RLコマンドライン・インタフェースは、入力を行単位で蓄積し、入力ストリームに次のいずれかが含まれるとその入力を解析します。
-
完全な名前付きルールセットが含まれる場合
-
名前なしルールセット内の、1つ以上の完全な
import
、include
、ruleset
、definition
アクション・コマンドが含まれる場合。
注意:
if
とelse
、try
、catch
とfinally
アクションでは、終了場所を先に確認する必要があります。else
句のないif
またはfinally
句のないtry
をRLコマンドラインで実行するには、セミコロン終了文字を追加する必要があります。
これは、include
またはRuleSession APIを使用してRLを実行する場合は必要ありません。
次のコード例では、RLコマンドライン入力処理のサンプルを示します。
RL> int i = 1; RL> if (i > 0) {println("i positive");} // nothing happens - waiting for possible "else" ; i positive RL>
入力は、行の最後で完了する必要があります。たとえば、行の途中でアクションが終了している場合、そのアクションは、次のアクションが行の最後で完了するまで解析されません。
例4-1 コマンドライン入力処理の例(行の終了まで待機する例)
RL> println("delayed" ); println("hello" ); println("world"); delayed hello world RL>
4.1.1 コマンドライン入力処理の使用
コマンドライン入力処理に関する注意
-
コマンドラインでは入力を複数のブロックに分割してから、各ブロックをインタプリタに渡します。閉じカッコまたはセミコロンを入力しない場合、コマンドラインでは、ブロック全体を解析する前に閉じカッコまたはセミコロンの入力を待機するため、エラーは発生しません。
-
コマンドライン・インタプリタを対話形式、つまり-
i
オプションを設定して使用すると、入力が、行番号を付ける目的で、新規行で終了する小規模なルールセットに分解されます。エラーは、ルールセット内の番号を使用してレポートされます。たとえば、次の行で構成される入力があるとします。
int i = 0; i = 1; // this is a ruleset i = "i"; // this is another ruleset
この例の場合、コマンドラインでは次のエラーがレポートされます。
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
このような動作を回避するには、ルールセットの入力を明示的に囲みます。次に例を示します。
ruleset main { int i = 0; i = 1; i = "i"; }
これで、エラーは3行目で発生します。あるいは、includeを使用して入力ファイルをインクルードできます。
4.2 RLコマンドラインのオプション
次の表は、RLコマンドラインのオプションについて説明しています。
表4-1 RLコマンドラインのオプション
フラグ | 説明 |
---|---|
–i |
ルールセットを、デフォルトの 次に例を示します。 -i myInput.rl 注意: コマンドラインでは入力を複数のブロックに分割してから、各ブロックをインタプリタに渡します。ファイル |
–c |
次の引数を最初のRLコマンドとして実行し、入力の読込みを開始します。このオプションは、デバッグ用の設定と関数のファイルを読み込むのに便利です。 次に例を示します。 -c "include file:debugSettings.rl;" コマンドを実行した後に入力から読み込まない場合は、コマンドの後にexit;を追加します。 次に例を示します。 -c "include file:script.rl; exit;" |
–p |
次の引数をプロンプト文字列として設定します。 次に例を示します。 -p "RL> " |
-o |
次に例を示します。 –o debug.log |
–v |
バージョン情報を出力します。 |