Tapiz Apache - Almacenamiento

Cada aplicación web debe tener alguna forma de almacenar ciertos datos del usuario como el objeto del usuario, las preferencias del usuario, etc. Por ejemplo, en una aplicación de carrito de compras, los artículos / productos seleccionados por el usuario deben guardarse en un depósito temporal (carrito) hasta que el usuario lo prefiera. para comprar los productos. Podemos guardar los artículos en una base de datos, pero será demasiado caro ya que no todos los usuarios van a comprar los artículos seleccionados. Entonces, necesitamos un arreglo temporal para almacenar / conservar los artículos. Apache Tapestry Proporciona dos formas de conservar los datos y son:

  • Datos de la página de persistencia
  • Almacenamiento de sesiones

Ambos tienen sus propias ventajas y limitaciones. Lo comprobaremos en los siguientes apartados.

Datos de la página de persistencia

Los datos de la página de persistencia es un concepto simple para conservar los datos en una sola página entre solicitudes y también se denomina como Page Level Persistence. Se puede hacer usando el@Persist anotación.

@Persist 
public int age;

Una vez que un campo está anotado con @Persist, el valor del campo se mantendrá durante la solicitud y, si el valor se cambia durante la solicitud, se reflejará cuando se acceda a él la próxima vez. Apache Tapestry proporciona cinco tipos de estrategias para implementar el concepto @Persist. Son los siguientes:

  • Session Strategy - Los datos se conservan utilizando la sesión y es una estrategia predeterminada.

  • Flash Strategy- Los datos también se conservan utilizando Session, pero es de muy corta duración. Los datos estarán disponibles en una sola solicitud posterior.

@Persist(PersistenceConstants.FLASH) 
private int age;
  • Client Strategy - Los datos se conservan en el lado del cliente, como la cadena de consulta de URL, el campo oculto en el formulario, etc.

@Persist(PersistenceConstants.FLASH) 
private int age;
  • Hibernate Entity Strategy- Los datos se conservan utilizando el módulo Hibernate como Entidad. La entidad se almacenará en Hibernate y su referencia (nombre de clase Java y su clave principal) se guardará como token enHttpSession. La entidad se restaurará utilizando el token disponible en HttpSession.

@Persist(HibernatePersistenceConstants.ENTITY) 
private Category category;
  • JPA Entity Strategy- Los datos se conservan mediante un módulo JPA. Solo podrá almacenar Entity.

@Persist(JpaPersistenceConstants.ENTITY) 
private User user;

Almacenamiento de sesiones

El almacenamiento de sesiones es un concepto avanzado que se utiliza para almacenar datos que deben estar disponibles en las páginas, como los datos en el asistente de varias páginas, los detalles del usuario registrado, etc. El almacenamiento de sesiones ofrece dos opciones, una para almacenar objetos complejos y otra para almacenar valores simples

  • Session Store Object - Se utiliza para almacenar objetos complejos.

  • Session Attributes - Se utiliza para almacenar valores simples.

Objeto de almacenamiento de sesión (SSO)

Se puede crear un SSO usando @SessionStoreanotación. El SSO almacenará el objeto usando el tipo de objeto. Por ejemplo, elCart Objectse almacenará utilizando un nombre de clase Cart como token. Por tanto, cualquier objeto complejo se puede almacenar una vez en una aplicación (uno por usuario).

public class MySSOPage { 
   @SessionState 
   private ShoppingCart cart; 
}

Un SSO es una tienda especializada y debe usarse para almacenar solo objetos complejos / especiales. Los tipos de datos simples también se pueden almacenar usando un SSO, pero el almacenamiento de tipos de datos simples como String hace que solo almacene un valor de "String" en la aplicación. El uso de un solo valor de "Cadena" en la aplicación simplemente no es posible. Puede utilizar tipos de datos simples ya que Apache Tapestry proporciona atributos de sesión.

Atributos de sesión

Los atributos de sesión permiten que los datos se almacenen por nombre en lugar de por su tipo.

public class MyPage { 
   @SessionAttribute  
   private String loggedInUsername; 
}

De forma predeterminada, Atributos de sesión utiliza el nombre del campo para hacer referencia a los datos de la sesión. Podemos cambiar el nombre de referencia por parámetro de anotación como se muestra a continuación:

public class MyPage { 
   @SessionAttribute("loggedInUserName") 
   private String userName; 
}

Uno de los principales problemas al usar el nombre como referencia de sesión es que podemos usar accidentalmente el mismo nombre en más de una clase / página. En este caso, los datos almacenados pueden cambiar inesperadamente. Para solucionar este problema, será mejor usar el nombre junto con el nombre de la clase / página y el nombre del paquete comocom.myapp.pages.register.email, donde com.myapp.pages es el nombre del paquete, register es el nombre de la página / clase y, finalmente, el correo electrónico es el nombre variable (que se almacenará).