キャッシュ方法
最終更新日 :
2021年4月27日
|
次にも適用 : Adobe LiveCycle
アーキテクチャ
Mobile Forms は、埋め込み CQ インスタンス内のパッケージとしてデプロイされます。Mobile Forms の機能は、RESTful Apache Sling アーキテクチャを使用して、HTTP または HTTPS 経由で REST エンドポイントとして公開されます。
Sling フレームワークの使用
Apache Sling は、リソースを中心とするフレームワークです。それは 要求 URL を使用してまずリソースを解決します。それぞれのリソースには sling:resourceType(または sling:resourceSuperType)プロパティがあります。このプロパティ、要求メソッド、および要求プロパティのプロパティに基づき、要求を処理するために Sling スクリプトが選択されます。この Sling スクリプトは JSP またはサーブレットにすることができます。Mobile Forms の場合、Profile ノードは Sling リソースとして機能し、プロファイルレンダラーはモバイルフォームをレンダリングするために特定のプロファイルで要求を処理する Sling スクリプトとして機能します。プロファイルレンダラーは要求からパラメーターを読み取り、Forms OSGi サービスを呼び出す JSP です。
REST エンドポイントとサポートされている要求パラメーターについて詳しくは、「フォームテンプレートのレンダリング」を参照してください。
ユーザーが iOS や Android のブラウザーなどのクライアントデバイスから要求を行う場合、Sling はまず要求 URL に基づいて Profile ノードを解決します。この Profile ノードから、それは sling:resourceSuperType と sling:resourceType を読み取り、このフォームレンダリング要求を処理できる使用可能なスクリプトをすべて特定します。次に、それは Sling 要求セレクターを要求メソッドとともに使用して、この要求の処理に最適なスクリプトを特定します。要求がプロファイルレンダラー JSP に達したら、JSP は Forms OSGi サービスを呼び出します。
Sling スクリプトの解決について詳しくは、「AEM Sling Cheat Sheet」または「Apache Sling Url decomposition」を参照してください。
一般的なフォーム処理呼び出しのフロー
Mobile Forms は、最初のリクエスト時にフォームを処理(レンダリングまたは送信)するために必要なすべての中間オブジェクトをキャッシュします。データに依存するオブジェクトはキャッシュしません(このようなオブジェクトは変更されることが多いからです)。
Mobile Forms は、PreRender キャッシュと Render キャッシュの 2 つの異なるレベルのキャッシュを持っています。preRender キャッシュは解決されたテンプレートのすべてのフラグメントと画像含み、Render キャッシュはレンダリングされたコンテンツ(例えば HTML)を含みます。
Mobile Forms は、フラグメントと画像の参照がないテンプレートはキャッシュしません。Mobile Forms が通常の時間より多くかかる場合は、サーバーログをチェックして、不足している参照や警告を調べてください。また、オブジェクトの最大サイズに達していないことも確認してください。
Forms OSGi サービスは次の 2 つの手順でリクエストを処理します。
- レイアウトと初期フォーム状態の生成:Forms OSGi レンダリングサービスは、フォームキャッシュコンポーネントを呼び出して、このフォームがすでにキャッシュされていて無効化されていないかを調べます。 キャッシュされているフォームが有効な場合は、生成された HTML がキャッシュから取得されます。フォームが無効化されている場合は、Forms OSGi レンダリングサービスは LiveCycle Forms サービスコンテナを呼び出し、これが初期フォームレイアウトとフォームステートを XML 形式で生成します。この XML は Forms OSGi サービスによって HTML レイアウトと初期 JSON フォーム状態に変換されてから、後続の要求のためにキャッシュされます。
- 事前入力されたフォーム:レンダリング中に、ユーザーが事前入力されたデータのフォームをリクエストした場合、Forms OSGi レンダリングサービスはフォームサービスコンテナを呼び出し、結合されたデータを持つ新しいフォームステートを生成します。ただし、上記の手順でレイアウトはすでに生成されているので、この呼び出しのほうが最初の呼び出しよりも高速です。この呼び出しはデータの結合とデータへのスクリプトの実行のみを実施します。
レンダリングするフォームは LiveCycle リポジトリに配置できます。 フォームまたはフォーム内で使用されるアセットに更新がある場合、フォームキャッシュコンポーネントはそれを検出し、その特定のフォームのキャッシュは無効化されます。Forms OSGi サービスが処理を完了したら、プロファイルレンダラー JSP はこのフォームに JavaScript ライブラリの参照とスタイル設定を追加し、応答をクライアントに返します。Apache のような一般的な Web サーバーは HTML 圧縮オンでここで使用できます。Web サーバーは応答サイズ、ネットワークトラフィック、およびサーバーとクライアントマシンの間でのデータのストリーミングに要する時間を減少させます。
ユーザーがフォームを送信すると、ブラウザーはフォームのステートを JSON 形式で 送信サービスプロキシに送信し、送信サービスプロキシは JSON データを使用してデータ XML を生成し、このデータ XML を送信エンドポイントに送信します。
コンポーネント
デプロイ可能のユニット
Mobile Forms は CQ Package Manager から管理できる CQ パッケージとして提供され、http://:/lc/crx/packmgr/index.jsp で入手できます。
adobe-lc-forms-pkg.zip:このパッケージがメインのシングルインストールパッケージです。このパッケージには次のサブパッケージとバンドルが含まれています。
- adobe-lc-forms-core-<version>.jar: これは Mobile Forms のための OSGi コンポーネントとサービスを含む OSGi バンドルです。
- scala-lang-2.9.1.jar: adobe-lc-forms-core バンドルは scala-lang-2.9.1.jar で提示される一部の scala 関連ライブラリを使用します。
- adobe-lc-forms-runtime-pkg-<version>.zip:このパッケージにはスクリプティングとレイアウトエンジン、CSS のようなランタイム JavaScript ライブラリが含まれています。
- adobe-lc-forms-content-pkg-<version>.zip:このパッケージにはプロファイルとプロファイルレンダラーのスクリプト、および他のリソースが含まれています。
- adobe-lc-forms-lcconnector-<version>.jar: この OSGi バンドルには、すべての LiveCycle 固有サービス実装が含まれています。
OSGi コンポーネント(adobe-lc-forms-core.jar)
Adobe XFA フォームレンダラー(com.adobe.livecycle.adobe-lc-forms-core)は Felix 管理コンソールのバンドルビューから表示されるときの Mobile Forms OSGi バンドルの表示名です(http://<ホスト>:<ポート>/lc/system/console/bundles)。
このコンポーネントにはレンダリング、キャッシュの管理、および環境設定用の OSGi コンポーネントが含まれています。
Forms OSGi サービス
この OSGi サービスには XDP を HTML としてレンダリングするロジックが含まれていて、データ XML を生成するためにフォームの送信を処理します。このサービスは LiveCycle Forms サービスコンテナを使用します。Forms サービスコンテナは処理を実行するネイティブコンポーネント XMLFormService.exe を内部的に呼び出します。
レンダラーリックエスとが受信された場合は、このコンポーネントが Forms サービスコンテナを呼び出して、レイアウトおよびステート情報を生成し、この情報が処理されて HTML および JSON フォーム DOM ステートを生成します。
また、このコンポーネントは送信されたフォーム状態の JSON からデータ XML も生成します。
キャッシュコンポーネント
注意:
この記事で説明されているキャッシュのメカニズムは、LiveCycle ES4 Service Pack 1 用にアップデートされます。 LiveCycle ES4 ベースリリースを使用している場合は、「Key Distinctions between LiveCycle ES4 and Service pack 1」に記載されている手順を実行してください。
Mobile Forms はキャッシュを使用して、スループットと応答時間を最適化します。 キャッシュサービスのレベルを設定して、パフォーマンスとスペース使用率のトレードオフを微調整できます。
|
説明 |
なし |
アーティファクトをキャッシュしない |
保守的 |
インラインフラグメントと画像を含むテンプレートのようなフォームのレンダリング前に生成される中間アーティファクトのみをキャッシュ |
アグレッシブ |
レンダリングされた HTML コンテンツをキャッシュ |
Mobile Forms は LRU 方法を使用してメモリ内キャッシングを実行します。キャッシュ方法が「なし」に設定された場合は、キャッシュは作成されません。LRU 退去ポリシーは多くのフォームに基づいています。オブジェクトのキャッシュ上限を決めるしきい値サイズを指定することもできます。
注意:
メモリ内キャッシュはクラスターノード間で共有されません。
設定サービス
設定サービスは Mobile Forms の設定パラメータとキャッシュ設定の調整を可能にします。
これらの設定を更新するには、CQ Felix 管理コンソールに移動(http://<サーバー>:<ポート>/lc/system/console/configMgr で使用可能)し、「LC Forms Configuration」を検索して選択します。
設定サービスを使用して、キャッシュサイズを設定したりキャッシュを無効化したりできます。詳しくは、「キャッシュコンポーネント」を参照してください。また、デバッグオプションパラメーターの使用によるデバッグも有効化できます。フォームの詳しいデバッグ方法については、「Mobile Forms のデバッグ」を参照してください。
ランタイムコンポーネント(adobe-lc-forms-runtime-pkg.zip)
HTML フォームをレンダリングするために使用されるクライアント側ライブラリが含まれています。
ランタイムパッケージの一部として使用できる重要なコンポーネント:
スクリプティングエンジン
Adobe XFA の実装は、フォームにおけるユーザー定義のロジックの実行を有効化するために、JavaScript と FormCalc の 2 種類のスクリプティング言語をサポートしています。
HTML フォームのスクリプティングエンジンはこれらの両方の言語で XFA スクリプティング API をサポートするために、JavaScript で記述されています。
レンダリング時に、FormCalc スクリプトはユーザーやデザイナーに対して透明なサーバー上で JavaScript に変換(およびキャッシュ)されます。
このスクリプティングエンジンは Object.defineProperty のような、いくつかの ECMAScript5 の機能を使用します。エンジン/ライブラリはカテゴリ名 xfaforms.profile で CQ クライアントライブラリとして提供されます。また、それは外部ポータルまたはフォームとやりとりするアプリを有効化するために、FormBridge API も提供します。FormBridge を使用することで、外部アプリは特定の要素をプログラムで非表示にしたり、それらの値を取得または設定したり、それらの属性を変更したりできます。
詳しくは、「Form Bridge」の記事を参照してください。
レイアウトエンジン
Mobile Forms のレイアウトと視覚的側面は SVG 1.1、jQuery、BackBone、および CSS3 の機能に基づいています。サーバーでフォームの初期の外観が生成およびキャッシュされます。初期のレイアウトへの変更、およびフォームレイアウトへのさらなるインクリメンタルな変更はクライアントで管理されます。これを達成するために、ランタイムパッケージには JavaScript で記述されていて、jQuery/Backbone がベースのレイアウトエンジンが含まれています。このエンジンは繰り返し可能インスタンスの追加/削除、拡張可能オブジェクトレイアウトなどの、すべてのダイナミック動作を処理します。このレイアウトエンジンは 1 ページずつフォームをレンダリングします。最初、1 ページのみが表示され、水平スクロールバーは先頭ページのみを示します。ただし、ユーザーがスクロールダウンすると、次のページがレンダリングし始めます。このページごとのレンダリングはブラウザーで最初のページをレンダリングするために必要な時間を削減し、フォームの認識されるパフォーマンスを強化します。このエンジン/ライブラリはカテゴリ名が xfaforms.profile の CQ クライアントライブラリの一部です。
レイアウトエンジンにもユーザーからフォームフィールドの値を取得するために使用されるウィジェットのセットが含まれています。これらのウィジェットはレイアウトエンジンとシームレスに機能するように、特定の追加のコントラクトを実装する jQuery UI ウィジェットとしてモデルされます。
ウィジェットとそれに対応するコントラクトについて詳しくは、「Mobile Forms のカスタムウィジェット」を参照してください。
スタイル設定
HTML 要素に関連付けられているスタイルは、インラインまたは埋め込み CSS ブロックに基づいて追加されます。フォームに依存しないいくつかの一般的なスタイルは、カテゴリ名 xfaforms.profile が の CQ クライアントライブラリの一部です。
デフォルトのスタイル設定プロパティに加え、各フォーム要素には要素タイプ、名前、および他のプロパティに基づいた、特定の CSS クラスが含まれています。これらのクラスを使用し、独自の CSS を指定することで要素を再スタイル設定することができます。
デフォルトのスタイル設定とクラスについて詳しくは、「スタイルの概要」を参照してください。
サーバー側スクリプトと Web サービス
サーバーで実行されるようにマークされている、または Web サービスを呼び出すようにマークされているスクリプトは、必ずサーバーで実行されます。
クライアントスクリプトエンジンは:
- 現在のフォーム状態を JSON 形式で渡しながら、サーバーに同期呼び出しします。
- サーバー上でスクリプトまたは Web サービスを実行します。
- 新しい JSON 状態を生成します。
- 応答が返されるときにクライアントで新しい JSON 状態を結合します。
ローカライズのリソースバンドル
デフォルトで、Mobile Forms は英語、フランス語、ドイツ語、および日本語でサポートされています。要求ヘッダーで受信されるロケールに基づいて、それに対応するリソースバンドルがクライアントに送信されます。このリソースバンドルはカテゴリ名が xfaforms.I18N の CQ クライアントライブラリとして、プロファイル JSP に追加されます。プロファイルでロケールパッケージを取得するロジックを上書きします。
Sling コンポーネント(adobe-lc-forms-content-pkg.zip)
Sling パッケージにはプロファイルとプロファイルレンダラーに関係するコンテンツが含まれています。
プロファイル
プロファイルはフォームまたはフォームのファミリーを表現する Sling のリソースノードです。CQ レベルで、これらのプロファイルは JCR ノードです。ノードは JCR リポジトリの /content フォルダーにあり、/content フォルダー内のどのサブフォルダー内にでも含めることができます。
プロファイルレンダラー
Profile ノードに xfaforms/profile の値を持つ sling:resourceSuperType プロパティがあります。このプロパティは転送要求を内部的に /libs/xfaforms/profile フォルダーにある Profile ノードの Sling スクリプトに送信します。これらのスクリプトは、HTML フォームと必要な JS/CSS アーティファクトを組み合わせるためのコンテナである、JSP ページです。それらのページには、次への参照が含まれます。
- xfaforms.I18N.<locale>: このライブラリには、ローカライズされたデータが含まれています。
- xfaforms.profile: このライブラリには XFA スクリプティングとレイアウトエンジンの実装が含まれています。