ヘッダーをスキップ

Oracle Business Rules ユーザーズ・ガイド
10g(10.1.3.1.0)

B31866-02
目次
目次
索引
索引

戻る 次へ

D Oracle Business Rulesのトラブルシューティング

この付録では、Oracle Business Rulesの使用時に発生する問題の回避方法と解決方法について説明します。内容は次のとおりです。

D.1 Rule Authorでアクセスできないパブリック・ファクト変数

パブリック・ファクト変数は、Rule Authorではアクセスできません。たとえば、次のクラスの変数は、Oracle Business Rules RL Languageではアクセスできますが、Rule Authorではアクセスできません。

public class Test {
   public int i = 0;
   public String s = "string";
}

Testタイプのファクトの場合、Rule Authorでアクセスできる変数はありません。これらの変数にアクセスするためには、次のようなメソッドを追加する必要があります。

public void setI(int i) { this.i = i; }
public int getI() { return i; }
public setB(boolean b) { this.b = b; }
public boolean isB() { return b; }

変数iは、setI(int i)およびgetI()の正常な動作には不要であることに注意してください。詳細は、Sun社のJava Bean仕様を参照してください。

D.2 RL関数で使用できないグローバル変数

SDK(Rule Authorなど)から生成されたRLの場合、RL関数ではグローバル変数を直接参照できません。

この問題を回避するには、RL関数がグローバル変数にアクセスする必要がある場合、グローバル変数をパラメータとしてRL関数に渡す必要があります。パラメータ名によって、RL関数本体内のグローバル変数にアクセスできます。

D.3 JDK 1.4.2クラスのインポート

JDK 1.4.2を使用してRule Authorを実行する場合は、JDK 1.5を使用してコンパイルしたJavaクラスが適切にインポートされないことに注意してください。JDK 1.5を使用してコンパイルしたJavaクラスを、JDK 1.4.2を使用してRule Authorにインポートすると、次のようなエラー・メッセージが表示されます。

操作を実行できません。''RUL-01527: loadClassに対する例外を受け取りました。RUL-01016: Javaクラス
example7.Example7をロードできません。このクラスとすべての依存クラスがクラスパスまたはユーザー指定パスに
あることを確認してください。根本的原因: example7/Example7 (Unsupported major.minor version 49.0) ''

この問題を回避するには、JDK 1.5を使用してRule Authorを実行するか、そのクラスをJDK 1.4.2を使用して再コンパイルします。

D.4 Firefox上のポップアップ・ウィンドウの管理

FirefoxブラウザでRule Authorを実行している場合は、多くのポップアップ・ウィンドウを閉じるために、「OK」「取消」または「適用」ボタンを使用するかわりに、ウィンドウの上部隅にある「X」ボタンを使用すると、問題が発生する場合があります。

この問題を回避する簡単な方法は、ウィンドウ・コントロールを使用してポップアップ・ウィンドウを閉じるかわりに、「OK」「取消」または「適用」ボタンを使用することです。また、dom.popup_maximumパラメータの値を変更すると、より多数のポップアップ・ウィンドウを使用できます。手順は次のとおりです。

  1. URLのabout:configを入力し、dom.popup_maximumパラメータを検索します。

  2. 値を10000以上に設定します。

D.5 メソッドでの文字列データ型の使用

組込みデータ型のStringには、メソッドが含まれていません。したがって、xが文字列の場合、x.substring(1)は、拡張式では無効となります。

この問題を回避する手順は、次のとおりです。

  1. java.lang.Stringを、Javaファクト・タイプとしてデータ・モデルにインポートします。

  2. このファクト・タイプの別名を指定します。デフォルトの別名は、java_lang_Stringです。

  3. データ・モデルにRLファクト・タイプまたは変数を定義する場合は、Stringのかわりにこの新規のファクト・タイプを使用します。

D.6 データ・モデル内のクラス順序と階層の保持

Rule Authorで使用するクラスおよびインタフェースは、次のルールに従う必要があります。

  1. クラスまたはインタフェースとそのスーパークラスを使用している場合は、最初にスーパークラスを宣言する必要があります。宣言しない場合は、生成されたRLプログラムによって、次のように例外がスローされます。

    "FactClassException: fact class for 'pkg.Parent' should be declared earlier in rule session".
    
    
  2. クラスまたはインタフェースを使用している場合、宣言できるのは、そのスーパークラスまたは実装されたインタフェースの1つのみです。複数のインタフェースを宣言すると、生成されたRL Languageプログラムによって、次のような例外がスローされます。

    MultipleInheritanceException: fact class 'pkg.Child' cannot extend both 'pkg.ParentInterface' and 'pkg.ParentClass' 
    
    

この問題を回避する手順は、次のとおりです。

  1. ルールセットで使用するデータ・モデルにクラスの階層とインタフェースを指定します。

  2. 階層内のクラスまたはインタフェースごとに、「XPathアサーションのサポート」ボックスを選択します。この操作によって、データ・モデルRLの一部として、ファクト・クラス文が適切な順序で生成されます。

D.7 Rule Authorから生成されたRLの検証およびチェック

Rule Authorから生成されたRLを検証するためには、データ・モデル内のJavaクラスが、OC4Jクラスパスに存在することを確認してください。同様に、XMLスキーマを使用する場合は、生成されたJAXBクラスがクラスパスに存在する必要があります。OC4Jクラスパスの設定の詳細は、3.11項「テスト・ルールセットの使用」を参照してください。

D.8 Javaパッケージ名の一部としてのRL予約語の使用

RL Languageの予約語(mypkg.rule.comruleという語など)がJavaパッケージ名の一部である場合は、無効なRL Languageが生成されます。RL Languageの予約語をJavaパッケージ名で使用すると、次のようなエラー・メッセージが表示されます。

Oracle RL 1.0: syntax error PareseException: encountered 'rule' when expecting 
one of: <XML_IDENTIFIER> ...<IDENTIFIER> ... "*" at line 11 column 19 in main

この問題に対する回避方法はありません。Javaパッケージ名にはRL Languageの予約語を使用しないでください。

D.9 非表示のgetterメソッドとsetterメソッド

Rule Authorでは、Java Beanプロパティをサポートしているメソッドが選択リストに表示されません。表示されるのは、Beanプロパティのみです。たとえば、Yという名前のプロパティを持つJava Beanには、少なくともgetterメソッド(getY())が設定されている必要があり、setterメソッド(setY(y-type-parm))も設定されている場合があります。Javaファクト・タイプを表示すると、すべてのプロパティとメソッド(プロパティを構成するgetterとsetterを含む)が表示されます。選択リストに表示されるのは、Javaクラスのプロパティ(getterメソッドとsetterメソッド以外)のみです。プロパティ表示の制御を試みる場合は、プロパティの表示可能性フラグを使用することをお薦めします。getterメソッドまたはsetterメソッドを非表示としてマーク付けすると、プロパティを選択リストから削除できなくなります。

現在、この問題に対する回避方法はありません。

D.10 実行時にアサートされないXMLファクト

XMLスキーマで生成したクラスの「XMLファクト」ページには、「XPathアサーションのサポート」ボックスが表示されます。デフォルトでは、このボックスが選択されています。このボックスの選択を解除して変更内容を保存すると、XMLファクトに、XMLスタイル・アサーションの非サポートのマークが付けられます。これにより、このタイプのインスタンスとその子は、XML文書のassertXPathへのコールによってアサートされません。

この問題に対する回避方法はありません。すべてのXMLファクト・タイプが、「XPathアサーションのサポート」ボックスで選択されていることを確認してください。

D.11 Rule Authorの使用時の言語の変更

Rule Authorの表示言語を変更するには、ログアウトし、言語を変更してから、Rule Authorに再度ログインする必要があります。

ログアウトしない場合、java.lang.NullPointerExceptionエラーが表示される場合があります。

言語の変更に必要な手順は次のとおりです。

  1. Rule Authorからログアウトします。

  2. ブラウザで言語を変更します。

  3. Rule Authorに再度ログインします。

D.12 Microsoft Windowsでルールセットの編集と実行を同時に行う場合にファイル・エラーが発生する理由

Microsoft Windowsオペレーティング・システムでは、あるアプリケーションで使用されているファイルは、別のアプリケーションで使用できません。これは、アプリケーションがローカル・ファイル・リポジトリから読み取ろうとしているときに、Rule Authorが同じリポジトリに書き込もうとすると、エラーが発生する場合があることを意味します。関係する時間枠が小さいため、このエラーはめったに発生しません。

このタイプの障害のシグネチャは次のようになります。

oracle.rules.sdk.store.StoreException: Unable to rename
 '<your-repository-file-name>' so that it can be replaced.
at oracle.rules.sdk.store.jar.JarStore.writeJar(JarStore.java:752)
at oracle.rules.sdk.store.jar.JarStore.flush(JarStore.java:211)
at oracle.rules.sdk.repository.impl.RuleRepositoryImpl._flushChanges(RuleRepositoryImpl.java:381)
at oracle.rules.sdk.repository.impl.RuleRepositoryImpl._save(RuleRepositoryImpl.java:367)
at oracle.rules.sdk.repository.impl.RuleRepositoryImpl.save(RuleRepositoryImpl.java:265)
at oracle.tip.tools.ide.rules.ide.jdeveloper.JDevRulesProject.saveDictionary(JDevRulesProject.java:83)

これは、別のルールベース・アプリケーションがリポジトリの更新を試みると同時にリポジトリを読み取ることが原因で発生することがあります。操作は再試行できます。このエラーが解決しない場合は、他のアプリケーションによってリポジトリが開いたままになります。

この問題を回避するには、単に操作を再試行します。

D.13 上位メソッドをサブクラスから表示できない理由

スーパークラスのプロパティは適切な選択リストに表示されますが、上位クラスのメソッドは表示されません。

この問題に対する回避方法はありません。

D.14 XMLスキーマを追加すると、エラーRUL-01627が発生します。

スキーマを追加しようとすると、Rule Authorによって次のエラーがレポートされる場合があります。

Cannot perform operation. 'RUL-01627 
The schema X has been imported.
Please delete it if you want to reimport the same schema

スキーマを追加したときにスキーマ・パス・ボックスにそのスキーマが表示されないため、リストが間違っているか、エラーが間違っていると思われます。この問題に対する回避方法は、「XMLファクト」ページをリロードしてから、スキーマを再度追加することです。

D.15 クライアントとサーバーが異なるロケールを使用している選択リストによる無効なRL Languageの生成

「何も選択されていません」を示す選択リスト・エントリは変換されます。変換後の値は、RuleDictionaryのロケール・セットによって制御されます。これによってRules SDKで間違った動作を引き起こす可能性のある使用事例には次の2つがあります。

この問題を回避する手順は、次のとおりです。

クライアントおよびサーバーが異なるロケールを使用しているか、サーバーが英語ロケールでない環境でアプリケーションが実行されている場合、そのアプリケーションは、リストが表示されている場合で、すべてのリストを設定する必要がある場合に、RuleDictionary setLocaleを使用して、ロケールをクライアントのロケールに設定する必要があります。たとえば、Expression Formプロパティがアプリケーションによって明示的に設定されていない場合に、この問題が発生する可能性があります。

D.16 継承されたクラスの使用時に生成される無効なRL Language

場合によっては、ルールセットに対して無効なRL Languageが生成されます。このコードを実行しようとすると、次のエラーがレポートされます。

A syntax error is found.
Error:fact class should be declared earlier at line X column Y in rulesetZ

このエラーは、継承関係を持つ2つのJavaクラスがルールセットで使用され、子クラスが親クラスの前に使用される場合に発生します。このような使用は、ルール条件、assertretractまたはassertXPathで発生する可能性があります。サブクラスまたはインタフェースがこれらのコンテキストのいずれかでスーパークラスより前に参照された場合、これらのコンテキストのいずれかでスーパークラスを参照すると、RL Languageの解析時にFactClassExceptionが発生します。

関係する各Javaクラスのsupports xpath属性がデータ・モデルでfalse(デフォルト)に設定されている場合は、この問題を解決するために、Rule Authorは正しいRL Language、fact class文を生成しません。

この問題を回避するには、関係する各Javaクラスのsupports xpath属性をデータ・モデルでtrueに設定する必要があります。 Rule Authorでこれを行うには、Javaクラスを表示するときにチェック・ボックスを使用します。一部のクラスでは、この回避方法によって正しいRL Languageが生成されません。これは、fact class文が適切な順序で生成されないためです。この場合、回避方法はありません。

RL Languageでは、一部の継承階層、特に多重継承を必要とする継承階層は許可されません。たとえば、Interface2Interface1を拡張したもので、Class1が両方のインタフェースを直接実装する場合は、単一継承ツリーを判別できません。Class1Interface2のみを実装する場合は、単一継承ツリーを判別でき、クラスをRL Languageで使用できます。

関連項目:

「データ・モデル内のJavaオブジェクトの表示」 


戻る 次へ
Oracle
Copyright © 2005, 2006, Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引