Reflection!

Dae galera… eu estou querendo implementar a seguinte lógica!!
Eu tenho um bean que é passado como parâmetro, através desse bean, eu quero chamar o DAO para inseri-lo, isso automatico, pois a unica coisa que muda nos dois é o final do nome da class: Ex: Cliente e ClienteDAO, eu fiz a seguinte estrutura:

   [code] Class classBean = ( Class ) obj.getClass();      
    String nameDAO = classBean.getName().replaceAll("model", "persistence") + "DAO";                
    Class classDAO = Class.forName( nameDAO );        
    Constructor ct = classDAO.getConstructor();
    Object dao = ct.newInstance();
    Method method = dao.getClass().getMethod("insert", classBean );        
    method.invoke(classDAO, classBean);                [/code]Só que quando eu chamo o seguinte trecho:
   [code] Method method = dao.getClass().getMethod("insert", classBean );        [/code]

Ele dá esse erro:

java.lang.NoSuchMethodException: br.persistence.TipoEnderecoDAO.insert(br.model.TipoEndereco) at java.lang.Class.getMethod(Class.java:1581) at br.model.ALBusinessLogic.insert(ALBusinessLogic.java:30) at testes.Teste.main(Teste.java:26)

A idéia é… que eu tivesse um método genérico para inserir , eu teria uma classe que seria implementada pelo meu bean para o mesmo ja ter o método insert automatico… nessa superclasse eu criaria um método insert e através de reflection eu chamaria o DAO especifico ja passando os parametros necessarios!!

Como eu executaria o método insert do meu DAO passando o parametro(que é o meu bean) que é recuperado nessa linha:

Class classBean = ( Class ) obj.getClass(); ??
Abraço!

Tem um tutorial sobre relfection muito bom aqui no GUJ, da uma olhada, inclusive eu implementei minha servlet seguindo esse tutorial. Da uma olhada que tenho certeza que vc vai conseguir resolver seus problemas…

Cara… eu já tentei com o tutorial mas não tá dando de jeito nenhum… será que alguém já passou por isso?
Abraço!

invoke aceita como primeiro parametro o objeto onde terá que ser invocado e não a classe.
Por outro lado o argumento é o objeto bean e não a sua classe.
mude para

 [code] 
    Class beanClass= obj.getClass();      
    String nameDAO = beanClass.getName().replaceAll("model", "persistence") + "DAO";                
    Class classDAO = Class.forName( nameDAO );        
    Constructor ct = classDAO.getConstructor();
    Object dao = ct.newInstance();
    Method method = classDAO.getMethod("insert", classBean );        
    method.invoke(dao, obj);                

[/code]

Cara… deu certo… agora outra dúvida… quando ele executar o meu método via reflection, esse metodo me retorna um boolean… como eu faria pra ter esse retorno?
Abraço!

se você fizer isto:
Object ret = method.invoke(dao, obj);

ele provavelmente lhe retornará um java.util.Boolean, ou null. Se for um java.util.Boolean, use o método booleanValue() para saber se é true ou false.