Uso de los adaptadores de Sling using-sling-adapters

Sling ofrece un patrón de adaptador para traducir convenientemente los objetos que implementan la interfaz adaptable. Esta interfaz proporciona un método adaptTo() genérico que traduce el objeto al tipo de clase que se pasa como argumento.

Por ejemplo, para traducir un objeto Resource al objeto Node correspondiente, simplemente puede hacer lo siguiente:

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

Casos de uso use-cases

Hay los siguientes casos de uso:

  • Obtenga objetos específicos de la implementación.

    Por ejemplo, una implementación basada en JCR de la interfaz genérica Resource proporciona acceso al JCR subyacente Node.

  • Creación de acceso directo de objetos que requieren que se pasen objetos de contexto interno.

    Por ejemplo, ResourceResolver basado en JCR contiene una referencia a JCR Session de la solicitud, que a su vez es necesaria para muchos objetos que funcionan según esa sesión de solicitud, como PageManager o UserManager.

  • Acceso directo a servicios.

    Un caso poco frecuente: sling.getService() es también sencillo.

Valor devuelto nulo null-return-value

adaptTo() puede devolver un valor nulo.

Existen varias razones para la devolución nula, entre ellas las siguientes:

  • la implementación no admite el tipo de destinatario
  • un fabricante de adaptadores que gestione este caso no está activo (por ejemplo, debido a la falta de referencias de servicio)
  • error de condición interna
  • el servicio no está disponible

Es importante que gestione correctamente el caso nulo. En el caso de las representaciones jsp, puede ser aceptable que jsp falle si el resultado es un fragmento de contenido vacío.

Almacenamiento en caché caching

Para mejorar el rendimiento, las implementaciones pueden almacenar en caché el objeto devuelto por una llamada a obj.adaptTo(). Si obj es el mismo, el objeto devuelto es el mismo.

Este almacenamiento en caché se realiza para todos los casos basados en AdapterFactory.

Sin embargo, no hay una regla general: el objeto podría ser una instancia nueva o una existente. Como tal, significa que no puede confiar en ninguno de los comportamientos. Por lo tanto, es importante, especialmente dentro de AdapterFactory, que los objetos se puedan reutilizar en este escenario.

Funcionamiento how-it-works

Hay varias maneras de implementar Adaptable.adaptTo():

  • Por el propio objeto; implementando el método en sí y asignándolo a determinados objetos.

  • Por un AdapterFactory, que puede asignar objetos arbitrarios.

    Los objetos aún deben implementar la interfaz Adaptable y deben extender SlingAdaptable (que pasa la llamada adaptTo a un administrador de adaptadores central).

    Este método permite vínculos en el mecanismo adaptTo para clases existentes, como Resource.

  • Una combinación de ambos.

En el primer caso, los documentos de Java™ pueden indicar qué adaptTo-targets son posibles. Sin embargo, para subclases específicas como el recurso basado en JCR, esta instrucción no suele ser posible. En este último caso, las implementaciones de AdapterFactory suelen formar parte de las clases privadas de un paquete y, por lo tanto, no se exponen en una API de cliente ni se enumeran en documentos de Java™. En teoría, es posible acceder a todas las implementaciones de AdapterFactory desde el tiempo de ejecución del servicio OSGi y ver sus configuraciones "adaptables" (fuentes y destinos), pero no asignarlas entre sí. Al final, depende de la lógica interna, que debe documentarse. De ahí esta referencia.

Referencia reference

Sling sling

El recurso se adapta a:

Nodo
Si es un recurso basado en nodos JCR o una propiedad JCR, que hace referencia a un nodo
Propiedad
Si es un recurso basado en propiedades JCR
Elemento
Si es un recurso basado en JCR (nodo o propiedad)
Asignar
Devuelve un mapa de las propiedades, si es un recurso basado en nodos JCR (u otro recurso que admita asignaciones de valores)
ValueMap
Devuelve un mapa práctico de las propiedades, si es un recurso basado en nodos JCR (u otro recurso que admita asignaciones de valores). También se puede lograr (de manera más sencilla) utilizando
ResourceUtil.getValueMap(Resource) (controla mayúsculas y minúsculas nulas, etc.)
InheritanceValueMap
Extensión de ValueMap que permite contabilizar la jerarquía de recursos al buscar propiedades
ModillableValueMap
Extensión de ValueMap, que permite modificar las propiedades de ese nodo
InputStream
Devuelve el contenido binario de un recurso de archivo (si es un recurso basado en nodos JCR y el tipo de nodo es nt:file o nt:resource; si es un recurso de paquete; contenido de archivo, si es un recurso del sistema de archivos). O bien, devuelve los datos de un recurso de propiedad JCR binario.
URL
Devuelve una URL al recurso (URL del repositorio de este nodo si es un recurso basado en nodos JCR; URL del paquete jar si es un recurso del paquete; URL del archivo si es un recurso del sistema de archivos)
Archivo
Si es un recurso del sistema de archivos
SlingScript
Si el recurso es una secuencia de comandos (por ejemplo, un archivo jsp) para la que se ha registrado un motor de secuencias de comandos con sling
Servlet
Si el recurso es una secuencia de comandos (por ejemplo, un archivo jsp) para la que un motor de secuencias de comandos está registrado con sling o si es un recurso de servlet
String
Boolean
Long
Double
Calendar
Value
String[]
Boolean[]
Long[]
Calendar[]
Value[]
Devuelve los valores si es un recurso basado en la propiedad JCR (y el valor se ajusta)
EtiquetadoRecurso
Si es un recurso basado en nodos JCR
Página
Si es un recurso basado en nodos JCR y el nodo es un cq:Page (o cq:PseudoPage)
Componente
Si es un recurso de nodo cq:Component
Diseño
Si es un nodo de diseño (cq:Page)
Plantilla
Si es un recurso de nodo cq:Template
Modelo
Si es un recurso de nodo cq:Template
Recurso
Si es un recurso dam:Asset node
Representación
Si es una representación dam:Asset (nt:file bajo la carpeta de representación de una dam:Assert)
Etiqueta
Si es un recurso de nodo cq:Tag
UserManager
Se basa en la sesión JCR si es un recurso basado en JCR y el usuario tiene permisos para acceder a UserManager
Con autorización
El autorizable es la interfaz base común para usuarios y grupos
Usuario
El usuario es un autorizable especial que puede autenticarse y suplantarse
SimpleSearch
Realiza búsquedas debajo del recurso (o utiliza setSearchIn()) si es un recurso basado en JCR
WorkflowStatus
Estado del flujo de trabajo para la página o el nodo de carga útil del flujo de trabajo dado
ReplicationStatus
Estado de replicación para el recurso determinado o su subnodo jcr:content (comprobado primero)
ConnectorResource
Devuelve un recurso de conector adaptado para ciertos tipos, si es un recurso basado en nodos JCR
Configuración
Si es un recurso de nodo cq:ContentSyncConfig
ConfigEntry
Si está por debajo de un recurso de nodo cq:ContentSyncConfig

ResourceResolver se adapta a:

Session
La sesión JCR de la solicitud, si es una resolución de recursos basada en JCR (valor predeterminado)
PageManager
ComponentManager
Designer
AssetManager
En función de la sesión JCR, si es una resolución de recursos basada en JCR
TagManager
En función de la sesión JCR, si es una resolución de recursos basada en JCR
UserManager
UserManager proporciona acceso a objetos autorizables y medios para mantenerlos, es decir, usuarios y grupos. UserManager está enlazado a una sesión en particular
Autorizable
El usuario actual
Usuario
El usuario actual
QueryBuilder
Externalizador
Para externalizar direcciones URL absolutas, incluso sin el objeto de solicitud

SlingHttpServletRequest se adapta a:

Aún no hay destinos, pero implementa Adaptable y podría utilizarse como origen en un AdapterFactory personalizado.

SlingHttpServletResponse se adapta a:

ControladorContenido
(XML)
Si es una respuesta de reescritura de sling

WCM wcm

Página se adapta a:

Resource
Recurso de la página.
EtiquetadoRecurso
Recurso etiquetado (==).
Nodo
Nodo de la página.
...
Todo a lo que se puede adaptar el recurso de la página.

El componente se adapta a:

Resource
Recurso del componente.
RecursoEtiquetado
Recurso etiquetado (==).
Nodo
Nodo del componente.
Todo a lo que se puede adaptar el recurso del componente.

Plantilla se adapta a:

Recurso
Recurso de la plantilla.
EtiquetadoRecurso
Recurso etiquetado (==).
Nodo
Nodo de esta plantilla.
...
Todo a lo que se puede adaptar el recurso de la plantilla.

Seguridad security

Autorizable, Usuario y Grupo se adaptan a:

Nodo
Devuelve el nodo principal del usuario/grupo.
EstadoDeReplicación
Devuelve el estado de replicación del nodo principal del usuario/grupo.

DAM dam

El recurso se adapta a:

Resource
Recurso del recurso.
Nodo
Nodo del recurso.
Todo a lo que se puede adaptar el recurso del recurso.

Etiquetado tagging

Etiqueta se adapta a:

Resource
Recurso de la etiqueta.
Nodo
Nodo de la etiqueta.
Todo a lo que se puede adaptar el recurso de la etiqueta.

Otro other

Además, Sling/JCR/OCM también proporciona AdapterFactory para los objetos OCM personalizados (Asignación de contenido de objeto).

recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab