AEM の Externalizer は、プログラムによってリソースパス(例:/path/to/my/page)を外部の絶対 URL(例:http://www.mycompany.com/path/to/my/page)に変換できるようにする OSGi サービスであり、その変換はパスに事前設定済みの DNS をプレフィックスとして付けることで実現します。
インスタンスが Web レイヤーの背後で実行されている場合、自身の外部向け URL がわかりません。また、リンクをリクエストスコープの範囲外で作成する必要がある場合があります。これらの理由で、このサービスは、そのような外部 URL を設定して組み立てるための一元化された場所を提供します。
このページでは、Externalizer サービスの設定方法と使用方法について説明します。詳しくは、関連する Javadoc を参照してください。
Externalizer サービスでは、プログラムによってリソースパスにプレフィックスを付けるために使用可能な複数のドメインを一元的に定義できます。各ドメインは一意の名前によって識別され、その名前を使用して、プログラムからそのドメインを参照できます。
Externalizer サービスのドメインマッピングを定義するには:
-
ドメインマッピングを定義します。マッピングは、次のようなコード内でドメインを参照するために使用できる一意の名前、スペース、ドメインにより構成されます。
<unique-name> [scheme://]server[:port][/contextpath]。各項目の意味は次のとおりです。- scheme は、通常は http または https ですが、ftp などになる場合もあります。必要に応じて、https リンクを適用する場合は https を使用します。URL の外部化を求めたときにクライアントコードでスキームがオーバーライドされていない場合は、https が使用されます。
- server はホスト名です(ドメイン名または IP アドレス)。
- port(オプション)はポート番号です。
- contextpath(オプション)は、AEM が異なるコンテキストパスの下の Web アプリケーションとしてインストールされている場合に限り設定します。
例:production http://my.production.instance
次のマッピング名は事前定義されており、AEM で使用されるので、常に設定されている必要があります。- local - ローカルインスタンス
- author - オーサリングシステムの DNS
- publish - 公開 Web サイトの DNS
注意:
カスタム設定によって、「production」、「staging」などの新しいカテゴリや、「my-internal-webservice」などの AEM 以外の外部システムでも追加できます。このような設定は、プロジェクトのコードベースの様々な場所でそのような URL をハードコーディングするのを避けるために有効です。
- scheme は、通常は http または https ですが、ftp などになる場合もあります。必要に応じて、https リンクを適用する場合は https を使用します。URL の外部化を求めたときにクライアントコードでスキームがオーバーライドされていない場合は、https が使用されます。
注意:
アドビでは、この設定をリポジトリに追加することをお勧めします。
ここでは、Externalizer サービスの使用方法に関するいくつかの例を紹介します。
JSP で Externalizer サービスを取得する:
Externalizer externalizer = resourceResolver.adaptTo(Externalizer.class);
「publish」ドメインを付与してパスを外部化する:
String myExternalizedUrl = externalizer.publishLink(resolver, "/my/page") + ".html";
ドメインが「publish http://www.website.com」にマッピングされるとすると、myExternalizedUrl は「http://www.website.com/contextpath/my/page.html」という値になります。
「author」ドメインを付与してパスを外部化する:
String myExternalizedUrl = externalizer.authorLink(resolver, "/my/page") + ".html";
ドメインが「author http://author.website.com」にマッピングされるとすると、myExternalizedUrl は「http://author.website.com/contextpath/my/page.html」という値になります。
「local」ドメインを付与してパスを外部化する:
String myExternalizedUrl = externalizer.externalLink(resolver, Externalizer.LOCAL, "/my/page") + ".html";
ドメインが「local http://publish-3.internal」にマッピングされるとすると、myExternalizedUrl は「http://publish-3.internal/contextpath/my/page.html」という値になります。
他の例については、関連する Javadoc を参照してください。