Lançado Mentawai 2.0

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)

Legal saoj… vamos trocar umas figurinhas… heheh

Eu considero que um princípio, extremamente importante, e que uso também no next é:

" KISS principle (se você não sabe ou não consegue fazer algo a culpa é do framework, não sua) "

Essa premissa é, realmente, o que leva a um framework evoluir e traz simplicidade…

Parabéns

Até mais

Vou te mandar uma mensagem privada com o seu SVN, login e senha para vc faze a versão com o Next. Estou curioso para ver como vai ficar.

[quote=saoj][quote=rogelgarcia]
Legal saoj… vamos trocar umas figurinhas… heheh
[/quote]

Vou te mandar uma mensagem privada com o seu SVN, login e senha para vc faze a versão com o Next. Estou curioso para ver como vai ficar.
[/quote]

Opa… blza… :smiley:

Parbéns SAOJ pela persistência em manter o Framework !! 8)

Parabéns, desde o MentaBean não ouvia mais falar neste framework, parabéns. 8)

Sérgio, posso dar só um pitaquinho? rs

Coloca o menta no github, fica bem fácil pro pessoal conseguir “acompanhar” o projeto mais perto.

[]s

[quote=Luiz Aguiar]Sérgio, posso dar só um pitaquinho? rs

Coloca o menta no github, fica bem fácil pro pessoal conseguir “acompanhar” o projeto mais perto.

[]s
[/quote]
Daria mais visibilidade ao projeto também :slight_smile:

A aplicação oferece dois métodos de persistencia:

:arrow: Hibernate

:arrow: JDBC + MentaBean

Assim vc pode olhar e escolher o que melhor te agrada. Eu prefiro usar JDBC + um query helper como o mentabeans.

Existe alguma implementação do VRaptor assim como a do Mentawai explicando as funcionalidades do framework?

Achei interessante a ideia de comparação, assim veremos na pratica qual framework pode nos atender melhor em cada situação.

[quote=Oliveira.caio]Existe alguma implementação do VRaptor assim como a do Mentawai explicando as funcionalidades do framework?

Achei interessante a ideia de comparação, assim veremos na pratica qual framework pode nos atender melhor em cada situação.[/quote]

Tambem gostaria de ver uma implementação dessas para o VRaptor! Seria bacana ver na prática as diferenças de implementações entre eles.

Parabéns aos autores do projeto.
Só lembrando que eu tive uma app para centenas de usuários que ficou mais de um ano rodando SEM problemas usando apenas Mentawai1.13+MySQL5.0+JasperReport.

Não tive do que reclamar(nem meus clientes).

Boa SAOJ…

Fico feliz de ver o Menta vivo!!

Parabens SAOJ realmente um framework fantastico que continua evoluindo continuamente!

[quote=rogelgarcia]Legal saoj… vamos trocar umas figurinhas… heheh

Eu considero que um princípio, extremamente importante, e que uso também no next é:

" KISS principle (se você não sabe ou não consegue fazer algo a culpa é do framework, não sua) "

Essa premissa é, realmente, o que leva a um framework evoluir e traz simplicidade…

Parabéns

Até mais[/quote]

Essa premiça mata o programador , normalmente quando não soubemos fazer algo a culpa não é do framework e sim do programador que não investigou bastante.
porque senao ficamos presos totalmente ao framework e ja nao sera digno ser chamado de programador e sim de frameworkeiro… :wink: