AEM開発者ブログ by YAMATO

アドビ社のデリバリーパートナー大和株式会社のAEM開発者ブログです。

OSGi ConfigでCA-Configの値を上書きする方法

お久しぶりです!大和株式会社の長森です。

CA-configをgit管理していて全ての環境に同じ設定がされているが、Author/開発環境のみ別の設定を利用したい、、、 そんなケースにあったことはないでしょうか?
今回は、そんな場合のためにOSGi Configを使って、CA-configを上書きする方法をご紹介します。
CA-configの設定方法はこちらをご覧ください。

概要

Apache Sling Context-Aware Configuration Override Providerを使うと、各ページに設定したCA-configの値を上書きすることが可能です。
実行モードとの組み合わせで、環境に応じて、OSGi ConfigによってCA-configを上書きできます。
特定のパス配下のみ値を上書きしたり、複数設定したい場合は優先順位を付与して制御することも可能です。

設定方法

※通常はコード管理しますが、ここでは設定内容が判りやすいようにOSGiコンソールでの設定を示します。

1. Config ManagerでApache Sling Context-Aware Configuration Override Providerの設定画面を開く

2. 各項目に値を設定する

① Description: 本設定の説明テキスト。何の設定かという補足情報のため、文章でも問題なし
② Overrides: 上書きするCA-configの情報、設定値。入力値は下記を参考

 ・{configName}/{propertyName}={propertyJsonValue}
 ・{configName}={propertyJsonObject}
 ・[{contextPath}]{configName}/{propertyName}={propertyJsonValue}
 ・[{contextPath}]{configName}={propertyJsonObject}

 ・ConfigName: CA-configのConfig/Javaファイル名
 ・PropertyName: CA-configのプロパティ名
 ・propertyJsonObject: 上書きしたいJson objectの値
 ・propertyJsonValue: 上書きしたい値

③ Enabled: 本設定を有効にしたい場合、チェック
④ Service ranking: 適用順序の優先度。複数の設定が競合した場合、この数値が小さい方が優先される

実装

今回はこちらのブログで設定したCA-configを使用して説明しますので、詳しい設定方法はそちらをご覧ください。
上記ブログでは、PageTitleConfigというCA-configを作成し、pageTitleTextというプロパティにTitleに表示する文字列の値を設定出来るようにしています。 元々設定されているCA-configのプロパティ値は以下コンテンツツリーにある赤文字になります。

1. 特定のページ配下のCA-configの値を上書き

まずは、BrandA配下すべてのページのPageTitleConfigのpageTitleTextの値を"上書きされたブランドA"という値で上書きします。

★上書き前の値
【/content/brandA/jp】

【/content/brandA/jp/ja】


★設定する値
・Override: [/content/brandA]com.example.core.caconfig.PageTitleConfig/pageTitleText="上書きされたブランドA"
・Enabled: true

★設定後の値
【/content/brandA/jp】

【/content/brandA/jp/ja】

ご覧の通り、BrandA配下のページの値が上書きされた値になっています。

2.設定の適用順位を制御

次に、Service rankを使って、適用する設定に優先順序をつけます。
① 1 で設定したConfigのservice rankに「2」を設定します。

② ①のConfigより優先させるConfigを別に作成します。
ここでは、【/content/brandA/jp/ja】のみに対して「"上書きされたブランドAの日本語ページ"」という値で上書きします。
①で設定したConfigよりも優先させたいので、Service rankを「1」に設定します。

★設定後の値
【/content/brandA/jp/ja】

想定通りに値が上書きされています。

【/content/brandA/jp】

jpページを見ると、1で作成したConfigも適用されていることがわかります。
つまりjaページに表示されている値には、今回作成したConfigが1で作成したConfigよりも優先されて適用されていることが分かります。

このように、Service rankを使用することで、複数設定が存在した場合に優先順序を付けることが可能です。
これを利用すれば、Globalページ配下全ページに一つの共通の設定を適用させつつ、特定の子ページにはそれぞれの設定を適用させるといったことが可能になります。

まとめ

CA-configは大変便利な機能で使用される機会が結構あると思います。
OSGiの上書き機能を使用することで、環境別に値を上書きすることが出来るので、こちらの機能も合わせて活用してみていただけたらと思います!
最後までお読みいただきありがとうございました(^-^)