Oracle® Fusion Middlewareリリース・ノート 11gリリース1(11.1.1) for Linux x86 B55924-02 |
|
戻る |
次へ |
この章では、Oracle Business Rulesに関連する問題について説明します。内容は次のとおりです。
この項では、一般的な問題および回避方法について説明します。内容は次のとおりです。
Oracle Fusion Middleware 11gリリース1(11.1.1)には、他のすべての辞書によってリンクされているビルトイン辞書という概念があります。ビルトイン辞書には、Object
、String
、BigInteger
、BigDecimal
、Calendar
、XMLGregorianCalendar
、List
、JAXBElement
などの一般的なJavaクラスに対するファクト・タイプが含まれています。
リリース10.1.3.xの辞書をOracle Fusion Middleware 11gリリース1(11.1.1)へ移行する場合、制限があります。Oracle Business Rulesリリース10.1.3.xでは、デフォルトでインポートされるObject
を含むすべてのクラスを各辞書にインポートする必要がありました。これによってユーザーは一般的なJavaクラス・ファクト・タイプをインポートし、プロパティ、メソッドおよびフィールドの別名を変更することができました。Oracle Fusion Middleware 11gリリース1(11.1.1)では、そのようなクラスに対してユーザーはカスタムの別名を指定できません。また、これらのファクト・タイプは、Oracle Fusion Middleware 11gリリース1(11.1.1)へ移行するリリース10.1.3.xの辞書から移行されません。したがって、別名が、ビルトイン辞書に含まれている一般的なJavaクラスに適用されている場合、Oracle Fusion Middleware 11gリリース1(11.1.1)ではこれらの別名は破棄され、ルールに使用できません。
回避方法:
この問題の回避方法はありません。
Oracle Business Rulesリリース10.1.3.xからの辞書の移行時、JavaクラスはOracle Fusion Middleware 11gリリース1(11.1.1)の新規辞書にインポートされ、別名と可視性の設定が適用されます。移行の不具合で、別名と可視性の設定を適用する一部のメソッドが識別されません。
回避方法:
このような場合、Oracle Business Rulesリリース10.1.3.xの辞書に適用されている別名と可視性の設定を、移行先のOracle Fusion Middleware 11gリリース1(11.1.1)の辞書に手動で適用する必要があります。
制限付き単純型
Oracle Business Rulesリリース10.1.3.xでは、JAXB 1.0が使用されます。JAXB 1.0では、生成されたJavaクラスで制限付き単純型に対する特別なサポートはなく、制限付き単純型は単純型と同じ型のプロパティにマップされます。Oracle Fusion Middleware 11gリリース1(11.1.1)のOracle Business Rulesでは、JAXB 2.0が使用されます。JAXB 2.0では、文字列型の制限付き単純型はJavaのenum
値に変換されます。この相違のため、リリース10.1.3.xの辞書の移行後、以前にRAW文字列を使用して制限付きの値を表していた辞書内の箇所は、Java enum値を使用するよう手動で更新する必要があります。
移行された辞書内のxsd:dateTime
Oracle Business Rulesリリース10.1.3.xでは、JAXB 1.0が使用されます。JAXB 1.0では、xsd:dateTime
型はjava.util.Calendar
にマップされます。Oracle Fusion Middleware 11gリリース1(11.1.1)のOracle Business Rulesでは、JAXB 2.0が使用されます。JAXB 2.0では、xsd:dateTime
型は、xsd:dateTime
要素の値をより正確に含むXMLGregorianCalendar
にマップされます。つまり、Calendar
はメソッドcompareTo
を実装し、XMLGregorianCalendar
はメソッドcompare
を実装するため、リリース10.1.3.xから移行された辞書では、プロパティ間の比較は適切に機能しません。比較を変更するには、辞書内を手動で変更する必要があります。また、Oracle Fusion Middleware 11gリリース1(11.1.1)では、Duration
を使用して最も一般的な日付と時間の形式を比較できます。移行された辞書でこの変更を行うには、インポートされたファクト・タイプを使用するデータ・モデルとルールに手動で変更を行う必要があります。
移行された辞書内の無効な式
Oracle Fusion Middleware 11gリリース1(11.1.1)のOracle Business Rulesでは、詳細な型チェックがサポートされ、リリース10.1.3.xから移行された式が無効になる場合があります。たとえば、Integer
のインスタンスを参照してintValue()
メソッドをコールする場合、Integer
がデータ・モデルにインポートされていないと、検証警告が出る場合があります。この問題の解決策は、Integer
をデータ・モデルにインポートすることです。
RL関数を使用するコレクションでの索引ベースまたはイテレータ・ベースの反復
リリース10.1.3.xでは、RAW RLを使用するコレクションに対して関数およびRLアクションで索引ベースまたはイテレータ・ベースの反復を使用する必要がありました。Oracle Fusion Middleware 11gリリース1(11.1.1)では、事前定義のアクション・タイプ"for"で各反復ループ構文のforを実装し、これらの古い反復構文の大半を置き換えることができます。
新規変数インスタンスを返す関数のコール
リリース10.1.3.xでは、変数の初期化式でコンストラクタを起動することはできませんでした。Oracle Fusion Middleware 11gリリース1(11.1.1)では、変数はグローバルと呼ばれます。リリース10.1.3.xのこの制限のため、リリース10.1.3.xの一部の辞書には、式を初期化し、コンストラクタを起動して新規インスタンスを返す関数コールがあります。Oracle Fusion Middleware 11gリリース1(11.1.1)では、初期化式にnew
演算子を使用できます。
リリース10.1.3.xでは、ファクト・タイプがセッターまたはゲッターのいずれかを持つ場合、ファクト・タイプに対するプロパティが作成されました。Oracle Fusion Middleware 11gリリース1(11.1.1)では、プロパティにセッターとゲッターの両方がある場合にのみプロパティが作成されます。
Oracle Fusion Middleware 11gリリース1(11.1.1)では、辞書内のJavaおよびXMLファクト・タイプは、可視ファクト・タイプによって定められた単一継承タイプを持つという制限があります。この制限は、インタフェースを含む多重継承チェーンによってエンジンでランタイム例外が発生することを防ぎます。ユーザーは、継承とみなさないクラスを不可視としてマークすることで、単一継承チェーンを指定する必要があります。検証時に多重継承チェーンが検出されると、次の警告が返されます。
RUL-05003: The visible fact type "Foo" should only inherit from one visible fact type, but inherits from visible fact types "Bar" and "Baz".
この場合、Bar
またはBaz
を不可視としてマークすると、この警告が解決されます。
一部のクラスのインスタンスをアサートすると、不適切な動作をするメソッドのために例外がスローされることがあります。ファクトをアサートすると、そのファクトはルール・エンジン内でシャドウ化されます。このシャドウ化により、ルール・エンジンでは、(すべての参照可能プロパティで)「参照可能」チェック・ボックスが選択されているすべてのプロパティのアクセッサを起動する必要があります。起動時にアクセッサによって例外がスローされた場合、この例外はルール・エンジンの外部に伝播されます。
この制限の具体的な例は、java.sql.Date
クラスです。このクラスには、非推奨のメソッドがいくつか含まれます(getYears
やsetYears
など)。これらのメソッドは、起動されると常にIllegalArgumentException
をスローします。Oracle Business Rulesでは、Date
クラスのインスタンスがアサートされると、例外がスローされます。この例外は、ファクト・インスタンスがルール・エンジン内でシャドウ化される場合に、getYears
メソッドがコールされるために発生します。
Oracle Business Rulesを使用する場合、Date
クラスのアサートは避ける必要がありますが、このアサートについてはユーザーの制御が及ばない可能性があります。たとえば、大規模なオブジェクト・グラフにDate
インスタンスのリストが含まれており、そのオブジェクト・グラフのアサート・ツリーを使用すると、Date
クラスがアサートされます。
回避方法:
不適切な動作をするメソッドを含むすべてのプロパティを非表示としてマークする必要があります。これを行うには、例外を発生させるプロパティの「参照可能」チェック・ボックスを選択解除します。たとえば、java.sql.Date
クラスの場合、回避方法として、データ・モデルのjava.sql.Date
ファクト・タイプの「年」、「時間」および「分」プロパティに対応する「参照可能」チェック・ボックスを選択解除します。
ルール・リポジトリ・パスを構成する場合、パスの長さは70文字までに制限することをお薦めします。この長さが70文字を超えると、SOAコンポーザでDT/RTを変更した後に問題が発生します。
そのため、ベスト・プラクティスとして、ルールの設計後にリポジトリ・パスの長さが70文字未満であることを確認してください。サンプルのrule.decsファイルから取得された次のパスは、実行時のDT/RT変更の後に失敗します。
<path>OrderBookingComposite/oracle/rules/com/example/globalcompany/orderbooking/approvalrule/RequiresApprovalRule.rules</path>
ルール・デザイナおよびOracle SOA Composerで使用されるOracle Business Rules式では、次の機能がサポートされます。
式で新規RL構文がサポートされます。次に例を示します。
(assign new) Driver d = new Driver(name: "Tom", age: 45)
式でinstanceof
キーワードがサポートされます。次に例を示します。
if (vehicle instanceof Car) { (assign new) Car car = (Car)vehicle; } else if (vehicle instanceof Truck) { (assign new) Truck truck = (Truck)vehicle; }
式でリスト・タイプの組込み関数がサポートされます。次に例を示します。
RL.list.intersect RL.list.reverse RL.list.insertBefore RL.list.concatenate RL.list.union RL.list.append RL.list.except RL.list.distinctValues RL.list.remove RL.list.indexOf RL.list.create
詳細は、Oracle Fusion Middleware Oracle Business RulesのJava APIリファレンスのJavadocに含まれるoracle.rules.rl.extensions.RL
の説明を参照してください。
式では、可変数の引数がサポートされます。Java言語のように、関数またはメソッドに対する最後のパラメータが配列の場合、式ではその関数またはメソッドを可変数の引数でコールできます。たとえば、次のように式で組込み関数のRL.list.create
を使用するとします。
RL.list.create(Object[] items) returns List
組込みのRL.list.create()
は、次のようにコールできます。
(assign new) List myList = RL.list.create(1, 2.0, "three")
この例で、myList
の結果には、Integer、DoubleおよびStringの3つのオブジェクトが含まれます。
AS11 Oracle Business RulesコンポーネントをAS11 PS2にアップグレードした後、アップグレード前に作成したコンポジット・インスタンスの監査証跡に基本情報のみが表示されます。デシジョン・トレースには、起動されたデシジョン関数の名前とタイムスタンプのみが含まれます。
回避方法:
他のトレース詳細(入力および出力ファクトの値など)を表示するには、BPELProcess監査証跡を使用します。
SOAコンポーザでは、ルール・デザイナで使用可能な機能のサブセットのみが提供されます。ルール・デザイナの一部の機能およびタブは、現在SOAコンポーザで使用できません。たとえば、SOAコンポーザでは、「関数」タブの機能や「リンク」タブの機能が欠落しており、新規ルールセットを追加できません。
デシジョン表とともにSOAコンポーザを使用する場合、選択済セルの分割およびマージ操作は、機能しません。
この問題の回避方法はありません。
SOAコンポーザでは、どの数値書式もサポートされません。たとえば、英語(アメリカ)をブラウザ言語としてSOAコンポーザを使用するとします。値として、34533223.2345などの浮動小数点データを入力します。ここで、ブラウザ言語をフランス語に変更しても、値は34533223.2345と表示されたままです。フランス語では、値は34533223,2345と表示される必要があります。
回避方法:
ブラウザ言語とは関係なく、「,」などの数値セパレータなしで英語(アメリカ)での数値を入力する必要があります。
SOAコンポーザで、縮小された状態のルールの場合、検証パネルでエラーをダブルクリックしても、UIにはエラー・メッセージのウィンドウが表示されません。ただし、展開された状態のルールの場合、検証パネルのエラー・メッセージをダブルクリックすると、UIにエラー・メッセージのウィンドウが表示され、エラー領域がハイライト表示されます。
この問題の回避方法はありません。
SOAコンポーザのデシジョン表で、行を選択すると、「バケットセット・エディタ」、「条件ブラウザ」および「アクション・エディタ」ボタンがデシジョン表のツールバーに表示されます。
ただし、行と列を切り替えると、これらのボタンはすべて列ヘッダーに表示されます。
この問題の回避方法はありません。
この項では、構成に関する問題およびその回避方法について説明します。内容は次のとおりです。
Oracle Business Rulesデシジョン・コンポーネントのデプロイ時に、オープン・ファイルが多すぎるというエラーが表示された場合、状況に応じてファイル・ディスクリプタの制限を増やす必要があります。
オープン・ファイルが多すぎるという問題の原因は、JDK6の不具合にあります。これらの不具合は、使用されるJARファイルの数と、JDKまたはJREによるファイル・ディスクリプタの使用方法のいくつかの差異に応じて、実行時またはコンパイル時に発生します。
この問題を回避するには、ファイル・ディスクリプタの制限を増やします。プロセス単位およびユーザー単位のファイル・ディスクリプタの制限が、デフォルトで値1024に事前構成されている可能性があります。この制限を4096以上に増やせば、通常はその新しい値でこの問題を解決できます。
これらの問題は、次のJDK6の不具合と関連している可能性があります。
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6533291
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6485027
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6400872
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6456960
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6206485
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6446657
次のブログ・エントリに、この問題の説明があります。
http://coldfused.blogspot.com/2007/02/mystery-of-too-many-open-files.html
Linuxシステムでプロセス単位およびユーザー単位のファイル・ディスクリプタの制限を増やすには、次の手順を実行します。
limit
(csh)またはulimit
(bash)コマンドを使用して、ディスクリプタの値を確認します。
ディスクリプタの値が1024の場合、値が小さすぎる可能性があります。sudo
コマンドを使用して、rootユーザーとして/etc/security/limits.conf
を編集し、ディスクリプタの制限を増やします。
構成を変更したら、更新後のより大きい値でマシンを再起動します。たとえば、4096
という値の設定を使用するには、次のようにします。
例21-1に、すべてのユーザーの制限を4096に増やすlimits.conf
ファイルの設定を示します。
例21-1 サンプルのlimits.confファイル
#<domain> <type> <item> <value> # #* soft core 0 #* hard rss 10000 #@student hard nproc 20 #@faculty soft nproc 20 #@faculty hard nproc 50 #ftp hard nproc 0 #@student - maxlogins 4 # End of file svrtech soft memlock 500000 svrtech hard memlock 500000 * soft nofile 4096 * hard nofile 4096