Tapeçaria Apache - Armazenamento

Cada aplicativo da web deve ter alguma maneira de armazenar certos dados do usuário, como objeto do usuário, preferências do usuário, etc. Por exemplo, em um aplicativo de carrinho de compras, os itens / produtos selecionados do usuário devem ser salvos em um depósito temporário (carrinho) até que o usuário prefira para comprar os produtos. Podemos salvar os itens em um banco de dados, mas será muito caro, pois nem todos os usuários comprarão os itens selecionados. Portanto, precisamos de um arranjo temporário para armazenar / manter os itens. Apache Tapestry fornece duas maneiras de persistir os dados e são -

  • Dados da página de persistência
  • Armazenamento de Sessão

Ambos têm suas próprias vantagens e limitações. Verificaremos nas seções a seguir.

Dados da página de persistência

Os dados da página de persistência são um conceito simples para persistir dados em uma única página entre as solicitações e também é chamado de Page Level Persistence. Isso pode ser feito usando o@Persist anotação.

@Persist 
public int age;

Depois que um campo é anotado com @Persist, o valor do campo será persistido na solicitação e se o valor for alterado durante a solicitação, ele será refletido quando for acessado na próxima vez. O Apache Tapestry fornece cinco tipos de estratégia para implementar o conceito @Persist. Eles são os seguintes -

  • Session Strategy - Os dados são persistidos usando a Sessão e é uma estratégia padrão.

  • Flash Strategy- Os dados são persistidos usando a Sessão também, mas é de curta duração. Os dados estarão disponíveis em apenas uma solicitação subsequente.

@Persist(PersistenceConstants.FLASH) 
private int age;
  • Client Strategy - Os dados são mantidos no lado do cliente, como string de consulta de URL, campo oculto no formulário etc.

@Persist(PersistenceConstants.FLASH) 
private int age;
  • Hibernate Entity Strategy- Os dados são persistidos usando o módulo Hibernate como Entidade. A entidade será armazenada no Hibernate e sua referência (nome da classe Java e sua chave primária) será salva como token noHttpSession. A entidade será restaurada usando o token disponível em HttpSession.

@Persist(HibernatePersistenceConstants.ENTITY) 
private Category category;
  • JPA Entity Strategy- Os dados são persistidos usando um módulo JPA. Só será capaz de armazenar Entidade.

@Persist(JpaPersistenceConstants.ENTITY) 
private User user;

Armazenamento de Sessão

Armazenamento de sessão é um conceito avançado usado para armazenar dados que precisam estar disponíveis nas páginas, como dados no assistente de várias páginas, detalhes do usuário conectado, etc. O Armazenamento de sessão fornece duas opções, uma para armazenar objetos complexos e outra para armazenar valores simples

  • Session Store Object - Usado para armazenar objetos complexos.

  • Session Attributes - Usado para armazenar valores simples.

Objeto de armazenamento de sessão (SSO)

Um SSO pode ser criado usando @SessionStoreanotação. O SSO armazenará o objeto usando o tipo do objeto. Por exemplo, oCart Objectserá armazenado usando um nome de classe Cart como token. Portanto, qualquer objeto complexo pode ser armazenado uma vez em um aplicativo (um por usuário).

public class MySSOPage { 
   @SessionState 
   private ShoppingCart cart; 
}

Um SSO é um armazenamento especializado e deve ser usado para armazenar apenas objetos complexos / especiais. Tipos de dados simples também podem ser armazenados usando um SSO, mas armazenar tipos de dados simples como String faz com que ele armazene apenas um valor de “String” no aplicativo. Usar um único valor de “String” no aplicativo simplesmente não é possível. Você pode usar tipos de dados simples, pois o Apache Tapestry fornece atributos de sessão.

Atributos de sessão

Os atributos da sessão permitem que os dados sejam armazenados por nome em vez de por tipo.

public class MyPage { 
   @SessionAttribute  
   private String loggedInUsername; 
}

Por padrão, os Atributos da sessão usam o nome do campo para referir-se aos dados na sessão. Podemos alterar o nome de referência por parâmetro de anotação, conforme mostrado abaixo -

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

Um dos principais problemas em usar o nome como referência de sessão é que podemos acidentalmente usar o mesmo nome em mais de uma aula / página. Nesse caso, os dados armazenados podem ser alterados de forma inesperada. Para corrigir esse problema, será melhor usar o nome junto com o nome da classe / página e o nome do pacote comocom.myapp.pages.register.email, em que com.myapp.pages é o nome do pacote, register é o nome da página / classe e, finalmente, email é o nome da variável (a ser armazenada).