Oracle ADF Business Componentsのキャッシュ管理について

Oracle ADF Business Componentsは、パフォーマンスを改善し、一貫したデータ・ビューを維持するために高度なキャッシュ・システムを使用します。キャッシュ・システムがどのように機能するかを理解しておくことは、ビジネス・コンポーネントの実行時の動作を理解する上で重要です。

ビュー・オブジェクト・インスタンスは、ビュー・キャッシュと呼ばれるそれぞれのキャッシュを制御します。このキャッシュではビュー行のコレクションが保持されます。ビュー・オブジェクトによってデータソースからデータが取得されると、そのデータ行を表すビュー行が作成され、そのインスタンスがビュー・キャッシュに追加されます。このビュー行の各ビュー属性に値が移入されますが、その方法はビュー属性がエンティティ属性にマップされるかどうかによって異なります。

エンティティ属性にマップされないビュー属性への値の移入

ビュー属性がエンティティ属性にマップされない場合、ビュー属性にはデータソースからの値が直接移入されます。

たとえば、次のSQL問合せを使用する、CustomerOrdersViewというビュー・オブジェクトについて考えてみます。

SELECT CUSTOMERS.CUSTOMER_ID, CUSTOMERS.CUST_FIRST_NAME,
  CUSTOMERS.CUST_LAST_NAME, Orders.ORDER_ID, Orders.ORDER_DATE,
  Orders.ORDER_TOTAL
FROM CUSTOMERS, ORDERS Orders
WHERE CUSTOMERS.CUSTOMER_ID = Orders.CUSTOMER_ID    

また次のビュー属性についても考えてみます。

OrderIdOrderDateおよびOrderTotalはエンティティ属性にマップされないものとします。

ここで、CustomersOrdersViewMyCustomersAndOrdersのインスタンスがその問合せを実行します。この問合せの結果返される最初の行は、次のとおりです。

CUSTOMER_ID CUST_FIRST_NAME CUST_LAST_NAME ORDER_ID ORDER_DATE ORDER_TOTAL
501 John Doe 1137 01-AUG-03 573

次に、ビュー・キャッシュに追加された最初のビュー行のOrderIdOrderDateおよびOrderTotalの各ビュー属性に、これらの値が直接移入されます。

MyCustomersAndOrdersCacheのイメージ

 

エンティティ属性にマップされるビュー属性への値の移入

ビュー属性がエンティティ属性にマップされる場合は、ビュー・オブジェクト・インスタンスは次のプロシージャに従います。

  1. ビュー・オブジェクトにより、そのエンティティ属性を含むエンティティ・オブジェクトの慣用名が検出されます。
  2. ビュー・オブジェクトは、適切なエンティティ・オブジェクト・インスタンスがすでに作成されているか、主キーに基づいてチェックします。作成されていない場合は、そのエンティティ・オブジェクト・インスタンスを作成して、マップされたエンティティ・オブジェクト属性にデータソースから取得した値を移入します。そのエンティティ・オブジェクト・インスタンスは別のキャッシュ、すなわちエンティティ・キャッシュに追加されます。
  3. ビュー・オブジェクト属性には、エンティティ・オブジェクト属性へのポインタが移入されます。

たとえば、前述のCustomerOrdersViewのビュー・オブジェクト定義を考えてみます。CustomerIdCustFirstNameおよびCustLastNameの各ビュー・オブジェクト属性は、Customersと呼ばれるエンティティ・オブジェクトにある同じ名前のエンティティ・オブジェクト属性にマップされます。MyCustomersAndOrdersビュー・オブジェクト・インスタンスの最初のビュー行が作成されると、その行には、Customersのエンティティ・キャッシュの行へのポインタが移入されます。

MyCustomersAndOrdersビューとCustomersエンティティ・キャッシュ

エンティティ・キャッシュの影響

エンティティ・キャッシュを使用すると、次の操作を実行できます。

ただし、前述のような活用をしない場合は、エンティティ・キャッシュを削除できます。そうすることで、ポインタの作成および保存によるオーバーヘッドのわずかな増加を避けることができます。詳細は、関連項目のトピックを参照してください。

キャッシュおよびアプリケーション・モジュール

各アプリケーション・モジュール・インスタンスには、それぞれまったく異なるキャッシュのセットがあります。このため、多数の同時ユーザーのアクセスが予想される場合は、Oracle ADF Business Componentsを多数のアプリケーション・モジュール・インスタンスに対応してスケーリングできるように調整する方法の理解が非常に重要です。詳細は、関連項目のトピックを参照してください。


Oracle ADF Business Componentsの概要
Oracle ADFビュー・オブジェクトについて
ビュー・オブジェクト属性について
Oracle ADFエンティティ・オブジェクトについて
エンティティ・オブジェクト属性について
ビュー・オブジェクト・インスタンスとビュー・リンク・インスタンスについて
アプリケーション・モジュールについて
エンティティ・キャッシュの回避
ビュー・キャッシュの回避
複数のトランザクションのスケーリング