Fórum Passar nome da Função como String #524994

06/07/2015

0

Boa tarde Pessoal, Tudo bem?
Estava pensando em desenvolver um Schedule, que rodasse algumas rotinas automaticamente.
Eu estaria cadastrando as mesmas via banco de dados e o sistema faria a busca e executaria a rotina.
Porem, gostaria de saber se há alguma API ou Biblioteca que eu possa usar para executar uma rotina, passando o nome dela como String. Ex:

String nomeRotina = "OlaMundo()";
executar(nomeRotina);


Precisaria de algo semelhante a isso, pois o nome das rotinas estariam cadastradas no banco, como varchar. Ai só passaria o nome da mesma para que pudessem ser executadas.

Não sei se a ideia ficou clara. rsrsrsrs Mas desde já agradeço a atenção de todos :)
Thiago Moises

Thiago Moises

Responder

Post mais votado

06/07/2015

BOm, a biblioteca Quartz Scheduler (http://quartz-scheduler.org/) ajuda bastante na tarefa de automatizar processos, mas claro vocÊ terá que implementar sua lógica de qualquer jeito.

Ronaldo Lanhellas

Ronaldo Lanhellas
Responder

Gostei + 1

Mais Posts

06/07/2015

Ronaldo Lanhellas

BOm, a biblioteca Quartz Scheduler (http://quartz-scheduler.org/) ajuda bastante na tarefa de automatizar processos, mas claro vocÊ terá que implementar sua lógica de qualquer jeito.
Responder

Gostei + 0

06/07/2015

Ronaldo Lanhellas

BOm, a biblioteca Quartz Scheduler (http://quartz-scheduler.org/) ajuda bastante na tarefa de automatizar processos, mas claro vocÊ terá que implementar sua lógica de qualquer jeito.
Responder

Gostei + 0

07/07/2015

Thiago Moises

Fala Thiago blz?

o que voce quer é da api de reflection do java

da uma olhada no link DOC Reflect invoke pois o que voce precisa é usar o metodo invoke que faz exatamente isso...

da uma olhada e ve se te ajuda qualquer coisa é só falar.

att.


BOm, a biblioteca Quartz Scheduler (http://quartz-scheduler.org/) ajuda bastante na tarefa de automatizar processos, mas claro vocÊ terá que implementar sua lógica de qualquer jeito.


Olá galera, Agradeço a ajuda de vcs :)
Vou pesquisar um pouco sobre as soluções que me passaram, e em breve respondo se solucionou meu problema :)
Mais uma vez..Agradeço a atenção :)
Responder

Gostei + 0

07/07/2015

Thiago Moises

Voltei :)
Consegui resolver meu problema. Usei a sugestão do Carlos. Meu codigo ficou assim:

//Classe Schedule
public void executa(String rotina) {
        try {
            //pego a classe passada por string 
            Class<Rotina> cls =  (Class<Rotina>) Class.forName(rotina);
            
            //listo todos os metodos da classe
            Method[] methods = cls.getDeclaredMethods();
            for (Method m : methods) {
                //caso o metodo for o start() executa o mesmo
                if (m.getName().equals("start")) {
                    //invoca o metodo criando uma nova instancia da classe. 
                    //Caso não invocar uma nova instancia (newInstance()) o metodo só executará 
                    //metodos estáticos
                    m.invoke(cls.newInstance());
                }
            }
        } catch (ClassNotFoundException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | InstantiationException ex) {
            Logger.getLogger(Schedule.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static void main(String args[]) {
        //passo o caminho da classe
        new Schedule().executa("br.com.teste.rotinas.RotinaTeste");

    }


public class RotinaTeste implements Rotina{

    @Override
    public void start() {
        System.out.println("Executou "+toString());
    }
    
    @Override
    public String toString() {
        return this.getClass()+".start()";
    }
    
}


Agradeço a Ajuda de Todos :)
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar