Robson Alves O que torna um sonho irrealizável é a inércia de quem sonha

9abr/102

Java + RMI – Exemplo Básico

 

Este post de Java, esta aqui na verdade para auxiliar os alunos do Curso de Ciência da Computação, sala qual faço parte e as vezes dedico meu tempo para ajudar alguns alunos interessados!

O código abaixo é quase uma cópia fiel da feita em sala de aula, mudando alguns aspectos não relevantes, como a apresentação da exceção em mensagem, dentro do catch.

Abaixo segue o código que fará uma conexão entre um Cliente e um Server, pela porta padrão do 1099. Ao fim dos códigos estão os procedimentos para criar o STUB e o SKELETON.

Interface Mensageiro

import java.rmi.Remote;
import java.rmi.RemoteException;

/**
* Interface com os metodos do servidor.
* @author Robson Alves
*/

public interface Mensageiro extends Remote {

public void EscreverMensagem(String str) throws RemoteException;

public String LerMensagem() throws RemoteException;
}

 

Class MensageiroImpl

/**
* Implementa as regras da interface
* @author Robson Alves
*/

import java.rmi.AlreadyBoundException;
import java.rmi.RemoteException;

public class MensageiroImpl extends RemoteException implements Mensageiro
{

public static void main (String[] args) throws RemoteException, AlreadyBoundException
    {
        new Servidor();

    }
    public void EscreverMensagem(String str) throws RemoteException {
        System.out.println(str);
    }

    public String LerMensagem() throws RemoteException {
        return "Sou Java";
    }

}

 

Classe Servidor

/**
* Servidor
* @author Robson Alves
*/

import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;

public class Servidor {

    public Servidor() throws RemoteException, AlreadyBoundException
    {
        try
        {
            Mensageiro m = new MensageiroImpl();
            Naming.rebind("//Localhost:1099/MensageiroServico", m);            
        }
        catch (Exception e)
        {
            System.out.println(e.getLocalizedMessage());
        }
    }

public static void main(String[] args) throws RemoteException, AlreadyBoundException, MalformedURLException
    {
        new Servidor();
    }
}

 

Classe Cliente

import java.io.IOException;
import java.rmi.NotBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.net.MalformedURLException;

/**
*
* @author Robson Alves
*/
public class Cliente {

    public static void main(String[] args) throws NotBoundException, MalformedURLException, IOException
    {
        try
        {
            Mensageiro m = (Mensageiro) Naming.lookup("//localhost:1099/MensageiroServico");
            String x = m.LerMensagem();
            System.out.println(x);
            m.EscreverMensagem("Acessando e Enviando Mensagem");
            System.out.println(m.LerMensagem());
        }
        catch (RemoteException ex)
        {
            System.out.println(ex.getMessage());
        }

    }

}

 

Agora para criar o Stub da class de implementação, você deve ir ao DOS ( Control+R –> CMD ).

Encontre o endereço da classe de implementação no seu Windows (Geralmente ele fica em build / classes ) e digite no dos:

rmic CAMINHO DA CLASSE

Não se Esqueça de remover a extensão da Classe .class

 

Logo ele irá gerar a classe, MensageiroImpl_Stub.class

 

Agora para gerar o servidor, digite no Dos

rmiregistry

O dos ficará congelado, agora vá até a aplicação e rode primeiramente a classe servidor e em seguida a classe Client.

No output do netbeans irá apresentar o resultado dos metodos.

Abraços