Você está na página 1de 30

11/20/22, 1:11 PM Ead.

br

SISTEMAS DISTRIBUÍDOS
CHAMADA REMOTA DE
MÉTODO (RMI) APLICADA
NA PRÁTICA
Autor: Dr. Sidartha Azevedo Lobo de Carvalho
Revisor: Lizandro de Souza

INICIAR

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&cd… 1/30
11/20/22, 1:11 PM Ead.br

introdução
Introdução
Nesta unidade você vai aprender sobre as chamadas remotas de métodos a
partir do protocolo RMI Java. Vai entender como funciona o protocolo RMI e as
similaridades com a chamada remota de procedimento (RPC). Além disso, vai
aprender sobre as arquiteturas de sistemas distribuídos não centralizadas,
como a peer-to-peer. Em complemento, vai entender como funciona a
comunicação dos grupos que não possuem entidade centralizada. Por fim, você
vai praticar com a implementação de um sistema de somar dois números a
partir de uma interface remota, entendendo todos os passos da implementação
até a execução do cliente e do servidor em uma máquina local. Na sequência,
vamos implementar uma calculadora remota, onde os métodos serão
implementados para serem acessados de forma remota por outra entidade.

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&cd… 2/30
11/20/22, 1:11 PM Ead.br

Chamada de
Método Remota
RMI

A
Remote Method Invocation
(RMI), também chamada de invocação remota de
método é semelhante à chamada remota de procedimento. A principal
diferença é que na chamada remota de procedimento é necessário estabelecer
a comunicação com troca de mensagens de forma direta, enquanto na RMI é
possível usar os conceitos de orientação a objetos, podendo usar os recursos
como herança, polimorfismo, dentre outros de forma transparente. Para ajudar
no entendimento, veja as definições a seguir.

Em termos de similaridade, podemos elencar:

Suportam uso de interfaces;


Utilizam as premissas dos protocolos de requisição e resposta;
As chamadas locais e remotas acontecem com uma transparência
similar;

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&cd… 3/30
11/20/22, 1:11 PM Ead.br

As chamadas remotas exibem o comportamento distribuído,


esclarecendo ao programador que aquilo é uma chamada remota.

Agora vamos ver um pouco das diferenças entre as duas abordagens, descritas
por Coulouris (2013, p. 204):

O programador pode usar todo o poder expressivo da programação


orientada a objetos no desenvolvimento de software de sistemas
distribuídos, incluindo o uso de objetos, classes e herança, e também
pode empregar metodologias de projeto orientado a objetos
relacionadas e ferramentas associadas. [...] Complementando o
conceito de identidade de objeto dos sistemas orientados a objetos,
em um sistema baseado em RMI, todos os objetos têm referências
exclusivas (sejam locais ou remotos) e tais referências também
podem ser passadas como parâmetros, oferecendo, assim, uma
semântica de passagem de parâmetros significativamente mais rica
do que na RPC.

Note que uma diferença significativa na abordagem RMI é a passagem de


referências em chamadas de procedimento de forma remota. Ou seja, o
servidor remoto ao receber uma requisição que contenha uma referência a um
objeto pode acessar de forma local esse objeto, abstraindo a complexidade e
possibilitando maior controle ao programador.

A seguir você vai aprender um pouco mais sobre as decisões de projeto em


aplicações distribuídas que impactam a arquitetura dessa aplicação.

Arquitetura de uma Aplicação RMI


Lembre-se que na programação orientada a objetos o objeto é composto de
variáveis que possuem valores associados. Ainda nesse sentido, um objeto é
acessado por sua referência e esse objeto é implementado a partir de uma
classe que especifica atributos e interfaces de comunicação para o objeto.

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&cd… 4/30
11/20/22, 1:11 PM Ead.br

Para aplicar os conceitos da orientação a objetos em um sistema distribuído é


necessário fazer algumas alterações, possibilitando o particionamento dos
dados e invocação remota das interfaces dos objetos.

Uma das arquiteturas mais utilizada com o uso de sistemas de objetos


distribuídos é a cliente-servidor, onde os objetos são gerenciados pelos
servidores e os clientes acessam esses objetos através das interfaces e
invocação remota de métodos para utilizar os recursos. Na RMI, o cliente envia
uma mensagem para o servidor contendo a requisição para acessar o método
do objeto desejado. Após isso, o servidor decodifica a mensagem, executa o
método no servidor e coloca o resultado em uma nova mensagem que é
retornada ao cliente. Em complemento, ao receber uma requisição, um servidor
também pode invocar métodos em outros servidores, criando um
encadeamento de requisições.

Em complemento, é possível que os elementos do sistema distribuído utilizem


diversas arquiteturas, como cliente-servidor e peer-to-peer, mas é necessário
que sigam o protocolo estabelecido pelo RMI para que possam se comunicar de
forma correta.

Além disso, pode haver concorrência no acesso aos recursos usando RMI, pois
objetos de diferentes computadores podem tentar acessar o mesmo método de
forma concorrente. Por isso, surge a possibilidade de conflito de acessos.
Entretanto, visto que os dados do objeto somente podem ser acessados pelos
métodos definidos na interface, garante que não haverá acessos indevidos ou
uso livre de execução de código. No caso de problemas de concorrência, é
possível aplicar algoritmos de proteção de recursos, como os semáforos dos
sistemas operacionais. O RMI também permite que um objeto remoto seja
tratado como um objeto local, podendo fazer cache e executar as operações
necessárias de forma local.

A figura a seguir ilustra os conceitos de chamadas de procedimento de forma


local e remota. De acordo com a figura, temos 6 objetos distintos, chamados de:

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&cd… 5/30
11/20/22, 1:11 PM Ead.br

A, B, C, D, E e F. Cada objeto possui métodos que podem ser acessados de forma


local ou remota. No nosso exemplo, o objeto A invoca um método remoto no
objeto B; o objeto B invoca os métodos em C e D de forma local; o objeto C
invoca o método em E de forma local; o objeto E invoca o método de forma
remota em F. Ao final das requisições, F retorna o resultado para E, que devolve
para C, B e então retorna para A.

Figura 3.1 - Invocação a métodos locais e remotos.

Fonte: Coulouris (2013, p. 207).


#PraCegoVer:
Ilustra a invocação a métodos locais e remotos. A imagem
contém dois retângulos, um ao lado do outro, que representam computadores.
Dentro do primeiro retângulo, está o objeto A, que realiza uma invocação
remota para o objeto B, que está no segundo retângulo. Este segundo retângulo
possui a ilustração dos demais objetos que realizam invocações locais.

Em continuidade, para que um método local possa ser acessado de forma


remota, é necessário que ele possua uma referência remota. Essa referência
remota permite que objetos em outros computadores possam acessar aquele
objeto pela rede de dados. Além disso, os métodos disponíveis no objeto
também são caracterizados como remotos, permitindo que alguns métodos
possam ser acessados de forma remota e que alguns somente são acessados de
forma local.

Na implementação RMI do Java, as interfaces remotas são definidas da mesma


forma que qualquer outra interface Java. Essas interfaces possuem a capacidade

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&cd… 6/30
11/20/22, 1:11 PM Ead.br

de serem interfaces remotas a partir do uso do comando “extends Remote” na


definição da classe. Tanto o CORBA (
Common Object Request Broker Architecture
)
como a linguagem Java suportam herança múltipla de interfaces, isto é, uma
interface pode estender uma ou mais interfaces.

Para complementar, a figura a seguir ilustra os principais componentes que


fazem parte de uma arquitetura RMI. No lado esquerdo da figura temos um
cliente e no lado direito temos um servidor. Tanto no cliente quanto no servidor
dos dados deve haver o objeto que se deseja acessar (servidor) e o objeto que
está fazendo a invocação remota do método (cliente). Após a intenção do objeto
em acessar um recurso remoto, é necessário que haja uma interface, também
chamada de stub, que é usada para permitir a interação entre os objetos de
forma remota. Após isso, a requisição é enviada para o gerenciador de
referências remotas que atribui ou resgata a referência remota daquele objeto.
Por fim, a requisição é enviada pela rede de dados e recebida no outro lado.

Figura 3.2 - Arquitetura de aplicações RMI

Fonte: Elaborada pelo autor.

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&cd… 7/30
11/20/22, 1:11 PM Ead.br

#PraCegoVer:
Ilustra a arquitetura de aplicações RMI. A imagem contém na sua
base, o desenho de uma nuvem com a inscrição Rede de comunicação RMI. Esta
nuvem aponta para dois grandes quadros, representando o cliente e o servidor.
Destro destes dois quadros, existe objeto, interface e gerenciador de referências
remotas.

A seguir você vai aprender um pouco mais sobre a implementação de sistemas


distribuídos que usam o RMI e a linguagem Java.

Implementação
Em nível de implementação, há mais alguns conceitos que precisam ser
entendidos: stub e skeleton. O stub é um objeto que atua como um gateway no
lado do cliente. O stub é responsável por rotear todas as requisições do lado do
cliente e por representar o objeto remoto também no lado do cliente. Quando o
cliente invoca um método ao stub, acontece o seguinte:

1. É iniciada uma conexão com a máquina virtual do java (JVM);


2. Os parâmetros são transferidos para a JVM (marshals);
3. O cliente aguarda pelo resultado;
4. O resultado é lido (unmarshals) e o valor de retorno ou a exceção é
retornada ao chamado do método.

Já no lado do servidor temos o skeleton, operando desta maneira:

1. Lê os parâmetros para o método remoto invocado no servidor;


2. Chama o método desejado no objeto especificado;
3. Escreve e transmite (marshals) o resultado ao chamador do método.

Na próxima seção você vai aprender um pouco mais sobre a arquitetura peer-
to-peer e na seção seguinte vamos aplicar os conceitos aprendidos para
implementar uma chamada remota de método usando RMI.

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&cd… 8/30
11/20/22, 1:11 PM Ead.br

praticar
Vamos Praticar
Nos sistemas distribuídos é necessário haver comunicação entre os elementos que
compõem o sistema distribuído. Para permitir essa comunicação, é necessário que os
elementos utilizem protocolos conhecidos de comunicação. Dado que o RMI é um
protocolo para comunicação em sistemas distribuídos, o RMI possui uma abstração a
mais quando comparada ao padrão de comunicação por troca de mensagens comum,
essa abstração a mais é:

a)
Enviar mensagens via UDP.
b)
Enviar mensagens via TCP.
c)
Fazer uso de sockets.
d)
Poder acessar um objeto do servidor.
e)
Estabelecer comunicação por troca de mensagens de forma manual.

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&cd… 9/30
11/20/22, 1:11 PM Ead.br

Arquitetura Peer-to-
Peer

Um paradigma de construção de sistemas e de aplicativos distribuídos é o peer-


to-peer, tendo como seu principal concorrente o modelo cliente-servidor, este
último usa uma arquitetura centralizada. Os sistemas peer-to-peer são
formados a partir da colaboração de diversos computadores em uma rede,
geralmente a internet.

A internet foi um grande impulsionador para a arquitetura peer-to-peer,


tornando-a útil para a comunicação descentralizada e incluindo milhões de
computadores e recursos compartilhados.

Como consequência do uso da arquitetura peer-to-peer há a adição de


complexidade no gerenciamento e distribuição dos objetos de dados em
diversos computadores. Gerenciar essa distribuição e o controle de acesso é
uma tarefa complexa. Além disso, deve-se realizar o balanceamento de carga de
trabalho entre os computadores de forma que garanta a disponibilidade da rede
sem sobrecarregar alguns nós.

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&c… 10/30
11/20/22, 1:11 PM Ead.br

Os sistemas peer-to-peer geralmente são usados para compartilhamento de


arquivos, cache de páginas web, vídeos e músicas, distribuição de informações e
outros serviços que abrangem compartilhamento de recursos com milhares ou
milhões de computadores por uma grande rede.

Nas seções seguintes vamos entender como funciona o modelo peer-to-peer e


como é feita a comunicação entre entidades distribuídas, que não usam a
arquitetura cliente-servidor.

Modelo Peer-to-peer
O principal objetivo dos sistemas peer-to-peer é prover o compartilhamento de
recursos em grande escala e suportar serviços e aplicativos distribuídos, esse
tipo de sistema permite abstrair a necessidade de servidores centralizados e a
infraestrutura necessária para manter os servidores centralizados ativos.

Além disso, os sistemas peer-to-peer utilizam os recursos disponíveis nos


computadores pessoais dos seus usuários, esses computadores estão cada vez
mais acessíveis para toda a população, tornando a rede peer-to-peer bastante
promissora para ser escalável com a evolução da humanidade. Esse conceito
está cada vez mais evidente, dado que os servidores estão chegando ao seu
máximo em termos de velocidade de processamento, é necessário que haja
estratégias para aumentar o poder de processamento e armazenamento sem
depender unicamente de uma máquina servidora.

A figura a seguir ilustra a composição de uma rede peer-to-peer convencional.


Perceba que cada computador é um nó na rede e cada nó pode se comunicar
com qualquer outro nó de forma direta, não há uma entidade centralizando
para gerenciamento da rede, ela é autogerenciada.

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&cd… 11/30
11/20/22, 1:11 PM Ead.br

Figura 3.3 - Exemplo de arquitetura peer-to-peer

Fonte: Elaborada pelo autor.


#PraCegoVer:
Ilustra um Exemplo de arquitetura peer-to-peer. A imagem
contém 5 retângulos interconectados, todos com todos, cada um representando
um computador, também chamado de nó.

A partir disso, surgiram os conceitos de computação na nuvem e


posteriormente a internet das coisas. Em complemento, a popularização das
redes de banda larga contribuiu de forma significativa no avanço dos sistemas
peer-to-peer, atualmente é possível ter conexões de mais de 100 MB em uma
residência comum, fato que em alguns poucos anos atrás se limitava a uma
internet de banda larga de menos de 1 MB.

Nos sistemas que usam a arquitetura cliente-servidor as informações ficam


armazenadas em um único computador servidor ou em um pequeno grupo de
servidores com alto acoplamento. Nesse tipo de sistema são exigidas poucas
decisões acerca da distribuição dos recursos nas máquinas, porém a
escalabilidade do sistema é reduzida pelo alto acoplamento e dependência do
pequeno conjunto de servidores. A limitação se dá principalmente pelo
hardware dos servidores e da largura de banda da rede centralizada.

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&c… 12/30
11/20/22, 1:11 PM Ead.br

Em contraste, os sistemas peer-to-peer utilizam uma abordagem mais


distribuída, sendo mais indicados para alguns tipos de aplicações,
principalmente as que precisam de alto poder de computação,
compartilhamento de recursos e escalabilidade.

reflita
Reflita
Você consegue visualizar outro
padrão/arquitetura de comunicação
diferente do cliente-servidor e do peer-
to-peer? Como seria a comunicação
nessa nova visão de arquitetura? Quais
os benefícios ela trará para os sistemas
atuais? Como se diferencia das
arquiteturas convencionais cliente-
servidor e peer-to-peer? Reflita sobre
esses questionamentos!

Fonte: Elaborado pelo autor.

Podemos definir que, em geral, os sistemas peer-to-peer possuem as seguintes


características (COULOURIS, 2013, p. 425):

Cada usuário deve contribuir com outros usuários, ajudando o sistema;


Os nós em um sistema peer-to-peer possuem as mesmas capacidades
e responsabilidades funcionais;
O funcionamento do sistema não depende de sistemas centralizados;

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&c… 13/30
11/20/22, 1:11 PM Ead.br

Eles podem ser projetados de modo a oferecer um grau limitado de


anonimato para os provedores e usuários dos recursos;
Algoritmo para distribuição dos dados em diversos computadores,
equilibrando a carga de trabalho e garantindo a disponibilidade sem
adicionar sobrecargas em pontos específicos.

A seguir vamos discutir sobre os procedimentos usados para permitir a


comunicação em grupos de computadores usando a arquitetura peer-to-peer.

Comunicação em Grupo
Os protocolos de comunicação em grupo fornecem as regras que devem ser
seguidas para que haja comunicação entre os elementos de uma rede peer-to-
peer. Os protocolos mais conhecidos são: BitTorrent, Gnutella e Gnutella2. Por
ser o mais conhecido, vamos descrever em detalhes como funciona o BitTorrent.

O BitTorrent foi criado por Bram Cohen no ano de 2001. Durante a concepção
desse protocolo, somente havia comunicação entre dois computadores na rede.
Estima-se que o tráfego de rede mundial somente dos dados que usam o
BitTorrent corresponde a aproximadamente 35% de todo o tráfego da internet.

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&c… 14/30
11/20/22, 1:11 PM Ead.br

saiba
mais
Saiba mais
Há um aplicativo que usa o protocolo
BitTorrent que também se chama BitTorrent, é
um dos aplicativos mais usados no mundo. O
aplicativo possui diversas funcionalidades para
compartilhamento de arquivos e
gerenciamento do tráfego da rede. Para saber
mais sobre este aplicativo, consulte o site
oficial disponíve.

ACESSAR

Em sequência, precisamos definir alguns conceitos que são usados no


BitTorrent antes de prosseguir com a explicação do protocolo:

Bloco (block): é um pedaço de um arquivo. Quando um arquivo é


compartilhado usando o BitTorrent, ele é quebrado em diversos
pedaços menores, chamados de blocos. Geralmente um bloco possui
250 kb de tamanho, mas pode variar de acordo com o arquivo que está
sendo compartilhado. Quando um arquivo maior é quebrado em
pedaços menores, há facilidade no armazenamento e distribuição,
usando menos recursos da rede de cada nó.
Cliente BitTorrent (client): é o software que é usado para download e
upload de arquivos na rede.
Sanguessuga (leech ou leecher): é o usuário que está realizando
download de algum arquivo, mas que não está fazendo nenhum upload

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&c… 15/30
11/20/22, 1:11 PM Ead.br

para a rede, ou seja, somente está usando recursos da rede sem


compartilhar.
Peer: um grupo de usuários que estão fazendo o download do mesmo
arquivo.
Re-seed: é a ação de colocar um arquivo de volta na rede, esse arquivo
não está mais disponível e precisa ser reinserido na rede para que
outros usuários possam acessá-lo.
Seeder: Um computador da rede que está fornecendo arquivos para
outros usuários pela rede.

Para entender o modo de operação de uma comunicação peer-to-peer, vamos a


um resumo dos principais passos:

1. Um usuário entra na rede e quer compartilhar um arquivo;


2. O usuário quebra o arquivo a ser compartilhado em diversos pedaços
menores (os pedaços podem variar de 64 kb até 16 MB);
3. Um interessado no arquivo baixa um arquivo .torrent que contém a
descrição dos endereços de computadores que podem fornecer o
arquivo;
4. O interessado no arquivo estabelece uma conexão direta com os
computadores que possuem o arquivo desejado. O requisitante do
arquivo pode abrir diversas conexões para fazer o download de
diversos blocos de forma simultânea.

praticar
Vamos Praticar
https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&c… 16/30
11/20/22, 1:11 PM Ead.br

Os sistemas distribuídos atuais geralmente implementam uma destas duas


arquiteturas: cliente-servidor ou peer-to-peer. Cada arquitetura citada anteriormente
possui vantagens e desvantagens, sendo mais ou menos indicada a partir do contexto
e funcionalidades do sistema distribuído. A partir disso, qual a principal diferença
entre o modelo peer-to-peer e o modelo cliente-servidor?

a)
O peer-to-peer possui entidades centralizadas para gerenciar os recursos.
b)
O cliente-servidor permite que os elementos da rede se comuniquem de
forma direta.
c)
O peer-to-peer permite que cada computador da rede acesse diretamente
qualquer outro computador da rede.
d)
O cliente-servidor exige o uso de servidores intermediários entre a
comunicação dos clientes.
e)
O peer-to-peer necessita de, pelo menos, 10 elementos para constituir uma
rede.

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&c… 17/30
11/20/22, 1:11 PM Ead.br

Implementação de
Projeto Prático 1

Nesta seção vamos implementar um sistema que possui um método no lado do


servidor que soma números. Esse método será criado e então invocado por um
cliente que deseja acessar o serviço de soma provido pelo servidor.

Primeiro, é necessário criar a interface remota, essa interface vai indicar o que
os objetos remotos podem acessar nesse objeto.

Código para criar a interface remota:

import java.rmi.*;

public interface Somador extends Remote{

public int soma(int num1, int num2) throws RemoteException;

Note que a interface acima estende da interface Remote, usada para indicar que
esse método será acessado de forma remota. Após isso, vamos implementar a

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&c… 18/30
11/20/22, 1:11 PM Ead.br

interface criada.

Para criar a classe que implementa a interface criada:

import java.rmi.*;

import java.rmi.server.*;

public class SomadorRemoto extends UnicastRemoteObject


implements Somador{

SomadorRemoto() throws RemoteException{

super();

public int soma (int num1, int num2) {

return num1+num2;

}}

A seguir, é necessário abrir o terminal de comandos do Windows, Linux ou Mac


para compilar o código gerado usando o compilador próprio do Java RMI. A
ferramenta rmic invoca o compilador RMI e cria os objetos necessários de forma
automática, para isso, use o comando a seguir:

rmic SomadorRemoto

Após isso, é necessário iniciar o serviço do RMI passando a porta como


parâmetro. Se não for passada a porta especificada, é usada a porta padrão do
sistema para RMI. Em nosso exemplo, vamos iniciar na portal local 8000.

rmiregistry 8000

Na sequência, é necessário criar a forma de acesso ao serviço no servidor


criado. Vamos usar os comandos a seguir:

import java.rmi.*;

import java.rmi.registry.*;

public class Servidor{

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&c… 19/30
11/20/22, 1:11 PM Ead.br

public static void main(String args[]){

try{

Somador stub = new SomadorRemoto();

Naming.rebind("rmi://localhost:8000/soma", stub);

}catch(Exception e){System.out.println(e);}

}  }

Note que foi atribuído o elemento criado stub para ser acessado pela URL
rmi://localhost:8000/soma, na porta 8000. Agora vamos criar a classe cliente,
responsável por acessar o serviço de soma no servidor.

import java.rmi.*;

public class Cliente{

public static void main(String args[]){

try{

Somador stub =
(Somador)Naming.lookup("rmi://localhost:8000/soma");

System.out.println(stub.soma(34,4));

}catch(Exception e){}

}  }

Note que a URL passada no método Naming.lookup() deve ser o mesmo


especificado no servidor criado. Por fim, é necessário compilar e executar as
classes Java criadas:

javac Servidor.java
java Servidor
javac Cliente.java (abra uma nova aba para executar o do cliente)
java Cliente

O valor retornado pela execução do programa Cliente deve ser a soma dos
números, ou seja, 38.

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&c… 20/30
11/20/22, 1:11 PM Ead.br

praticar
Vamos Praticar
O RMI é o protocolo que permite a invocação remota de métodos de forma facilitada,
a partir do código-fonte. A implementação RMI do Java possui diversos métodos que
permitem a manipulação dos recursos em um sistema que usa RMI. Diante disso, para
que serve o método Naming.rebind() do RMI Java?

a)
Converter uma URL em um objeto local.
b)
Atribuir um nome a um objeto local.
c)
Finalizar uma conexão com o servidor remoto.
d)
Criar uma URL para acessar todos os recursos do servidor.
e)
Associar uma URL a um objeto do servidor RMI.

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&c… 21/30
11/20/22, 1:11 PM Ead.br

Implementação de
Projeto Prático 2

Em complemento ao nosso projeto prático anterior, vamos adicionar mais três


funcionalidades ao nosso projeto: a subtração, a multiplicação e a divisão de
números.

Primeiro vamos alterar o nome da nossa classe de SomadorRemoto para


CalculadoraRemota, dado que agora não teremos somente a operação de soma.
Agora vamos editar a nossa classe CalculadoraRemota para adicionar os outros
3 métodos que compõem a calculadora, como a seguir:

public class CalculadoraRemota extends UnicastRemoteObject


implements Somador{

CalculadoraRemota() throws RemoteException{

super();

public int somar (int num1, int num2) {

return num1+num2;

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&c… 22/30
11/20/22, 1:11 PM Ead.br

public int subtrair (int num1, int num2) {

return num1-num2;

public int multiplicar (int num1, int num2) {

return num1*num2;

public int dividir (int num1, int num2) {

return num1/num2;

} }

Na sequência, vamos definir as interfaces remotas:

public interface Calculadora extends Remote{

public int somar (int num1, int num2) throws


RemoteException;

public int subtrair (int num1, int num2) throws


RemoteException;

public int multiplicar (int num1, int num2) throws


RemoteException;

public int dividir (int num1, int num2) throws


RemoteException;

Após isso, é necessário especificar o relacionamento entre a URL para acessar o


serviço da calculadora, como a seguir:

public class Servidor{

public static void main(String args[]){

try{

Calculadora calculadora = new Calculadora();

Naming.rebind("rmi://localhost:8000/calculadora",
calculadora);

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&c… 23/30
11/20/22, 1:11 PM Ead.br

}catch(Exception e){System.out.println(e);}

}  }

Por fim, na classe cliente, devemos adicionar as chamadas ao objeto remoto


calculadora e aos métodos desejados.

public static void main(String args[]){

try{

Calculadora calculadora = (Calculadora)


Naming.lookup("rmi://localhost:8000/calculadora");

System.out.println(calculadora.somar(34,4));

System.out.println(calculadora.subtrair(34,4));

System.out.println(calculadora.multiplicar(10,4));

System.out.println(calculadora.dividir(40,4));

}catch(Exception e){}

}  }

Para compilar e executar as classes alteradas, use os comandos: javac


Servidor.java, java Servidor, javac Cliente.java (abra uma nova aba para executar
o do cliente) e java Cliente. Os resultados esperados ao executar a classe cliente
são: 38, 30, 40 e 10.

praticar
Vamos Praticar

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&c… 24/30
11/20/22, 1:11 PM Ead.br

A chamada de método remoto é usada para facilitar a programação de sistemas


distribuídos. Porém, para realizar a chamada dos métodos é necessário estabelecer
protocolos de comunicação e especificação de dados em todos os computadores da
rede que irão usar os recursos. Para criar métodos remotos, é necessário definir o
esqueleto dos métodos, chamados de:

a)
Classes.
b)
Javac.
c)
Calculadora.
d)
Interfaces.
e)
rmi://localhost:8000.

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&c… 25/30
11/20/22, 1:11 PM Ead.br

indicações
Material
Complementar

FILME

Gattaca
Ano:
1997
Comentário:
Esse filme vai auxiliar no entendimento dos
sistemas distribuídos usados para a internet das coisas,
permitindo a identificação de pessoas de diversas
formas, inclusive pela análise do DNA. A interação entre
os diversos sistemas distribuídos presentes no filme nos
dá uma visão futurística de como será o nosso cotidiano.
Para conhecer mais sobre o filme, acesse o trailer
disponível.

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&c… 26/30
11/20/22, 1:11 PM Ead.br

TRAILER

LIVRO

Criando Projetos com Arduino Para a


Internet das Coisas: Experimentos com
Aplicações do Mundo Real – Um Guia Para o
Entusiasta de Arduino ávido por Aprender
Adeel Javed
Editora:
Novatec
ISBN:
8575225448
Comentário:
Esse livro vai auxiliar no entendimento da
internet das coisas, a partir disso, você irá entender a
comunicação entre os diversos sistemas distribuídos que
podemos ter no nosso cotidiano. A internet das coisas
exige grande fluxo de dados entre os diversos sistemas
presentes no cotidiano das pessoas, tornando o
entendimento complexo do ponto de vista da integração
entre os diferentes sistemas, sendo de grande
importância o entendimento presente no livro.

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&c… 27/30
11/20/22, 1:11 PM Ead.br

conclusão
Conclusão
Nesta unidade você aprendeu como funciona e como utilizar o protocolo RMI
usando a linguagem Java. Entendeu a arquitetura geral de sistemas que usam o
protocolo RMI bem como sua implementação. Você descobriu que há sistemas
não centralizados e como ocorre a comunicação entre estes sistemas com a
arquitetura peer-to-peer. Para praticar o que aprendeu, mostramos dois
projetos práticos, descrevendo passo a passo como deve ser feita a
implementação de um sistema distribuído. Implementamos diversos métodos
de uma calculadora para efetuar a soma, subtração, multiplicação e divisão de
números a partir de uma chamada remota usando o RMI de forma local.
Implementamos o cliente e o servidor da calculadora.

referências
Referências
Bibliográficas
COULOURIS, G.
Sistemas Distribuídos
: Conceitos e Projeto [recurso eletrônico,
Minha Biblioteca]. São Paulo: Bookman, 2013.

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&c… 28/30
11/20/22, 1:11 PM Ead.br

JAVED, A.
Criando projetos com Arduino para a Internet das Coisas
-
Experimentos com aplicações do mundo real – Um guia para o entusiasta de
Arduino ávido por aprender. [S.l.]: Novatec, 2017.

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&c… 29/30
11/20/22, 1:11 PM Ead.br

https://student.ulife.com.br/ContentPlayer/Index?lc=5GnWtWmozPPWX7uSFEMZFg%3d%3d&l=1%2b%2fNkrYo1P%2fYER37whe3BQ%3d%3d&c… 30/30

Você também pode gostar