Oracle Business Rules ユーザーズ・ガイド 10g(10.1.3.1.0) B31866-02 |
|
この付録では、Oracle Business Rulesの使用時に発生する問題の回避方法と解決方法について説明します。内容は次のとおりです。
パブリック・ファクト変数は、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仕様を参照してください。
SDK(Rule Authorなど)から生成されたRLの場合、RL関数ではグローバル変数を直接参照できません。
この問題を回避するには、RL関数がグローバル変数にアクセスする必要がある場合、グローバル変数をパラメータとしてRL関数に渡す必要があります。パラメータ名によって、RL関数本体内のグローバル変数にアクセスできます。
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を使用して再コンパイルします。
FirefoxブラウザでRule Authorを実行している場合は、多くのポップアップ・ウィンドウを閉じるために、「OK」、「取消」または「適用」ボタンを使用するかわりに、ウィンドウの上部隅にある「X」ボタンを使用すると、問題が発生する場合があります。
この問題を回避する簡単な方法は、ウィンドウ・コントロールを使用してポップアップ・ウィンドウを閉じるかわりに、「OK」、「取消」または「適用」ボタンを使用することです。また、dom.popup_maximum
パラメータの値を変更すると、より多数のポップアップ・ウィンドウを使用できます。手順は次のとおりです。
組込みデータ型のString
には、メソッドが含まれていません。したがって、x
が文字列の場合、x.substring(1)
は、拡張式では無効となります。
この問題を回避する手順は、次のとおりです。
java.lang.String
を、Javaファクト・タイプとしてデータ・モデルにインポートします。
java_lang_String
です。
String
のかわりにこの新規のファクト・タイプを使用します。
Rule Authorで使用するクラスおよびインタフェースは、次のルールに従う必要があります。
"FactClassException: fact class for 'pkg.Parent' should be declared earlier in rule session".
MultipleInheritanceException: fact class 'pkg.Child' cannot extend both 'pkg.ParentInterface' and 'pkg.ParentClass'
この問題を回避する手順は、次のとおりです。
Rule Authorから生成されたRLを検証するためには、データ・モデル内のJavaクラスが、OC4Jクラスパスに存在することを確認してください。同様に、XMLスキーマを使用する場合は、生成されたJAXBクラスがクラスパスに存在する必要があります。OC4Jクラスパスの設定の詳細は、3.11項「テスト・ルールセットの使用」を参照してください。
RL Languageの予約語(mypkg.rule.com
のrule
という語など)が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の予約語を使用しないでください。
Rule Authorでは、Java Beanプロパティをサポートしているメソッドが選択リストに表示されません。表示されるのは、Beanプロパティのみです。たとえば、Yという名前のプロパティを持つJava Beanには、少なくともgetterメソッド(getY()
)が設定されている必要があり、setterメソッド(setY(y-type-parm)
)も設定されている場合があります。Javaファクト・タイプを表示すると、すべてのプロパティとメソッド(プロパティを構成するgetterとsetterを含む)が表示されます。選択リストに表示されるのは、Javaクラスのプロパティ(getterメソッドとsetterメソッド以外)のみです。プロパティ表示の制御を試みる場合は、プロパティの表示可能性フラグを使用することをお薦めします。getterメソッドまたはsetterメソッドを非表示としてマーク付けすると、プロパティを選択リストから削除できなくなります。
現在、この問題に対する回避方法はありません。
XMLスキーマで生成したクラスの「XMLファクト」ページには、「XPathアサーションのサポート」ボックスが表示されます。デフォルトでは、このボックスが選択されています。このボックスの選択を解除して変更内容を保存すると、XMLファクトに、XMLスタイル・アサーションの非サポートのマークが付けられます。これにより、このタイプのインスタンスとその子は、XML文書のassertXPathへのコールによってアサートされません。
この問題に対する回避方法はありません。すべてのXMLファクト・タイプが、「XPathアサーションのサポート」ボックスで選択されていることを確認してください。
Rule Authorの表示言語を変更するには、ログアウトし、言語を変更してから、Rule Authorに再度ログインする必要があります。
ログアウトしない場合、java.lang.NullPointerException
エラーが表示される場合があります。
言語の変更に必要な手順は次のとおりです。
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)
これは、別のルールベース・アプリケーションがリポジトリの更新を試みると同時にリポジトリを読み取ることが原因で発生することがあります。操作は再試行できます。このエラーが解決しない場合は、他のアプリケーションによってリポジトリが開いたままになります。
この問題を回避するには、単に操作を再試行します。
スーパークラスのプロパティは適切な選択リストに表示されますが、上位クラスのメソッドは表示されません。
この問題に対する回避方法はありません。
スキーマを追加しようとすると、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ファクト」ページをリロードしてから、スキーマを再度追加することです。
「何も選択されていません」を示す選択リスト・エントリは変換されます。変換後の値は、RuleDictionaryのロケール・セットによって制御されます。これによってRules SDKで間違った動作を引き起こす可能性のある使用事例には次の2つがあります。
RuleDicitonary
にはsetLocale
メソッドがあります。クライアント/サーバーの使用では、クライアントとサーバーが同じロケールを使用していない場合で、サーバーのロケールが英語でない場合、setLocaleを使用してクライアントのロケールを設定できないため、無効なRL Languageが生成されることがあります。
setX
(Xはリストのプロパティ名)を起動しない場合、Rules SDKは選択されていないエントリを正規形(英語)に正しく設定しません。この結果、(通常、値が欠落しているために)正しくコンパイルされないエントリが生成されます。
この問題を回避する手順は、次のとおりです。
クライアントおよびサーバーが異なるロケールを使用しているか、サーバーが英語ロケールでない環境でアプリケーションが実行されている場合、そのアプリケーションは、リストが表示されている場合で、すべてのリストを設定する必要がある場合に、RuleDictionary
setLocale
を使用して、ロケールをクライアントのロケールに設定する必要があります。たとえば、Expression Formプロパティがアプリケーションによって明示的に設定されていない場合に、この問題が発生する可能性があります。
場合によっては、ルールセットに対して無効なRL Languageが生成されます。このコードを実行しようとすると、次のエラーがレポートされます。
A syntax error is found. Error:fact class should be declared earlier at line X column Y in rulesetZ
このエラーは、継承関係を持つ2つのJavaクラスがルールセットで使用され、子クラスが親クラスの前に使用される場合に発生します。このような使用は、ルール条件、assert
、retract
または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では、一部の継承階層、特に多重継承を必要とする継承階層は許可されません。たとえば、Interface2
がInterface1
を拡張したもので、Class1
が両方のインタフェースを直接実装する場合は、単一継承ツリーを判別できません。Class1
がInterface2
のみを実装する場合は、単一継承ツリーを判別でき、クラスをRL Languageで使用できます。
|
![]() Copyright © 2005, 2006, Oracle Corporation. All Rights Reserved. |
|