MDA? por que não CDA? (Greenbox)
Model Driven Architecture todos ja devem ter ouvido falar …
Mas nem sempre MDA é a solução, as vezes precisamos de algo mais simples, e de implantação mais fácil.
Como por exemplo, pegar a parte do código da aplicação que é diferente, que precisamos escrever de qualquer maneira, que tiramos da documentação, e gerar toda aquela tralheira, que depois de uma semana fazendo, entendemos por que é chamado de "Monkey Work", ou seja, escrever todo aquele código que é sempre quase igual ao anterior, é todas as alterações são baseadas na primeira parte do código que ja escrevemos. e depois de uma semana de trabalho, temos a certeza absoluta que qualquer macaquinho bem treinado poderia fazer aquilo.
Uma das soluções para isto é a geração de código, mas para gerar código é necessário ter meta dados, que é exatamente a primeira coisa criada em uma abordagem MDA.
Só que parte do código da aplicação vai ser escrito de qualquer maneira, pois vem das especificações, use cases, ou quaisquer que sejam as formas de documentação utilizadas na empresa, e este código escrito ja possui meta dados o suficiente para gerar boa parte do resto do código para a aplicação.
mas como utilizar isto?
bom, uma das opções é o Greenbox que é um projeto desenvolvido por brasileiros, Open Source, e faz parte da comunidade JavaTools do portal dev.java.net.
Tah, beleza, até aqui tudo bem, mas quem teve saco de ler até aqui, deve estar pensando, o que é CDA?
Bom, CDA é uma sigla que acabei de inventar, para Code Driven Architecture, ou seja, apenas uma brincadeirinha com o MDA
O Greenbox é um framework de geração de código baseado em templates Velocity, hoje com uma IDE escrita em Thinlet, e também funciona como um plugin para o Netbeans, e em breve (no máximo uns 20 dias) vai estar funcionando também como um plugin para o eclipse, que se tudo der certo, este que vos fala vai desenvolver
E o que faz com que o Greenbox não seja apenas mais uma opção para geração de código?
Primeiro a documentação em portugues encontrada no blog do Edgar, ja ajuda quem esta começando a brincar com ele.
Segundo e mais importante, eu conheço diversos "geradores de código" mas a maioria deles, lê meta dados de um banco de dados, ou então lê meta dados de um modelo UML, ou até mesmo Lê meta dados de um arquivo XML ou XMI, mas nenhum que eu conheça lê meta dados das primeiras classes que foram desenvolvidas no sistema, para gerar o resto do "Monkey Work", sim, eu sei que no NetBeans tem um botão que faz isto, gera uma aplicação JSF tomando como base as classes persistidas com JPA, mas a grande vantagem do Greenbox sobre esta ferramenta do NetBeans é simplesmente o fato de ser muito fácil de extende-lo, e muito fácil de costumizar os templates que ele vai utilizar para gerar o código fonte.
Esta facilidade de costumização, possibilita que se costumize o gerador para que gere código na arquitetura que a empresa usa, diferente da grande maioria dos outros geradores Open Source, que obrigam a empresa a usar código na arquitetura que ele gera.
E como isto funciona?
O Greenbox vem com um diretório de templates velocity, que podem ser alterados sem problema nenhum, os templates da arquitetura padrão (jsf-spring-hibernate) são os seguintes:
- bb.vm - para o backing bean
- css.vm - para o arquivo css da aplicação
- dao.vm - para o DAO
- database.vm - para o arquivo .properties de configuração do banco
- delegate.vm - para um delegate
- facesConfig.vm - para o arquivo faces-config.xml
- form-jsp.vm - para o JSP do formulário
- hbm.vm - para o arquivo hbm.xml
- idao.vm - para a interface do dao de cada VO
- springContext.vm - para o springContext.xml
- summary.vm - para a JSP de sumário
- vo.vm - para o VO
- webxml.vm - para o web.xml
Com estes templates Velocity ele gera toda a aplicação baseada nos meta dados do código fonte.
Beleza, gostei, agora, como faço para usar isto?
Bom, o caminho mais fácil é o seguinte:
- Baixar o plugin para o NetBeans aqui.
- Descompactar o zip, e copiar a pasta templates para a raiz (C: no windows, / no unix)
- abrir o NetBeans 5.0, instalar todos os arquivos NBM nele.
- Criar um projeto do tipo GreenboxWebProject, que ira aparecer no dialogo de novos projetos logo depois do reinicio da IDE.
- Criar algumas classes e anotalas com as anotações @Greenbox e @GreenboxField (acho que em algum momento vou adicionar suporte a leitura direta das anotações do Hibernate)
- Clicar com o botão direito na classe e escolher a opção gerar código.
Mais detalhes e um passo a passo tem nesta palestra do Edgar Silva.
Tah, e se eu não quiser usar nem o plugin do netbeans, nem o do eclipse, nem a IDE propria dele? o que eu tenho a ver com este tal de Greenbox?
Bom, você pode criar o seu proprio Gerador com um código mais ou menos assim:
1 public class Generator { <br />public static void generateSource(String packageName, String projectSourceFolder, String templateName, String className, String sourceText) <br />throws GenerationSourceException, IOException {<br /> OutputCode opc = new OutputCode(projectSourceFolder, packageName);<br /> FileWriter writer = new FileWriter( opc.createFileCode( templateName, className ) );<br /> try{ writer.write( sourceText );<br /> writer.flush();<br /> }finally {<br /> writer.close();<br /> }<br /> }<br /> public static void generateWebSource( String webContextFolder, String folderName, String fileName, String sourceText)<br /> throws GenerationSourceException, IOException {<br /> OutputWebCode opc = new OutputWebCode(webContextFolder);<br /> FileWriter writer = new FileWriter( opc.createFileCode(folderName, fileName ) );<br /> try{<br /> writer.write( sourceText );<br /> writer.flush();<br /> }finally {<br /> writer.close();<br /> }<br /> }<br />
Ai da pra costumizar bem mais coisas do que apenas os templates.
E nas proximas versões isto deve ficar ainda mais fácil.
Ou seja, se quiser começar a usar o greenbox hoje, é só ir no site do projeto, baixar o plugin do NetBeans e começar a brincar.
O plugin funciona no NetBeans 5.0.
O plugin para eclipse vai funcionar no Eclipse 3.2, integrado com o Web Tools.
Acho que por enquanto era isto, agora é com vocês, baixem o greenbox, testem e postem por aqui os comentários e impressões sobre a ferramenta ![]()
Se você gostou deste post, lembre-se de assinar o RSS feed do blog, para ser notificado de novos posts!



[…] esta é a mais nova ferramenta opensource MDA disponível por […]
Rodrigo,
Um bom numero de ferramentas eh capaz de construir um repositorio de metadados a partir de codigo fonte. A origem dos metadados realmente nao interessa (código, esquema da base, modelos UML, etc), todas as ferramentas de geracao de codigo trabalham do mesmo jeito: um repositorio de metadados e um gerador de codigo baseado em templates. Pelo jeito, o Greenbox nao eh diferente:
https://greenbox.dev.java.net/#Introduction
A proposito, acabei de perceber que tu fazes parte do “staff”, entao imagio que nem tu concordes com o que escreveste acima (ou a abordagem mudou desde entao).
Abraco,
Rafael
Urubatan,
Sempre que posso acompanho seu site e seus post no GUJ. E estava procurando algum plugin para o ECLIPSE que realizasse geração de código para uma arquitetura JSF+SPRING+HIBERNATE utilizando ANNOTAÇÔES do JAVA 5. Gostaria de saber se o Greenbox realiza isto, e qual a data prevista para sair a 1 release do plugin para o Eclipse? E também preciso que o framework possa ser customizado de um forma simplificada atendendo a arquitetura da minha aplicação.
Aguardo resposta.
Att Vicente Magalhães