O Projeto
Este projeto começou no
TDC Floripa 2008, onde o instrutor Vinicius Rodrigues
Nunes (Vinny) apresentou uma palestra sobre os novos recursos de JSF 2.0 e, para isto,
desenvolveu uma aplicação demo.
Nós da Globalcode sempre estivemos muito envolvidos com JSF, desde os projetos
FacesAnnotations e SuperCRUD
criados pelo Vinicius, o curso
AW4 - Desenvolvimento com JSF de minha autoria, o
Core Web
criado originalmente pelo
Vinicius Senger e mantido por vários instrutores:
Alberto Lemos (Spock), Melissa Vilella, Kleber Xavier...
entre tantos outros minicursos onde todos nós colaboramos, sem contar as
diversas consultorias e treinamentorings que envolvem JSF e outros frameworks.
Desta forma, como grandes fãs e usuários desta tecnologia, eu,
Yara Senger,
sempre procurei participar da sala de JSF no
IRC
e convidar outras pessoas para ficar em contato com pessoas que estão
desenvolvendo e também o pessoal da specificação. Um belo dia, lendo um blog
atrasado do Ed Burns
vi a seguinte chamada:
E pensei comigo, isto é a nossa cara, porque o Ed Burns não me falou
diretamente, agora alguém já deve ter feito!
Entrei no IRC na mesma hora e conversei com ele, ninguém tinha respondido a
chamada, era a nossa chance. Conversei com o Vinicius Rodrigues Nunes (Vinny) e
achamos que seria uma excelente oportunidade de melhorar a aplicação de Scrum,
juntando duas áreas que acreditamos:
JSF 2.0
e métodos ágeis, e concordamos em doar a aplicação! Apesar da chamada ser para
JSF 1.2 eles tinham os planos de migrar para JSF 2.0 e nossa aplicação já era JSF 2.0.
Além disto, havia outra ligação especial entre JSF e Scrum, pois havíamos
participado do
Yahoo! Open Hack Day, onde ganhamos o prêmio
Bridging the Gap, pelos 4 projetos entregues no evento em 2008:
- Renderizador JSF para a linguagem Blueprint
- Aplicação para celular que permite estimar estórias com o jogo de Poker/Scrum
criada utilizando o renderizador
- Plugin para NetBeans para dar suporte a Blueprint!
- Integração das aplicações geradas pelo SuperCRUD com Flickr!
O nosso time era grande, mas vale reforçar a participação do Wagner Santos,
Rafael Nunes e Eder Magalhães no time.
Veja mais informações na página
Bridging the Gap.
Assinamos os formulários de colaboração e começamos o trabalho. O Vinny fez
diversos ajustes na aplicação e fizemos o primeiro commit para análise do código
e das funcionalidades.
O André Frota, designer da Globalcode, já estava colaborando, criando o layout
e as imagens necessárias. Como a aplicação tem vários skins foi bastante
trabalhoso, porque era necessário criar todas as imagens em todas as cores.
Apareceram diversas solicitações de alteração: não era permitido usar nenhuma
API de terceiros, tem que usar Maven,
tem que rodar no Glassfish.
E o tempo corria. Corria, corria.
Após atendermos todos os requisitos do projeto inicial, ficamos sabendo que
a aplicação se tornaria uma das demonstrações oficiais a ser incorporada na
implementação de referência do JSF 2.0. Como somos perfeccionistas e vaidosos,
resolvemos promover novas mudanças, então, mudamos, mudamos, mudamos para
melhorar ... ah, e depois mudamos mais um pouco.
O Spock nos ajudou ao refatorar para simplificar toda a camada de persistência
e componentes de negócios para managed beans com os recursos novos do JSF 2.0.
Para tornar independente de bibliotecas de terceiros, ele também migrou a base
de dados de MySQL para JavaDB, de Tomcat para Glassfish e de Hibernate para
EclipseLink como JPA provider. Também foi adicionado o suporte ao Maven para
permitir a compilação e empacotamento automatizados, além de facilitar o acesso
ao projeto através das IDEs NetBeans e Eclipse. Enquanto isso, eu e o André
trabalhávamos nas telas para melhorar o layout, imagens, cores, fontes,
internacionalização, o suporte a skins e a ap?icação de componentes compostos.
A Ana Abrantes e o Vinicius Senger nos ajudaram bastante no preparo do ambiente
de execução baseado no Glassfish num servidor virtualizado para homologação. Por
fim, quase no final até a instrutura Elaine Quintino se envolveu com o projeto e
realizou algumas coreções importantes. Foram várias horas de dedicação junto com
o time, ou melhor, longe do time já que o desenvolvimento era totalmente remoto
com os integrantes em cidades diferentes e até em país diferente.
Até o Ed Burns acabou colaborando, implementando validação com
Bean Validation
na nossa aplicação. Foi então, que o Ed Burns perguntou se poderia usar a aplicação
demo no Hands-on Labs que ele ia ministrar no JavaOne: CLARO QUE PODE, nós dissemos!
E finalmente chegou o JavaOne, onde tivemos a oportunidade de conhecer pessoalmente
várias pessoas do
JSF Expert Group, do IRC e do Glassfish e várias delas conheciam nossa
aplicação.
Foi muito interessante participar deste projeto, foi muito interessante colaborar
com uma tecnologia que acreditamos, foi muito interessante colaborar com Open Source
trabalhando com este time cheio de energia e com muita disposição para investir em
suas horas livres neste projeto! Parabéns a todo o time!
A Aplicação de Scrum
Os requisitos da aplicação pareciam simples: usar banco de dados, ter um CRUD e usar
o máximo possível de recursos de JavaServer Faces 2.0, então... então resolvemos ampliar
um pouco a aplicação originalmente criada pelo Vinicius Rodrigues Nunes (Vinny),
instrutor da V.Office
em Floripa e fã de JSF.
Basicamente, temos uma aplicação que gerencia um projeto de acordo com Scrum, ou seja,
cada PROJETO tem 0..N SPRINTs, cada SPRINT tem 0..N ESTORIAS, cada ESTORIA tem 0..N TAREFAS:
- Gerenciar projeto (CRUD)
- Gerenciar Sprints do projeto (CRUD)
- Gerenciar Estórias do Sprint (CRUD)
- Gerenciar Tarefas da Estória (CRUD)
- Visualizar a DashBoard, que mostra todas as Tarefas de um Sprint separado pelo status
da Tarefa, que pode ser TO DO, DOING ou DONE
A aplicação foi criada para utilizar:
- JSF 2
- JPA
- Glassfish V2 e V3
- Java DB
- Maven
As seguintes novidades de JSF 2.0 foram utilizadas:
- Facelets
- Suporte a AJAX
- Composite Components
- Navegação implícita
- Configuração por annotations e configuração no faces-confg.xml
- Novas tags <body>, <h:head>, etc...
- BeanValidation (contribuição do próprio Ed Burns)
- Injeção de Entity Manager
- ManagedProperties
- <h:body><h:head>
O Time