Uso de los adaptadores de Sling using-sling-adapters
Sling ofrece un Patrón de adaptador para traducir convenientemente los objetos que implementan el Adaptable interfaz. Esta interfaz proporciona un adaptTo() método 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 del genérico
Resource
proporciona acceso al JCR subyacenteNode
. -
Creación de acceso directo de objetos que requieren que se pasen objetos de contexto interno.
Por ejemplo, el basado en JCR
ResourceResolver
contiene una referencia al de la solicitudJCR Session
, que a su vez es necesaria para muchos objetos que funcionan en función de esa sesión de solicitud, como laPageManager
oUserManager
. -
Acceso directo a servicios.
Un caso raro -
sling.getService()
es simple también.
Valor devuelto nulo null-return-value
adaptTo()
Puede devolver 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 un obj.adaptTo()
llamada. Si la variable obj
es el mismo, el objeto devuelto es el mismo.
Este almacenamiento en caché se realiza para todos los AdapterFactory
casos basados en.
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 en el interior AdapterFactory
, que los objetos se pueden reutilizar en este escenario.
Funcionamiento how-it-works
Hay varias formas en que Adaptable.adaptTo()
se puede implementar:
-
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 el
Adaptable
interfaz y debe ampliarseSlingAdaptable
(que pasa eladaptTo
llamada a un administrador de adaptadores central).Este método permite los enlaces en el
adaptTo
mecanismo para clases existentes, comoResource
. -
Una combinación de ambos.
En el primer caso, los documentos de Java™ pueden indicar lo siguiente 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 AdapterFactory
implementaciones desde el OSGi tiempo de ejecución del servicio de y observe sus configuraciones "adaptables" (fuentes y destinos), pero no para asignarlas entre sí. Al final, 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 origen en un AdapterFactory personalizado.
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 adaptar a:
DAM dam
Recurso se adapta a:
Etiquetado tagging
Etiqueta se adapta a:
Otro other
Además, Sling/JCR/OCM también proporciona un AdapterFactory
para OCM personalizado (Asignación de contenido de objeto) objetos.