Nova versão do framework Reflection-DSL!

11 respostas
nadilsons

Olá,

Foi publicada uma nova versão do Reflection-DSL.
Para quem não conhece o projeto, ele permite fazer algo como:

Boolean isLogged = Introspector.forClass("package.User").create("param1", 2).method("isLogged").invoke();
String formatedValue = Introspector.forClass("package.FormatUtil").create(Locale.US).method("formatCurrency").invoke(1560.99,  "R$ #,##");

Nesta versão foram implementadas as seguntes features:

Possibilidade de fazer buscas nas classes através de uma api semelhante a Criteria do hibernate

// Existem vários tipos de Restriction's, como: eq, ne, like, regex, in, withModifiers, annotatedWith, notAnnotatedWith, fieldClassEq, methodWithParams, disjunction (para fazer buscas complexas) entre outros. Confira!!
Criterion criterion = Introspector.createCriterion(ClasseDominio.class);
criterion.add(Restriction.annotatedWith(MyAnnotation.class));
List result = criterion.list(); //Retorna todos os fields e methods anotados com MyAnnotation.class !!!

Possibilidade de fazer buscas nas classes através de uma api semelhante a HQL do hibernate

// Tem todos os tipos de restrictions existentes na api Criterion!!
Query query = Introspector.createQuery("FROM package.ClasseDominio WHERE annotation eq 'package.MyAnnotation'"); 
List result = query.list(); //Retorna todos os fields e methods anotados com MyAnnotation.class !!!

Implementação de cache das buscas

Esperamos que este framework facilite seu trabalho ao utilizar reflection.
Ajudem-nos enviando sugestões, críticas e informações sobre bugs.

Obrigado.

11 Respostas

Diabo_Loiro

que bom bem interesante…

paulovittor23

Bela iniciativa!
Talvez fosse interessante comentar um pouco sobre a performance do framework, comparar a permformance de consultas em critéria, RQL e, até mesmo, chamadas de reflexão nativa da linguagem, acho que seria bem interessante!
Existem testes unitários? integrados? qual a cobertura?
No mais, tenho que dizer que a idéia e a forma como abstrairam as consultas e reflexões ficou muito simples, pouco verbosa e de fácil utilização.
Parabéns! :wink:

leonardo.campos

Opa,

Também sou co-autor do Reflection-dsl e respondendo a suas perguntas, Paulo, temos o seguinte:

O projeto foi desenvolvido com BDD/TDD (Behavior Driven Development)/(Test Driven Development), de forma que foi natural atingir alta cobertura de testes.
Medindo a cobertura com plugin do Eclipse (Emma), temos algo em torno de 90% de linha de cobertura. Provavelmente seria maior se retirássemos as exceções da contagem.
Ah, estes são testes unitários.

Em relação à performance, os testes foram feitos de maneira bastante simples, comparando chamadas nativas, via reflection direto, via Introspector, via Criterion e também por RQL.
Rodamos 130.000 vezes, e os resultados foram algo assim no meu humilde computador:
1 - Chamadas nativas - desprezíveis 4 milisegundos
2 - Reflection direto: 318 milisegundos
3 - Instrospector: 649 milisegundos
4 - Criterion: 472 milisegundos
5 - RQL: 304 milisegundos

Os dois últimos são mais rápidos que o Introspector pois fazem uso de cache, o RQL é um pouco mais performático pois consegue fazer melhor uso do cache.

Ah, a URL é http://code.google.com/p/reflection-dsl/

G

Hmm, muito bom. Conheci o projeto através da dependencia que o vraptor possui dele. Acabei lendo sobre, gostei e hoje estou usando em meus projetos. Parabéns a equipe.

Uma coisa que eu achei que daria para fazer é invocar um método passando o argumento como String sendo que o parametro do método é Long, por exemplo, e ele fazer o set correto. No meu caso não foi possível. Minha única sugestão é essa mesmo.

De resto, framework excelente ,já me ajudou muito.

leonardo.campos

Garcia, acho q vc está confundindo com o projeto Mirror da Caelun.

É um projeto q se assemelha ao nosso na parte DSL, mas hoje não conta com as demais APIs.

Abraços!

Alexandre_Gazola

Parabéns pelo projeto!

G

leonardo.campos:
Garcia, acho q vc está confundindo com o projeto Mirror da Caelun.

É um projeto q se assemelha ao nosso na parte DSL, mas hoje não conta com as demais APIs.

Abraços!

Xiii :oops:, mas que gafe, hehehehe.

eduveks

Muito bom! Acho q vou tirar muito proveito disto no CajuScript!

Vou fazer testes de performance no CajuScript mudando o reflection direto que faço pelo Reflection-DSL, espero conseguir boas melhorias :stuck_out_tongue:

Gostei do tamanho do .jar… menos de 90kb, excelente! Meu objetivo no CajuScript também é não ter dependências, e se for preciso, é ter a menor e mais leve possível, e o Reflection-DSL vem a calhar.

Parabéns pelo projecto, dois comunico os resultados dos meus testes, gracias :wink:

leonardo.campos

Bacana, espero receber os resultados.

Ah, coloquei alguns exemplos no wiki do projeto.
Se vc desenvolver algum interessante me manda que eu coloco lá como contribuicao sua (fora o agradecimento :wink: )

xymor

Wow, muito bom.

Parabéns pelo release.

leonardo.campos

Valeu, brother.

Ah, eduveks, tava dando uma olhada no projeto CajuScript parece bem legal. Vou dar uma olhada com mais carinho no fim de semana!

Criado 5 de dezembro de 2009
Ultima resposta 11 de dez. de 2009
Respostas 11
Participantes 8