sábado, 28 de junho de 2008

Tagged under: , , , , ,

ZK: Ajax sem JavaScript no NetBeans - Parte 2

Na 2a parte do nosso tutorial vamos usar o NetBeans 6.1 para criar uma tabela no JavaDB e automaticamente gerar uma classe de entidade correspondente no padrão JPA. Ao final, exibiremos as informações em uma página index.zul.

Comece abrindo o projeto ListaTafefas que criamos na parte 1. Na aba Services, do lado esquerdo, clique com o botão direito em JavaDB e escolha CreateDatabase. Chame o banco de dados de Tafefas, usuário e senha javabahia e escolha a localização do BD no seu computador. Logo abaixo, aparecerá uma linha jdbc:derby://localhost:1527/Tarefas. Clique com o botão direito e escolha Connect. Pronto! O banco está criado, porém ainda não temos nenhuma tabela.

Criando o banco de dados Tarefas no JavaDB

Clique com o botão direito no folder Tables e escolha Execute Command. Na área de edição, será aberta uma aba que permite a execução de comandos SQL. Copie e cole o comando a seguir e mande executar (Ctrl+Shift+E):
create table TAREFA(
ID INTEGER GENERATED ALWAYS AS IDENTITY not null primary key,
NOME VARCHAR(50),
PRIORIDADE INTEGER,
DATA_TAREFA DATE);
INSERT INTO Tarefa(NOME,PRIORIDADE,DATA_TAREFA) VALUES ('Comprar passagens', 1, '07/10/2008');
INSERT INTO Tarefa(NOME,PRIORIDADE,DATA_TAREFA) VALUES ('Reservar hotel', 2, '07/15/2008');
INSERT INTO Tarefa(NOME,PRIORIDADE,DATA_TAREFA) VALUES ('Alugar carro', 3, '07/25/2008');
INSERT INTO Tarefa(NOME,PRIORIDADE,DATA_TAREFA) VALUES ('Arrumar bagagens', 3, '07/30/2008');
INSERT INTO Tarefa(NOME,PRIORIDADE,DATA_TAREFA) VALUES ('Tirar férias', 1, '09/01/2008')
Será criada uma tabela com 4 campos, tendo o ID como chave primária, gerada automaticamente. Também serão adicionados 4 registros, para utilizarmos na hora de listá-los (observe que as datas estão no formato MM/DD/AAAA). Agora vamos aprender a usar o Java Persistence API, que provê um padrão para mapeamento objeto relacional. Na árvore do projeto, clique com o botão direito em Source Packages e escolha New -> Entity Classes from Database. Abra a combo em Data Source e escolha New. Informe jdbc/tarefas no campo JDNI Name e jdbc:derby://localhost:1527/Tarefas em Data Base Connection. Após clicar em OK a tabela TAREFA aparecerá disponível na lista. Selecione-a e clique em Add e em seguida Next.

Criando Entity Classes a partir de um banco de dados

Na tela seguinte, informe javabahia.beans no campo Package e clique no botão Create Persistente Unit. Aceite os valores default (será usado o TopLink como provider, mas você poderia escolher outro de sua preferência, como Hibernate ou OpenJPA) e clique em Create para gerar a ListaTarefasPU. De volta a tela anterior, clique em Finish e será criada a classe Tarefa, já com todas as anotações no padrão JPA, e o arquivo persistence.xml com as definições da Persistence Unit. Abra Tarefa.java e adicione @GeneratedValue(strategy=GenerationType.IDENTITY) logo abaixo de @Id, o que provocará a geração automática da chave primária da tabela. Adicione também o método public String getDataTarefaAsString() { return new SimpleDateFormat("dd/MM/yyyy").format(dataTarefa); }, que será utilizado mais à frente para obter a data da tarefa no formato dia/mês/ano. Execute um Fix Imports (Ctrl+Shift+I) para não dar erro de compilação. Na pasta Configuration Files, dê um duplo clique em persistence.xml e desmarque a opção Include All Entity Classes in "ListaTarefas" Module. Clique no botão Add Class e inclua javabahia.beans.Tarefa.

Editando a classe Tarefa.java, criada automaticamente pelo NetBeans

Agora já podemos editar o arquivo index.zul para acessar as informações no nosso banco de dados. Altere-o para o conteúdo listado a seguir. Observe que dentro da tag zscript escrevemos puramente código Java. Usamos a classe JpaUtil para obter um EntityManager referenciando pelo nome a Persistence Unit criada anteriormente. Com a tag listitem o atributo forEach realiza as iterações na lista de tarefas já obtida. Em listcell usamos Expression Language (EL) para obter o conteúdo de cada campo. Viu como é fácil?
<?xml version="1.0" encoding="UTF-8"?>
<window title="Lista de Tarefas" width="800px" border="normal">
<zscript>
import javabahia.beans.Tarefa;
import java.util.ArrayList;
import javax.persistence.EntityManager;
import org.zkoss.zkplus.jpa.JpaUtil;

private static EntityManager em = JpaUtil.getEntityManager(
"ListaTarefasPU");
List listaTarefas = em.createQuery(
"SELECT t FROM Tarefa t").getResultList();
</zscript>
<listbox id="box" multiple="true" rows="4">
<listhead>
<listheader label="Tarefa" />
<listheader label="Prioridade" width="90px" />
<listheader label="Data" width="90px" />
</listhead>
<listitem forEach="${listaTarefas}" value="${each}">
<listcell label="${each.nome}"/>
<listcell label="${each.prioridade}"/>
<listcell label="${each.dataTarefaAsString}"/>
</listitem>
</listbox>
</window>
Execute a aplicação o NetBeans se encarregará de compilar tudo, efetivar o deploy no Glassfish e abrir o navegador padrão na página da aplicação. Você verá tabela listando todos os itens previamente cadastrados no banco de dados. No próximo post iremos melhorar este exemplo, criando uma aplicação totalmente funcional. Novamente lembramos que esse é um exemplo adaptado de um tutorial da página oficial do ZK, então você já tem uma boa referência para incrementar já sua Lista de Tarefas.

Usando ZK com JPA para listar as Tarefas armazenadas no JavaDB

0 comentários: