Uso de los adaptadores de Sling using-sling-adapters
Sling ofrece un Patrón de adaptador para traducir convenientemente los objetos que implementan la variable Adaptable interfaz. Esta interfaz proporciona un adaptTo() método que traducirá 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 del
Resource
La interfaz de proporciona acceso al JCR subyacenteNode
. -
Creación de accesos directos de objetos que requieren que se pasen objetos de contexto internos.
Por ejemplo, la
ResourceResolver
contiene una referencia alJCR Session
, que a su vez es necesario para muchos objetos que funcionarán en función de esa sesión de solicitud, como elPageManager
oUserManager
. -
Acceso directo a los servicios.
Un caso poco frecuente:
sling.getService()
también es simple.
Valor devuelto nulo null-return-value
adaptTo()
puede devolver null.
Esto se debe a varios motivos, entre ellos:
- la implementación no admite el tipo de destino
- un adaptador que maneje este caso no está activo (p. ej. debido a la ausencia de referencias de servicio)
- error en la condición interna
- el servicio no está disponible
Es importante que gestione las mayúsculas y minúsculas nulas correctamente. Para las renderizaciones jsp, puede ser aceptable que el jsp falle si esto resulta en un fragmento de contenido vacío.
Almacenamiento en caché caching
Para mejorar el rendimiento, las implementaciones pueden almacenar en caché el objeto devuelto desde un obj.adaptTo()
llamada a . Si la variable obj
es el mismo, el objeto devuelto es el mismo.
Este almacenamiento en caché se realiza para todas las AdapterFactory
casos basados en .
Sin embargo, no hay ninguna regla general: el objeto podría ser una instancia nueva o una existente. Esto significa que no puede confiar en ninguno de estos comportamientos. Por lo tanto, es importante, especialmente dentro AdapterFactory
, que los objetos se pueden reutilizar en este escenario.
Funcionamiento how-it-works
Hay varias maneras de que Adaptable.adaptTo()
se puede implementar:
-
Por el propio objeto; implementar el propio método y asignar a ciertos objetos.
-
De
AdapterFactory
, que puede asignar objetos arbitrarios.Los objetos deben implementar la variable
Adaptable
interfaz y debe ampliarSlingAdaptable
(que pasa eladaptTo
a un administrador central de adaptadores).Esto permite los enlaces en la variable
adaptTo
mecanismo para las clases existentes, comoResource
. -
Una combinación de ambas.
Para el primer caso, los javadocs pueden indicar qué adaptTo-targets
son posibles. Sin embargo, para subclases específicas como el recurso basado en JCR, a menudo esto no es posible. En este último caso, las implementaciones de AdapterFactory
normalmente forman parte de las clases privadas de un paquete y, por lo tanto, no están expuestas en una API de cliente ni están enumeradas en javadocs. En teoría, sería posible acceder a todas las AdapterFactory
implementaciones de OSGi tiempo de ejecución del servicio y observe sus configuraciones "adaptables" (fuentes y destinos), pero no para asignarlas entre sí. Al final, esto depende de la lógica interna, que debe documentarse. De ahí esta referencia.
Referencia reference
Sling sling
Recurso se adapta a:
ResourceResolver se adapta a:
SlingHttpServletRequest se adapta a:
Aún no hay destinos, pero implementa Adaptable y podría utilizarse como fuente en una fábrica de adaptadores personalizada.
SlingHttpServletResponse se adapta a:
WCM wcm
Página se adapta a:
Componente se adapta a:
Plantilla se adapta a:
Seguridad security
Autorizable, Usuario y Grupo adaptarse a:
DAM dam
Activo se adapta a:
Etiquetado tagging
Etiqueta se adapta a:
Otro other
Además, Sling / JCR / OCM también proporciona un [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory)
para OCM personalizado (Asignación de contenido de objeto).