ヘッダーをスキップ
Oracle® Fusion Middleware Oracle TopLinkのためのCoherence Grid統合ガイド
11g リリース1(11.1.1)
B61395-01
  目次へ移動
目次

前
 
次
 

従来型のCoherenceの構成

この項では、CacheStore/CacheLoader構成について説明します。

CacheStore/CacheLoader

TopLink GridのCacheStore/CacheLoader構成では、JPAを使用してクラスをマッピングできますが、Coherenceキャッシュとの対話にはCoherence APIを使用できます。これにより、Coherenceがデータベースと対話できます。

また、Coherenceのライトビハインド構成を使用して、CacheStore/CacheLoader構成とともに非同期書込みを使用することもできます。

一般的な処理は次のとおりです。

詳細な例については、「例」を参照してください。

オブジェクトの読取り

CoherenceのCacheStore/CacheLoaderでは、すべての読取り操作はTopLink CacheLoaderによってデータベースに送られます。

図3 オブジェクトの読取り

オブジェクトの読取り
「図3 オブジェクトの読取り」の説明

この図は、グリッド読取り構成における問合せを示しています。

  1. アプリケーションがget問合せを発行します。

  2. CoherenceがCacheLoaderを使用してTopLinkから問合せをロードします。

  3. TopLinkがデータベースを問合せします。

オブジェクトの書込み

CoherenceのCacheStore/CacheLoaderでは、TopLinkがCacheStoreを介してすべてのデータベース書込み(挿入、更新、削除)を実行します。

図4 オブジェクトの書込み

オブジェクトの書込み
「図4 オブジェクトの書込み」の説明

この図は、グリッド読取り構成における問合せを示しています。

  1. アプリケーションがput問合せを発行します。

  2. CoherenceがCacheStoreを使用してTopLinkから問合せを格納します。

  3. TopLinkがオブジェクトをデータベースに挿入します。

キャッシュ構成(coherence-cache-config.xml)で、この例に示すようにキャッシュを定義します。

例1 キャッシュの構成

<cache-config>
  <caching-scheme-mapping>
    <cache-mapping>
      <cache-name>Employee</cache-name>
      <scheme-name>distributed-eclipselink</scheme-name>
    </caching-scheme-mapping>
  </caching-scheme-mapping>
  <caching-schemes>
    <distributed-scheme>
      <scheme-name>distributed-eclipselink</scheme-name>
      <service-name>EclipseLinkJPA</service-name>
      <backing-map-scheme>
        <read-write-backing-map-scheme>
          <internal-cache-scheme>
            <local-scheme />
          </internal-cache-scheme>
          <!-- 
            Define the cache scheme 
          -->
          <cachestore-scheme>
            <class-scheme>
            <!-- 
              Since the client code is using Coherence API we need the "standalone" version of the cache loader 
            -->
              <class-name>oracle.eclipselink.coherence.standalone.EclipseLinkJPACacheStore</class-name>
              <init-params>
                <init-param>
                  <param-type>java.lang.String</param-type>
                  <param-value>{cache-name}</param-value>
                </init-param>
                <init-param>
                  <param-type>java.lang.String</param-type>
                  <param-value>employee</param-value>
                </init-param>
              </init-params>
            </class-scheme>
          </cachestore-scheme>
        </read-write-backing-map-scheme>
      </backing-map-scheme>
      <autostart>true</autostart>
    </distributed-scheme>
  </caching-schemes></cache-config>

例2では、従業員情報を設定し、新しいオブジェクトをCoherenceに追加しています。これにより、CacheStoreに対してINSERTが発行されます。

例2 オブジェクトの挿入

Employee employee = new Employee();
employee.setId(NEW_EMP_ID);
employee.setFirstName("John");
employee.setLastName("Doe");
// Putting a new object into Coherence  will result in an INSERT in the CacheStore 
employeeCache.put(NEW_EMP_ID, employee);

オブジェクトをキャッシュから取得した場合、SQL文は生成されません。キャッシュ内にないオブジェクトを取得した場合、SELECT文が生成されます。

図3 オブジェクトの読取り

// Getting an object from cache produces no SQL
System.out.println("New Employee from cache is: " + employeeCache.get(NEW_EMP_ID));

// Getting an object not in cache will produce a SELECT in the CacheStore
System.out.println("Non-existant Employee from cache is: " + employeeCache.get(NON_EXISTANT_EMP_ID));