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

コンテキストに応じて、バッチ・モードと即時モードの動作は若干異なります。次の違いに注意してください。これらの違いは、バッチ・モードを使用する構成にするレガシー・アプリケーションがある場合に、特に重要になります。

コール間のデータの同期化

データ・モデルを適切に設定するため(たとえば、バインド変数値をビュー・オブジェクトに設定するため)にデータ・コントロールに情報を渡す必要がある場合、super.prepareModel()をコールする前にDataActionのオーバーライドされたprepareModel()メソッドでこれを実行できます。これにより、バッチ・モード・アプリケーション・モジュールが中間層オブジェクトと自動的に同期化されます。

コントローラ・レイヤーにあるDataActionコードのビュー・オブジェクトからデータをプログラムによって参照する必要がある場合は、prepareModel()をコールした後にDataActionライフサイクル・メソッドでこれを実行します。ユーザー記述のイベント・ハンドラ・メソッド(onYourEventName()など)またはinvokeCustomMethod()ライフサイクル・メソッドは、prepareModel()へのコールの後に実行されます。

可能であれば、データ関連のすべての設定および操作を1つのアプリケーション・モジュール・カスタム・メソッドに一元化し、すべての設定が中間層への1回のラウンドトリップで実行できるようにしてください。

クライアント/ビュー・コードがバインディングAPIにアクセスする場合は、bindingContainer.refreshControl()へのコールにより、すべてのADFビジネス・コンポーネント・アプリケーション・モジュールまたはバッチ・モード・アプリケーション・モジュールで、sync()が実行されます。

バインディングでは、一部の処理によりsync()が明示的にコールされます。

JClient

prepareModel()を使用した前述の方法は、JClientでは使用できないことに注意してください。これは、JClientにはそのようなフェーズやラウンドトリップ・チェックポイントがないためです。同じ方法を使用するには、対応するコードをボタン動作に記述し、データのサービス要求用のモデルを用意する必要があります。

ビジネス・ロジックをクライアントに記述しない

基本的に、ビジネス層ロジックはクライアント側に記述しないでください。これには、UI、パネルおよびコントローラ処理が含まれます。かわりに、リモート・メソッドをアプリケーション・モジュールまたはBeanで使用してください。

ビュー基準の使用

ビュー基準を使用してWHERE句を作成している場合、ビュー基準の動作はバッチ・モードと即時モードで異なります。バッチ・モードでは、検索モードの取消時にビュー基準は消去されますが、即時モードでは、ユーザーが検索モードを取り消しても基準は保持されます。

現在のディテール行セットの設定方法

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

たとえば、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のバッチ・モードについて
問合せデータ同期化の変更

 

 

Copyright © 1997, 2004, Oracle. All rights reserved.