Meta-Frameworks Java

Afinal o que é, genericamente, uma Meta-Framework, ou melhor, um Meta-“Qualquer coisa”?
A palavra “meta”, para o efeito desta fantástica anologia, pode ser definida pela seguinte rigorosa proposição/teorema/axioma/lema/etc:

Meta-"Qualquer coisa" é ("Qualquer coisa")2

Ou seja,

Meta-"Qualquer coisa" é "Qualquer coisa sobre "Qualquer coisa""

Assim, podemos ter coisas como Meta-dados (Dados sobre dados), Meta-Teoremas, Meta-Matemática e Meta-Frameworks.

Temos, portanto, uma Framework sobre Framework(s). Mais precisamente, o sentido dado é de uma framework agregadora de outras frameworks, ao invés de um framework que descreve outras frameworks, algo que o prefixo meta poderia sugerir.

Epistemologia à parte, de que raio é que estou aqui a falar?

Estou a falar de agregadores de frameworks, neste caso em java, que conjugam um conjunto de frameworks base, ligando as diversas peças, e facilitando o uso por parte do utilizador. Desta forma os diversos componentes estão agregados de uma forma minimamente provada ou testada e o tempo de configuração do projecto é incrivelmente reduzido. Podem inclusivé servir como objecto de estudo para observar boas práticas.
Embora seja contra tudo o que seja ideia de criar frameworks base internas a empresas e usar sempre produtos open-source, meta-frameworks são uteis e não são mais que uma definição formal

da pilha tecnológica do projecto ou, se a empresa trabalhar dessa forma, da pilha tecnológica da empresa.

Arrancar com um projecto

deverá ser tão simples como gerar uma estrutura base do projecto, já com todos os componentes wired up e pronta a compilar. Também deve ser possível importar o projecto do IDE de eleição da pessoa. Repito, da pessoa. Ao contrário do que acontece em muitas empresas, na minha opinião o IDE deve ser uma , sendo que a maioria das frameworks disponibilizam pelo menos para Eclipse e Netbeans.

No paradigma web, poderiamos pois ter uma framework que junta uma tecnologia de mapeamento OR, uma de caching, uma de Dependency Injection/Inversion of Control, uma de apresentação, uma de templating e mais quantas sejam necessárias; mas podemos aplicar isto a qualquer paradigma que queiramos.

Destaco as seguintes frameworks (que são as que conheço):

  • Keel
  • O projecto Keel está morto (não há actividade aparente desde 2004). Apenas é interessante por ter sido a primeira framework deste género com que tive contacto.

  • Appfuse
  • O Appfuse é provavelmente o projecto deste género com maior sucesso e maior disseminação. Liderado pelo Matt Raible, reconhecido especialista em tecnologias web, o Appfuse é na realidade uma colectânea de meta-frameworks.
    Basea-se no Maven, usando archetypes, para rapidamente criar esqueletos de projectos. Depois é possível gerar o projecto para o IntelliJ IDEA, Eclipse ou Netbeans e usar qualquer uma das bibliotecas disponíveis no Reference Guide – é possível rapidamente montar um sistema com muito pouco trabalho.
    O Appfuse, como usa POJOs e Spring, possibilita criar CRUDs rapidamente com uma simples acção Maven.

  • IWebMvc
  • O IWebMvc é a mais recente meta-framework de que tomei conhecimento. É criada por um senhor chamado Jose Noheda, que é o responsável pela integração com Spring no projecto DWR. É com naturalidade então que ele criou uma meta-framework que agrega DWR + Dojo + Spring + Hibernate/JPA.
    Ainda está na sua primeira versão, mas dada a qualidade do DWR isto promete. Certamente uma meta-framework a analisar.

  • Parancoe
  • Parancoe é uma meta-framework criada pelo Lucio Benfante, líder do JUG Padova.
    A pilha tecnológica de Parancoe é DWR + Spring MVC + Spring + Hibernate/JPA que é uma solução que considero ser muito prática e uma excelente conjugação de tecnologias.
    A característica técnica mais destacada são os DAOs genéricos que não requerem implementação. Para quem gosta de DAOs, pode ser bastante útil.
    Para verem um site feito em Parancoe, podem consultar o JUGEvents que usámos para os registos no PTJUG.

Penso que qualquer uma destas últimas vale a pena uma voltinha :)