Sling 어댑터 사용 using-sling-adapters

슬링 이(가) 다음을 제공합니다 어댑터 패턴 를 구현하는 개체를 편리하게 번역하려면 적응성 인터페이스. 이 인터페이스는 제네릭을 제공합니다 adaptTo() 개체를 인수로 전달되는 클래스 형식으로 변환하는 메서드입니다.

예를 들어 리소스 객체를 해당 노드 객체로 변환하려면 다음과 같이 하면 됩니다.

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

사용 사례 use-cases

다음과 같은 사용 사례가 있습니다.

  • 구현별 개체를 가져옵니다.

    예를 들어 제네릭의 JCR 기반 구현입니다 Resource 인터페이스는 기본 JCR에 대한 액세스를 제공합니다. Node.

  • 내부 컨텍스트 객체를 전달해야 하는 객체의 바로 가기 작성.

    예: JCR 기반 ResourceResolver 요청에 대한 참조 보관 JCR Session를 설정하는 경우, 다음과 같이 해당 요청 세션에 따라 작동하는 많은 개체에 필요합니다. PageManager 또는 UserManager.

  • 서비스 바로 가기.

    드문 경우 - sling.getService() 간단합니다.

Null 반환 값 null-return-value

adaptTo() null을 반환합니다.

여기에는 다음과 같은 다양한 원인이 있습니다.

  • 구현이 target 유형을 지원하지 않습니다.
  • 이 사례를 처리하는 어댑터 팩토리가 활성화되지 않았습니다(예: 서비스 참조가 누락됨).
  • 내부 조건 실패
  • 서비스를 사용할 수 없음

null 케이스를 품위 있게 처리하는 것이 중요합니다. jsp 렌더링의 경우 컨텐츠가 비어 있는 경우 jsp가 실패해도 수용할 수 있습니다.

캐싱 caching

성능을 향상시키기 위해 구현에서 반환된 개체를 캐싱할 수 있습니다. obj.adaptTo() 호출합니다. 다음과 같은 경우 obj 는 동일하며 반환된 객체는 동일합니다.

이 캐싱은 모든 항목에 대해 수행됩니다. AdapterFactory 기반 사례.

그러나 일반 규칙은 없습니다. 객체는 새 인스턴스이거나 기존 인스턴스일 수 있습니다. 이는 두 동작 중 하나에 의존할 수 없음을 의미합니다. 따라서, 특히 내부에서 중요합니다 AdapterFactory: 이 시나리오에서는 해당 개체를 재사용할 수 있습니다.

작동 방식 how-it-works

다음과 같은 다양한 방법이 있습니다. Adaptable.adaptTo() 다음과 같이 구현할 수 있습니다.

  • 객체 자체, 메소드 자체를 구현하고 특정 객체에 매핑.

  • 작성자: AdapterFactory: 임의의 개체를 매핑할 수 있습니다.

    개체는 여전히 다음을 구현해야 합니다. Adaptable 인터페이스 및 를 확장해야 함 SlingAdaptable (다음을 통과) adaptTo 중앙 어댑터 관리자에 대한 호출).

    이렇게 하면 후크를 adaptTo 기존 클래스에 대한 메커니즘(예: Resource.

  • 둘의 조합.

첫 번째 경우 Java™ 문서에는 adaptTo-targets 가능합니다. 그러나 JCR 기반 리소스와 같은 특정 하위 클래스의 경우 이러한 작업이 불가능한 경우가 많습니다. 후자의 경우 AdapterFactory 는 일반적으로 번들의 전용 클래스의 일부이므로 클라이언트 API에 노출되지 않으며 Java™ 문서에 나열되지 않습니다. 이론적으로 모든 것에 접근하는 것은 가능할 것이다 AdapterFactory 의 구현 OSGi 서비스 런타임에서 "적응성"(소스 및 타겟) 구성을 확인하지만 서로 매핑하지는 않습니다. 결국 이는 내부 논리에 따라 달라지는데 이를 반드시 문서화해야 한다. 따라서 이 참조입니다.

참조 reference

슬링 sling

리소스 은 다음 항목에 적응합니다.

노드
JCR 노드 기반 리소스 또는 노드를 참조하는 JCR 속성인 경우
속성
JCR 속성 기반 리소스인 경우
항목
JCR 기반 리소스(노드 또는 속성)인 경우
JCR 노드 기반 리소스(또는 다른 리소스 지원 값 맵)인 경우 속성 맵을 반환합니다.
ValueMap
JCR 노드 기반 리소스(또는 다른 리소스 지원 값 맵)인 경우 사용하기 편리한 속성 맵을 반환합니다. 을 사용하여 (보다 간단하게) 달성할 수도 있습니다.
ResourceUtil.getValueMap(Resource) (null 사례 처리 등)
상속 값 맵
확장 ValueMap 속성을 찾을 때 리소스 계층 구조를 고려할 수 있습니다.
수정 가능한 값 맵
의 확장명 ValueMap: 해당 노드의 속성을 수정할 수 있습니다
입력 스트림
파일 리소스의 바이너리 콘텐츠 반환(JCR 노드 기반 리소스이고 노드 유형이 다음과 같은 경우) nt:file 또는 nt:resource; 번들 리소스인 경우 파일 컨텐츠(파일 시스템 리소스인 경우) 또는 이진 JCR 속성 리소스의 데이터입니다
URL
리소스에 대한 URL 반환(JCR 노드 기반 리소스인 경우 이 노드의 저장소 URL, 번들 리소스인 경우 jar 번들 URL, 파일 시스템 리소스인 경우 파일 URL)
파일
파일 시스템 리소스인 경우
SlingScript
이 리소스가 스크립트 엔진이 sling에 등록된 스크립트(예: jsp 파일)인 경우
서블릿
이 리소스가 스크립트 엔진이 sling에 등록된 스크립트(예: jsp 파일)이거나 서블릿 리소스인 경우.
문자열
부울
길게
Double
캘린더

String[]
부울[]
Long[]
달력[]
값[]
JCR 속성 기반 리소스인 경우(값이 적절한 경우) 값을 반환합니다.
LabeledResource
JCR 노드 기반 리소스인 경우
페이지
JCR 노드 기반 리소스이고 노드가 cq:Page (또는 cq:PseudoPage)
구성 요소
다음과 같은 경우: cq:Component 노드 리소스
디자인
디자인 노드인 경우(cq:Page)
템플릿
다음과 같은 경우: cq:Template 노드 리소스
블루프린트
다음과 같은 경우: cq:Template 노드 리소스
자산
dam:Asset 노드 리소스인 경우
렌디션
dam:Asset 렌디션(dam:Assert의 렌디션 폴더 아래에 있는 nt:file)인 경우
태그
다음과 같은 경우: cq:Tag 노드 리소스
UserManager
JCR 세션 기반: JCR 기반 리소스이고 사용자가 UserManager에 액세스할 수 있는 권한이 있는 경우
승인 가능 대상
승인 가능 대상은 사용자 및 그룹의 공통 기본 인터페이스입니다.
사용자
사용자는 인증되고 가장될 수 있는 특별한 승인 가능 대상입니다.
SimpleSearch
JCR 기반 리소스인 경우 리소스 아래에서 검색하거나 setSearchIn() 사용
WorkflowStatus
지정된 페이지/워크플로 페이로드 노드의 워크플로 상태
ReplicationStatus
지정된 리소스 또는 해당 jcr:content 하위 노드의 복제 상태(먼저 선택됨)
ConnectorResource
JCR-노드 기반 리소스인 경우, 특정 유형에 대해 조정된 커넥터 리소스를 반환합니다.
구성
다음과 같은 경우: cq:ContentSyncConfig 노드 리소스
ConfigEntry
이 값이 a 미만인 경우 cq:ContentSyncConfig 노드 리소스

ResourceResolution 은 다음 항목에 적응합니다.

세션
요청의 JCR 세션(JCR 기반 리소스 확인자인 경우)(기본값)
PageManager
구성 요소 관리자
디자이너
AssetManager
JCR 세션 기반, JCR 기반 리소스 확인자인 경우
TagManager
JCR 세션 기반, JCR 기반 리소스 확인자인 경우
UserManager
UserManager는 승인 가능한 객체(사용자 및 그룹)에 대한 액세스 권한과 유지 관리 수단을 제공합니다. UserManager는 특정 세션에 바인딩되어 있습니다
승인 가능 대상
현재 사용자
사용자
현재 사용자
QueryBuilder
Externalizer
절대 URL을 외부화하는 경우, 요청 개체가 없어도

SlingHttpServletRequest 은 다음 항목에 적응합니다.

아직 대상이 없지만 는 적응성을 구현하며 사용자 지정 AdapterFactory에서 소스로 사용할 수 있습니다.

SlingHttpServletResponse 은 다음 항목에 적응합니다.

ContentHandler
(XML)
Sling 재작성기 응답인 경우

WCM wcm

페이지 은 다음 항목에 적응합니다.

리소스
페이지의 리소스
LabeledResource
레이블이 지정된 리소스(==)
노드
페이지의 노드
...
페이지의 리소스를 조정할 수 있는 모든 작업

구성 요소 은 다음 항목에 적응합니다.

리소스
구성 요소의 리소스.
LabeledResource
레이블이 지정된 리소스(이 ==)입니다.
노드
구성 요소의 노드.
구성 요소 리소스의 모든 것을 적용할 수 있습니다.

템플릿 은 다음 항목에 적응합니다.

리소스
템플릿의 리소스
LabeledResource
레이블이 지정된 리소스(==)
노드
이 템플릿의 노드
...
템플릿 리소스의 모든 것을 적용할 수 있습니다.

보안 security

승인 가능 대상, 사용자 및 ​ 그룹** 조정 대상:

노드
사용자/그룹 홈 노드를 반환합니다.
ReplicationStatus
사용자/그룹 홈 노드에 대한 복제 상태를 반환합니다.

DAM dam

자산 은 다음 항목에 적응합니다.

리소스
에셋의 리소스입니다.
노드
에셋의 노드.
에셋의 리소스를 조정할 수 있는 모든 작업.

태그 지정 tagging

태그 은 다음 항목에 적응합니다.

리소스
태그의 리소스.
노드
태그의 노드.
태그의 리소스에 맞는 모든 항목을 조정할 수 있습니다.

기타 other

또한 Sling / JCR / OCM 은 [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory) 사용자 지정 OCM용(오브젝트 콘텐츠 매핑) 개체.

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2