この項では、CacheStore/CacheLoader構成について説明します。
TopLink GridのCacheStore/CacheLoader構成では、JPAを使用してクラスをマッピングできますが、Coherenceキャッシュとの対話にはCoherence APIを使用できます。これにより、Coherenceがデータベースと対話できます。
また、Coherenceのライトビハインド構成を使用して、CacheStore/CacheLoader構成とともに非同期書込みを使用することもできます。
一般的な処理は次のとおりです。
CacheLoaderを介して、すべての読取り操作でデータベースからオブジェクトが取得されます。「オブジェクトの読取り」を参照してください。
CacheLoaderを介して、すべての書込み操作でデータベースが更新されます。「オブジェクトの書込み」を参照してください。
詳細な例については、「例」を参照してください。
CoherenceのCacheStore/CacheLoaderでは、すべての読取り操作はTopLink CacheLoaderによってデータベースに送られます。
この図は、グリッド読取り構成における問合せを示しています。
アプリケーションがget問合せを発行します。
CoherenceがCacheLoaderを使用してTopLinkから問合せをロードします。
TopLinkがデータベースを問合せします。
CoherenceのCacheStore/CacheLoaderでは、TopLinkがCacheStoreを介してすべてのデータベース書込み(挿入、更新、削除)を実行します。
この図は、グリッド読取り構成における問合せを示しています。
アプリケーションがput問合せを発行します。
CoherenceがCacheStoreを使用してTopLinkから問合せを格納します。
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));