Hibernate, Spring, Appfuse, Grails

Desenvolver aplicações web usando Java é sempre um desafio. Se a gente olha os blueprints da Sun, estuda todos os padrões de projeto sugeridos, e resolve desenvolver tudo do zero, a vida pode ficar bastante dura, pois o trabalho para fazer tudo será enorme.

Ainda bem que a comunidade open source vem trabalhando há anos para nos ajudar a desenvolver aplicações web em Java de forma mais simples com o uso de frameworks de alta qualidade existentes para cada problema.

Minha trajetória em aplicações web mostra claramente que eu sempre procuro usar o que já está pronto e provado ser de boa valia, e mais, sempre procurando abstrair de detalhes técnicos e focando nas soluções para os problemas dos clientes, e não para problemas técnicos.

Por exemplo, para o problema de mapeamento objeto relacional, eu uso o Hibernate. Existem outros, mas o Hibernate é uma solução excepcional que nos ajuda a trabalhar de forma totalmente orientada a objetos, abstraindo os detalhes de persistência em bancos de dados relacionais.

Continuando a subir no nível de abstração, passei em determinado momento a usar o Spring Framework. Pra que serve ele? Bem, falar do Spring em um parágrafo é algo complicado, mas tentando resumir de forma muito grotesca, o Spring nos ajuda integrar as diversas camadas de nossas aplicações, fornecendo abstrações para várias APIs de java e outros projetos. Por exemplo, se você usa o um framework MVC, como criar a sua camada M (Model) que será usada pelo(s) seu(s) controlador(es)? Se você vai acessar banco de dados com JDBC, qual uma boa forma de fazer isso (lembre-se que vc sempre vai precisar abrir conexão, iniciar uma transação, fazer rollback em caso de falha, fechar a conexão no seu finally, etc)? Se você usa Hibernate, qual uma boa forma de fazê-lo? E se usar Hibernate e JDBC juntos? Quer enviar e-mails da sua aplicação? O Spring ajuda? Quer usar EJB? Ele ajuda tbem. Quer......ele ajuda!

Dando mais um passo pra cima, em determinado momento descobri o Appfuse (ou aqui). Como foi bom descobrir o Appfuse. O que é ele? Um cara chamado Matt Raible vinha desenvolvendo aplicações web em Java para seus clientes, e sempre ao iniciar novos projetos percebeu que ele copiava e colava arquivos Java, xml, estrutura de diretórios, etc de um projeto antigo para o novo. Então, por que não automatizar isso. Ou seja, dada uma determinada arquitetura da sua soluão (no caso , dele), ele gostaria de criar um projeto novo em segundos, tendo este projeto logon, solução de cookie para não precisar fazer login novamente no sistema, solução de Esqueci Minha Senha, envio de e-mail, persistência com Hibernate (ou iBatis), uso do Spring para juntar tudo, solução para modelagem de usuários e papéis (user e role), etc. Então, ele criou o Appfuse: um grande arquivo ANT que possui diversas tarefas para:

  • criar um novo projeto seguindo a arquitetura que ele definiu (arquitetura essa conhecida e aprovada principalmente por desenvolvedores que usam Spring: MVC, Managers, DAO, Taglibs, etc)
  • compilar tudo e empacotar num WAR
  • fazer deploy para o tomcat, por exemplo.
  • gerar controladores, testes unitários, testes de integração com canoo, JSPs, etc, a partir de um POJO de domínio (seu model).
  • entre outras tarefas

Então, em minutos a gente cria um projeto em Java, usando SpringMVC (ou Struts, ou WebWork), Spring, Hibernate (iBatis), Displaytag, Ajax com DWR e scriptaculous (prototype), e outros. Depois, ao criar sua classe POJO de modelo, o Appfuse gera controladores, JSP, testes, Managers, DAOs, etc. Depois é só aparar as arestas.

Grande projeto, e grande cara esse Matt Raible. Por último, a lista de users do Appfuse é muito ativa e as pessoas ajudam mesmo!

Continuando a subir o nível, recentemente eu descobri o Grails.....ahhhh deixa para o próximo post.

0 comentários: