Gerador de código Vraptor+Hibernate+Taglib

39 respostas
B

Bom pessoal é com grande felicidade que venho a anunciar e disponibilizar aqui no GUJ o link para a minha primeira ferramenta gratuita.

Primeiramente me chamo Jonatan sou formado em analise de sistemas pela PUC campinas a 5 anos , tenho 25 anos e 5 anos de experiencia com desevolvimento de software sendo 1 apenas em linguagem java.

Bom eu batizei o projeto inicialmente de VRaptor Case,basicamente ele é um gerador inicial de código fonte de sistema ou seja com apenas algumas classes cadastradas o software te disponibiliza tudo ligado a dao,modelo anotado com hibernate,controlador pronto e view pronta.

Ou seja dias e dias de trabalho em apenas alguns minutos.

Sei que muita gente torce o nariz quando se fala de gerador de código. Mas o código está todo desenhado com boas praticas , frameworks conceituados e estaveis.
A grande vantagem que o projeto é sempre seu,ou seja, tudo que é gerado é apenas ligado ao framework que voce escolhe, que por enquanto é hibernate,vraptor e um taglib que eu criei que pode ser trocada facilmente por suas taglibs ou pelo bom e velho jsp.

O projeto é novo e ainda tem muito chão a percorrer e não quero 1 centavo por isso, é so cadastrar no site e usar como bem entender.
A vantagem do projeto que ele é online e no futuro pretendo que o desenvolvimento seja colaborativo.

Digamos que essa seria a versão beta para testes e conto com a ajuda de voces para a ferramenta crescer ainda mais.

Bom ja vou deixar respondido todos os possíveis questionamento que possam aparecer.

1 - O código fonte é aberto?

Resposta : Não. A ferramente é toda gratuita mas prefiro não abrir o fonte pelo seguinte motivo. Se um empresa ve potencial na ideia pega o fonte e o modifica para venda , acaba que toda a comunidade sai no prejuizo pq eu nao quero pagar por esse tipo de ferramenta e por isso estou deixando ela gratuita.

2 - O código gerado tem dependencia com a ferramenta?

Resposta : Não. A partir do momento que voce exporta (.ZIP) o projeto voce não fica da dependencia da ferramenta pra nada , ja que ele gera o código de acordo com o framework escolhido, voce fica preso ao framework que voce escolheu.

3 - Mas e se voce chegar a vender a ferramenta pra alguem?

Resposta : Se um dia eu receber a proposta de alguma compania interessada em comprar a ferramenta e eu chegar a vender ai sim o codigo fonte será repassado a turma que desenvolve e mantem o Vraptor no caso a caelum (se assim eles quiserem adotar o filho) porque creio eu que a empresa contribuiu muito num projeto totalmente brasileiro. E isso dara ainda mais força ao framework. Assim não haverá prejuizo pra ninguem pois outra pessoa dará continuidade ao projeto.

4- Ha alguma taxa a ser paga pra utilizar a ferramenta?
Resposta : Não.Não quero 1 centavo de ninguem , apenas vou deixar um link para doações se alguem quiser contribuir com algo, no mais o cadastro é rapido e gratuito.

5- Posso dar ideias para o projeto?
Resposta : Pode e deve.A ideia é tornar a ferramenta completa. Alem do que o guj será o ponto central de discussões de idéias.

6 - Poderei ajudar voce a desenvolver o projeto?
Resposta : Sim . Mas eu apenas vou disponibilizar o que vai precisar ser feito para essa geração .
Vamos supor.

"Aaa jonatan queria que meu controlador fosse o MentaWai e minha view o extjs"
Beleze ai eu falo .
Olha cria um fonte java que implementa essa interface e esse metodos ai voce recebe por referencia uma classe…etc…etc e dou os caminhos para a implementação.
Pois creio eu ser o unico modo, ja que nao vou abrir o fonte.

Quanto aos detalhes técnicos :

Ao exportar um projeto completo o sistema te disponibiliza.

Todos os cruds inicias que geram a base para o sistema.
Autenticação já implementada com perfil de acesso baseado em ação.
Toda a hierarquia de um projeto java com as libs necessarias e mais recentes sempre incluidas.
Classe para geração inicial do banco de dados.
Todos os daos,controller e model devidamente anotado.

Bom chega de blablabla

o link para a ferramenta é

http://www.jslsolucoes.com.br/casevr

Ja tem um usuario cadastrado com um projeto de prontuario de farmacia feito para quem tiver interessado apenas em olhar o poder da ferramenta.

Usuario : user
Senha : 123456

Ou se desejar fazer um cadastro tambem ja está no ar.
Apenas tem que informar um login que voce desejar seu email.
Assim voce recebera a senha de acesso por email que posteriormente o software no primeiro acesso te obrigara a trocar.

Lembrando a todos que a iniciativa é totalmente brasileira, que nem sempre somos apoiados como deveria.

Grande abraço a todos.

39 Respostas

Z

Legal a iniciativa, qdo tiver tempo vou dar uma olhada

L

Mto boa a iniciativa, boneazul =)

Mas deixa eu esclarecer um mal entendido comum:

Quando vc faz um projeto open-source, vc pode colocar uma licença nele. Existem muitas delas: http://www.opensource.org/licenses
Várias delas proíbem que vc pegue o código e coloque dentro de um produto e venda. O VRaptor por exemplo tem a licença Apache 2.0,
que vc pode usar livremente em qqer projeto, desde que mantenha os créditos pros criadores…

A lógica é a seguinte: se o código é fechado, só vc e mais algum conjunto pequeno de pessoas vai poder contribuir com a ferramenta. Se o código é aberto,
qualquer pessoa pode contribuir com o código, e qto mais contribuições maior/melhor fica o projeto…

Minha sugestão é que vc abra o código, e coloque uma licença tipo a LGPL (http://www.opensource.org/licenses/lgpl-2.1.php) que, em resumo, diz que
qqer um pode usar a ferramenta, mas se um projeto for usar pedaços do código fonte dela ele tb tem que ser LGPL, ou seja, tb vai ser open-source

De qqer forma, parabéns =)

B

Lucas Cavalcanti:
Mto boa a iniciativa, boneazul =)

Mas deixa eu esclarecer um mal entendido comum:

Quando vc faz um projeto open-source, vc pode colocar uma licença nele. Existem muitas delas: http://www.opensource.org/licenses
Várias delas proíbem que vc pegue o código e coloque dentro de um produto e venda. O VRaptor por exemplo tem a licença Apache 2.0,
que vc pode usar livremente em qqer projeto, desde que mantenha os créditos pros criadores…

A lógica é a seguinte: se o código é fechado, só vc e mais algum conjunto pequeno de pessoas vai poder contribuir com a ferramenta. Se o código é aberto,
qualquer pessoa pode contribuir com o código, e qto mais contribuições maior/melhor fica o projeto…

Minha sugestão é que vc abra o código, e coloque uma licença tipo a LGPL (http://www.opensource.org/licenses/lgpl-2.1.php) que, em resumo, diz que
qqer um pode usar a ferramenta, mas se um projeto for usar pedaços do código fonte dela ele tb tem que ser LGPL, ou seja, tb vai ser open-source

De qqer forma, parabéns =)

Um lucas não sabia dessa licença não. Mas mesmo assim o duro é saber se alguem está ou não usando sua ferramenta como base pra algo…vamos supor a empresa X pega meu fonte modifica tudo que é nome de classe metodos …blablabla…primeiro que ninguem vai ficar pesquisando se ele ta usando o meu fonte por tras…prefiro eu e mais alguns de confiança mechendo do que correr esse risco entende? No mais prefiro continuar assim no começo ja que o escopo dele não é tão grande agora…outra coisa tem que ver a aceitação da ferramenta também antes de pensar tudo isso.

Vo pensar na sua sugestão quanto a LGPL no mais podem palpitar a vontade em recursos ou erros que a ferramenta apresenta…agora mesmo estou em um projeto usando ela e achei alguns bugs…e algumas coisas que faltaram…pouca coisa…

Mas de cara os resultados são ótimos, eu previ 10 dias para a base do sistema, so mechi algumas horas e ja esta rodando um prototipo funcional de 60% do sistema.

Minhas ideias são muitas pro futuro dela,geração de testCases,desenvolvimento colaborativo,importacao de fonte java,importacao de uml …etcetcetc…futuro promissor…

D

Baixei o projeto que já esta pronto o ProtoFarma, e gostei do que vi.

Só uns pitacos, heheh.

As views poderiam ter a opção de gerar em tabless (não sei se já existe essa opção), e não em tabelas.
Como vc já citou, mais vale reforçar, seria gerar tbm as classes teste unitários, entre outros testes.

Boa sacada.

B

davisnog:
Baixei o projeto que já esta pronto o ProtoFarma, e gostei do que vi.

Só uns pitacos, heheh.

As views poderiam ter a opção de gerar em tabless (não sei se já existe essa opção), e não em tabelas.
Como vc já citou, mais vale reforçar, seria gerar tbm as classes teste unitários, entre outros testes.

Boa sacada.

bom depende de qual view estamos falando.

Na view que lista eu uso o displaytag que ja tem muita coisa pronta(paginação,exportação,ordenacao,etc).
Se souberem de tag lib melhor por favor compartilhem, ate usando ajax pois sei que a displaytag usa muito recursos de session o que as vezes pesa no servidor,
algo ajax sob demanda seria melhor…etc.

Na view de form realmente faço uso de tabelas pra renderizar o layout.
Tem muita discussão em torno de tabless e web semantica ja li varios artigos falando que websemantica é balela outros que é importante pra meta dados etcetc , pra mim o que o realmente importa é que “funcione” e bem pois usuario num vai ficar te falando que voce ta usando table em vez de “fieldset” com “label for” e que no fim
a tela vai ficar igual!!

Mas se souber de alguma tag lib pronta pra retirar essa table dos forms me passa a referencia que analiso a implementação.
Ou mesmo modificar a taglib exportada hoje dos componentes de form,formrow etc;

Quantos aos pitacos podem e DEVEM ser feitos.

Peguei varios mini bugs que vou consertar hoje de um projeto bem maior, como disse esta em beta teste.
Esse projeto maior ja são 33 classes a serem geradas ou seja um sistema de pequeno indo pra médio porte.

Assim que estabilizar esse primeira versão com esses bugs consertados vou fazer um lista de novos recursos a serem implementados e disponibilizo aqui para discussões.

Obrigado pelo comentário.

B

Bom pessoal depois de vários bug fixes a ferramenta ganhou varias novidades , vo listar o que mudou

1 - Bug fixes da versão teste
2 - Suporte a sequence
3 - Suporte a geracao de campos em maiusculo
4 - Suporte a auditoria de tabelas (envers distribuido e configurado junto)
5 - Suporte a ordenação de campos
6 - Relacionamento ja vem com LAZY por padrão
7 - Suporte e formatação a campos tipo moeda e datas
8 - Melhoramento da taglib embutida
9 - Interface embutida para categoria de ações , cadastro de ações e paths que seguem para a autorização de acesso action based.

Deem uma olhada no começo do tópico sobre a ferramenta , é gratuita.
Lembrando que todos essas melhorais foram pedidos de usuarios que estao começando a curtir a ferramenta.

Bom as próximas novidades serão para o proximo mes:

Desenvolvimento colaborativo. (Voce ira poder convidar varios amigos para desenvolver um projeto em conjunto).
Importador de classe java (Engenharia reversa de .java para a aplicação) modelo bottom up.
Geração de suites de teste pros controladores e junits.
Geração de relatórios básicos.

Bom espero que usem está sendo de grande ajuda pra muita gente , até mais.

Algumas métricas coletadas de projetos pilotos :

Projeto protofarma - Estimado 7 dias (sem ferramenta) - Realizado em 1 dia (com toda perfumaria) - 7 Classes
Projeto contratos - Estimado 14 dias - Realizado em 3 (com toda perfumaria) - 45 Classes
Projeto myFamily - Estimado 3 dias - Realizado em 2 horas (com toda perfumaria) - 4 Classes

D

Ahn, pelo jeito eu não saquei muito bem como funciona a ferramenta :shock:

Como eu faria pra ver os projetos modelo que você mencionou?

Procurei por todos os menus, mas não encontrei :?

B

diego.bevilaqua:
Ahn, pelo jeito eu não saquei muito bem como funciona a ferramenta :shock:

Como eu faria pra ver os projetos modelo que você mencionou?

Procurei por todos os menus, mas não encontrei :?

Entao tem um usuario em que o projeto foi montado…o primeiro que eu citei nas métricas (protofarma)
… os outros foi experiencia com projetos que eu fiz isso na minha conta que crei…
Cada conta pode criar N projetos…

Lá no post de cima tem explicando que eu tinha deixado um usuario pra quem não quisesse abrir conta e so pra ver o poder da ferramenta…

Pra acessar use os seguintes dados:
usuario : user
senha : 123456

E peça pra exportar o projeto.Ou se apenas quiser olhar os dados,la ja da pra ter ideia do que ela gera.

O sistema só mostra os seus projetos ou seja voce não ve projetos de outras contas,por questão de segurança, se voce criou uma conta com certeza não ira ver mesmo esse projeto modelo ,pois ele esta pra outra conta de acesso no caso a user.

Tenta ai tendo duvidas da um toque!!

D

hehehehe, agora que vi o que tava fazendo de errado :smiley:

Criei um usuário pra mim, que ÓBVIAMENTE não tinha projeto nenhum, já que eu não fiz nada ainda :smiley:

Mas valeu, vou olhar de novo agora, com o usuário que você mencionou.

S

Parabéns amigo!

Gostei muito da ideia e principalmente pela facilidade de uso.

PS: Esta em manutenção o link http://www.jslsolucoes.com.br/casevr/geral/login ?

Mensagem de erro:

HTTP Status 404 - /casevr/geral/login

L

Buenas!

Esses tempos cansei de escrever CRUD’s e criei algo semelhante. Porém não é uma ferramenta completa como a citada nesse tópico. O propósito era gerar cruds num padrão que eu tinha estabelecido, e para isso a solução mais simples foi criar templates do meu código, usando Velocity.

A idéia é: você cria um fluxo completo (Pojo, Dao, Service, Repository, Controler, Jsp, etc) para uma entidade, ao seu modo. Depois você o transforma em template para os próximos. O fato de usar o Velocity (uma template engine) te possibilita alguma programação dentro do template, o que pode ser útil para gerar atributos, getters e setters, campos de tela, etc.

Por ser baseado na idéia de templates, o uso não fica restrito a nenhum framework ou linguagem. Você pode usá-lo no seu framework caseiro para PHP, por exemplo…

Ainda não criei uma interface gráfica para ela, uso via linha de comando, da seguinte forma:

codeit NomeDoTemplate NomeDaEntidade TipoAtributo1:nomeAttributo1 TipoAtributo2:nomeAttributo2 TipoAtributo3:nomeAttributo3

Onde “codeit” é o nome idiota da ferramenta e “NomeDoTemplate” é o nome do diretório que contém os templates. Dessa forma posso manter templates para diferentes aplicações.

Há um único arquivo de configuração para cada diretório de templates. O propósito dele é informar o nome e o local onde cada arquivo gerado deve ser salvo. Dessa forma, posso distribuir o código gerado no seu devido ‘pacote’ ou ‘diretório’ dentro da aplicação.

Há ainda a possibilidade de se informar o nome do campo na base de dados, para mapeá-lo com outro nome na aplicação. Nesse caso, antes do TipoAtributo, informo o nome_campo_bd:

codeit NomeDoTemplate NomeDaEntidade nome_campo_bd:TipoAtributo1:nomeAttributo1 nome_campo_bd:TipoAtributo2:nomeAttributo2 nome_campo_bd:TipoAtributo3:nomeAttributo3

No meu template, gero a annotation @Column(name= “nome_campo_bd”)… Mas pode fazer qualquer outra coisa…

Enfim, meu único propósito era automatizar a geração dos benditos cruds, com suas validações e tudo que se repete. A ferramenta é bem simples e totalmente gratuita. Pode-se fazer absolutamente o que quiser dela, até contribuir! :wink:

Os fontes estão em: http://github.com/lucianocosta/CodeIt

Se quiser baixar somente o jar de execução com exemplos de uso, vá direto para a aba Downloads.

To Do:

EDIÇÃO:

FUNCIONALIDADE REMOVIDA! =)

motivo: discussão nas próximas 4 ou 5 mensagens desse tópico

Criar interface gráfica

Como desenvolvedor MUITO preguiçoso
Quero uma interface gráfica onde eu possa escolher a Entidade e os campos para os quais quero gerar código
De modo que me aborreça ainda menos para gerar meus benditos cruds

   Cenário: Conectando ao BD e exibindo tabelas
     Dado que informei a string de conexão com o banco
     Quando clicar em listar tabelas
     Então devo ver a lista de tabelas

   Cenário: Selecionando campos das tabelas
     Quando eu clicar em uma tabela
     Então devo ver a lista de campos daquela tabela
     E deve ser possível marcar os campos para os quais quero gerar código
     E deve ser possível informar o tipo e nome de atributo para cada campo

   Cenário: Gerando código
     Dado que selecionei o template que quero utilizar (combo)
     E informei tipo e nome de atributo para os campos selecionados
     Quando eu clicar em ‘Gerar Código’
     Então devo dar um sorriso ao ver que tudo funcionou como esperado

=)

B

softwork:
Parabéns amigo!

Gostei muito da ideia e principalmente pela facilidade de uso.

PS: Esta em manutenção o link http://www.jslsolucoes.com.br/casevr/geral/login ?

Mensagem de erro:

HTTP Status 404 - /casevr/geral/login

Opa softwork entao nem tinha visto que estava fora, sem querer apaguei o .war do projeto e o tomcat fez undeploy do projeto to subindo agora de novo o projeto…

B

lscosta:
Buenas!

Esses tempos cansei de escrever CRUD’s e criei algo semelhante. Porém não é uma ferramenta completa como a citada nesse tópico. O propósito era gerar cruds num padrão que eu tinha estabelecido, e para isso a solução mais simples foi criar templates do meu código, usando Velocity.

A idéia é: você cria um fluxo completo (Pojo, Dao, Service, Repository, Controler, Jsp, etc) para uma entidade, ao seu modo. Depois você o transforma em template para os próximos. O fato de usar o Velocity (uma template engine) te possibilita alguma programação dentro do template, o que pode ser útil para gerar atributos, getters e setters, campos de tela, etc.

Por ser baseado na idéia de templates, o uso não fica restrito a nenhum framework ou linguagem. Você pode usá-lo no seu framework caseiro para PHP, por exemplo…

Ainda não criei uma interface gráfica para ela, uso via linha de comando, da seguinte forma:

codeit NomeDoTemplate NomeDaEntidade TipoAtributo1:nomeAttributo1 TipoAtributo2:nomeAttributo2 TipoAtributo3:nomeAttributo3

Onde “codeit” é o nome idiota da ferramenta e “NomeDoTemplate” é o nome do diretório que contém os templates. Dessa forma posso manter templates para diferentes aplicações.

Há um único arquivo de configuração para cada diretório de templates. O propósito dele é informar o nome e o local onde cada arquivo gerado deve ser salvo. Dessa forma, posso distribuir o código gerado no seu devido ‘pacote’ ou ‘diretório’ dentro da aplicação.

Há ainda a possibilidade de se informar o nome do campo na base de dados, para mapeá-lo com outro nome na aplicação. Nesse caso, antes do TipoAtributo, informo o nome_campo_bd:

codeit NomeDoTemplate NomeDaEntidade nome_campo_bd:TipoAtributo1:nomeAttributo1 nome_campo_bd:TipoAtributo2:nomeAttributo2 nome_campo_bd:TipoAtributo3:nomeAttributo3

No meu template, gero a annotation @Column(name= “nome_campo_bd”)… Mas pode fazer qualquer outra coisa…

Enfim, meu único propósito era automatizar a geração dos benditos cruds, com suas validações e tudo que se repete. A ferramenta é bem simples e totalmente gratuita. Pode-se fazer absolutamente o que quiser dela, até contribuir! :wink:

Os fontes estão em: http://github.com/lucianocosta/CodeIt

Se quiser baixar somente o jar de execução com exemplos de uso, vá direto para a aba Downloads.

To Do:

Criar interface gráfica

Como desenvolvedor MUITO preguiçoso
Quero uma interface gráfica onde eu possa escolher a Entidade e os campos para os quais quero gerar código
De modo que me aborreça ainda menos para gerar meus benditos cruds

   Cenário: Conectando ao BD e exibindo tabelas
     Dado que informei a string de conexão com o banco
     Quando clicar em listar tabelas
     Então devo ver a lista de tabelas

   Cenário: Selecionando campos das tabelas
     Quando eu clicar em uma tabela
     Então devo ver a lista de campos daquela tabela
     E deve ser possível marcar os campos para os quais quero gerar código
     E deve ser possível informar o tipo e nome de atributo para cada campo

   Cenário: Gerando código
     Dado que selecionei o template que quero utilizar (combo)
     E informei tipo e nome de atributo para os campos selecionados
     Quando eu clicar em ‘Gerar Código’
     Então devo dar um sorriso ao ver que tudo funcionou como esperado

=)

Opa olá lscosta tudo bem?

Então cara essa abordagem de interface que voce gostaria de ter se voce for implementar não é legal de se usar na minha opinião , pois voce usa uma abordagem “bottom up” ou seja debaixo pra cima tenho meu banco e parto pra classes e afins(app,dao)…o que nem sempre é legal…não que não seja usual…ai depende de como sua empresa começa um projeto eu prefiro sair de um modelo mais alto possivel (UML por exemplo) porque ja consigo ter uma documentação consistente de várias coisas uml,mer banco,classes java,teste,etcetc é uma abordagem muito mais efetiva…

a melhor abordagem é a “top down” ou seja de cima pra baixo modelo minhas classes e ele se vira com banco e app…por enquanto o case ta no meio ele ta partindo de classe pra geração do resto …mas mesmo com isso ja consigo gerar muita coisa …não apenas cruds mas dependo da complexidade um projeto todo

vide “protofarma que esta no usuario teste” o cliente queria apenas aquilo …um conjunto de cadastro que lhe atendia muito bem…dificilmente ha projetos desse tipo…
mas mesmo projetos gigantes partem de uma base “cadastros,retaguarda” ai tem varios nomes…a ideia do projeto é prover essa retaguarda pra voce e base pra todo o resto do projeto…como disse o projeto está caminhando ainda…mas ta ficando bacana…penso nele daki 1 ano…

“o uso não fica restrito a nenhum framework ou linguagem”

Minha ferramenta não esta restrito a framework algum ou linguagem, posso tranquilamente gerar template pra usar com php,c#,blabla usando MVC como design desde que tenha ferramentas solidas(frame de persistencia,view,etc pra prover um código bacana) …minha ideia é ir extendendo pra outros frameworks e linguagens basicamente é criar provedor de código fonte ligado a boas praticas pra qualqeur linguagem OO e seus frameworks mais conhecidos …o futuro é promissor pois ja fiz num esquema de facil extensão pra qualquer linguagem ou framework…

O diferencial que é online , gratuito e nao te prende a ferramente ou seja se voce fez e gerou é seu…voce fica preso ao framework que voce escolheu…

Hoje esta implementado pra

Vraptor - MVC
Hibernate - Persistencia
View - Taglib que eu fiz com muita coisa pronta(validação,mascara,submissao ajax,formulario,grid,navegação,menu,etcetcetc)

Mas com pouco trabalho eu ja consigo fazer voce optar qual framework vai usar em qual camada…
Exemplo se amanha eu implemento mais 2 framework e uma tag lib

Mentawai - Controlador
Ibatis - Persistencia
Waffle - Taglib

Ai voce ja tem opção de escolha (aa quero usar vraptor ou mentawai ou Seam ou outro MVC) aa quero que faça a persistencia (Hibernate,Ibatis,outro) a minha view vai ser como vai ser taglib default ou waffle…e mais pra frente a linguagem …ai me gera em php com Doctrine na persistencia,um frame de view (tenho um tb legal) , e cakephp como controlador etc…assim as possibilidades são ilimitadas…

O futuro é isso ai , muita gente torce nariz pra gerador de código, mas se voce for bem as empresas mais fortes utilizam e muuuuito ferramenta de abordagem top down
que fazem e muito pelo programador pra que eu vo perder tempo com coisa que não preciso perder??

L

Fala boneazul!

Cara, eu achei legal o tópico e me dei conta de que tbm podia ter compartilhado com o GUJ a ferramenta que fiz… Mas já na primeira linha eu afirmo que não é uma ferramenta completa como a tua… nem pretende ser. Se você olhar os fontes, não vai sequer encontrar um belo padrão de desenvolvimento. É uma solução simples para atender um problema específico: replicar estruturas de código comum.

A meu ver, a única vantagem que outro desenvolvedor terá com a abordagem que usei, é poder replicar a arquitetura que ele mesmo concebeu para outro módulo do sistema, sem ter de reescrevê-lo. No teu caso, pelo que entendi, tu entregas uma aplicação inteira de lambuja para o cara. Show!

Quanto a “melhor abordagem” ser top-dow ou bottom-up ou qualquer outra coisa, depende de cada caso. Quando você muda o problema, muda a solução.

Perceba que estou falando em replicação de uma solução que você criou. Se você criou essa solução usando top-dow/etc, isso é irrelevante na hora de replicá-la. E a estrutura de cruds não deve variar muito, uma vez que se estabeleça um padrão.

Só para contextualizar, no meu caso, estou reescrevendo uma aplicação. Ela foi desenvolvida em Genexus e estou portando para Java. Nesse caso, já tenho uma base de dados que é integrada com aplicações ‘satélite’ e sistemas de BI, ou seja, a única coisa onde não devo mexer é na base de dados. Não posso repensá-la, pois uma série de aplicações giram em torno dela.

Resumindo, essa era a solução para o meu problema. E com certeza poderei reutilizá-la em qualquer outro ambiente, independente de base de dados ou metodologia de desenvolvimento.

Já tentei acessar teu site e vou ficar de olho alí. Sei que o propósito é outro e certamente vou levar em consideração para novas aplicações.

Com todo esse blablablá, espero deixar claro que não sou da concorrência! =D

Valeu!

L

Ah, agora acho que saquei tua crítica… A criação da interface gráfica que eu falei sim, vai ser relevante apenas para esse meu caso, onde preciso desenvolver orientado a base de dados…

Tens razão, essa interface gráfica não tem valor nenhum! Funcionalidade removida do backlog! :wink:

B

lscosta:
Fala boneazul!

Cara, eu achei legal o tópico e me dei conta de que tbm podia ter compartilhado com o GUJ a ferramenta que fiz… Mas já na primeira linha eu afirmo que não é uma ferramenta completa como a tua… nem pretende ser. Se você olhar os fontes, não vai sequer encontrar um belo padrão de desenvolvimento. É uma solução simples para atender um problema específico: replicar estruturas de código comum.

A meu ver, a única vantagem que outro desenvolvedor terá com a abordagem que usei, é poder replicar a arquitetura que ele mesmo concebeu para outro módulo do sistema, sem ter de reescrevê-lo. No teu caso, pelo que entendi, tu entregas uma aplicação inteira de lambuja para o cara. Show!

Quanto a “melhor abordagem” ser top-dow ou bottom-up ou qualquer outra coisa, depende de cada caso. Quando você muda o problema, muda a solução.

Perceba que estou falando em replicação de uma solução que você criou. Se você criou essa solução usando top-dow/etc, isso é irrelevante na hora de replicá-la. E a estrutura de cruds não deve variar muito, uma vez que se estabeleça um padrão.

Só para contextualizar, no meu caso, estou reescrevendo uma aplicação. Ela foi desenvolvida em Genexus e estou portando para Java. Nesse caso, já tenho uma base de dados que é integrada com aplicações ‘satélite’ e sistemas de BI, ou seja, a única coisa onde não devo mexer é na base de dados. Não posso repensá-la, pois uma série de aplicações giram em torno dela.

Resumindo, essa era a solução para o meu problema. E com certeza poderei reutilizá-la em qualquer outro ambiente, independente de base de dados ou metodologia de desenvolvimento.

Já tentei acessar teu site e vou ficar de olho alí. Sei que o propósito é outro e certamente vou levar em consideração para novas aplicações.

Com todo esse blablablá, espero deixar claro que não sou da concorrência! =D

Valeu!

Opa tranquilo eu ja entendi de cara quando voce postou que não tem concorrencia…alem do que concorrencia de verdade é feita entre produtos comerciais…e nem deve ter ja que a idéia e a gente se ajudar mesmo…

eu ainda comentei sobre a abordagem bottom up “que nem sempre é legal…não que não seja usual.

é eu ainda disse isso comentando que apenas não é usual…eu ja cheguei a implementar gerador pra php pra um cara uma vez que tinha essa abordagem…assim pra mim, o software vai ter que atacar dos dois lados tanto debaixo pra cima quanto de cima pra baixo a ideia é essa mesmo…

o problema maior pra mim implementar é a conexão de banco de dados…pq assim nao vai ter como eu conectar em um schema do seu banco de dados pra voce fazer a engenharia reversa…até teria como (o que eu digo isso é possivel tranquilamente) mas seria trabalhoso pro usuario ficar abrindo view…ou usuario de banco pra minha aplicação ou não num sei é um caso a se pensar…o que voce acha …

uma pergunta só pra eu saber,voce como usuario abriria uma conexão pro meu servidor pra fazer a engenharia reversa das classes no seu servidor de homologação ou testes??
Pra um servidor de teste ate rola esse caso…mas a gente tem que pensar no coitado que fica no pc dele desenvolvendo…pra isso teria que ter a possibilidade tambem de passar o esquema do banco (create table da vida)

Mas eu pretendo sim fazer essa abordagem de tipo …o cara passa o esquema eu faço um parser do código e a partir dai faço o mapeamento reverso …que seria sua abordagem bottom up…

se voce topar melhorar sua ferramenta eu embuto suas classes java junto ou seja voce me faz ai seu motor reverso que le pra mim um schema seja ele em qualquer banco de dados oracle,(com uso de interface) e me entrega no fim uma classe java onde eu saiba nome atributos seu tipo etcetc e eu faço a integração com a interface pq isso ja tem pronto…

cara eu nao sei se a api do hibernate tools consegue fazer isso direto de código sql ou se ele precisa de uma conexão de banco sempre…se conseguisse fazer direto de codigo sql seria maravilha viu…
se tiver afim de algo assim da um toque…voce implementa algo debaixo pra cima ja que voce tem mais fresco na cabeça…qlquer duvida tamo ae…

B

lscosta:
Ah, agora acho que saquei tua crítica… A criação da interface gráfica que eu falei sim, vai ser relevante apenas para esse meu caso, onde preciso desenvolver orientado a base de dados…

Tens razão, essa interface gráfica não tem valor nenhum! Funcionalidade removida do backlog! ;-)

Não cara essa funcionalidade pensando melhor tem que ter…ja que isso é possivel de implementar…deixei o post acima sem ler esse seu da uma lida ae…alem do que isso vai ajudar pra qualquer linguagem no futuro …vai que o cara queira migrar sua aplicação interia pro modelo MVC ele ja tem um ponto de partida violento …
gostei da sua ideia…e pra mim deve ser umas das próximas funcionalidades…

L

Não ia ser bem uma funcionalidade, mas um projeto separado, permitindo ainda o uso via linha de comando.

Mas como disse, não tenho essa necessidade agora…

Um colega do meu time disse que está fazendo uma tela em swing, com jdbc para o Postgre, por enquanto. Acho que ele vai por no github tbm…

B

lscosta:
Não ia ser bem uma funcionalidade, mas um projeto separado, permitindo ainda o uso via linha de comando.

Mas como disse, não tenho essa necessidade agora…

Um colega do meu time disse que está fazendo uma tela em swing, com jdbc para o Postgre, por enquanto. Acho que ele vai por no github tbm…

hum mais eu achei interessante ter essa abordagem também e vo implementar pelo menos pra mysql por enquanto…onde o usuario poderá subir um schema de banco… arquivo.sql e eu transformo em classes anotadas…mais ou menos o que o hibernate tools faz…so que um pouco diferente… tenho que dar uma estudada na api do hibernate tools pra ver se ja tem algo meio pronto nesse sentido de parser de código sql pra classe…

ou se alguem souber algum projeto nesse sentido melhor ainda…

P

boneazul:
Bom pessoal é com grande felicidade que venho a anunciar e disponibilizar aqui no GUJ o link para a minha primeira ferramenta gratuita.

Primeiramente me chamo Jonatan sou formado em analise de sistemas pela PUC campinas a 5 anos , tenho 25 anos e 5 anos de experiencia com desevolvimento de software sendo 1 apenas em linguagem java.

Bom eu batizei o projeto inicialmente de VRaptor Case,basicamente ele é um gerador inicial de código fonte de sistema ou seja com apenas algumas classes cadastradas o software te disponibiliza tudo ligado a dao,modelo anotado com hibernate,controlador pronto e view pronta.
.
.
.
.

Olá, gostei muito do visual da aplicação gerada e das funcionalidades principalmente pra tratar as relações MestreXDetalhes, já vi em outro post no qual vc disponibilizou as taglibs que vc não tem nenhuma documentação mas será que vc poderia criar um “livro de receitas” das suas taglibs ? algo mostrando a dependencia entre elas, as que podem estar sozinhas e coisas do genero ? Seria muito bom isso, obrigado.

T

O gerador está fora do ar?

B

Cara acabei melhorando muita coisa…e tirando do ar por um tempo pq tava travando outra aplicação que roda no mesmo server…pq nao tinha tanta experiencia com hibernate…e acabava que meu banco tava rodando varias queries a mais…faltava lazy…etcetc…acabei refatorando todo código agora tá bala…e super leve…e essa semana to subindo melhoria em varios sentidos tanto de implementações internas como de view…(bugs que acabei pegando no meio do caminho.)…e ja respondendo o post de cima…vo colocar um llivro de receitas básicas do uso da taglib…a parte de view esta quase 100% ja numa versão estável…encontrei alguns bugs javascript…

De novidade agora tem auditoria pelo envers,cache usando ehcache…melhoria na taglib…a displaytag agora faz paginação real…antigamente nao sabia algumas coisas que ela fazia meio furado…de ficar refazendo query…etc melhoria no exportador dela que é uma porcaria tamem…acabei reimplementando para o jtidy…pq ele gerava as tag html no pdf…
agora as queries ja vem com os “inner ou lefts” na relações 1-1 antigamente fazia lazy…ou seja…melhorou muita a geração de código…a parte de validação ajax que não tinha…e mais n coisa que se gerar código de novo vai sentir diferença…ja tem lib nova tamem…vraptor mais novo…hibernate mais novo…spring mais novo tambem…etcetc…

essa semana devolvo ele no ar…as contas tao bunitinha la ainda…so desci a aplicação mesmo…

K

Estou muito curioso quanto ao andamento deste projeto, posta ai quando estiver fazendo as melhorias, eu tenho q entregar um projeto da faculdade praticamente instantaneamente e a geração dos daos e controlers a partir das classes economizaria muitos dias… parabens ao desenvolvedor.

D

boneazul:
tiagosilveira:
O gerador está fora do ar?

De novidade agora tem auditoria pelo envers,cache usando ehcache…melhoria na taglib…a displaytag agora faz paginação real…antigamente nao sabia algumas coisas que ela fazia meio furado…de ficar refazendo query…etc melhoria no exportador dela que é uma porcaria tamem…acabei reimplementando para o jtidy…pq ele gerava as tag html no pdf…
agora as queries ja vem com os “inner ou lefts” na relações 1-1 antigamente fazia lazy…ou seja…melhorou muita a geração de código…a parte de validação ajax que não tinha…e mais n coisa que se gerar código de novo vai sentir diferença…ja tem lib nova tamem…vraptor mais novo…hibernate mais novo…spring mais novo tambem…etcetc…

essa semana devolvo ele no ar…as contas tao bunitinha la ainda…so desci a aplicação mesmo…

Oi BonéAzul, blz?!!
Antes de qq coisa, meus parabens p/ iniciativa!! Grande contribuição p/ uso/divulgação do VRaptor!! :thumbup:
Por gentileza, poderia compartilhar conosco o q fez p/ otimizar a <display tag??!
Sobre Persistência: vc já tem planos de oferecer opção p/ JPA/JPA2??!
E sobre opções de Frameworks AJAX/RIA: tem planos p/ adicionar + opções , como o ZK, p/ ex.?!>

B

derlon:
boneazul:
tiagosilveira:
O gerador está fora do ar?

De novidade agora tem auditoria pelo envers,cache usando ehcache…melhoria na taglib…a displaytag agora faz paginação real…antigamente nao sabia algumas coisas que ela fazia meio furado…de ficar refazendo query…etc melhoria no exportador dela que é uma porcaria tamem…acabei reimplementando para o jtidy…pq ele gerava as tag html no pdf…
agora as queries ja vem com os “inner ou lefts” na relações 1-1 antigamente fazia lazy…ou seja…melhorou muita a geração de código…a parte de validação ajax que não tinha…e mais n coisa que se gerar código de novo vai sentir diferença…ja tem lib nova tamem…vraptor mais novo…hibernate mais novo…spring mais novo tambem…etcetc…

essa semana devolvo ele no ar…as contas tao bunitinha la ainda…so desci a aplicação mesmo…

Oi BonéAzul, blz?!!
Antes de qq coisa, meus parabens p/ iniciativa!! Grande contribuição p/ uso/divulgação do VRaptor!! :thumbup:
Por gentileza, poderia compartilhar conosco o q fez p/ otimizar a <display tag??!
Sobre Persistência: vc já tem planos de oferecer opção p/ JPA/JPA2??!
E sobre opções de Frameworks AJAX/RIA: tem planos p/ adicionar + opções , como o ZK, p/ ex.?!>

Olá derlon…então semana passada fiquei trabalhando nele todo, refazendo varias coisas pra liberar sem erro algum…no mais tardar amanha estou subindo a aplicação definitiva…
Quanto a otimização da displaytag é um conjunto de melhorias dela + javascript voce olhando o código gerado vai entender…

A versão atual já está suportando hibernate 3.5.2 + JPA2 - fazendo cache no terracota do ehcache…uso do envers está embutido…spring 3.0.2…vraptor 3.1.2…ou seja as bibliotecas mais atuais possiveis…

Quanto ao RIA utilizo o jquery como biblioteca oficial do projeto…ou seja alguns componentes que voces irao ver fui eu quem fez…(tirando logico os do jqueryUI)…que ja vem com um leque de opções pra interface…esse ZK eu nunca vi teria que pesquisar o seu uso e onde seria possivel sua aplicação…

abraços…

D

@boneazul ,
Q ótimo saber q a ferramenta usa as Versões mais atuais possiveis dos frameworks. (principalmente JPA2/Hibernate :XD: )
Ah, consegui acessar a home do ‘casevr’, porem sem sucesso na autenticação c/ o LogOn q vc forneceu. :expressionless:
Sendo assim, se importaria de mencionar (em poucas palavras mesmo) as novidades q descobriu na codificação da DisplayTag: bem, todo nós sabemos q sua paginação só funciona c/ a Collection na Session; enfim: o q podemos fazer p/ otmizá-la overall??!

B

derlon:
@boneazul ,
Q ótimo saber q a ferramenta usa as Versões mais atuais possiveis dos frameworks. (principalmente JPA2/Hibernate :XD: )
Ah, consegui acessar a home do ‘casevr’, porem sem sucesso na autenticação c/ o LogOn q vc forneceu. :expressionless:
Sendo assim, se importaria de mencionar (em poucas palavras mesmo) as novidades q descobriu na codificação da DisplayTag: bem, todo nós sabemos q sua paginação só funciona c/ a Collection na Session; enfim: o q podemos fazer p/ otmizá-la overall??!

é deixei escapar um detalhe …mas agora é pra conseguir logar…

cara displaytag é um puta ferramenta ja quebra o galho em varios pontos na questão de listagem,paginação,ordenação,etcc…
Por padrão se voce nao implementa nada a displaytag ela executa toda vez sua query so pegando a parte que voce pediu pra paginar…ou seja sua query query é sempre executada no seu modo full… ou seja

select * from tabela

a cada virada de pagina ela executa de novo a query e so te mostra a parte que interessa…

duas soluções seriam a partialList (que acho a mais viavel) ou implementar a interface PaginatedList(essa sim é guardada na session)

optei pela primeira pois utiliza 2 selects …

select count(tab.id) from tabela

esse pra saber quantos registros tem

select * from tabela limit *,*

e esse os registros

um dos problemas da displaytag é carregar muito a session do tomcat quando voce implementa a interface deles PaginatedList acho q a interface é essa não me lembro o nome
A paginação que utilizo é via banco mesmo ou seja so vem o necessário e nada mais…se voce baixar um projeto vai ver como faço essa paginação super leve…

D

Aah, tá! Perfeito!! Eu já estava (+/-) a par desta abordagem. Eu só não sabia q p/ a gente usar o 'partialList=“true” ’ é necessario informar à displayTag o (count) Total da Tabela (ou da Query). (Obs.: é, ela só faz a Paginação a nivel de View; ela não faz paginação na Collection, no BD, em suma: em todas as Layers: e não é responsabilidade dela.)
Mas, vlws p/s dicas => muito util p/ quem ainda não conhecia displayTag!! :thumbup:
Ah, já consegui acessar, baixar o Projeto e configurar no Eclipse.

Bem, eu ia terminando p/ aki, maaass… como vc falou "

boneazul:

5- Posso dar ideias para o projeto?
Resposta : Pode e deve.A ideia é tornar a ferramenta completa. Alem do que o guj será o ponto central de discussões de idéias…
" Observei q as Classes do Model tem NamedQueries (q efetivamente são usadas nas DAOs). Seria muito trabalhoso mudar p/ a abordagem de Criterias do (Hibernate ou) JPA2??! A propósito, eu “ouvi dizer” q ‘NamedQueries’ “pesam mais” na inicialização da Aplicação: isto é “mito” ou é verdade => alguem poderia esclarecer isto p/ a gente?! :roll:

B

derlon:
Aah, tá! Perfeito!! Eu já estava (+/-) a par desta abordagem. Eu só não sabia q p/ a gente usar o 'partialList=“true” ’ é necessario informar à displayTag o (count) Total da Tabela (ou da Query). (Obs.: é, ela só faz a Paginação a nivel de View; ela não faz paginação na Collection, no BD, em suma: em todas as Layers: e não é responsabilidade dela.)
Mas, vlws p/s dicas => muito util p/ quem ainda não conhecia displayTag!! :thumbup:
Ah, já consegui acessar, baixar o Projeto e configurar no Eclipse.

Bem, eu ia terminando p/ aki, maaass… como vc falou "

boneazul:

5- Posso dar ideias para o projeto?
Resposta : Pode e deve.A ideia é tornar a ferramenta completa. Alem do que o guj será o ponto central de discussões de idéias…
" Observei q as Classes do Model tem NamedQueries (q efetivamente são usadas nas DAOs). Seria muito trabalhoso mudar p/ a abordagem de Criterias do (Hibernate ou) JPA2??! A propósito, eu “ouvi dizer” q ‘NamedQueries’ “pesam mais” na inicialização da Aplicação: isto é “mito” ou é verdade => alguem poderia esclarecer isto p/ a gente?! :roll:

Cara pelo que eu li a respeito NamedQueries são mais leves que a api Criteria pois uma vez compiladas elas nunca mais voltam a se repetir diferente da criteria que toda vez é executada e parseada pelo hibernate para se tornar a query nativa do banco que usa,por isso optei por NamedQueries e nao criteria ,não que nao seja facil de mudar no projeto até seria o caso de o cara escolher na aplicação se ele quer criteria ou named query…sei la …mas não tenho certeza absoluta da abordagem , gosto de usar criteria apenas quando a query é dinamica,exemplo relatorios com filtros ai sim ela é uma forma viavel..mas adoraria ouvir opinioes de outras pessoas a respeito da melhor abordagem

é que criteria voce esquece os HQL e sua aplicação fica mais digamos OO…

Bom fico no aguardo de varias opiniões sobre o prejeto como um todo …tipo a esse dao deveria ser assim ou assado ou nao seria melhor isso do que aquilo …realmente o que voce esta fazendo …pra gente discutir uma linha comum entre a galera…

G

Não, não são. Obviamente no startup o engine precisa varrer e validar as named-queries e isso tem um custom, porém é algo irrelevante, a menos que você esteja trabalhando com o hardware muito restrito.

:thumbup: Esse é o motivo de que as named-queries são levemente mais rápidas. Porém como eu disse acima é quase irrelevante exceto quando você tem uma aplicação que possui um milhão de acessos por segundo. Aí cada milésimo de segundo é muito importante.

E concordo com você: as criteria parecem mais OO. Não porque você trabalha com objetos, mas sim porque elas são type-safe, e pelo modo fluente de trabalhar, exemplo:

Nesse caso between recebe apenas objetos temporais. Já nas named-queries eu usaria String.

B

Não, não são. Obviamente no startup o engine precisa varrer e validar as named-queries e isso tem um custom, porém é algo irrelevante, a menos que você esteja trabalhando com o hardware muito restrito.

:thumbup: Esse é o motivo de que as named-queries são levemente mais rápidas. Porém como eu disse acima é quase irrelevante exceto quando você tem uma aplicação que possui um milhão de acessos por segundo. Aí cada milésimo de segundo é muito importante.

E concordo com você: as criteria parecem mais OO. Não porque você trabalha com objetos, mas sim porque elas são type-safe, e pelo modo fluente de trabalhar, exemplo:

Nesse caso between recebe apenas objetos temporais. Já nas named-queries eu usaria String.

É era mais ou menos o que havia pesquisado a respeito mesmo…bom mas como eu disse eu vo deixar em aberto se o cara quer usar criteria ou namedqueries para gerar o código…coloquei varias outras novidas no gerador (cache com envers,correcao de alguns bugs,etc) que estou pra subir ainda essa semana…validações a mais…e pra semana que vem ja estou estudando de plugar suporte a geração do jboss seam e o jsf ai ja começa a ficar bacana o projeto…

quando subir tudo posto um novo tópico sobre as atualizações…

G

Mas envers é para auditoria, e não cache. Provavelmente você quer dizer ehcache, jboss-cache, etc…

Você pretende usar SEAM na mesma aplicação que o Vraptor ou a pessoa escolhe um ou outro? Não vejo como usar duas tecnologias que fazem a mesma coisa em um único projeto, a menos que você tenha um legado e esteja fazendo a migração.

B

Mas envers é para auditoria, e não cache. Provavelmente você quer dizer ehcache, jboss-cache, etc…

Você pretende usar SEAM na mesma aplicação que o Vraptor ou a pessoa escolhe um ou outro? Não vejo como usar duas tecnologias que fazem a mesma coisa em um único projeto, a menos que você tenha um legado e esteja fazendo a migração.]

desculpa …
quis dizer o ehcache para cache e nao o envers é que o gerador tambem utiliza o envers para fazer auditoria ai me confundi…

"Você pretende usar SEAM na mesma aplicação que o Vraptor ou a pessoa escolhe um ou outro"
nao nao…voce vai poder escolher um ou outro nao os dois na mesma…minha ideia é escolher os frameworks em cada camada hoje ele atende o vraptor + hibernate + taglib…
mas pretendo inserir ja o seam + jsf + toplink…etc…com suporte standalone ou jpa ai o cara escolhe tambem…

ai o cara escolhe o que quer em cada ponta…

L

boneazul,
Tem alguma previsão de quando voltará a funcionar a sua aplicação?
Estou tentando acessar e parece que está fora do ar.
Aguardo resposta.
Obrigado.
Att,
Leandro.

J

tchê!!
não esta funcionando!!

R

Pois é tentei acessar e também não consegui :confused:

B

Então pessoal ta fora mesmo !! Acabei tornando o projeto comercial !!!

O preço ta bem acessível , ainda estou montando a documentaçãoe a ferramenta está inumera vezes melhor que a ultima versão que estava free!!!

Recomendo o uso do vraptor scaffold como ferramenta alternativa livre e se tiver interesse em algo visual,online e mais profissional manda mp pra mim que te passo valores , licenca de uso , o que suporta . Já fiz varios projetos em cima dela posso passar varias empresas como referencia que utilizam !!!

Abraços a todos !!!

F

kkkkkkkkkkkkk … A ideia Inicial de nao querer dinheiro de ninguem foii pro saco entao ?/?/

B

Como tudo na vida muda … a necessidade bateu mais forte a minha porta !!! Mas como dito anteriormente voce tem a opção do vraptor scaffold que é livre …

Abraços

Criado 2 de março de 2010
Ultima resposta 7 de dez. de 2011
Respostas 39
Participantes 16