Acaba de ser liberada a versão 2.0.0 (codinome SDT) do web framework Mentawai. A principal mudança é o suporte a IoC através do MentaContainer que foi integrado de forma transparente ao framework, além de centenas de outras melhorias em prol da abstração e simplicidade.
Optamos por disponibilizar uma aplicação completa como referência. Dessa maneira você pode olhar o código, ver exemplos de várias funcionalidades e decidir por si só a respeito da praticidade e simplicidade do Mentawai em relação aos outros frameworks.
As características particulares do Mentawai, que o diferenciam de outros frameworks, são:
:arrow: Full-stack (completo e auto-suficiente, não necessitando de outros frameworks)
:arrow: KISS principle (se você não sabe ou não consegue fazer algo a culpa é do framework, não sua)
:arrow: Configuração Programática (sem XML ou annotations)
:arrow: Vasta biblioteca de tags integradas ao framework para facilitar a sua vida bastante na camada view
A aplicação de referência pode ser baixada do SVN:
[color=blue]svn co svn://saoj-la.dyndns.org/menta/trunk Menta[/color]
Você também pode vê-la rodando aqui: http://menta.seducaotecnologica.com.br/
Clique aqui para as instruções de como importar esse projeto para dentro do seu Eclipse.
Poderíamos utilizar o bom marketing para convence-lo de que o Mentawai é bom, mas ao invés disso estaremos incentivando a política do [color=red]SHOW DON’T TELL[/color] (mostre não fale) com um comparativo de frameworks através da aplicação de referência. Essa política funciona assim:
:arrow: Estarei disponibilizando vários repositórios de SVN, um para cada framework como VRaptor, Next, Struts, Spring MVC, etc.
:arrow: Uma pessoa com experiência no framework X pode solicitar uma senha de committer para o repositório do framework X.
:arrow: Feito isso ela pode implementar a aplicação de referência com o framework X de forma que possamos compará-la às outras implementação com diferentes frameworks.
:arrow: Essaa implementações serão disponibilizadas lado-a-lado com a implementação de referência do Mentawai, ou seja, você poderá decidir por conta própria o framework de sua preferência.
A especificação completa da aplicação de referência pode ser consultada aqui: http://forum.mentaframework.org/posts/list/0/2406.page
Abaixo listamos as funcionalidades do Mentawai exemplificadas na aplicação de referência:
[color=blue]1) Autenticação[/color]
:arrow: Filtro de autenticação para bloquear/permitir o acesso às actions
:arrow: Tags de autenticação para bloquear/permitir os acesso às páginas (JSP, Velocity, etc.)
:arrow: Redirect after login, ou seja, quando um usuário acessa uma página sem estar logado, ele é redirecionado para a página de login. Após um login bem sucedido ele é novamente redirecionado para a página que ele inicialmente tentou acessar.
[color=blue]2) Autorização[/color]
:arrow: Filtro de autorização para bloquear/permitir o acesso às actions
:arrow: Tags de autorização para bloquear/permitir o acesso às páginas (JSP, Velocity, etc.)
:arrow: Tags de autorização para exibir/remover partes de uma página
:arrow: Setar os grupos que um usuário logado pertence (a autorização ou não é concedida de acordo com os grupos do usuário logado)
[color=blue]3) Internacionalização[/color] (i18n)
:arrow: Arquivos de i18n ficam dentro do diretório i18n. Os nomes são master_pt_BR.i18n, master_en_US.i18n, etc. Um arquivo (com possibilidade de prefixos para as chaves) para tudo, ao invés de vários arquivos espalhados pela aplicação, como um por action por exemplo.
:arrow: Para mensagens que vieram de dentro das actions (mensagens dinâmicas de successo ou erro por exemplo, validação, etc.)
:arrow: Para textos dentro do JSP, com tags aceitando prefixos e valores dinâmicos como por exemplo Hello $1.
:arrow: Reload automático quando os arquivos de propriedades (i18n) são alterados. Você não quer ter que re-iniciar a sua aplicação porque mudou “Olá” para “Oi”.
:arrow: Tradução padrão quando uma chave não é encontrada (para Produção).
:arrow: Exibição de texto com erro (! en_US.hello !) quando uma chave não é encontrada (para QA).
:arrow: Localização para imagens através de uma tag para imprimir o sub-diretório do locale.
[color=blue]4) IoC[/color]
:arrow: IoC completo, integrado com o framework, sem a necessidade de Spring. Mas quem quiser usar Spring também pode.
:arrow: Configuração programática para IoC ao invés de usar um milhão de XMLs. Perguntem para o Google porque eles resolveram lançar o Guice.
[color=blue]5) Mensagens dinâmicas vindo das actions[/color]
:arrow: “Sua conta foi atualizada com sucess”
:arrow: Integração limpa e fácil com o sistema de i18n, ou seja, essas mensagens virão do arquivo master i18n.
[color=blue]6) Lista de dados estáticos[/color]
:arrow: É bastante recorrente a necessidade de ter combos com listas estáticas, como grupos, idiomas, países, etc.
:arrow: Eles precisam ser igualmente internacionalizados
:arrow: Tags para facilmente exibir esses combos em um formulário HTML
:arrow: Tags para facilmente exibir um valor (localizado) para um determinado id.
[color=blue]7) Filtros[/color]
:arrow: Não estamos falando aqui de filtros de Servlet, mas de filtros do framework, como os interceptors do Struts.
:arrow: Filtros precisam ser simples para que você possa fazer os seus e fáceis de usar, para que você possa utilizar os que o framework oferece.
[color=blue]8 ) Validação[/color]
:arrow: Integrada com o i18n
:arrow: Tags fáceis para mostrar os erros nas páginas
:arrow: Jeito fácil de validar uma action (implementando uma interface ou filtro por exemplo)
[color=blue]9) Jeito fácil de testar as actions[/color]
:arrow: JUnit para as actions sem complexidades, mocks, etc.
[color=blue]10) Tags pra a view[/color]
:arrow: Diversas tags para facilitar a sua vida na view, muito melhores do que as genéricas da JSTL.
:arrow: Facilidade para criar suas próprias tags, sem qualquer complexidade ou enrolação (abstraindo a bagunça inicial da api de JSP)
:arrow: Tags para paginação e muitas outras. Ou você faz a paginação na mão com código no JSP?
[color=blue]11) Enviando email[/color]
:arrow: Tem que ser integrado com o i18n, ou seja, cada usuário recebe um email no seu idioma. Os emails ficam separados dentro do diretório /letters, com um sub-diretório para cada locale.
:arrow: Tem que suportar algum tipo de template, porque você precisa carregar um email e fazer algumas substituições no corpo da mensagem, como username, password, etc.
:arrow: Tem que corretamente suportar charsets, caso contrário o usuário receberá lixo para os caracteres acentuados.
:arrow: Tem que suportar emails em plain/text e também em HTML.
:arrow: Precisa suportar defaults para hostname, from, authentication, etc. para que você só precise configurar isso uma vez de acordo com o ambiente (produção, QA, dev, etc.)
:arrow: Precisa suportar o desativamento dos envios de email para quando você está rodando os unit tests. De maneira fácil e na configuração! (Não vai sair colocando IF em tudo)
:arrow: Tem que suportar envio assíncrono, ou seja, na maioria das vezes você não quer bloquear a action enquanto o email está sendo enviado.
:arrow: Tem que suportar SSL se você quiser utilizar o SMTP do GMAIL.
:arrow: E não se esqueça do título do email, que precisa também ser internacionalizado e suportar templates.
[color=blue]12) Configurações por ambiente[/color]
:arrow: As configurações estáticas e textuais, como dados de conexão com o banco, smtp, hibernate, logging, etc. precisam ser carregadas de um arquivo properties. A aplicação deve suportar um arquivo properties por ambiente, além de um default que pode ser sobrescrito pelo mais específico do ambiente.
[color=blue]13) Suporte a dois tipos de persistência[/color] (opcional)
:arrow: a aplicação pode suportar JDBC ou Hibernate, ou seja, ela implementa uma versão dos DAOs com JDBC e outra com HIBERNATE. De acordo com uma variável de ambiente (“persistency”) ela decide quais implementações do DAO ela vai utilizar. A flexibilidade de IoC demonstrada na prática.
[color=blue]14) Ajax[/color]
:arrow: Para checar se o username já existe antes de submeter o formulário (coming soon)