Ofereço ajuda em Java, C/C++, Python, C#, LISP, AutoLisp, AutoCAD
Ofereço ajuda em PHP, Python, C#, JavaScript, Laravel, Google Ads e SEO

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 NetBeans

Quantidade 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.

Link para compartilhar na Internet ou com seus amigos:

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

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby


E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser. Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book Apenas R$ 32,90


© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 67 usuários muito felizes estudando em nosso site.