Você está na página 1de 3

Introdução ao RMI (Remote Method Invocation) 1

RMI significa Remote Mothod Invocation e permite fazer chamadas remotas a métodos remotos.

São necessários para um serviço remoto baseado em RMI:

1) Uma interface que definirá os métodos que podem ser invocados remotamente (todos os métodos
devem lançar “RemoteException”)
2) Uma classe de implementação da interface remota que estenda a classe UnicastRemoteObject e que
tenha um construtor que lance “RemoteException”
3) As classes de Stub que serão geradas automaticamente pelo rmic (stubs são as implementações reais do
serviço, com detalhes de rede etc.)
4) Criar uma classe servidor e registrá-la no servidor RMI
5) Executar os programas necessários NO SERVIDOR
6) Criar uma classe cliente, que irá se conectar no servidor (com o mesmo nome de registro) e efetuará as
chamadas remotas

Passos para criar um serviço RMI:

1) Crie um diretório “C:\EstudoRMI”


2) Crie uma interface chamada “ServicoRemoto.java”
import java.rmi.Remote;
import java.rmi.RemoteException;

public interface ServicoRemoto extends Remote {

public Double somarRemotamente(Double valor1, Double valor2) throws RemoteException;

public void mensagemServidor(String mensagem) throws RemoteException;

3) Abra o “Prompt do DOS” e entre no diretório “C:\EstudoRMI”


4) Compile: javac ServicoRemoto.java
5) Crie uma classe para implementar o serviço Remoto chamada “ServicoRemotoImp.javal”
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class ServicoRemotoImpl extends UnicastRemoteObject implements ServicoRemoto {

public ServicoRemotoImpl() throws RemoteException {


}

@Override
public void mensagemServidor(String mensagem) throws RemoteException {
System.out.println("Mensagem recebida do cliente: " + mensagem);
}

@Override
public Double somarRemotamente(Double valor1, Double valor2) throws RemoteException {
return (valor1 + valor2) ;
}

6) Compile “javac ServicoRemotoImpl”


7) Gerar o “Stub” e “Skeleton”. Digite “rmic ServicoRemotoImpl”
8) Devem ter sido criado o arquivo “ServicoRemotoImpl_Stub.class”

Escrito por Rodrigo Lopes Ferreira (rodrigo.lopes.ferreira@hotmail.com) em 19 de abril de 2010 - Dúvidas,


sugestões ou críticas são bem vindas!
Introdução ao RMI (Remote Method Invocation) 2

9) Criar o Server:
import java.rmi.Naming;
import java.rmi.RemoteException;

public class ServicoServer {

public ServicoServer() throws RemoteException {

String nomeServicoRegistrado =
"rmi://localhost:1099/ServicoRemoto";

ServicoRemoto servicoRemoto = new ServicoRemotoImpl();

try {

Naming.rebind(
nomeServicoRegistrado,
servicoRemoto);

} catch (Exception e) {
e.printStackTrace();
}

public static void main(String[] args) throws RemoteException {


new ServicoServer();
}

10) Compilar: “javac ServicoServer.java”

11) Criar o Cliente (este irá acessar o serviço remoto e poderá ser distribuído para usuários que têm acesso a
rede onde está o servidor) . Criar uma classe chamada “ServicoCliente.java”
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

public class ServicoCliente {

public ServicoCliente() {
}

public static void main(String[] args) {

try {

ServicoRemoto servicoRemoto = (ServicoRemoto)


Naming.lookup("rmi://localhost:1099/ServicoRemoto" );

System.out.println("Resposta da soma feita no server: " +


servicoRemoto.somarRemotamente(10D, 30D));

servicoRemoto.mensagemServidor("Esta mensagem aparecera no Servidor!");

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}

Escrito por Rodrigo Lopes Ferreira (rodrigo.lopes.ferreira@hotmail.com) em 19 de abril de 2010 - Dúvidas,


sugestões ou críticas são bem vindas!
Introdução ao RMI (Remote Method Invocation) 3

12) Compilar o cliente: “javac ServicoCliente.java”

13) Agora será necessário abrir três terminais do DOS, para executar os processos separadamente. Faça o
seguinte:

a. Passos do SERVIDOR:

i. Abra um terminal, entre no diretório onde estão os arquivos de “Stub” (C:\EstudoRMI)


ii. Digite o comando “rmiregistry”
1. Este comando irá iniciar o serviço RMI que obrigatoriamente deverá ESTAR
EXECUTANDO NO SERVIDOR
iii. Abra outro terminal e entre no diretório onde estão os arquivos compilados (C:\EstudoRMI)
iv. Inicie o programa servidor, digitando “java ServicoServer”
1. O console ficará travado, aguardando conexões; se não ocorreu nenhuma exceção,
o servidor está pronto para receber as chamadas remotas.

b. Passos DO CLIENTE (deve ser executado nos computadores clientes, que irão acessar o servidor
remoto, ou no próprio servidor, se for o caso.)

i. Abra mais um terminal e execute o programa cliente:

ii. java ServicoCliente


1. O console deverá exibir a mensagem no servidor e o cliente deverá exibir o
resultado da Soma = 40.

Atenção:

Para distribuir o programa para os clientes, será necessário enviar as seguintes classes:

ServicoCliente.class
ServicoImpl_Stub.class
ServicoRemoto.class

E para executar no cliente: “java ServicoCliente”

Lembre-se que o serviço cliente faz a “Localização do Serviço Remoto”, na linha


“rmi://localhost:1099/ServicoRemoto” onde “localhost” é o HOST do servidor, então, será
necessário mudar este parâmetro para o host do servidor onde o programa “ServicoServer”
estiver em execução e recompilar a classe, antes de distribuí-la para os clientes.

Escrito por Rodrigo Lopes Ferreira (rodrigo.lopes.ferreira@hotmail.com) em 19 de abril de 2010 - Dúvidas,


sugestões ou críticas são bem vindas!

Você também pode gostar