Estes dias ia iniciar um projeto e comecei pela escolha de um framework para utilizar. O pessoal da empresa em que eu trabalhava (a dois meses mudei de emprego, estado, cidade... e por isso de ter largado o blog um pouco) estava usando o Jboss SEAM para novas aplicações WEB. Eu gostei, fui em uma palestra sobre o Jboss Seam e tudo mais, mas no fim achei que ia usar uma bomba atômica para matar uma formiga. E depois, queria aprender algo realmente novo e que ninguém naquela sala tivesse trabalhado, por desafio mesmo. Então pensei em dar uma olhada nos frameworks brasileiros (não, não li a revista aquela com a matéria de capa sobre isso). De cara na home do site do primeiro candidato eu já vi o que mais me agradaria: sem XMLs e annotations!
Claro, estou falando do Mentawai. Projeto bem bacana que anda conquistando o mundo (ta isso foi por minha conta :) )!!!
Então como de costume, peguei o .jar do framework, criei um novo projeto no Eclipse e comecei a fuçar criando minha aplicação modelo, se eu conseguisse fazer ali meia dúzia de coisas que eu desejava na minha aplicação final ele seria o eleito.
Comecei pela lista:
- Não quero preencher beans na mão, o framework tem que pegar os formulários e popular objetos para mim.
- Tem que ter algum suporte a IoC sem que eu tenha que meter mais uma tonelada de .jars, como o do Spring e a penca de .jars que ele necessita, para isso e sem muito esforço também, não quero ter que ler mais uma documentação para aprender como usar um framework secundário.
- Bom, pela minha preguiça expressa acima eu também não quero ter que correr atrás de componentes como upload, envio de e-mail, etc... o eleito tinha que ter tudo isso.
- O Mentawai de cara já era um futuro eleito por não conter um só maldito XML e nem uma porcaria de annotation! Não, sério... na boa... aquela sopa de annotations ou aqueles duzentos arquivos XML não é prático.
Meu exemplo era o mais simples: uma tela de acesso ou cadastro. Ok, vamos complicar um pouco, mas nem tanto, tinha que ter suporte a internacionalização e salvar algumas coisas sobre o usuário em cookies.
Em 4 minutos (na verdade 3 e alguns segundos) eu tinha feito a primeira tela da minha aplicação seguindo a documentação no site do framework.
Toda a configuração da aplicação é feita em uma classe, ou seja, é em Java! Não tem como o cara colocar um caractere inválido, esquecer de fechar uma tag ou fazer qualquer barbeiragem neste arquivo pois o mesmo é compilado. Ótimo, gostei muito disso.
Depois da minha primeira página parti para a forma de pegar os dados do formulário de cadastro em um objeto já preenchido pelo framework. Moleza. Isso foi muito fácil de fazer também.
Login... tenho que criar a forma do cara entrar na minha aplicação e recuperar os dados dele da sessão. Também não foi difícil. Tive uns problemas aqui mas foram barbeiragens minhas :) o frame estava certo!
Comecei a achar que estava no mundo perfeito!
Passei para a internacionalização. Aqui eu tive que apelar para o fórum. Mas fui socorrido em minutos.
A única coisa que ainda falta eu implementar é usar mensagens parametrizadas na internacionalização. Exemplo: O usuário {0} deletou {1}. Mas, diz o inventor do monstro, que há como fazer e eu que não li a documentação corretamente. Devo tirar um tempinho essa semana para descobrir como fazer.
Então minha aplicação ficou assim:
Passos da aplicação:
- Ao acessar o endereço da aplicação no navegador o usuário é redirecionado para a action Preparesystem. Esta action tem a função de ler possíveis dados do usuário armazenados anteriormente, como o último login que acessou o sistema, idioma escolhido anteriormente pelo usuário, etc... Depois de feito isso o usuário é redirecionado para a página principal do sistema.
- Na página principal o usuário tem duas opções: fazer login ou cadastrar-se no sistema.
- Quando o usuário executa login ele é redirecionado para a action Login. Nesta action é injetado o objeto User pelo controle de IoC do Mentawai. Ou seja, é pego na requisição os dados do formulário e postos em um objeto sem a intervenção do desenvolvedor (magavilha!). Depois de aplicada a regra de acesso ao sistema o usuário é redirecionado para a home, caso o login tenha sido bem sucedido, ou para a primeira página do sistema novamente onde serão exibidas as mensagens de erro, caso o login não tenha sido bem sucedido. Note que quem faz a validação da requisição é uma classe externa a action, chamada LoginValidator. Talvez essa seja a grande jogada deste framework, poder separar muito bem as coisas em objetos com propósitos distintos.
- Quando o usuário vai se cadastrar no sistema ele é redirecionado para a página com o formulário de cadastro. Por trás desta página há a action Register que, assim como a action Login, recebe um objeto já preenchido com os dados do formulário. Também a exemplo da action Login, a validação está em uma classe externa chamada RegisterValidator. Se o cadastro for efetivado com sucesso o usuário é redirecionado para uma página de boas vindas de onde ele tem a opção de ir para a home do sistema.
E estamos aí, ela funciona mesmo! Olha a cara dela que espetáculo! :)
Assim começa a aplicação.
Versão em inglês.
Tela de cadastro.
Boas-vindas para usuários que se cadastram.
Home para usuários logados.
Quem quiser baixar os fontes e olhar como foi feito: http://www.mentaframework.org/files/. Enviei para o criador do framework minha app para que ela fique disponível como exemplo de uso.
Era isso pessoal. Encorajo-os a usar o framework, cadastrassem no fórum, e darem algum valor pelo o que é desenvolvido com tanto esforço pelos programadores tupiniquins!
Abraços a todos.
OBS.: Não postem comentários sobre perguntas referentes ao framework aqui, e sim no fórum deles! Postem comentários sobre a minha aplicação, erros de português, falando do blog... enfim.