プライマリ・コンテンツに移動
Oracle® Mobile Application Framework Oracle Mobile Application Frameworkでのモバイル・アプリケーションの開発
2.1.3.0.0
E67370-01
  目次へ移動
目次

前
 
次
 

25 データのキャッシュ

この章では、MAFアプリケーションでデータのキャッシュを有効にする方法を説明します。

この章の内容は次のとおりです。

25.1 データ・キャッシュの概要

データのキャッシュは、モバイル・アプリケーションのユーザーに優れたユーザー操作性を提供するための重要な要素です。ユーザーは、モバイル・アプリケーションがいつでも使用でき、機能することを期待します。実際には、モバイル・アプリケーションの接続の信頼性が低いことはよく知られており、ネットワーク接続を使用できなかったり、接続の確立時につながったり切れたりを繰り返し、最終的に切断されることがあります。モバイル・アプリケーションで最適なユーザー操作性を実現するため、MAFには、オフライン時でも継続して機能するアプリケーションを開発できるAPIが用意されているので、モバイル・アプリケーションでの最適なユーザー操作性が保証されます。ネットワーク接続が使用できない場合、モバイル・アプリケーションではローカルに格納されているキャッシュ・データにアクセスして、シームレスなユーザー操作を確保します。

中央からオフラインへのデータ格納はポリシーのセットで、ユーザーのモバイル・アプリケーションがローカル・キャッシュに格納されているRESTリソースをリフレッシュする方法を示すことによって、ユーザー操作性を向上させます。これらのポリシーは、Sync Client SDKにリクエストの処理方法を指示し、サーバーからデータを取得するよりも、オフライン読取りを使用してデバイス上に格納されているデータをフェッチする方がアプリケーションには高速なため、アプリケーションのパフォーマンスを改善できます。また、アプリケーション・キャッシュを有効にし、インタネット接続が使用できない場合にオフライン読取りを有効にすることで、最適なユーザー操作性を維持することもできます。

25.1.1 sync-config.xmlファイルを使用したデータ・キャッシュの実装

MAFに含まれる同期クライアントは、デバイスのMAFアプリケーション内に存在します。同期クライアントは、データをキャッシングするときに特定のポリシーを採用して、URLによって識別されるリソースごとに定義された特定のポリシーを観察することで異なるリソースをキャッシュできるようにします。同期クライアントは、sync-config.xmlファイルで設定されたポリシーを使用してデータをローカルにキャッシュします。データ格納およびキャッシュのポリシー設定を構成する方法の詳細は、第25.1.3項「キャッシュ・ポリシーについて」を参照してください。データ・キャッシュを有効にする方法の詳細は、第25.1.2項「データ・キャッシュを有効にする方法」を参照してください。

sync-config.xmlファイルにより、モバイル・アプリケーションが、JSONペイロードによるRESTを介してアクセスされるサーバー側リソースから取得されたデータをキャッシュできるようになるだけでなく、キャッシュ内のこのデータおよびサーバー側リソースも更新できるようになります。

キャッシュ機能は、アプリケーション・コード内に実装しなくても、sync-config.xmlファイル内のプロパティを編集することで構成可能です。アプリケーションを作成すると、デフォルト・バージョンのsync-config.xmlファイルが格納されます(図25-1を参照)。sync-config.xmlファイルには「アプリケーション・リソース」ペインのADF-META-INFノードからアクセスでき、このファイルを変更するには、JDeveloperのソース・エディタを使用します。MAFランタイムは、デプロイ後にこのファイルを読み取ります。


注意:

これはアプリケーション全体のリソースですが、sync-config.xmlファイルを機能アーカイブ(FAR)ファイルに含めることができます。FARをMAFアプリケーションに追加する場合は、FARのsync-config.xmlファイルがアプリケーションのsync-config.xmlとマージされます。詳細は、第25.1.4項「FARを使用したsync-config.xmlファイルの更新に関する必知事項」を参照してください。

図25-1 sync-config.xmlファイルの概要エディタにおけるデータ格納のポリシー設定

図25-1については周囲のテキストで説明しています。

次の例は、デフォルトのsync-config.xmlファイルを示します。

<?xml version="1.0" encoding="UTF-8"?>
<Settings xmlns="http://xmlns.oracle.com/sync/config">
  <BaseUri>http://127.0.0.1</BaseUri>
  <AppId/>
  <LazyPersistence/>
  <RefreshPolicy/>
  <DbStorageFolderPath/>
  <FileStorageFolderPath/>
  <Policies>
    <DefaultPolicy>
      <FetchPolicy>FETCH_FROM_SERVICE</FetchPolicy>
      <UpdatePolicy>UPDATE_IF_ONLINE</UpdatePolicy>
      <ExpirationPolicy>NEVER_EXPIRE</ExpirationPolicy>
      <EvictionPolicy>MANUAL_EVICTION</EvictionPolicy>
    </DefaultPolicy>
  </Policies>
</Settings>

次の例は、sync-config.xmlファイル内でキャッシュ属性を定義する方法を示します。リクエストは、使用するポリシーを決定するときに、baseUri属性とPath要素を使用して照合されます。

<?xml version="1.0" encoding="UTF-8"?>
<Settings xmlns="http://xmlns.company.com/sync/config">
  <BaseUri>http://name.loc.company.com:9100</BaseUri>
  <AppId>1</AppId>
  <LazyPersistence>false</LazyPersistence>
  <MaxCachedFileSize>1024000</MaxCachedFileSize>
  <EnableEncryption>false</EnableEncryption>
    <Policies>
      <ServerGroup id="fusion" baseUri="http://name.loc.company.com:7100/"
        <Policy id="fs01">
          <Path>/stable/rest/latest/Employees</Path>
          <FetchPolicy>FETCH_FROM_SERVICE_ON_CACHE_MISS_OR_EXPIRY</FetchPolicy>
          <UpdatePolicy>QUEUE_IF_OFFLINE</UpdatePolicy>
          <ExpirationPolicy>NEVER_EXPIRE</ExpirationPolicy>
          <EvictionPolicy>EVICT_ON_EXPIRY_AT_STARTUP</EvictionPolicy>
        </Policy>
      </ServerGroup>
        <DefaultPolicy>
          <FetchPolicy>FETCH_FROM_SERVICE_ON_CACHE_MISS_OR_EXPIRY</FetchPolicy>
          <UpdatePolicy>QUEUE_IF_OFFLINE</UpdatePolicy>
          <ExpirationPolicy>EXPIRE_AFTER</ExpirationPolicy>
          <ExpireAfter>700</ExpireAfter>
          <EvictionPolicy>EVICT_ON_EXPIRY_AT_STARTUP</EvictionPolicy>
        </DefaultPolicy>
    </Policies>
</Settings>

sync-config.xmlファイル内のプロパティを使用してキャッシュ・ポリシーを構成可能なユース・ケースの一例を次に示します。

  • ほとんど変更されない静的リスト(FETCH_FROM_SERVICE_ON_CACHE_MISS_OR_EXPIRY)

  • 高度に動的なデータ。結果の文脈依存性が高いため、キャッシュを使用せずにリフレッシュする必要があります(FETCH_FROM_CACHE_SCHEDULE_REFRESHまたはFETCH_FROM_SERVICE_IF_ONLINE)

  • 検索結果など、リクエストごとに変更される可能性が高いデータ(FETCH_FROM_SERVICE)

25.1.2 データ・キャッシュを有効にする方法

同期クライアントは、データをキャッシングするときに特定のポリシーを採用して、URLによって識別されるリソースごとに定義された特定のポリシーを観察することで異なるリソースをキャッシュできるようにします。データ・キャッシュを有効にすると、デフォルトのsync-config.xmlファイル内のポリシーが使用されます(ただし、上書きしている場合を除く)。

データ・キャッシュを有効にするには、maf.propertiesファイルで次の行のコメントを外します。

#java.commandline.argument=-DsyncEnabled=true

注意:

データ・キャッシュを有効にすると、ネットワーク経由で渡されたすべてのデータがキャッシュされます。キャッシュを有効にしてアプリケーションをデプロイした後、実行時にオフにする方法はありません。

データ・ストレージ・ポリシー設定の構成の詳細は、第25.1.1項「sync-config.xmlファイルを使用したデータ・キャッシュの実装」を参照してください。

25.1.3 キャッシュ・ポリシーについて

モバイル・アプリケーションのキャッシュ・ポリシーはsync-config.xmlファイルで定義します。ポリシーを組み合せて、あらゆるモバイル・アプリケーションに適切なコンテンツを提供します。

データ・ストレージ・ポリシー設定の構成の詳細は、第25.1.1項「sync-config.xmlファイルを使用したデータ・キャッシュの実装」を参照してください。

アプリケーションのキャッシュ動作を構成できるポリシーは、次のグループの配下にあります。

  • フェッチ・ポリシー: Sync Client SDKに対して、(サーバー、ローカル・キャッシュ、この2つの組合せなどから)リソースをフェッチするように指示します。該当するポリシーのリストは、表25-1を参照してください。

  • 有効期限ポリシー: Sync Client SDKがローカル・キャッシュに格納されているリソースを期限切れまたは失効しているものとして注記し、これにより、更新ポリシー(表25-4を参照)に従って更新するか、削除ポリシー(表25-3を参照)に従ってローカル・キャッシュから削除する必要が生じるまでの期間(秒単位)を設定します。有効期限ポリシーの詳細は、表25-2を参照してください。

  • 削除ポリシー: Sync Client SDKがローカル・キャッシュに格納されているリソースを削除するタイミングを指定します。削除ポリシーが適用されるのはローカル・キャッシュ内のデータのみで、サーバー側のリソースには適用されません。ポリシーのリストは、表25-3を参照してください。

  • 更新ポリシー: ローカル・キャッシュに格納されている有効期限切れのリソースを更新するタイミングを定義します。ポリシーのリストは、表25-4を参照してください。

表25-1 フェッチ・ポリシー

ポリシー 説明

キャッシュからフェッチ

サーバーからではなく、キャッシュからのみデータをフェッチするよう、Sync Client SDKに指示します。キャッシュ内でデータが見つからない場合、Sync Client SDKはエラーまたはNULLオブジェクトを返します。このポリシーを適用すると、Sync Client SDKはデータをキャッシュから直接取得するので、クライアント・アプリケーションがオンラインでもオフラインでも、このポリシーを実行できます。

サービスからフェッチ

キャッシュからではなく、サーバーからのみデータを直接フェッチするよう、Sync Client SDKに指示します。Sync Client SDKがこのポリシーを適用できるのは、クライアント・アプリケーションがオンラインの場合のみです。それ以外は、クライアント・アプリケーションにエラーまたはNULLオブジェクトを返します。

サービスからフェッチ(オンラインの場合)

クライアント・アプリケーションがオンラインの場合はサーバーからデータをフェッチし、アプリケーションがオフラインの場合はキャッシュからデータをフェッチするよう、Sync Client SDKに指示します。

サービスからフェッチ(キャッシュ・ミス時)

キャッシュからデータをフェッチするよう、Sync Client SDKに指示します。リクエスト・データが見つからない場合、Sync Client SDKはそのデータをサーバーからフェッチします。

サービスからフェッチ(キャッシュ・ミスまたは失効時)

データがキャッシュ内にあり、失効(有効期限切れ)していない場合はキャッシュ内のデータをフェッチするよう、Sync Client SDKに指示します。それ以外は、Sync Client SDKはリクエスト・データをサーバーからフェッチします。

キャッシュからフェッチ(リフレッシュのスケジュール)

キャッシュからデータをフェッチし、サーバーの最新のコピーからキャッシュを更新するためのバックグラウンド・リフレッシュをスケジュールするよう、Sync Client SDKに指示します。キャッシュ・ミス(キャッシュにリクエスト・データが存在しないこと)が発生した場合、Sync Client SDKはクライアント・アプリケーションにNULLオブジェクトを返します。

フェッチとリフレッシュ

Sync Client SDKに、次のように指示します。

  • リクエスト・データがあり、有効期限が切れていない場合は、キャッシュからデータをフェッチします。

  • サーバーの最新のコピーからキャッシュを更新するためのバックグラウンド・リフレッシュをスケジュールします。

キャッシュ・ミス(キャッシュにリクエスト・データが存在しないこと)が発生した場合、またはデータが期限切れの場合、Sync Client SDKはサービスからフェッチポリシーの場合と同様に、サーバーから直接データをフェッチします。


表25-2 有効期限ポリシー

ポリシー 説明

再起動時に失効

クライアント・アプリケーションの再起動時に、任意のURIのデータを有効期限切れとして注記するか、クライアント・アプリケーションがローカル・データを次回呼び出したときに、そのデータをサーバー・コピーで更新するよう、Sync Client SDKに指示します。

失効までの時間

失効までの存続期間ポリシーで設定されている指定の時間(秒単位)が経過した後にデータを有効期限切れにするよう、Sync Client SDKに指示します。このポリシーは、定期的にリフレッシュされるデータに使用します。

失効までの存続期間

キャッシュ内のデータが期限切れになったことをSync Client SDKが注記するまでの秒数。

有効期限なし

ローカル・データを有効期限切れとして指定できないことをClient Sync SDKに指示します。


表25-3 削除ポリシー

ポリシー 説明

起動時に有効期限切れで削除

クライアント・アプリケーションの再起動時に、有効期限切れのデータをキャッシュから削除するか、クライアント・アプリケーションがローカル・データを次回呼び出したときに、そのデータをサーバー・コピーで更新するよう、Sync Client SDKに指示します。

手動削除

Sync Client SDKではローカル・キャッシュから自動的にデータを削除できません。手動でデータを削除するには、APIを使用します。


表25-4 更新ポリシー

ポリシー 説明

オンラインの場合に更新

クライアント・アプリケーションがオンラインの場合のみ、ローカル・キャッシュをサーバー側のデータで更新するよう、Sync Client SDKに指示します。それ以外は、Sync Client SDKがエラーを返します。

オフラインの場合にキューに格納

クライアント・アプリケーションがオンラインの場合に、ローカル・キャッシュをサーバー側のデータで更新するよう、Sync Client SDKに指示します。クライアント・アプリケーションがオフラインの場合、Sync Client SDKは操作をキューに格納して、クライアント・アプリケーションが再度オンラインになったときにローカル・キャッシュを更新できるようにします。

注意: このポリシーは現在サポートされていません。


25.1.4 FARを使用したsync-config.xmlファイルの更新に関する必知事項

ビュー・コントローラ・プロジェクトがFARとしてデプロイされると、sync-config.xmlファイルは機能アーカイブ・ファイルに含まれます。connections.xmlファイルと同様に、FARをアプリケーションに追加すると、MAFではFAR (jar-sync-config.xml)内のsync-config.xmlファイルの内容と、使用するアプリケーションのsync-config.xmlファイルの内容をマージします。sync-config.xmlファイルは、モバイル・アプリケーションによって使用されるWebサービスのエンドポイントを記述するため、モバイル・アプリケーションを構成するアプリケーション機能によって使用されるすべてのWebサービスのエンドポイントを、FARを追加することで更新できます(第8.4項「FARのビュー・コントローラ・プロジェクトとしての追加時に行われる処理」を参照)。

FARをアプリケーションに追加すると、MAFでは、アプリケーションのsync-config.xmlファイルおよびconnections.xmlファイルを確認し、必要に応じて変更するように求めるメッセージがログに記録されます。図25-2に示すように、これらのメッセージは、使用するアプリケーションのsync-config.xmlファイルの状態を反映します。

図25-2 メッセージ・ログ

このイメージについては周囲のテキストで説明しています。

使用するアプリケーションにsync-config.xmlファイルがない場合、MAFではこのファイルをアプリケーションに追加し、次のようなメッセージを書き込みます。

oracle.adfmf.framework.dt.deploy.features.deployers.SyncConfigMerger _logNoSyncConfigInAppUsingFar
WARNING: The application does not contain a synchronization file, "sync-config.xml". Creating one 
containing the synchronization configuration in the Feaure Archive.

sync-config.xmlファイルの<ServerGroup>要素に、使用するアプリケーションのconnections.xmlファイルで定義された対応する<Reference>要素がない場合、MAFでは接続の確認(または作成)をリクエストする次のようなログ・メッセージを書き込みます。

oracle.adfmf.framework.dt.deploy.features.deployers.SyncConfigMerger _logAddedServerGroups
WARNING: The following server groups were added sync-config.xml by the Add to Application 
operation:
{
  ServerGroup1 - there is no existing application connection defined for this server group.
Please create the connection.

  ServerGroup2 - verify its configuration.
}

使用するアプリケーションのsync-config.xmlファイルの<ServerGroup>定義が、FAR内の対応するsync-config.xmlファイルの定義を複製する場合、MAFでは次のSEVEREレベルのメッセージをログに書き込みます。

oracle.adfmf.framework.dt.deploy.features.deployers.SyncConfigMerger _logDuplicateServerGroups
SEVERE: Cannot merge the server groups from the Feature Archive because the following definitions 
already exist:
ServerGroup1
ServerGroup2