![]() |
|
||||
![]() Planilha Web - Planilhas e Calculadoras online para estudantes e profissionais de Engenharia Civil, Engenharia Elétrica e Engenharia Mecânica. |
|||||
Você está aqui: Java ::: RMI - Remote Method Invocation ::: Passos Iniciais |
Aprenda a escrever sua primeira aplicação RMI usando NetBeansQuantidade de visualizações: 14128 vezes |
Nesta dica mostrarei passo-a-passo como escrever um aplicação RMI bem simples usando a IDE NetBeans (aqui usei a versão 6.9.1). Note, contudo, que isso não o(a) liberará da tarefa de executar alguns comandos na janela do Prompt de comando. Desta forma, se você ainda não sabe como fazê-lo ou se as variáveis de ambiente PATH e CLASSPATH lhe dão arrepios, aproveite e reveja algumas de minhas dicas sobre o assunto antes de iniciar. Sobre a aplicação A aplicação RMI que escreveremos é realmente muito simples. Trata-se de uma calculadora que recebe dois inteiros e devolve sua soma. A aplicação cliente se conectará à aplicação servidor, enviará dois valores inteiros e o servidor devolverá a soma dos valores informados. Lembre-se de que usaremos apenas RMI, nada de sockets envolvidos nesta dica (somentes nos bastidores, é claro). Escrevendo a aplicação RMI servidor O primeiro passo para escrever a aplicação cliente é abrir o NetBeans. Em seguida vá até a opção Arquivo -> Novo Projeto. Na janela de novo projeto escolha Java de um lado e Aplicativo Java do outro. Clique o botão Próximo. Dê o nome "CalculadoraServidor" ao projeto e salve-o no diretório "C:\estudos_rmi" de forma que a pasta do projeto seja "C:\estudos_rmi\CalculadoraServidor". Clique o botão Finalizar. Vamos começar criando a interface remota, que será compartilhada tanto pela aplicação servidor quanto pela aplicação cliente. Assim, vá na opção Arquivo -> Novo Arquivo. Na janela Novo arquivo escolha Java de um lado e Interface Java do outro. Clique o botão Próximo. Dê o nome "CalculadoraServerInterface" à interface e selecione o pacote "calculadoraservidor". Clique o botão Finalizar. Altere o código do arquivo CalculadoraServerInterface.java para a versão mostrada abaixo: package calculadoraservidor; import java.rmi.*; public interface CalculadoraServerInterface extends Remote{ // método público que recebe dois valores inteiros e // retorna sua soma public int somar(int a, int b) throws RemoteException; } Aqui nós temos um método somar() que recebe dois inteiros e retorna sua soma. Vamos agora escrever uma classe que implementa esta interface. Vá na opção Arquivo -> Novo Arquivo. Na janela Novo arquivo escolha Java de um lado e Classe Java do outro. Clique o botão Próximo. Dê o nome "CalculadoraServerInterfaceImpl" à classe e selecione o pacote "calculadoraservidor". Clique o botão Finalizar. Altere o código do arquivo CalculadoraServerInterfaceImpl.java para a versão mostrada abaixo: package calculadoraservidor; import java.rmi.*; import java.rmi.server.*; public class CalculadoraServerInterfaceImpl extends UnicastRemoteObject implements CalculadoraServerInterface{ public CalculadoraServerInterfaceImpl() throws RemoteException{ // construtor padrão } // método público que recebe dois valores inteiros e // retorna sua soma public int somar(int a, int b) throws RemoteException{ return a + b; } } Agora já podemos implementar o servidor e registrá-lo com o RMI server. Altere o código do arquivo Main.java para a seguinte versão: package calculadoraservidor; import java.rmi.registry.*; public class Main { public static void main(String[] args) { try { CalculadoraServerInterface csi = new CalculadoraServerInterfaceImpl(); Registry registry = LocateRegistry.getRegistry(); registry.rebind("CalculadoraServerInterfaceImpl", csi); System.out.println("Servidor Calculadora " + csi + " registrado e pronto para aceitar solicitações."); } catch (Exception ex) { System.out.println("Houve um erro: " + ex.getMessage()); } } } Pronto! A aplicação servidor já está concluída. Pressione F6 para executá-la. Teremos o seguinte erro de tempo de execução: Houve um erro: Connection refused to host: 192.168.1.64; nested exception is: java.net.ConnectException: Connection refused: connect Isso aconteceu porque não iniciamos o RMI Registry. Para isso, abra uma janela de comando e dispare: start rmiregistry Isso fará com que uma nova janela de comando seja aberta. Não a feche. O RMI Registry está sendo executado nela. Volte à aplicação e pressione F6 novamente. Agora o erro de tempo de execução é: Houve um erro: RemoteException occurred in server thread; nested exception is: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.lang.ClassNotFoundException: calculadoraservidor.CalculadoraServerInterface Este erro ocorreu porque o RMI Registry não conseguiu encontrar nenhuma informação a respeito da interface CalculadoraServerInterface. Para contornarmos este problema, vamos apenas construir a aplicação (pressionando F11 ou acessando Executar -> Construir projeto principal) e executá-la a partir do jar gerado (CalculadoraServidor.jar). Assim, abra uma janela de terminal e vá até o diretório de sua localização: cd C:\estudos_rmi\CalculadoraServidor\dist e dispare: java -jar CalculadoraServidor.jar Mesmo erro, não? Pare o RMI (Ctrl + C), feche todas as janelas de comando e adicione o valor "C:\estudos_rmi\CalculadoraServidor\dist\CalculadoraServidor.jar;" à sua variável de CLASSPATH. Inicie o RMI novamente, abra uma nova janela de terminal, vá até o diretório "C:\estudos_rmi\CalculadoraServidor\dist" e execute o JAR novamente. Se tudo correu bem você terá o seguinte resultado: Servidor Calculadora CalculadoraServerInterfaceImpl[UnicastServerRef [liveRef: [ endpoint:[192.168.1.64:4634](local),objID:[4124a53a:12e63b2ebea:-7fff, 383998976 7738511284]]]] registrado e pronto para aceitar solicitações. Esta mensagem indica que o servidor RMI está 100% funcionando e pronto para atender às requisições do cliente. Hora de passarmos ao desenvolvimento do cliente. Nota importante: Neste momento você já consegue executar a aplicação servidor a partir do NetBeans. Mas, é recomendável executá-la a partir do Prompt de comando, uma vez que a aplicação servidor deverá estar rodando quando a aplicação cliente for executada. Escrevendo a aplicação RMI cliente Vamos então escrever a aplicação RMI cliente. Vá até a opção Arquivo -> Novo Projeto. Na janela de novo projeto escolha Java de um lado e Aplicativo Java do outro. Clique o botão Próximo. Dê o nome "CalculadoraServidor" ao projeto e salve-o no diretório "C:\estudos_rmi" de forma que a pasta do projeto seja "C:\estudos_rmi\CalculadoraCliente". Clique o botão Finalizar. Na aplicação cliente nós precisaremos referenciar a interface CalculadoraServerInterface, que é parte da aplicação servidor. Assim, clique com o botão direito em Biblitecas e escolha a opção Adicionar JAR/Pasta. Localize o diretório "C:\estudos_rmi\CalculadoraServidor\dist", selecione o JAR CalculadoraServidor.jar e clique o botão Open. Agora modifique o Main.java para a seguinte versão: package calculadoracliente; import java.rmi.registry.*; import calculadoraservidor.*; public class Main { public static void main(String[] args) { try { Registry registry = LocateRegistry.getRegistry("localhost"); CalculadoraServerInterface c = (CalculadoraServerInterface) registry.lookup("CalculadoraServerInterfaceImpl"); System.out.println("O objeto servidor " + c + " foi encontrado com sucesso.\n"); // vamos efetuar uma soma? System.out.println("A soma de 2 + 5 é: " + c.somar(2, 5)); } catch(Exception ex){ System.out.println(ex); } } } A aplicação cliente pode ser executada a partir do NetBeans mesmo (com o RMI Registry ativo e a aplicação Servidor em execução, é claro). Basta pressionar F6 e teremos o seguinte resultado: O objeto servidor Proxy[CalculadoraServerInterface, RemoteObjectInvocationHandler[UnicastRef [liveRef: [endpoint:[192.168.1.64:4649](remote),objID:[4d4c1a57:12e63bb67ba:-7fff, 3392955188099866234]]]]] foi encontrado com sucesso. A soma de 2 + 5 é: 7 Esta dica demonstra "pacientemente" como escrever sua primeira aplicação RMI usando a IDE NetBeans. Devido ao espaço restrito, não pude descrever o funcionamento detalhado de cada uma das partes envolvidas. Continue vendo minhas dicas sobre o assunto para aprofundar um pouco mais. |
![]() |
Desafios, Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |