AEM は、拡張性が高く柔軟なテクノロジーに基づいて構築された実証済みの堅牢なプラットフォームです。このドキュメントでは、AEMを構成する様々な部分の詳細な概要を説明し、フルスタックAEM開発者向けの技術的な付録として用意されています。 はじめる前のガイドとしての意図はありません。AEM開発を初めておこなう場合は、 AEM Sitesの開発の手引き — WKND チュートリアル を最初のステップとして使用します。
AEM の中核技術に入る前に、『AEM Sites の開発の手引き - WKND チュートリアル』を完了することを推奨します。
最新のコンテンツ管理システムである AEM は次の標準的な Web テクノロジーに依存しています。
基になるコンテンツリポジトリとビジネスロジックのレイヤーは、Java™テクノロジーに基づいて構築されています。
Java™ コンテンツリポジトリ(JCR)の規格である JSR 283 では、コンテンツリポジトリ内で、任意の精度レベルでコンテンツに双方向アクセスするための、ベンダーにも実装にも依存しない方法が指定されています。仕様を主導しているのは、Adobe Research(スイス)AG です。
JCR API 2.0 パッケージである javax.jcr.*
が、リポジトリーコンテンツの直接アクセスと操作に使用されます。
AEM は JCR 上に構築されています。
Apache Jackrabbit Oak は、JCR 標準に準拠した最新のワールドクラスの Web サイトやその他の要求の厳しいコンテンツアプリケーションの基盤として使用する、スケーラブルで高パフォーマンスの階層コンテンツリポジトリーの実装です。
Jackrabbit Oak(単に Oak とも呼ばれる)は、AEM を構築する JCR 標準の実装です。
AEM は、コンテンツ指向アプリケーションの開発を容易にする REST 原則に基づく Web アプリケーションフレームワーク Sling を使用して構築されています。Sling は、Apache Jackrabbit Oak などの JCR リポジトリーをデータストアとして使用します。Sling は Apache Software Foundation に貢献してきました。詳しい情報は Apache にあります。
Sling を使用する場合、レンダリングされるコンテンツのタイプは最初の処理ではありません。代わりに、URL がコンテンツオブジェクトに解決され、そのオブジェクトに対してスクリプトを見つけてレンダリングを実行できるかどうかが主な考慮事項になります。 このプロセスは、要件に合わせて容易にカスタマイズ可能なページを作成する Web コンテンツ作成者に対して、優れたサポートを提供します。
この柔軟性の利点は、様々なコンテンツ要素を持つアプリ、または容易にカスタマイズできるページが必要な場合に明らかです。特に、AEM などの Web コンテンツ管理システムを実装する場合です。
Sling を使用した開発の概要について詳しくは、『15 分間でわかる Sling』を参照してください。
次の図は、Sling スクリプトの解決を説明しています。HTTP リクエストからコンテンツノード、コンテンツノードからリソースタイプ、リソースタイプからスクリプトへ、および使用可能なスクリプト変数を取得する方法を示します。
次の図は、で使用できる、非表示で強力なリクエストパラメーターを示しています SlingPostServlet
:すべてのハンドラーリクエストのデフォルトのPOSTハンドラー。 ハンドラーには、リポジトリ内のノードを作成、変更、削除、コピーおよび移動するための無限のオプションが用意されています。
Sling は コンテンツ中心の. つまり、(HTTP) 要求が JCR リソース(リポジトリノード)の形式でコンテンツにマッピングされるため、処理はコンテンツに焦点を当てます。
コンテンツ中心型の原理により、Sling は REST 指向のサーバーを実装するので、Web アプリケーションフレームワークの新しい概念を特徴としています。メリットは次のとおりです。
Sling では、処理はユーザーリクエストの URL によって実行されます。 適切なスクリプトで表示するコンテンツを定義し、URL から情報を抽出します。
次の URL の分析:
https://myhost/tools/spy.printable.a4.html/a/b?x=12
次の複合部品に分割できます。
プロトコル | ホスト | コンテンツのパス | セレクター | 拡張子 | 接尾辞 | params | |||
---|---|---|---|---|---|---|---|---|---|
https:// |
myhost |
/ |
tools/spy |
.printable.a4. |
html |
/ |
a/b |
? |
x=12 |
tools/spy.html
URL 分解の原則を使用します。
次の図に、使用するメカニズムを示します。このメカニズムについては、以降の節で詳しく説明します。
Sling を使用して、特定のエンティティをレンダリングするスクリプトを指定します(JCR ノードで sling:resourceType
プロパティを設定します)。このメカニズムは、リソースが複数のレンディションを持つことができるため、スクリプトがデータエンティティにアクセスするメカニズム(PHP スクリプトの SQL 文のように)よりも自由度が高くなります。
リクエストを分解し、必要な情報を抽出します。リポジトリーで、リクエストされたリソース(コンテンツノード)を検索します。
../content/corporate/jobs/developer.html
)にノードが存在するかどうかを確認します。../content/corporate/jobs/developer
)。また、Sling では JCR ノード以外のものをリソースにすることもできますが、この機能は高度な機能です。
適切なリソース(コンテンツノード)が見つかったら、 sling リソースタイプ 抽出されます。 このパスは、コンテンツのレンダリングに使用するスクリプトを探します。
sling:resourceType
によって指定されるパスは、次のいずれかです。
移植性を高めるため、相対パスが推奨されます。
すべての Sling スクリプトは、次の /apps
(可変、ユーザースクリプト)または /libs
(不変、システムスクリプト)。この順序で検索されます。
その他の注意点は次のとおりです。
jobs.POST.esp
AEM の特定のインスタンスでサポートされているスクリプトエンジンのリストは、Felix Management Console(http://<host>:<port>/system/console/slingscripting
)にあります。
以前の例を使用すると、sling:resourceType
が hr/jobs
の場合は、次のようになります。
.html
で終わる GET/HEAD リクエストと URL(デフォルトのリクエストタイプ、デフォルトの形式)
/apps/hr/jobs/jobs.esp
;の最後のセクション sling:resourceType
はファイル名を形成します。/apps/hr/jobs/jobs.POST.esp
です。.html
で終わらない、他の形式の URL
../content/corporate/jobs/developer.pdf
/apps/hr/jobs/jobs.pdf.esp
;サフィックスがスクリプト名に追加されます。print
;次に示すように ../content/corporate/jobs/developer.print.html
/apps/hr/jobs/jobs.print.esp
;セレクターがスクリプト名に追加されます。sling:resourceType
は次のように定義されます。
ResourceTypeProvider
がアクティブな場合 )。../content/corporate/jobs/developer.html
のスクリプトは、/apps/content/corporate/jobs/
で検索を生成します。.txt
),HTML(.html
)、および JSON (.json
) に書き込まれます。これらすべてには、ノードのプロパティ(適切な形式)が一覧表示されます。 拡張子 .res
のデフォルトのレンディション、または要求拡張子のない要求は、(可能な場合は)リソースをスプールします。/apps/sling/servlet/errorhandler
/libs/sling/servlet/errorhandler/404.jsp
特定のリクエストに複数のスクリプトが該当する場合は、一致率が最も高いスクリプトが選択されます。一致は具体的であるほど良くなります。つまり、リクエスト拡張子であれ、メソッド名の一致であれ、セレクターの一致が多いほど良くなります。
例えば、次のリソースにアクセスするためのリクエストについて考えます。
/content/corporate/jobs/developer.print.a4.html
タイプ
sling:resourceType="hr/jobs"
正しい場所に次のスクリプトのリストがあるとします。
GET.esp
jobs.esp
html.esp
print.esp
print.html.esp
print/a4.esp
print/a4/html.esp
print/a4.html.esp
この場合、優先順位は (8) - (7) - (6) - (5) - (4) - (3) - (2) - (1) となります。
リソースタイプに加えて ( 主に sling:resourceType
プロパティ )、リソースのスーパータイプも存在します。 このタイプは、 sling:resourceSuperType
プロパティ。 これらのスーパータイプは、スクリプトを検索する際にも検討されます。リソーススーパータイプの利点は、(デフォルトのサーブレットで使用される)デフォルトのリソースタイプ sling/servlet/default
が事実上のルートになるリソースの階層を形成できる点です。
リソースのリソーススーパータイプは次の 2 つの方法で定義できます。
sling:resourceSuperType
プロパティを使用。sling:resourceSuperType
が示すノードの sling:resourceType
プロパティを使用。次に例を示します。
/
a
b
sling:resourceSuperType = a
c
sling:resourceSuperType = b
x
sling:resourceType = c
y
sling:resourceType = c
sling:resourceSuperType = a
タイプの階層:
/x
[ c, b, a, <default>]
です/y
では
[ c, a, <default>]
です理由は、 /y
には sling:resourceSuperType
プロパティは、一方で /x
ではなく、したがって、そのスーパータイプがそのリソースタイプから取得されます。
Sling 内では、REST サーバーの厳密な概念を破るので、スクリプトを直接呼び出すことはできません。リソースと表示域を混在させることができます。
表現(スクリプト)を直接呼び出す場合、リソースがスクリプト内に隠蔽されるので、フレームワーク(Sling)では認識できなくなります。これにより、次のような機能が失われます。
sling:resourceType
内の POST.jsp
スクリプトSling API パッケージを使用します。 org.apache.sling.*
、およびタグライブラリ。
最後の考慮事項は、スクリプト内にある既存の要素の参照の必要性です。
より複雑なスクリプト(集計スクリプト)は、複数のリソース(ナビゲーション、サイドバー、フッター、リストの要素など)にアクセスし、 リソース.
この場合、 sling:include("/<path>/<resource>")
コマンドを使用します。 これにより、参照されるリソースの定義が効果的に含まれます。
OSGi(Open Services Gateway Initiative) は、モジュラーアプリケーションおよびライブラリ (Java™用ダイナミックモジュールシステムとも呼ばれます ) を開発およびデプロイするためのアーキテクチャを定義します。 OSGi コンテナを使用すると、アプリケーションを個々のモジュール(追加のメタ情報を含む jar ファイルで、OSGi 用語でバンドルと呼ばれます)に分割し、それらの間の相互依存関係を次の機能で管理できます。
これらのサービスおよび契約によって提供されるアーキテクチャでは、コラボレーションのために個々の要素が相互に動的に検出し合うことができます。
その後、OSGi フレームワークは、再起動を必要とせずに、これらのバンドルの動的な読み込み/アンロード、設定、制御を提供します。
OSGi テクノロジーについて詳しくは、OSGi Web サイトを参照してください。
特に、基礎教育に関するページには、プレゼンテーションやチュートリアルのコレクションが収められています。
このアーキテクチャを使用すると、Sling をアプリケーション固有のモジュールで拡張できます。 Sling、つまり AEM は、OSGi の Apache Felix 実装を使用します。どちらも、OSGi フレームワーク内で実行される OSGi バンドルの集まりです。
この機能を使用すると、インストール内の任意のパッケージに対して、次の操作を実行できます。
詳しくは、「AEM as a Cloud Service の OSGI の設定」を参照してください。
以下のリストは、リポジトリ内で見られる構造の概要を示しています。
/apps
- アプリケーション関連。Web サイトに固有のコンポーネント定義が含まれます。開発するコンポーネントは、/libs/core/wcm/components
で提供されている標準搭載のコンポーネントに基づくことができます。/content
-/etc
/home
- ユーザーおよびグループの情報。/libs
- AEM のコアに属するライブラリと定義。のサブフォルダー /libs
は、標準のAEM機能を表します。 /libs
内のコンテンツは変更できません。Web サイトに固有の機能は、/apps
の下に作成する必要があります。/tmp
- 一時作業領域。/var
- システムによって変更および更新されるファイル監査ログ、統計、イベント処理など。この構造、またはその中のファイルの変更は、注意して行う必要があります。変更が及ぼす影響を十分に理解しておく必要があります。
/libs
パス内は一切変更しないでください。設定やその他の変更を行う場合は、次の場所から項目をコピーします。 /libs
から /apps
内で変更を加えます。 /apps
.