Runtime - Instaciar uma classe e chamar um Método

3 respostas
black_fire

Pessoal,

O cenário é o seguinte:
Estou criando uma aplicação SocketServer onde os clients irão chamar uma determinada método de um pacote.

:arrow: Este pacote não está o import da aplicação, pois estou fazendo uma aplicação genérica para instanciar componentes externos dinâmicamente (o pacote já está configurado no CLASSPATH e usando import funciona 100%).

Exmplo:
String enviada pelo client: “br.srv.work.empresa.ValidarCliente” “validaCPF”
No exemplo acima tenho que chamar a método validaCPF da classe br.srv.work.empresa.ValidarCliente.

Resumo:
Vou receber a Classe que tenho que instânciar e a método em uma string.
Tenho que instanciar a classe e chamar o método em runtime… :slight_smile:

Estou precisando de uma luz para saber onde começo a pesquisar…

Quem tiver a fim de perder um pouco de tempo dexei a UML inicial do projeto no link abaixo…

http://clientes.work.srv.br/rsouza/index.html

Valeu galera…

3 Respostas

Bani

Fica mais ou menos assim (não testei):

Class classe = Class.forName("br.srv.work.empresa.ValidarCliente");
classe.getMethod("validaCPF",null).invoke(null,null);

No caso estou considerando que o método é estático e que não tem nenhum parâmetro. Dê uma olhada melhor na API das classes Class e Method para mais informações;

black_fire

Valeu Bani é mais simples do que eu imaginava.

Esse kra vai sr uma espécie de servidor de scripts.
Estamos fazendo esta implementação, pois no caso das DLLs pode-se gerar uma exceção e travar o servidor. Executando via tcp/ip se o Script travar a máquina, apenas o Servidor de Script trava.

Ou seja, terei tbm que ter a possíbilidade de efetuar integrações não apenas com Java mas tbm com Dll em C, C++ ou Delphi.

:?: Esta chamada em runtime tbm seria possível com JNI?

Valeu a força…
Um abraço… :wink:

Bani

Acredito que sim… Afinal, JNI é mais ou menos como uma “camada Java” para um código nativo, então suponho que o mecanismo de reflection enxergue como Java normal. A forma como o método foi implementado (normalmente ou nativo) não deve interferir.
Mas são só suposições minhas. O melhor mesmo é fazer um teste simples e descobrir.

Criado 23 de outubro de 2003
Ultima resposta 24 de out. de 2003
Respostas 3
Participantes 2