Sling アダプターの使用 using-sling-adapters

CAUTION
AEM 6.4 の拡張サポートは終了し、このドキュメントは更新されなくなりました。 詳細は、 技術サポート期間. サポートされているバージョンを見つける ここ.

Sling は、Adaptable インターフェイスを実装するオブジェクトを簡単に変換するための Adapter パターンを提供します。このインターフェイスは、汎用の adaptTo() メソッドを提供しており、このメソッドによってオブジェクトは引数として渡されるクラス型に変換されます。

例えば、次のように実行するだけで、Resource オブジェクトを対応する Node オブジェクトに変換できます。

Node node = resource.adaptTo(Node.class);

ユースケース use-cases

次のようなユースケースがあります。

  • 実装用のオブジェクトの取得

    例えば、汎用の Resource インターフェイスの JCR ベース実装では、基盤の JCR Node にアクセスできます。

  • 内部的なコンテキストオブジェクトを渡す必要があるオブジェクトのショートカット作成。

    例えば、JCR ベースの ResourceResolver では、要求の JCR Session への参照を保持しています。この JCR セッションは、その要求セッションに基づいて動作する多くのオブジェクト(PageManagerUserManager など)を取得するために必要になります。

  • サービスへのショートカット。

    稀なケース - sling.getService() も簡単に使用できます。

戻り値 Null null-return-value

adaptTo() は null を返す場合があります。

これには、次のような様々な理由があります。

  • この実装はターゲットの種類をサポートしていません
  • このケースを処理するアダプターファクトリはアクティブではありません ( 例: サービス参照が見つからないため )
  • 内部条件に失敗しました
  • サービスを利用できない

null ケースを適切に処理することが重要です。 JSP レンダリングの場合、JSP の失敗がコンテンツの一部になる場合は、JSP の失敗が許容されることがあります。

キャッシュ caching

パフォーマンスを改善する目的で、各実装では obj.adaptTo() 呼び出しから返されたオブジェクトを自由にキャッシュできます。obj が同じであれば、返されるオブジェクトも同じです。

このキャッシュ処理は、すべての AdapterFactory ベースのケースで実行されます。

ただし、一般的なルールはありません。オブジェクトは、新しいインスタンスでも既存のインスタンスでもかまいません。 つまり、どちらの動作にも依存できません。 重要なのは、特に AdapterFactory 内部において、このシナリオでオブジェクトが再利用可能であるということです。

仕組み how-it-works

Adaptable.adaptTo() の実装には、様々な方法があります。

  • オブジェクト自体による実装(このメソッド自体を実装して特定のオブジェクトにマッピングします)。

  • AdapterFactory を使用。これは、任意のオブジェクトをマッピングできます。

    オブジェクトは、引き続き Adaptable インターフェイスを実装し、SlingAdaptable を拡張する必要があります(これは、Central Adapter Manager の adaptTo 呼び出しを渡します)。

    これにより、Resource などの既存クラスの adaptTo メカニズムにフックを組み込むことができます。

  • これら 2 つの組み合わせ。

最初の例では、javadocs に何の adaptTo-targets が可能かが示されます。ただし、JCR ベースのリソースなどの特定のサブクラスでは、多くの場合、これは不可能です。後者の場合、AdapterFactory の実装は通常、バンドルのプライベートクラスの一部なので、クライアント API で公開されず、Javadoc にも表示されません。理論的には、OSGi サービスランタイムからすべての AdapterFactory 実装にアクセスし、「アダプタブル」(ソースとターゲット)の設定を調べることは可能ですが、相互にマッピングすることはできません。最終的には、これは内部ロジックに依存し、ドキュメントに記載する必要があります。従って、参照はこちらです。

参照 reference

Sling sling

Resource は次の項目に適応します。

Node
このリソースが JCR ノードベースのリソースまたはノードを参照する JCR プロパティの場合。
Property
このリソースが JCR プロパティベースのリソースである場合。
Item
このリソースが JCR ベースのリソース(ノードまたはプロパティ)の場合。
Map
このリソースが JCR ノードベースのリソース(または値マップをサポートするその他のリソース)の場合、プロパティのマップを返します。
ValueMap
このリソースが JCR ノードベースのリソース(または値マップをサポートするその他のリソース)の場合、プロパティの使用しやすいマップを返します。また、
ResourceUtil.getValueMap(Resource) を使用(null ケースを処理するなど)して達成することもできます。
InheritanceValueMap
ValueMap の拡張。プロパティを探すときにリソースの階層を考慮することができます。
PersistableValueMap
このリソースが JCR ノードベースのリソースであり、ユーザーがそのノードのプロパティを変更する権限を持っている場合。
注意:複数の永続化可能マップは、値を共有しません。
InputStream
「ファイル」のバイナリコンテンツを返しますnt:resource
AuthorizableResourceProvider``org.apache.sling.jackrabbit.usermanager``/system/userManager
cq:Page``cq:PseudoPage
cq:Component
cq:Page
cq:Template
cq:Page
cq:Tag
cq:Preferences
cq:ContentSyncConfig
cq:ContentSyncConfig

ResourceResolver は次の項目に適応します。

Session
このリソースリゾルバーが JCR ベースのリソースリゾルバー(デフォルト)である場合の、要求の JCR セッション。
PageManager
ComponentManager
デザイナー
AssetManager
このリソースリゾルバーが JCR ベースのリソースリゾルバーである場合の、JCR セッションに基づいたもの。
TagManager
このリソースリゾルバーが JCR ベースのリソースリゾルバーである場合の、JCR セッションに基づいたもの。
UserManager
このリソースリゾルバーが JCR ベースのリソースリゾルバーであり、ユーザーが UserManager へのアクセス権限を持っている場合の、JCR セッションに基づいたもの。
Authorizable
現在のユーザー。
User
現在のユーザー。
PrivilegeManager
環境設定
現在のユーザーの環境設定(このリソースリゾルバーが JCR ベースのリソースリゾルバーである場合の JCR セッションに基づく)。
PreferencesService
PinManager
QueryBuilder
Externalizer
要求オブジェクトがない場合でも、絶対 URL を外部化するためのもの。

SlingHttpServletRequest は次の項目に適応します。

現時点ではターゲットはありませんが、Adaptable を実装し、カスタムの AdapterFactory 内でソースとして使用することは可能です。

SlingHttpServletResponse は次の項目に適応します。

ContentHandler
(XML)
これが Sling リライター応答の場合。

WCM wcm

Page は次の項目に適応します。

Resource
ページのリソース。
LabeledResource
ラベル付きリソース(== this)。
Node
ページのノード。
...
ページのリソースが適応可能なすべての項目。

Component は次の項目に適応します。

Resource
コンポーネントのリソース。
LabeledResource
ラベル付きリソース(== this)。
Node
コンポーネントのノード。
コンポーネントのリソースが適応可能なすべての項目。

Template は次の項目に適応します。

Resource
テンプレートのリソース。
LabeledResource
ラベル付きリソース(== this)。
Node
このテンプレートのノード。
...
テンプレートのリソースが適応可能なすべての項目。

セキュリティ security

Authorizable, ユーザー および グループ に適応します。

Node
ユーザーまたはグループのホームノードを返します。
ReplicationStatus
ユーザーまたはグループのホームノードのレプリケーションステータスを返します。

DAM dam

Asset は次の項目に適応します。

Resource
アセットのリソース。
Node
アセットのノード。
アセットのリソースが適応可能なすべての項目。

タグ付け tagging

Tag は次の項目に適応します。

Resource
タグのリソース。
Node
タグのノード。
タグのリソースが適応可能なすべての項目。

その他 other

さらに、Sling、JCR、OCM では、カスタム OCM(オブジェクトとコンテンツのマッピング)オブジェクト用の [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory) も提供しています。

recommendation-more-help
2315f3f5-cb4a-4530-9999-30c8319c520e