ヘッダーをスキップ
Oracle® Fusion Middlewareリリース・ノート
11gリリース1(11.1.1) for Linux x86
B55924-02
  ドキュメント・ライブラリへ
ドキュメント・ライブラリへ
製品リストへ
製品リストへ
目次
目次

戻る
戻る
 
次へ
次へ
 

21 Oracle Business Rules

この章では、Oracle Business Rulesに関連する問題について説明します。内容は次のとおりです。

21.1 一般的な問題および回避方法

この項では、一般的な問題および回避方法について説明します。内容は次のとおりです。

21.1.1 別名が適用されている一般的なJavaクラスの移行

Oracle Fusion Middleware 11gリリース1(11.1.1)には、他のすべての辞書によってリンクされているビルトイン辞書という概念があります。ビルトイン辞書には、ObjectStringBigIntegerBigDecimalCalendarXMLGregorianCalendarListJAXBElementなどの一般的な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)ではこれらの別名は破棄され、ルールに使用できません。

回避方法:

この問題の回避方法はありません。

21.1.2 別名と可視性の設定が移行先の辞書に適用されない場合がある

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)の辞書に手動で適用する必要があります。

21.1.3 移行されたリリース10.1.3.xの辞書に必要な手動更新

制限付き単純型

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演算子を使用できます。

21.1.4 マイグレータが特定のJavaファクト・タイプ・プロパティを移行しない

リリース10.1.3.xでは、ファクト・タイプがセッターまたはゲッターのいずれかを持つ場合、ファクト・タイプに対するプロパティが作成されました。Oracle Fusion Middleware 11gリリース1(11.1.1)では、プロパティにセッターとゲッターの両方がある場合にのみプロパティが作成されます。

21.1.5 マイグレータがRUL-05003警告を返す場合がある

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を不可視としてマークすると、この警告が解決されます。

21.1.6 不適切な動作をするメソッドが含まれるクラスの使用時に特定のプロパティを非表示にする

一部のクラスのインスタンスをアサートすると、不適切な動作をするメソッドのために例外がスローされることがあります。ファクトをアサートすると、そのファクトはルール・エンジン内でシャドウ化されます。このシャドウ化により、ルール・エンジンでは、(すべての参照可能プロパティで)「参照可能」チェック・ボックスが選択されているすべてのプロパティのアクセッサを起動する必要があります。起動時にアクセッサによって例外がスローされた場合、この例外はルール・エンジンの外部に伝播されます。

この制限の具体的な例は、java.sql.Dateクラスです。このクラスには、非推奨のメソッドがいくつか含まれます(getYearssetYearsなど)。これらのメソッドは、起動されると常にIllegalArgumentExceptionをスローします。Oracle Business Rulesでは、Dateクラスのインスタンスがアサートされると、例外がスローされます。この例外は、ファクト・インスタンスがルール・エンジン内でシャドウ化される場合に、getYearsメソッドがコールされるために発生します。

Oracle Business Rulesを使用する場合、Dateクラスのアサートは避ける必要がありますが、このアサートについてはユーザーの制御が及ばない可能性があります。たとえば、大規模なオブジェクト・グラフにDateインスタンスのリストが含まれており、そのオブジェクト・グラフのアサート・ツリーを使用すると、Dateクラスがアサートされます。

回避方法:

不適切な動作をするメソッドを含むすべてのプロパティを非表示としてマークする必要があります。これを行うには、例外を発生させるプロパティの「参照可能」チェック・ボックスを選択解除します。たとえば、java.sql.Dateクラスの場合、回避方法として、データ・モデルのjava.sql.Dateファクト・タイプの「年」、「時間」および「分」プロパティに対応する「参照可能」チェック・ボックスを選択解除します。

21.1.7 70文字未満にする必要のあるルール・リポジトリ・パスの長さ

ルール・リポジトリ・パスを構成する場合、パスの長さは70文字までに制限することをお薦めします。この長さが70文字を超えると、SOAコンポーザでDT/RTを変更した後に問題が発生します。

そのため、ベスト・プラクティスとして、ルールの設計後にリポジトリ・パスの長さが70文字未満であることを確認してください。サンプルのrule.decsファイルから取得された次のパスは、実行時のDT/RT変更の後に失敗します。

<path>OrderBookingComposite/oracle/rules/com/example/globalcompany/orderbooking/approvalrule/RequiresApprovalRule.rules</path>

21.1.8 Oracle Business Rules式: 新規オプションおよび組込み関数

ルール・デザイナおよびOracle SOA Composerで使用されるOracle Business Rules式では、次の機能がサポートされます。

  1. 式で新規RL構文がサポートされます。次に例を示します。

    (assign new) Driver d = new Driver(name: "Tom", age: 45)
    
  2. 式でinstanceofキーワードがサポートされます。次に例を示します。

    if (vehicle instanceof Car) {
      (assign new) Car car = (Car)vehicle;
    }
    else if (vehicle instanceof Truck) {
      (assign new) Truck truck = (Truck)vehicle;
    }
    
  3. 式でリスト・タイプの組込み関数がサポートされます。次に例を示します。

    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の説明を参照してください。

  4. 式では、可変数の引数がサポートされます。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つのオブジェクトが含まれます。

21.1.9 アップグレードしたAS11 Rulesコンポーネントの監査証跡に基本情報のみが表示される

AS11 Oracle Business RulesコンポーネントをAS11 PS2にアップグレードした後、アップグレード前に作成したコンポジット・インスタンスの監査証跡に基本情報のみが表示されます。デシジョン・トレースには、起動されたデシジョン関数の名前とタイムスタンプのみが含まれます。

回避方法:

他のトレース詳細(入力および出力ファクトの値など)を表示するには、BPELProcess監査証跡を使用します。

21.1.10 SOAコンポーザではルール・デザイナ機能のサブセットのみが提供される

SOAコンポーザでは、ルール・デザイナで使用可能な機能のサブセットのみが提供されます。ルール・デザイナの一部の機能およびタブは、現在SOAコンポーザで使用できません。たとえば、SOAコンポーザでは、「関数」タブの機能や「リンク」タブの機能が欠落しており、新規ルールセットを追加できません。

21.1.11 SOAコンポーザで選択済セルの分割およびマージ操作が機能しない

デシジョン表とともにSOAコンポーザを使用する場合、選択済セルの分割およびマージ操作は、機能しません。

この問題の回避方法はありません。

21.1.12 SOAコンポーザでサポートされないローカライズされた数値書式

SOAコンポーザでは、どの数値書式もサポートされません。たとえば、英語(アメリカ)をブラウザ言語としてSOAコンポーザを使用するとします。値として、34533223.2345などの浮動小数点データを入力します。ここで、ブラウザ言語をフランス語に変更しても、値は34533223.2345と表示されたままです。フランス語では、値は34533223,2345と表示される必要があります。

回避方法:

ブラウザ言語とは関係なく、「,」などの数値セパレータなしで英語(アメリカ)での数値を入力する必要があります。

21.1.13 SOAコンポーザの縮小されたルールでエラーが表示またはハイライトされない

SOAコンポーザで、縮小された状態のルールの場合、検証パネルでエラーをダブルクリックしても、UIにはエラー・メッセージのウィンドウが表示されません。ただし、展開された状態のルールの場合、検証パネルのエラー・メッセージをダブルクリックすると、UIにエラー・メッセージのウィンドウが表示され、エラー領域がハイライト表示されます。

この問題の回避方法はありません。

21.1.14 SOAコンポーザのデシジョン表のツールバーにあるエディタ・ボタンの表示が競合する

SOAコンポーザのデシジョン表で、行を選択すると、「バケットセット・エディタ」、「条件ブラウザ」および「アクション・エディタ」ボタンがデシジョン表のツールバーに表示されます。

ただし、行と列を切り替えると、これらのボタンはすべて列ヘッダーに表示されます。

この問題の回避方法はありません。

21.2 構成の問題および回避方法

この項では、構成に関する問題およびその回避方法について説明します。内容は次のとおりです。

21.2.1 Business Rulesプロジェクトのデプロイ時に表示される、オープン・ファイルが多すぎるというメッセージ

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システムでプロセス単位およびユーザー単位のファイル・ディスクリプタの制限を増やすには、次の手順を実行します。

  1. limit(csh)またはulimit(bash)コマンドを使用して、ディスクリプタの値を確認します。

  2. ディスクリプタの値が1024の場合、値が小さすぎる可能性があります。sudoコマンドを使用して、rootユーザーとして/etc/security/limits.confを編集し、ディスクリプタの制限を増やします。

  3. 構成を変更したら、更新後のより大きい値でマシンを再起動します。たとえば、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