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.
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!
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.
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.
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
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
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 )