Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0Y… 1/29
SISTEMAS DISTRIBUÍDOSSISTEMAS DISTRIBUÍDOS
CHAMADA REMOTA DECHAMADA REMOTA DE
MÉTODO (RMI)MÉTODO (RMI)
APLICADA NA PRÁTICAAPLICADA NA PRÁTICA
Autor: Dr. Sidartha Azevedo Lobo de Carvalho
Revisor : L izandro de Souza
IN IC IAR
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0Y… 2/29
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 �m,
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.
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0Y… 3/29
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, polimor�smo, dentre outros de
forma transparente. Para ajudar no entendimento, veja as de�niçõ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;
As chamadas remotas exibem o comportamento distribuído,
esclarecendo ao programador que aquilo é uma chamada remota.
Chamada deChamada de
Método RemotaMétodo Remota
RMIRMI
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0Y… 4/29
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
signi�cativamente mais rica do que na RPC.
Note que uma diferença signi�cativa 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 especi�ca atributos e interfaces de comunicação para o objeto.
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.
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0Y… 5/29
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 decodi�ca 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 con�ito de acessos.
Entretanto, visto que os dados do objeto somente podem ser acessados pelos
métodos de�nidos 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 �gura a seguir ilustra os conceitos de chamadas de procedimento de forma
local e remota. De acordo com a �gura, temos 6 objetos distintos, chamados
de: 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 �nal das requisições, F retorna o resultado para E, que
devolve para C, B e então retorna para A.
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0Y… 6/29
#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 de�nidas da
mesma forma que qualquer outra interface Java. Essas interfaces possuem a
capacidade de serem interfaces remotas a partir do uso do comando “extends
Remote” na de�nição da classe. Tanto o CORBA ( Common Object Request
Broker Architecture ) como a linguagem Java suportam herança múltiplade
interfaces, isto é, uma interface pode estender uma ou mais interfaces.
Para complementar, a �gura a seguir ilustra os principais componentes que
fazem parte de uma arquitetura RMI. No lado esquerdo da �gura temos um
Figura 3.1 - Invocação a métodos locais e remotos.
Fonte: Coulouris (2013, p. 207).
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0Y… 7/29
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 �m, a requisição é enviada pela rede de dados e
recebida no outro lado.
#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
Figura 3.2 - Arquitetura de aplicações RMI
Fonte: Elaborada pelo autor.
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0Y… 8/29
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 especi�cado;
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.
praticar
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0Y… 9/29
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.
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0… 10/29
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.
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
Arquitetura Peer-Arquitetura Peer-
to-Peerto-Peer
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0… 11/29
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 �gura 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.
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0… 12/29
#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 signi�cativa 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 �cam
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.
Figura 3.3 - Exemplo de arquitetura peer-to-peer
Fonte: Elaborada pelo autor.
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0…13/29
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.
Podemos de�nir 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;
Eles podem ser projetados de modo a oferecer um grau limitado de
anonimato para os provedores e usuários dos recursos;
reflita
Re�ita
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? Re�ita sobre esses
questionamentos!
Fonte: Elaborado pelo autor.
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0… 14/29
Algoritmo para distribuição dos dados em diversos computadores,
equilibrando a carga de trabalho e garantindo a disponibilidade sem
adicionar sobrecargas em pontos especí�cos.
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.
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0… 15/29
Em sequência, precisamos de�nir 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 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.
saibamais
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 o�cial disponíve.
ACESSAR
https://www.bittorrent.com/
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0… 16/29
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
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?
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0… 17/29
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.
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0… 18/29
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 interface criada.
Implementação deImplementação de
Projeto Prático 1Projeto Prático 1
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0… 19/29
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 especi�cada, é 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{
public static void main(String args[]){
try{
Somador stub = new SomadorRemoto();
Naming.rebind("rmi://localhost:8000/soma", stub);10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0… 20/29
}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
especi�cado no servidor criado. Por �m, é 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.
praticar
V P ti
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0… 21/29
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.
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0… 22/29
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;
}
public int subtrair (int num1, int num2) {
return num1-num2;
Implementação deImplementação de
Projeto Prático 2Projeto Prático 2
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0… 23/29
}
public int multiplicar (int num1, int num2) {
return num1*num2;
}
public int dividir (int num1, int num2) {
return num1/num2;
} }
Na sequência, vamos de�nir 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 especi�car 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);
}catch(Exception e){System.out.println(e);}
}  }
Por �m, na classe cliente, devemos adicionar as chamadas ao objeto remoto
calculadora e aos métodos desejados.
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0… 24/29
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
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 especi�cação de dados em todos os computadores da
rede que irão usar os recursos. Para criar métodos remotos, é necessário de�nir o
esqueleto dos métodos, chamados de:
a) Classes.
b) Javac.
c) Calculadora.
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0… 25/29
d) Interfaces.
e) rmi://localhost:8000.
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0… 26/29
indicações
Material
Complementar
FILME
Gattaca
Ano: 1997
Comentário: Esse �lme vai auxiliar no entendimento
dos sistemas distribuídos usados para a internet das
coisas, permitindo a identi�cação de pessoas de
diversas formas, inclusive pela análise do DNA. A
interação entre os diversos sistemas distribuídos
presentes no �lme nos dá uma visão futurística de
como será o nosso cotidiano.
Para conhecer mais sobre o �lme, acesse o trailer
disponível.
TRA ILER
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0… 27/29
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 �uxo 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.
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0… 28/29
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á�cas
COULOURIS, G. Sistemas Distribuídos : Conceitos e Projeto [recurso
eletrônico, Minha Biblioteca]. São Paulo: Bookman, 2013.
10/04/2024, 12:37 Ead.br
https://student.ulife.com.br/ContentPlayer/Index?lc=ctXyjqSn1b42iL40x1h2fQ%3d%3d&l=g9KdeQHLLJ8USVDKLRC9LQ%3d%3d&cd=L8uh0… 29/29
JAVED, A. Criando projetos com Arduino para a Internet das Coisas -
Experimentos com aplicações do mundo real – Um guia parao entusiasta de
Arduino ávido por aprender. [S.l.]: Novatec, 2017.

Mais conteúdos dessa disciplina