コンテキストに応じて、バッチ・モードと即時モードの動作は若干異なります。これらの違いは、バッチ・モードがオプションになる以前に開発されたアプリケーションの場合に、特に重要になります。
バッチ・モードと即時モードの次の違いに注意してください。
ビュー基準を使用してWHERE句を作成する場合、ビュー基準の動作はバッチ・モードと即時モードで異なります。
バッチ・モードと即時モードは行セットの保持方法が異なります。詳細は次のように少なくとも3つのケースがあります。
次の行セットへの移動時のデフォルト動作です。
バッチ・モードと即時モードでは、レンジの最終行でnext()がコールされたときの動作が異なります。レンジの最終行で現在の行が設定されている場合、次のとおりです。
バッチ・モードと即時モードは、行セット・イテレータを使用する時点が異なります。
next()
呼び出しは失敗します。これは、バインディングがステートレス(格納されていない)であり、パラメータがデフォルトでnull
に設定されているためです。
next()
のコールは予想どおりに動作します。ただし、nextSet()
をコールする場合、バインディングでは同じ結果に終わります。この動作の説明は、次の「マスター/ディテール行セットで現在の行セットを設定する」を参照してください。
rangeSize
と一致する場合、同じビュー・オブジェクトが戻される(NULLパラメータで再度実行するのではなく)必要があります。
バッチ・モードと即時モードでは、現在の行セットが保持される方法が異なります。この違いは、マスター/ディテール表があり、レンジ・サイズがディテール表に設定されていて、現在の行が移され、レンジ内で最初に表示されている行がディテール・セットの最初の行でなくなった場合に発生します。この違いが発生する理由は、即時モードでは、マスターの現在の行が変更されるたびに、ディテール問合せが再実行されてディテールが作成されるためです。バッチ・モードでは、ディテール・セットはクライアントにキャッシュされます。
たとえば、2つの部門(Dept)とその従業員(Emp)の詳細を示す次の例を参照してください。
Dept 10
Emp AA, BB, CC(3つのディテール行)
Dept 20
Emp DD, EE, FF, GG(4つのディテール行)
Empのレンジ・サイズを2に設定すると、クライアント経由でDept 10にアクセスした際、次のように表示されます(**は現在の行を示します)。
[10]
[AA] **
[BB]
Empでnextを実行すると(Dept 10にアクセスしたまま)、次のように表示されます。
[10]
[AA]
[BB] **
Dept 20に移動しても、カーソルは先頭に置かれたままです。
[20]
[DD] **
[EE]
Empで次のレンジ・セットを取得すると(Dept 20にアクセスしたまま)、次のように表示されます。
[20]
[FF] **
[GG]
ここでnextを実行すると、次のように表示されます。
[20]
[FF]
[GG] **
Dept 10に戻ると、次のように表示されます。
[10]
[AA] **
[BB]
Empの現在の行が最初の行にリセットされたことに注意してください([BB]から[AA]へ)。これまでの動作は、即時モードとバッチ・モードで同じです。しかし、ここでDept 20に移動すると、バッチ・モードと即時モードで動作に差異が発生します。バッチ・モードでは、次のように表示されます。
[20]
[FF] **
[GG]
即時モードでは、次のように表示されます。
[20]
[DD] **
[EE]
ただしバッチ・モードでも、ディテール・セットが中間層からリフレッシュされる場合(ディテール・レンジ・セットのクライアント・キャッシュが中間層の新しいディテール・セットによりリフレッシュ/置換される場合)は、即時モードと同様に回復されます。前述の例では、Dept 20に対し、{[DD], [EE]}に戻ります。リフレッシュをこのように実行するには、refreshDataModel()
をディテール行セットでコールします。
クライアントからのリクエストのバッチ処理
Oracle ADF Business Componentsのバッチ・モードについて
問合せデータ同期化の変更
バッチ・モードでのrangeSizeの設定
バッチ・モードでのコール間データの同期化
Copyright © 1997, 2007, Oracle. All rights reserved.