Criando a camada de persistência dos dados
O Tapestry oferece suporte a Hibernate. Nesse exemplo os dados serão armazenados usando o banco de dados HSQLDB.
Maven
Informe as novas dependências do projeto no arquivo de configuração do Maven.
pom.xml
<dependencies> ... <dependency> <groupId>org.apache.tapestry</groupId> <artifactId>tapestry-hibernate</artifactId> <version>${tapestry-release-version}</version> </dependency> <dependency> <groupId>hsqldb</groupId> <artifactId>hsqldb</artifactId> <version>1.8.0.7</version> </dependency> ... </dependencies> ...
Hibernate Configuration
Crie o arquivo de configurações do Hibernate.
src/main/resources/ hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property> <property name="hibernate.connection.url">jdbc:hsqldb:./target/work/t5teste;shutdown=true</property> <property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property> <property name="hibernate.connection.username">sa</property> <property name="hibernate.connection.password"></property> <property name="hbm2ddl.auto">update</property> <property name="hibernate.show_sql">true</property> <property name="hibernate.format_sql">true</property> </session-factory> </hibernate-configuration>
Atenção: na listagem acima a tag <property name="hbm2ddl.auto">update</property> informa ao Hibernate para fazer o update na estrutura das tabelas quando você alterar a estrutura das entitades, as outras opções são: validate (faz apenas a validação e informa se houver diferenças entre a estrutura das entidades e das tabelas; e create (apaga todo o banco de dados e cria um novo com as tabelas vazias).
Adicione as anotações @Entity e @Id na entidade Usuário.
src/main/java/org.exemplo.t5teste.entities. Usuario.java
... import javax.persistence.Entity; import javax.persistence.Id; @Entity public class Usuario { ... @Id private long id; ... }
DAO (Data Access Object) é um padrão de projeto para persistência de dados que permite separar regras de negócio das regras de acesso a banco de dados. Crie um DAO genérico.
src/main/java/org.exemplo.t5teste.dao. GenericDAO.java
package org.exemplo.t5teste.dao; import java.util.List; import org.hibernate.criterion.Restrictions; import org.hibernate.Session; public class GenericDAO { protected Session hibernateSession; private Class<?> entityClass; public GenericDAO(Session hibernateSession, Class<?> entityClass) { this.hibernateSession = hibernateSession; this.entityClass = entityClass; } public List<?> getList() { return hibernateSession.createCriteria(entityClass).list(); } public void gravar(Object entity) { hibernateSession.saveOrUpdate(entity); } public void deleteById(long id) { hibernateSession.clear(); hibernateSession.delete(this.getById(id)); } public Object getById(long id) { return hibernateSession.createCriteria(entityClass).add(Restrictions.eq("id", id)).uniqueResult(); } }
Altere a página Cadastro.
src/main/java/org.exemplo.t5teste.pages.usuario. Cadastro.java
... import org.apache.tapestry5.annotations.PageActivationContext; import org.apache.tapestry5.hibernate.annotations.CommitAfter; import org.apache.tapestry5.ioc.annotations.Inject; import org.exemplo.t5teste.dao.GenericDAO; import org.hibernate.Session; ... @PageActivationContext @Property private Usuario usuario; ... @Inject private Session session; void onSuccess() { gravar(); usuario = new Usuario(); return; } @CommitAfter void gravar() { if (usuario.getId() == 0) { usuario.setId(new Date().getTime()); } final GenericDAO dao = new GenericDAO(session, Usuario.class); dao.gravar(usuario); } ...
src/main/resources/org/exemplo/t5teste/pages/usuario/ Cadastro.tml
... <p> [ <t:PageLink t:page="usuario/Cadastro" t:context="0">Limpar</t:PageLink> ] </p> ...
Mais informações
Veja o guia do usuário e as páginas de configurações e estatísticas no site do Tapestry-Hibernate