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

domingo, 15 de junho de 2008

Tagged under: , , , , , ,

ZK: Ajax sem JavaScript no NetBeans - Parte 1

Em um dos posts sobre o JavaOne comentei ter visto um framework impressionante chamado ZK. Conversei alguns minutos com Henri Chen, autor de um livro sobre o assunto, e prometi a mim mesmo que arranjaria um tempo para conhecer melhor a solução, pois fiquei bastante curioso.


Henri Chen e seu livro sobre ZK

O principal objetivo do ZK é permitir que aplicações web tenham a mesma interatividade e riqueza encontradas desktop, só que isso deve ser o mais fácil possível para o desenvolvedor. Ele inclui um Ajax-based event-driven engine, um conjunto rico de componentes XUL e XHTML e uma linguagem de marcação (markup language). Para ter uma noção do que é possível sugiro dar uma olhada no live demo e uma navegada na página do projeto em zkoss.org.

Para experimentar o ZK eu precisava de uma aplicação exemplo. Resolvi me basear num Lista de Tarefas (Todo list) criada em um Tutorial Passo a Passo para iniciantes do ZK, em português (Veja ao vivo). Como não tenho colocado a mão na massa com desenvolvimento Web ultimamente, procurei facilitar minha vida e encontrei no SourceForge o REM - A NetBeans Module for ZK, ou seja, um plugin ZK para o NetBeans.

Nessa 1a parte, vamos aprender a instalar o plugin e criar um projeto usando o ZK. Na 2a criaremos uma tabela no JavaDB, a classe de entidade correspondente usando JPA e exibiremos as informações em uma página. Na 3a parte vamos implementar a inclusão, exclusão e alteração de informações, chegando a uma aplicação 100% funcional.

Primeiro baixe a versão 1.5.0 (um arquivo ZIP), e adicione o plugin ao NetBeans 6.1 (Para isso, vá no menu Tools -> Plugins, aba Downloaded, clique em Add Plugins e selecione o arquivo net-sf-rem.nbm na pasta onde você descompactou o arquivo baixado. Clique em Install e siga confirmando até concluir).

Instalando o REM NetBeans Module for ZK

Agora crie um projeto para ver como usar o ZK no NetBeans. Escolha File -> New Project -> Web / Web Application e clique em Next. Chame o projeto de ListaTarefas e escolha Next. Escolha o Server de sua preferência (estou usando o Glassfish V2) e siga em frente. A última tela pedirá para escolher os frameworks que você deseja usar na aplicação. Selecione ZK 3.0.1 e clique em Finish.

Criando um projeto Web no NetBeans usando o ZK

Será criado um projeto Java/Web com toda a estrutura de pastas e prontas para deploy. Em Web Pages, Observe o arquivo principal index.zul, contendo apenas o trecho código:
<?xml version="1.0" encoding="UTF-8"?>
<window>
My ZK application
</window>
Se você clicar em Run terá uma aplicação funcional, mostrando uma página com o texto My ZK application.

Aplicação ZK básica feita no NetBeans

Temos nosso ponto de partida, então você já pode começar a desenvolver para Web usando o ZK. Se não quiser aguardar o próximo post, sugiro fazer umas experiências alterando o código da index.zul com base em demos ou tutoriais da página do ZK. Até breve!

segunda-feira, 9 de junho de 2008

Tagged under: , , , ,

A Computação é Invisível, mas a Satisfação não!

Tema da última palestra do I Salvador Java Day, a Computação Invisível foi aos poucos sendo desvendada pelo nosso convidado Alexandre Gomes. De forma muito bem-humorada, e bem fundamentada, ele manteve o público firme até o final do evento, a maioria (como eu) com a satisfação estampada no rosto. Ao final, sorteio de várias camisas do Salvador Java Day, e JavaBahia, bonés de Java e NetBeans, 1 pen-drive 1GB do NetBeans e 4 assinaturas semestrais (2 da JavaMagazine, 2 da Engenharia de Software Magazine). Veja algumas fotos em javabahia.fotopages.com. As palestras/mini-cursos estão disponíveis para download aqui.


Mas o I Salvador Java Day foi mais do que isso. Os 3 mini-cursos da manhã e as demais palestras da tarde foram todos muito bons, segundo comentários dos participantes. Prova disso é que, mesmo num sábado chuvoso, o evento atraiu bastante gente de vários locais, dentre eles Salvador, Lauro de Freitas, Feira de Santana e Umburanas, esta última a mais de 400 km da capital! Bom, isso mostra que JavaBahia e SertãoJUG juntos estão começando a ampliar fronteiras.... Será que já podemos pensar no I Bahia Java Day?

Aos palestrantes/instrutores (Alexandre, Igor, Augusto, Alessandro, Ramon e Mário Jorge), a todos que trabalharam na organização (JavaBahia, InfoqJr), aos patrocinadores e parceiros (FIB e CPM Braxis), aos apoiadores (JavaMagazine e Engenharia de Software Magazine), ao irmão SertãoJUG e as páginas amigas (BahiaInfo, Softex Salvador e Empregos Bahia) nosso MUITO OBRIGADO pelo esforço e dedicação de todos. Foi um excelente trabalho em equipe!


Bom, se você esteve no evento, sinta-se à vontade para colocar aqui seus comentários, críticas e sugestões. Quem não pôde estar presente, que pena... fica pra próxima!