Passar nome da Função como String
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:
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 :)
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
Curtidas 0
Melhor post
Ronaldo Lanhellas
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.
GOSTEI 1
Mais Respostas
Ronaldo Lanhellas
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.
GOSTEI 0
Ronaldo Lanhellas
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.
GOSTEI 0
Carlos Proença
06/07/2015
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.
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.
GOSTEI 1
Thiago Moises
06/07/2015
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.
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 :)
GOSTEI 0
Thiago Moises
06/07/2015
Voltei :)
Consegui resolver meu problema. Usei a sugestão do Carlos. Meu codigo ficou assim:
Agradeço a Ajuda de Todos :)
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 :)
GOSTEI 0