バッチ・モードと即時モードの違い

コンテキストに応じて、バッチ・モードと即時モードの動作は若干異なります。これらの違いは、バッチ・モードがオプションになる以前に開発されたアプリケーションの場合に、特に重要になります。

バッチ・モードと即時モードの次の違いに注意してください。

ビュー基準の使用

ビュー基準を使用してWHERE句を作成する場合、ビュー基準の動作はバッチ・モードと即時モードで異なります。

行セットの使用

バッチ・モードと即時モードは行セットの保持方法が異なります。詳細は次のように少なくとも3つのケースがあります。

次の行セットへの移動時のデフォルト動作です。

最終行でnext()をコールする

バッチ・モードと即時モードでは、レンジの最終行でnext()がコールされたときの動作が異なります。レンジの最終行で現在の行が設定されている場合、次のとおりです。

イテレータ・バインディングを使用する

バッチ・モードと即時モードは、行セット・イテレータを使用する時点が異なります。

即時モードでのイテレータ・バインディングの使用時の提案

マスター/ディテール行セットで現在の行セットを設定する

バッチ・モードと即時モードでは、現在の行セットが保持される方法が異なります。この違いは、マスター/ディテール表があり、レンジ・サイズがディテール表に設定されていて、現在の行が移され、レンジ内で最初に表示されている行がディテール・セットの最初の行でなくなった場合に発生します。この違いが発生する理由は、即時モードでは、マスターの現在の行が変更されるたびに、ディテール問合せが再実行されてディテールが作成されるためです。バッチ・モードでは、ディテール・セットはクライアントにキャッシュされます。

たとえば、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の設定
バッチ・モードでのコール間データの同期化