このドキュメントは次の内容について説明します。
AEM ポータルのアーキテクチャには、ポータルおよびポートレットの定義が含まれます。
ポータルとは、パーソナライゼーション、シングルサインオン、様々なソースからのコンテンツ統合の機能を備え、情報システムのプレゼンテーションレイヤーをホストする Web アプリケーションです。
AEM では JSR 286 準拠のポートレットを実行できます。ポートレットコンポーネントによって、ページにポートレットを埋め込むことができます。AEM コンテンツポートレットの管理を参照してください。
ポートレットとは、動的コンテンツを生成するコンテナ内部にデプロイされる Web コンポーネントです。ポートレットインターフェイスは .war ファイルとしてパッケージ化され、ポートレットコンテナ内にデプロイされます。AEM をポータルとして実行している場合、ポートレットを実行するには、そのポートレットの .war ファイルが必要になります。
ポータルに表示するように AEM コンテンツを設定するには、ポートレットでの AEM のインストール、設定および使用を参照してください。
AEM Portal Director は、AEM 6.4 以降では使用されなくなりました。廃止される機能および削除された機能を参照してください。
AEM コンテンツポートレットでは、ポータル内に AEM コンテンツを表示できます。このポートレットは /crx-quickstart/opt/portal
にあり、様々な方法でカスタマイズできます。例えば、必要な AEM の認証情報を生成する独自の認証サービスをデプロイしてデフォルトの動作を上書きすることで、SSO/認証処理をカスタマイズできます。プラグインで定義済みの API を使用し、この API に対してプラグインを作成して、独自の機能を追加できます。プラグインは実行中のポートレットにデプロイできます。適切に機能させるには、AEM オーサーインスタンスとパブリッシュインスタンスの設定と、起動時に表示するコンテンツパスが必要になります。
一部の設定はポートレット環境設定によって変更できますが、その他の設定の変更は OSGi サービス設定で行います。設定の変更には、config ファイルまたは OSGi Web コンソールを使用します。
ポートレット環境設定は、ポータルサーバー内へのデプロイ時に設定するか、ポートレット Web アプリケーションのデプロイ前に WEB-INF/portlet.xml ファイルを編集して設定することができます。デフォルトでは portlet.xml ファイルは次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<portlet-app xmlns="https://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd /opt/SUNWps/dtd/portlet.xsd"
version="1.0">
<portlet>
<portlet-name>RSSWeatherPortlet</portlet-name>
<portlet-class>org.jboss.portlet.weather.WeatherPortlet</portlet-class>
<init-param>
<name>default_zipcode</name>
<value>05673</value>
</init-param>
<init-param>
<name>RSS_XSL</name>
<value>/WEB-INF/Rss.xsl</value>
</init-param>
<init-param>
<name>base_url</name>
<value>https://xml.weather.yahoo.com/forecastrss?p=</value>
</init-param>
<expiration-cache>180</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>VIEW</portlet-mode>
<portlet-mode>EDIT</portlet-mode>
</supports>
<portlet-info>
<title>Weather Portlet</title>
</portlet-info>
<portlet-preferences>
<preference>
<name>expires</name>
<value>180</value>
</preference>
<preference>
<name>RssXml</name>
<value>https://xml.weather.yahoo.com/forecastrss?p=33145</value>
<read-only>false</read-only>
</preference>
</portlet-preferences>
</portlet>
</portlet-app>
ポートレットは次の環境設定を使用して設定できます。
startPath | ポートレットの開始パス。最初に表示されるコンテンツを定義します。 重要:ポートレットを / 以外のコンテキストパスで実行している AEM オーサーインスタンスおよびパブリッシュインスタンスに接続するように設定する場合は、(Felix Web コンソールなどを使用して)これらの AEM インスタンスの HTML ライブラリマネージャー設定で強制 CQUrlInfo を有効にする必要があります。そうしなければ、編集が機能せず、環境設定ダイアログが表示されません。 |
htmlSelector | 各 URL に追加されるセレクター。デフォルトでは portlet であり、HTML ページへのすべてのリクエストが、.portlet.html で終わる URL を使用します。このセレクター設定により、ポートレットのレンダリングのために、AEM 内でカスタムスクリプトを使用できるようになります。 |
addCssToPortalHeader | デフォルトでは、AEM からの HTML ページにインクルードされる CSS ファイルが、ポートレットにインクルードされます。このオプションを無効にすると、このデフォルトの CSS ファイルがインクルードされません。 このオプションを有効にすると、ポータルの状態に応じて、CSS ファイルが HTML ページの head 部に追加されるか、HTML ページ内に埋め込まれます。 |
includeToolbar | デフォルトで、管理用のツールバーがコンテンツポートレット内部にレンダリングされます。このオプションを無効にすると、ツールバーがレンダリングされなくなります。 |
urlParameterNames | ポートレット用に表示する新しいコンテンツ URL を含む代替 URL パラメーター名のリスト。このリストは上から順に処理され、値が格納された最初のパラメーターが使用されます。URL が見つからない場合は、デフォルトの URL パラメーターが使用されます。指定した URL は、それ以上変更されずに指定したとおりに使用されます。 この設定はデプロイされたポートレットごとの設定ですが、OSGi 設定で「Day Portal Director Portlet Bridge」に対して一部の URL パラメーターをグローバルに設定することもできます。 |
preferenceDialog | AEM 内の環境設定ダイアログへのパス。空白の場合、組み込みの環境設定ダイアログが使用されます。ダイアログのデフォルトは、/libs/portal/content/prefs.html です。 |
initialRedirect | デフォルトでは、ポートレットは最初の呼び出し時にポータルページ全体の JavaScript リダイレクトを実行します。これは、最新型ポータルサーバーのドラッグ&ドロップシナリオに対応するための設定です。実稼動環境ではこのリダイレクトはほとんど必要ないので、この環境設定を false に設定してオフにすることができます。 |
ポータルサーバーがホスト localhost、ポート 8080 で実行され、AEM ポートレット Web アプリケーションが Web アプリケーションコンテキスト cqportlet にマウントされていると想定すると、Web コンソールの URL は https://localhost:8080/cqportlet/cqbridge/system/console
になります。デフォルトのユーザー名とパスワードは admin です。
「Configurations」タブを開き、「Portal Directory CQ Server Configuration」を選択します。ここでオーサーインスタンスおよびパブリッシュインスタンスのベース URL を指定します。この手順については、ポートレットの設定で説明します。
OSGi Web コンソールの使用は、開発中(またはテスト中)の設定を変更する場合のみを想定しています。実稼動システムでは、このコンソールへのリクエストをブロックするようにしてください。
自動的なデプロイおよび設定のプロビジョニングをサポートするために、AEM コンテンツポートレットには、ポートレットアプリケーションに指定されたクラスパスから設定を読み取る設定補助機能が組み込まれています。
起動時に、システムプロパティの com.day.cq.portet.config が読み取られ、現在の環境が検出されます。通常、このプロパティの値は dev、prod、test などになります。環境を設定していない場合、設定は読み取られません。
環境を設定している場合、クラスパス com/day/cq/portlet/{env}.config で config ファイルが検索されます(env はその環境の実際の値に置き換えられます)。このファイルに、その環境のすべての設定ファイルを一覧で指定しておく必要があります。これらのファイルは、config ファイルからの相対位置として検索されます。例えば、ファイルに my.service.xml,
行が含まれている場合、 このファイルは、クラスパス com/day/cq/portlet/my.service.config.
から読み取られます。ファイルの名前は、サービスの永続性 ID に .config を付けたものになります。 先ほどの例では、永続性 ID は my.service です。設定ファイルの形式は、Apache Sling OSGi インストーラーによって使用されている形式と同じです。
つまり、環境ごとに、対応する config ファイルを追加する必要があります。すべての環境に適用される設定については、これらすべてのファイルに入力する必要があります。1 つの環境にのみ適用される設定については、そのファイルだけに入力します。このメカニズムによって、どの環境でどの設定を読み取るのかを完全に管理できます。
環境を検出するために、異なるシステムプロパティを使用することも可能です。そのためには、システムプロパティ com.day.cq.portet.configproperty を指定し、このプロパティに、com.day.cq.portet.config の代わりに使用するシステムプロパティ名を設定します。
ポートレットは、デフォルト設定の場合、AEM WCM から受け取ったレスポンスをユーザー固有のキャッシュ内にキャッシュします。パブリッシュインスタンスのコンテンツ内で変更がおこなわれた場合、このキャッシュを無効にする必要があります。この目的で、AEM WCM ではオーサーインスタンス上でレプリケーションエージェントを設定する必要があります。キャッシュは手動でフラッシュすることもできます。ここでは、これらの手順について説明します。
ポートレットには独自のキャッシュを設定でき、それによって AEM にアクセスしなくてもポートレット内のコンテンツを表示できます。ポータルは /libs/portal/director 内にコンテンツとして配置されます。コンテンツにアクセスするには、AEM インスタンスを起動して、CRXDE Lite または WebDav を使用してその場所からファイルをダウンロードします。
このバンドルは実行時にデプロイするか、デプロイ前にポートレット Web アプリケーションの WEB-INF/lib/resources/bundles
に追加します。
キャッシュがデプロイされた後は、ポートレットによってパブリッシュインスタンスからコンテンツがキャッシュされます。ポートレットのキャッシュは、AEM から Dispatcher をフラッシュすることで無効にすることができます。独自のキャッシュを使用するようにポートレットを設定するには:
https://localhost:8080/cqportlet/cqbridge/cqpcache?Path=$(path)
になります。GET メソッドを使用してください。通常の Dispatcher の無効化と同様に、レプリケーションエージェントもポータルの AEM ポートレットキャッシュをターゲットとするように設定できます。レプリケーションエージェントの設定後、通常のページのアクティベートがおこなわれるたびにポータルのキャッシュがフラッシュされます。
AEM ポートレットを実行する複数のポータルノードを運用している場合、この手順で示すとおりノードごとにエージェントを作成する必要があります。
ポータルのレプリケーションエージェントを設定するには:
オーサーインスタンスにログインします。
「Web サイト」タブで、「ツール」タブをクリックします。
レプリケーションエージェントの新規メニューで、「新しいページ」をクリックします。
「テンプレート」で、「レプリケーションエージェント」を選択し、エージェントの名前を入力します。「作成」をクリックします。
作成したレプリケーションエージェントをダブルクリックします。このエージェントはまだ設定されていないので、無効として表示されます。
「編集」をクリックします。
「設定」タブで、「有効」チェックボックスを選択し、シリアル化の種類として「Dispatcher Flush」を選択し、再試行のタイムアウト値(例:60000)を入力します。
「トランスポート」タブをクリックします。
「URI」フィールドに、ポートレットのフラッシュ URI(URL)を入力します。URL は次の形式です。
https://<wps-host>:<port>/<wps-context>/<cq5-portlet-context>/cqbridge/cqpcache
「拡張」タブをクリックします。
「HTTP メソッド」フィールドに 「GET」 と入力します。
「HTTP ヘッダー」フィールドで + をクリックし、新しいエントリおよびタイプとして Path: {path} を追加します。
必要に応じて、「プロキシ」タブをクリックし、エージェントのプロキシ情報を入力します。
「OK」をクリックして、変更を保存します。
接続をテストするには、「接続をテスト」リンクをクリックします。レプリケーションのテストが成功したかを示すログメッセージが表示されます。次に例を示します。
レプリケーションエージェントに対して設定したものと同じ URL にアクセスして、ポートレットのキャッシュを手動でフラッシュすることができます。URL の形式については、キャッシュのフラッシュを参照してください。また、フラッシュ対象を示すには、URL パラメーターの Path=<path> を使用してこの URL を拡張する必要があります。
次に例を示します。
https://10.0.20.99:10040/wps/PA_CQ5_Portlet/cqbridge/cqpcache?Path=*
キャッシュ全体をフラッシュします。 キャッシュからhttps://10.0.20.99:10040/wps/PA_CQ5_Portlet/cqbridge/cqpcache?Path=/content/mypage/xyz
が/content/mypage/xyz
をフラッシュします。
ポータルが認証メカニズムを主導します。AEM には、テクニカルユーザー、ポータルユーザー、グループなどを使用してログインできます。ポートレットにはポータル内のユーザーのパスワードにアクセスする権限がないので、ポートレットがユーザーを正常にログインさせるためのすべての資格情報を知らない場合は、SSO ソリューションを使用する必要があります。この場合、AEM ポートレットは必要なすべての情報を AEM に転送し、さらに AEM がこの情報を基盤の AEM リポジトリに転送します。この動作はプラガブルで、カスタマイズ可能です。
ここでは、ポートレットが基盤の AEM WCM インスタンスとの通信時で使用できる認証モードについて説明します。
デフォルトでは、AEM のパブリッシュインスタンスにはユーザー情報が送信されません。コンテンツは常に匿名ユーザーとして表示されます。ユーザー固有の情報が AEM から配信される場合、または公開用のユーザー認証が必要な場合は、その設定をオンにする必要があります。
ポートレットが AEM WCM インスタンス内で使用する認証設定オプションは、Web コンソール(OSGi 設定)で設定できます。
AEM で作業をする際に、OSGi サービスの設定を管理する方法がいくつかあります(コンソールまたはリポジトリノード)。
詳しくは、OSGi の設定を参照してください。
ポートレットの認証設定にアクセスするには:
次の URL にある Web コンソールにアクセスします。
https://localhost:8080/cqportlet/cqbridge/system/console
デフォルト設定での例:
https://wps-host:10040/wps/PA_CQ5_Portlet/cqbridge/system/console
Web コンソールにログインします。デフォルトの資格情報は、admin/admin
です。
コンソールで、「Configuration」を選択します。
Configuration メニューで、設定する特定のサービスを選択します。サービスは、OSGi フレームワーク内のポートレットによって提供されます。
サービス名 | 説明 |
---|---|
Day Portal Director Authenticator | AEM WCM インスタンスに対して使用する認証モードを設定します。選択したモードに応じて、テクニカルユーザーまたは SSO cookie の名前を指定できます。また、AEM WCM パブリッシュインスタンスに対する認証を有効にすることができます。 |
Day Portal Director File Cache | ポートレットが AEM WCM インスタンスから受け取ったレスポンスをどのようにキャッシュするかに関するパラメーターを設定します。 |
Day Portal Director HTTP Client Service | ポートレットが基盤の AEM WCM インスタンスに HTTP 接続する方法を設定します。例えば、プロキシサーバーを指定できます。 |
Day Portal Director Locale Handler | ポートレットがサポートするロケールを設定します。AEM WCM インスタンスへのリクエストはユーザーのロケールに基づいています。例えば、ユーザーの言語が「ドイツ語」の場合、/content/geometrixx/de/ にリクエストされます。 |
Day Portal Director Privilege Manager | ポートレットで、現在ログインしているユーザーに基づいて「Web サイト」タブの検証をおこなうかどうかを設定します。 |
Day Portal Director Toolbar Renderer | ポートレットのツールバーのレンダリング方法をカスタマイズします。 |
さらに、Web コンソールとロギングサービスを設定できます。例えば、「Apache Felix OSGi Management Console」リンクをクリックして、Web コンソールの管理者の資格情報を変更できます。
デフォルトのモードでは、現在のポータルユーザーに関係なく、AEM WCM オーサーインスタンスに対してポートレットから発行されたすべてのリクエストが、同じテクニカルユーザーを使用して認証されます。テクニカルユーザーモードはデフォルトで有効です。OSGi 管理コンソールの該当する設定画面で、このモードを有効または無効にすることができます。
指定されたテクニカルユーザーは AEM WCM オーサーインスタンスに存在する必要があり、公開時の認証が有効な場合は、パブリッシュインスタンスにも存在する必要があります。オーサリング用の十分なアクセス権限をそのユーザーに付与するようにしてください。
ポートレットでは、AEM によって SSO が標準でサポートされます。オーセンティケーターサービスが SSO を使用し、現在のポータルユーザーを cqpsso
という cookie として Basic 形式で AEM に送信するように設定することができます。AEM は、パス / に対して SSO 認証ハンドラーを使用するように設定する必要があります。cookie 名をもここで設定する必要があります。
それに従って、AEM リポジトリの crx-quickstart/repository/repository.xml
も次のように設定する必要があります。
<LoginModule class="com.day.crx.security.authentication.CRXLoginModule">
...
<param name="trust_credentials_attribute" value="TrustedInfo"/>
<param name="anonymous_principal" value="anonymous"/>
</LoginModule>
ポートレットでは、シングルサインオン(SSO)スキームを使用して AEM WCM の認証をおこなうことができます。このモードでは、ポータルに現在ログインしているユーザーが SSO cookie の形式で AEM WCM に転送されます。SSO モードを使用している場合、AEM ポートレットへのアクセス権を持つすべてのポータルユーザーの情報が基盤の AEM WCM インスタンスに存在する必要があります。通常は、AEM WCM が LDAP に接続する形式をとるか、事前にユーザーを手動で作成しておきます。また、ポートレット内で SSO を有効にする前に、基盤の AEM WCM オーサーインスタンス(および公開時の認証が有効な場合のパブリッシュインスタンス)を、SSO ベースのリクエストを受け入れるように設定しておく必要もあります。
ポートレットが SSO 認証モードを使用するように設定するには、次の手順を実行します(各手順については、以降の節で詳しく説明します)。
AEM WCM で SSO を有効にする前に、基盤のリポジトリが AEM WCM によって提供される信頼された資格情報を受け入れるように設定する必要があります。そのためには、AEM の repository.xml を設定します。
AEM WCM がインストールされているファイルシステムで、次のファイルを開きます。
//crx-quickstart/repository/repository.xml
この XML ファイル内で LoginModule のエントリを探し、その設定に対して trust_credentials_attribute を追加します。
<LoginModule class="com.day.crx.security.authentication.CRXLoginModule">
...
<param name="trust_credentials_attribute" value="TrustedInfo"/>
<param name="anonymous_principal" value="anonymous"/>
</LoginModule>
変更を適用するために AEM WCM を再起動します。
AEM WCM で SSO を有効にするには、AEM WCM の Apache Felix Web 管理コンソール(OSGi)で関連する設定エントリにアクセスします。
URI の https://<AEM-host>:<port>/system/console を使用してコンソールにアクセスします。
Configuration メニューで、「SSO Authentication Handler」を選択します。この例では、SSO ハンドラーは AEM ポートレットによって提供された cookie に基づいて、すべてのパスの SSO リクエストを受け入れます。実際の設定はこれとは異なる可能性があります。
パス | / | すべてのリクエストに対して SSO ハンドラーを有効にします。 |
---|---|---|
Cookie Names | cqpsso | ポートレットの OSGi コンソール内で設定されている、ポートレットによって提供される cookie の名前。 |
「Save」をクリックして SSO を有効にします。これで、SSO が主要認証スキームになりました。
AEM WCM が受け取るすべてのリクエストに対して、最初に SSO ベースの認証が試行されます。認証に失敗した場合、通常の基本認証スキームへのフォールバックが実行されます。このように、SSO を使用しない通常の AEM WCM への接続も引き続き可能です。
基盤の AEM WCM インスタンスが SSO リクエストを受け入れるようにするために、ポートレットの認証モードを「Technical」から「SSO」に切り替える必要があります。
AEM ポートレットで SSO 認証を有効にするには:
URI の https://<aem-host>:<port>/system/console を使用してコンソールにアクセスします。
Configuration メニューで、使用可能な設定のリストから「Day Portal Director Authenticator」を選択します。
「Mode」で、「SSO」を選択します。それ以外のパラメーターについてはデフォルト値のままにします。
「Save」をクリックして、ポートレットの SSO を有効にします。
検証のために、ポータルの管理者ユーザーでポートレットにアクセスします(AEM WCM で管理者権限を持つ同じユーザーを作成後)。
この手順の実行後、リクエストが SSO を使用して認証されるようになります。典型的な HTTP 通信のスニペットを見ると、次のような SSO およびポートレット固有のヘッダーが含まれています。
C-12-#001898 -> [GET /mynet/en/_jcr_content/par/textimage/image.img.png HTTP/1.1 ]
C-12-#001963 -> [cq5:locale: en ]
C-12-#001979 -> [cq5:used-locale: en ]
C-12-#002000 -> [cq5:locales: en,en_US ]
C-12-#002023 -> [cqp:user: wpadmin ]
C-12-#002042 -> [cqp:portal: IBM WebSphere Portal/6.1 ]
C-12-#002080 -> [cqp:windowid: 7_CGAH47L000CE302V2KFNOG0084 ]
C-12-#002124 -> [cqp:windowstate: normal ]
C-12-#002149 -> [cqp:portletmode: view ]
C-12-#002172 -> [User-Agent: Jakarta Commons-HttpClient/3.1 ]
C-12-#002216 -> [Host: 10.0.0.68:4502 ]
C-12-#002238 -> [Cookie: $Version=0; cqpsso=Basic+d3BhZG1pbg%3D%3D ]
C-12-#002289 -> [ ]
AEM コンテンツポートレットのデフォルトのインライン編集機能を使用せずに、ポータル外部の AEM オーサーインスタンス内で直接、ポートレットのオーサリングや管理をおこなう必要がある場合、PIN 認証を有効にする必要があります。また、管理関係のボタンの設定を変更する必要があります。
Web サイトの管理ページを開くか、ポートレットからページを編集する際に、AEM コンテンツポートレットでこの新しい PIN 認証が使用されます。PIN 認証はデフォルトで無効です。そのため、次の設定変更を AEM 内でおこなう必要があります。
repository.xml ファイル内に信頼された情報を追加して、AEM で信頼された認証を有効にします。
<LoginModule class="com.day.crx.security.authentication.CRXLoginModule">
...
<param name="trust_credentials_attribute" value="TrustedInfo"/>
</LoginModule>
OSGi 設定コンソール(デフォルトの場所は https://localhost:4502/system/console/configMgr)で、ドロップダウンメニューから「CQ PIN Authentication Handler」を選択します。
「URL Root Path」パラメーターを編集し、「/」という 1 文字だけを入力します。
ポートレットの一部の機能は権限によって保護されます。現在のユーザーがその機能にアクセスするには、そのための権限を持っている必要があります。次の権限が事前に定義されています。
権限の管理方法として最適なのは、ポータルの役割を使用して、役割をそれらの権限に割り当てることです。これは OSGi 設定によって実行できます。「Day Portal Director Privilege Manager」に、権限ごとの一連の役割を設定できます。ユーザーがその役割のいずれかを持っている場合、対応する権限を持っていることになります。
さらに、この役割ベースのアクセス権をポートレットのインスタンスごとに定義することも可能です。ポートレットの環境設定ダイアログに、上記の権限のそれぞれに関する入力フィールドが表示されます。権限ごとに、ポートレットの役割をコンマ区切りで指定したリストを設定できます。値を設定したら、その値が「Day Portal Director Privilege Manager」サービスのグローバル設定よりも優先されます。また、役割がマージされないので、場合によっては、このグローバル設定と同じ役割を追加する必要があります。値を指定しない場合は、グローバル設定が使用されます。
指定した AEM ポートレットアプリケーションによって、AEM と同様に、Web アプリケーション内部で OSGi コンテナが開始されます。このアーキテクチャによって、次のような OSGi の利点をすべて活かすことができます。
ツールバーとその内部のボタンは設定可能で、カスタマイズ可能です。ツールバーに独自のボタンを追加したり、各モードで表示するボタンを定義したりすることができます。各ボタンは 1 つの OSGi サービスであり、OSGi 設定によって設定可能です。
OSGi Web コンソールの「Configuration」タブに、すべてのボタンの設定が一覧表示されます。ボタンごとに、そのボタンを表示するモードを定義できます。例えばすべてのモードを削除して、ボタンを無効にすることができます。
デフォルトで、AEM コンテンツポートレットではインライン編集機能を使用しますが、AEM オーサーインスタンスに切り替えて編集したい場合は、「SiteAdmin Button」と「ContentFinder Button」を有効にして、「Edit Button」を無効にします。この場合、AEM で PIN 認証を適切に設定してください。
ポートレットの Felix Web コンソールからバンドルをインストールして、ポートレットのツールバーレイアウトをカスタマイズできます。このバンドル内の定義済みの場所に、カスタムの CSS/HTML があります。
バンドル構造の例を次に示します。
$ jar tvf target/toolbarlayout-0.0.1-SNAPSHOT.jar | awk '{print $8}'
META-INF/
META-INF/MANIFEST.MF
/com/day/cq/portlet/toolbar/layout/
/com/day/cq/portlet/toolbar/layout/author.gif
/com/day/cq/portlet/toolbar/layout/back.gif
/com/day/cq/portlet/toolbar/layout/button.html
/com/day/cq/portlet/toolbar/layout/edit.gif
/com/day/cq/portlet/toolbar/layout/manage.html
/com/day/cq/portlet/toolbar/layout/publish.html
/com/day/cq/portlet/toolbar/layout/refresh.gif
/com/day/cq/portlet/toolbar/layout/siteadmin.gif
/com/day/cq/portlet/toolbar/layout/toolbar.css
META-INF フォルダーには、バンドルとして識別するために OSGi によって要求される MANIFEST.MF ファイルが含まれています。このファイルの内容は次のとおりです。
Manifest-Version: 1.0
Built-By: djaeggi
Created-By: Apache Maven Bundle Plugin
Import-Package: com.day.cq.portlet.toolbar.layout
Bnd-LastModified: 1234178347159
Export-Package: com.day.cq.portlet.toolbar.layout
Bundle-Version: 0.0.1.SNAPSHOT
Bundle-Name: Company CQ5 Portal Director Portlet Toolbar Layout
Bundle-Description: This bundle provides a custom layout for the CQ5 P
ortal Director Portlet Toolbar.
Build-Jdk: 1.5.0_16
Bundle-ManifestVersion: 2
Bundle-SymbolicName: com.day.cq.portlet.company.toolbarlayout
Tool: Bnd-0.0.255
HTML、CSS または画像が /com/day/cq/portlet/toolbar/layout フォルダー内にあるということはポートレットの必須条件とされており、変更することはできません。同じように、MANIFEST.MF の Import-Package ヘッダーと Export-Package ヘッダーでも /com/day/cq/portlet/toolbar/layout を指定する必要があります。Bundle-SymbolicName は、一意の完全修飾パッケージ名である必要があります。
Maven などのツールを使用してこのバンドルをビルドするか、ここで説明する関連ヘッダーを含む JAR ファイルを手動で作成することができます。
ポートレットのツールバーには、基本的に 2 つのビューの状態があります。それぞれのビューと関連するボタンは、対応する各 HTML ファイルでカスタマイズできます。
公開ビューには、ツールバーを管理ビューに切り替えるボタン 1 つだけがあります。公開ビューは、以前のバンドル内の publish.html ファイルによって表されます。この HTML では、次のプレースホルダーを使用できます。このプレースホルダーはレンダリング時にポートレットによって、対応するコンテンツに置き換えられます。
プレースホルダー文字列 | 説明 |
---|---|
プレースホルダーが「管理」ボタンに置き換えられます。管理ボタンは、ポートレットの状態を管理状態に切り替えます。 |
管理表示には、「編集」、「Web サイト」タブ、「更新」および「戻る」の 4 つのボタンがあります。管理ビューは、以前のバンドル内の manage.html ファイルによって表されます。この HTML では、次のプレースホルダーを使用できます。このプレースホルダーはレンダリング時にポートレットによって、対応するコンテンツに置き換えられます。
プレースホルダー文字列 | 説明 |
---|---|
プレースホルダーが「編集」ボタンに置き換えられます。編集ボタンは、現在のページを含む新しいウィンドウを AEM の編集モードで開きます。 | |
AEM WCM の「Web サイト」タブを開くボタンに置き換えられるプレースホルダーです。 | |
現在のビューを更新します。 | |
ポートレットを公開ビューに戻します。 |
表示されるビューを問わず、ボタンには button.html に定義された同じ共通の HTML が使用されます。
この HTML では、次のプレースホルダーを使用できます。このプレースホルダーはレンダリング時にポートレットによって、対応するコンテンツに置き換えられます。
プレースホルダー文字列 | 説明 |
---|---|
ボタンの名前(例:author、back、refresh など)。 | |
ボタンの CSS ID。 | |
ボタンのターゲット URL。 | |
ボタンのラベル。 | |
JavaScript の onclick 関数({url} が含まれる)。 |
button.html ファイルの例:
<div class="cqp_button">
<a href="#" onclick="{onclick}">
<img src="/wps/PA_CQ5_Portlet/cqbridge/static/{id}.gif" alt="{text}"
title="{text}"/>
</a>
</div>
カスタムレイアウトをインストールするには、ポートレットの OSGI Web コンソールの「Bundles」セクションにアクセスしてバンドルをアップロードします。
インストール用のパッケージをアップロードまたは作成する必要がある場合は、詳しい説明について AEM ドキュメントのパッケージマネージャーを参照してください。
すべてのリンクは、ポータルのコンテキスト内で動作するように書き換えられます。デフォルトで、レンダリングパラメーターを含むリンクが使用されます。代わりにアクションリンクを使用するように Portal Director HTML Rewriter を設定することもできます。
また、コンテンツパスを表示するために問い合わせられる追加のリクエストパラメーターを定義することもできます。これは、例えば外部から特定のコンテンツへのリンクがある場合に便利です。
さらに、Portal Director HTML Rewriter に、リンクの書き換え除外を定義するための正規表現のリストを設定することができます。例えば、外部システムへの相対リンクがある場合、それらのリンクをこの除外リストに追加する必要があります。
AEM コンテンツポートレットにはローカリゼーション機能が組み込まれています。この機能によって、AEM のコンテンツが適切な言語で表示されるようになります。
ローカリゼーションは次の 2 つの手順で実行されます。
/content/geometrixx/en/company.html
/)を取得し、設定に従って、en を実際のユーザーのロケールに書き換えます。Portal Director Locale Handler には、ロケール情報をチェックするためのパスを設定できます。通常、この設定には /content
以下のすべてと、パス内のロケール情報の位置が含まれます。Portal Director Locale Handler はデフォルトで、AEM 内の多言語サイトの推奨構造に従います。
パス内のロケール情報を処理するための厳格なルールがないサイトの場合は、ロケールハンドラーを独自の実装に置き換えることが可能です。
オプションの OSGi サービスを実装して、ポートレットの様々な部分をカスタマイズできます。各サービスが 1 つの Java インターフェイスに対応します。このインターフェイスを実装して、バンドルによってポートレットにデプロイすることができます。
RequestTracker | リクエストトラッカーは、ポートレットによってコンテンツが表示されるときに常に通知を受けます。リクエストトラッカーを使用して、ポートレットの呼び出しを追跡できます。 |
InvocationContextListener | ポートレットへの各リクエストの最初と最後に呼び出されるリスナー。このリスナーを使用して、現在のリクエストの情報を変更したり追加したりすることができます。 |
ErrorHandler | レンダリングフェーズでのエラーを処理するカスタムエラーハンドラー。 |
HttpProcessor | このサービスを使用して、AEM への各 HTTP 呼び出しに情報を追加できます。 |
PortletAction | ポートレットに独自のアクションを追加します。このアクションは、ポートレットのアクションリンクから呼び出すことができます。 |
PortletDecoratorService | このサービスを使用して、ポートレットのコンテンツを修飾することができます。 |
ResourceProvider | 独自のリソースプロバイダーを追加して、ポートレットのリソースリンク経由で何らかのリソースをクライアントに送信します。 |
TextMapper | HTML、CSS および JavaScript ファイルの後処理ができます。 |
ToolbarButton | ツールバーに独自のボタンを追加します。 |
UrlMapper | カスタム URL マッピングまたは書き換えを適用するためのサービスを追加します。 |
UserInfoProvider | ユーザーに関する独自の情報を追加します。このサービスを使用して、ポータルからポートレットに渡す情報を取得できます。 |
次のサービスには、コンテンツポートレット内にデフォルト実装(と対応する Java インターフェイス)があります。カスタマイズするには、新しいサービス実装を含むバンドルをポートレットアプリケーションにデプロイする必要があります。
そのサービスを実装する際に、サービスの service.ranking プロパティに正の値を必ず設定するようにしてください。デフォルトの実装ではランク 0 が使用され、ポートレットは最もランキングの高いサービスを使用します。
名前 | 説明 | デフォルトの動作 |
---|---|---|
Authenticator | AEM に認証情報を提供します。 | 作成者と公開の両方に対して、設定可能なテクニカルユーザーを使用します。または、SSO を使用できます。 |
HTMLRewriter | リンク、画像などを書き換えます。 | AEM リンクをポータルリンクへ書き換える操作は、UrlMapper と TextMapper によって拡張できます。 |
HttpClientService | すべての HTTP 接続を処理します。 | 標準実装です。 |
LocaleHandler | ロケール情報を処理します。 | リンクをロケールに合ったコンテンツに書き換えます。 |
LocaleDetector | ユーザーのロケールを検出します。 | ポータルによって指定されたロケールを使用します。 |
PrivilegeManager | ユーザーの権限をチェックします。 | ユーザーがコンテンツの編集を許可されている場合、オーサーインスタンスへのアクセス権をチェックします。 |
ToolbarRenderer | ツールバーをレンダリングします。 | ツールバーの機能を追加します。 |
ポートレット API(JSR 286)ではポートレットイベントについて規定されています。AEM コンテンツポートには統合ブリッジがあり、このブリッジによって AEM ポートレットに関するポートレットイベントを OSGi イベントによって配信します。この仕組みによって、ポートレットイベントの処理がプラガブルになっています。
特定のイベントを処理する場合、デプロイメントディスクリプター内でそれらのイベントを受信イベントとして宣言します(またはポータルサーバー経由で設定します)。さらに、EventHandler インターフェイスを宣言する OSGi サービスを実装します(OSGi EventAdmin 仕様を参照してください)。
ポートレットイベントが発生するたびに、固有の OSGi イベントが送信され、カスタムのハンドラーが呼び出されます。そのハンドラーはすべてのコンテキスト情報を取得し、適宜ポートレットの状態を更新したり、新しいイベントを送信したりすることができます。基本的に、handle メソッド内ではポートレットイベントフェーズのすべての機能を使用できます。
ポートレットコンポーネントを使用して、ポートレットウィンドウを AEM ページに追加します。アプリケーションサーバーにインストールした共有ライブラリによって、ポートレットコンポーネントがデプロイ済みのポートレットアプリケーションを検出できるようになります。
AEM をポータルとして使用するには、次のタスクを実行します。
ポートレットコンポーネントは、AEM が Web アプリケーションとしてデプロイされている場合に限り使用できます(アプリケーションサーバーによる AEM のインストールを参照してください)。
AEM Quickstart JAR ファイルには、ポートレットコンポーネントファイルが含まれています。ファイル(cq-portlet-components.zip)を取得するには、Quickstart を実行するか、その内容を抽出します。
Quickstart JAR ファイルを実行するかその内容を抽出して、次の場所にある cq-portlet-components.zip ファイルを特定します。
アプリケーションサーバーにデプロイされている CQ5 オーサーインスタンスのパッケージマネージャーを開きます(https://appserverhost:port/cq5author/crx/packmgr)。
パッケージマネージャーを使用して、cq-portlets-components.zip パッケージをアップロードし、インストールします。
このパッケージによって、リポジトリ内の /libs/portal/director フォルダーに cq-portlet-director-sharedlibs-x.x.x.jar がインストールされます。
cq-portlet-director-sharedlibs-x.x.x.jar をハードドライブにコピーします。FileVault や WebDAV クライアントなどを使用して、このファイルを取得します。
cq-portlet-director-sharedlibs.x.x.x.jar ファイルをアプリケーションサーバーの共有ライブラリフォルダーに移動して、ライブラリのクラスをデプロイ済みのポートレットアプリケーションから使用できるようにします。
ポートレットコンポーネントを段落システムに追加して、作成者が使用できるようにします。
サイドキックで、定規アイコンをクリックしてデザインモードに切り替えます。
最初の段落の上にあるDesign of par
ヘッダーの横の「編集」をクリックします。
「一般」コンポーネントカテゴリで、ポートレットコンポーネントの横にあるチェックボックスをオンにして「OK」をクリックします。
アプリケーションサーバーの Web コンテナにポートレットをデプロイして、ポータルコンポーネントから使用できるようにします。ポートレットアプリケーションをデプロイする前に、このアプリケーションが AEM ポータルコンテナサーブレットを読み込むように設定する必要があります。この設定によって、ポートレットコンポーネントがポートレットにアクセスできるようになります。
ポートレットアプリケーションの WAR ファイルの内容を抽出します。
ヒント: jar xf nameofapp.war コマンドによってファイルを抽出します。
web.xml ファイルをテキストエディターで開きます。
次のサーブレット設定を web-app 要素内に追加します。
<servlet>
<servlet-name>slingportal</servlet-name>
<servlet-class>org.apache.sling.portal.container.api.ContainerServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>slingportal</servlet-name>
<url-pattern>/SlingPortletInvoker</url-pattern>
</servlet-mapping>
web.xml ファイルを保存し、WAR ファイルを再度パッケージ化します。
ヒント: jar cvf nameofapp.war *
コマンドにより、現在のディレクトリの内容を nameofapp.war ファイルに追加します。
ポートレットアプリケーションをアプリケーションサーバーにデプロイします。詳しくは、アプリケーションサーバーのドキュメントを参照してください。
ポータルコンポーネントを使用して、ポートレットウィンドウを Web ページに追加します。コンポーネントのプロパティを使用して、表示するポートレットを指定します。
Web ページで、サイドキックの「一般」グループのポートレットコンポーネントをページにドラッグします。
コンポーネントをページにドラッグした後、ページを再度読み込んで、適切に動作することを確認します。
コンポーネントをダブルクリックして、ポートレットのプロパティを開きます。
「ポートレットエンティティ」ドロップダウンメニューで、リストからポートレットを選択します。
ポートレットのタイトルバーを表示するかどうかに応じて、「タイトルバーを隠す」チェックボックスをオンまたはオフにします。
「ポートレットウィンドウ」フィールドに、必要に応じて一意のポートレットウィンドウ ID を入力します。
同じページで同じポートレットを複数使用する場合は、それぞれのポートレットに異なるウィンドウ ID を設定してください。
「OK」をクリックします。ポートレットが AEM ページに表示されます。
AEM WCM によって提供されるコンテンツにアクセスするには、ポータルサーバーに AEM Portal Director Portlet を取り付ける必要があります。そのためには、ここで説明する手順を使用して、ポートレットをインストールおよび設定し、ポータルページに追加します。
デフォルトで、ポートレットは localhost:4503 でパブリッシュインスタンスに接続し、localhost:4502 でオーサーインスタンスに接続します。これらの値は、ポートレットのデプロイ時に変更できます。ポータルディレクターは、リポジトリ内の /libs/portal/directory 以下にコンテンツとして存在します。ポータルディレクターを使用する前に、アプリケーション WAR ファイルをダウンロードする必要があります。
WebDAV または CRXDE Lite を使用して、/libs/portal/director に移動します。
cq-portlet-webapp.war をダウンロードします。
ここで紹介する手順では、WebSphere ポータルを例として使用します。できる限り汎用的な手順を説明しますが、他の Web ポータルでは異なる手順になる点に注意してください。すべての Web ポータルで手順はほぼ同一ですが、お使いの Web ポータルに合わせて手順を変更する必要があります。
ポートレットをインストールするには:
管理者権限でポータルにログインします。
Web ポータルのポートレット管理画面に移動します。
「Install」をクリックして、ダウンロードした AEM ポートレットアプリケーション(cq-portlet-webapp.war)を参照し、ポートレットに関するその他の重要な情報を入力します。
他のポートレット基本情報については、デフォルト値を使用するか、値を変更します。デフォルト値を使用する場合、ポートレットのアドレスは https://<wps-host>:<port>/wps/PA_CQ5_Portlet になります。ポートレットによって提供される OSGi 管理コンソールのアドレスは https://<wps-host>:<port>/wps/ PA_CQ5_Portlet/cqbridge/system/console になります(デフォルトのユーザー名とパスワードは admin/admin です)。
自動起動オプションまたはチェックボックスを選択して変更を保存し、ポートレットアプリケーションが自動的に起動するようにします。インストールが成功したことを示すメッセージが表示されます。
ポートレットのインストール後、基盤の AEM インスタンス(オーサーおよびパブリッシュ)の URL をポートレットに設定する必要があります。また、その他のオプションも設定できます。
ポートレットを設定するには:
アプリケーションサーバーのポータル管理ウィンドウで、ポートレット管理に移動します。この画面にすべてのポートレットが一覧表示されます。「AEM Portal Director」ポートレットを選択します。
必要に応じて、ポートレットを設定します。例えば、オーサーインスタンスとパブリッシュインスタンスの URL や開始パスの URL を変更する必要があります。デフォルトの設定については、ポートレット環境設定を参照してください。
ポートレットを / 以外のコンテキストパスで実行している AEM オーサーインスタンスおよびパブリッシュインスタンスに接続するように設定する場合は、(Felix Web コンソールなどを使用して)これらの AEM インスタンスの HTML ライブラリマネージャー設定で強制 CQUrlInfo を有効にする必要があります。そうしなければ、編集が機能せず、環境設定ダイアログが表示されません。
アプリケーションサーバーで設定の変更を保存します。
ポートレットの OSGI 管理コンソールに移動します。デフォルトの場所は https://<wps-host>:<port>/wps/PA_CQ5_Portlet/cqbridge/system/console/configMgr
です。デフォルトのユーザー名とパスワードは admin/admin です。
「Day Portal Director CQ Server Configuration」設定を選択し、次の値を編集します。
「保存」をクリックします。これで、ポートレットをポータルページに追加してポータルを使用できるようになりました。
コンテンツが AEM からリクエストされたとき、ポートレットにより、現在の表示モード(パブリッシュまたはオーサー)と現在のパスから完全な URL が作成されます。デフォルト値を使用した場合の最初の URL は https://localhost:4503/content/geometrixx/en.portlet.html
です。htmlSelector
の値が URL の拡張子の前に自動的に追加されます。
ポートレットがヘルプモードに切り替えられ、appendHelpViewModeAsSelector
が選択された場合は、同じように help
セレクターが付加されます(例:https://localhost:4503/content/geometrixx/en.portlet.html.help
)。ポートレットウィンドウが最大化され、appendMaxWindowStateAsSelector
が選択された場合は、同じようにそのセレクターが付加されます(例:https://localhost:4503/content/geometrixx/en.portlet.max.help
)。
セレクターは AEM によって評価され、セレクターごとに様々なテンプレートを使用できます。
通常、開始パスは直接 AEM 内のコンテンツを示しますが、ポートレット環境設定ではなく AEM 内で開始パスを管理する場合は、開始パスが AEM 内のコンテンツマップを示すように設定できます(例:/var/portlets
)。この場合、AEM で実行されるスクリプトでは、ポートレットから送信された情報を使用して、どの URL が開始 URL であるかを判断することができます。このスクリプトは、正しい URL へのリダイレクトを発行する必要があります。
ポートレットをポータルページに追加するには:
ポートレットに追加したページにアクセスするには: