Buscar

SD UNI3

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 29 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 29 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 29 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 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
R e v i s o r : L i z a n d r o d e S o u z a
I N I C I A R
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 2/29
introduçãoIntroduçã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.
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 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.
Agora vamos ver um pouco das diferenças entre as duas abordagens, descritas por
Coulouris (2013, p. 204):
Chamada deChamada de
Método RemotaMétodo Remota
RMIRMI
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 4/29
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.
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
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 5/29
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.
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 6/29
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últipla de 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 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
Figura 3.1 - Invocação a métodos locais e remotos.
Fonte: Coulouris (2013, p. 207).
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 7/29
resgata a referência remota daquele objeto. Por �m, a requisição é enviada pela rede
de dados e recebida no outro lado.
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
Figura 3.2 - Arquitetura de aplicações RMI
Fonte: Elaborada pelo autor.
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 8/29
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.
praticarVamos 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.
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 9/29
b) Enviar mensagens via TCP.
c) Fazer uso de sockets.
d) Poder acessar um objeto do servidor.
Feedback: alternativa correta, pois usando as premissas do RMI é possível, de
forma transparente, acessar um objeto no servidor RMI.
e) Estabelecer comunicação por troca de mensagens de forma manual.
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 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 informações e
Arquitetura Peer-Arquitetura Peer-
to-Peerto-Peer
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 11/29
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.
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 12/29
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.
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
Figura 3.3 - Exemplo de arquitetura peer-to-peer
Fonte: Elaborada pelo autor.
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 13/29
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;
reflitaRe�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.
24/09/2020 Ead.brhttps://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 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.
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 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.
saibamaisSaiba 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/
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 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.
praticarVamos 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?
a) O peer-to-peer possui entidades centralizadas para gerenciar os recursos.
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 17/29
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.
Feedback: alternativa correta, pois o modelo peer-to-peer permite a comunicação
mútua entre os diversos clientes, principal diferença quando comparado ao modelo
cliente-servidor.
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.
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 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
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 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);  
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 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.
praticarVamos Praticar
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 21/29
VamosPraticar
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.
Feedback: alternativa incorreta, pois o objeto local é armazenado na variável local,
não necessitando de um método para isso.
c) Finalizar uma conexão com o servidor remoto.
Feedback: alternativa incorreta, pois a conexão com o servidor remoto é feita
usando o protocolo TCP ou UDP e sockets.
d) Criar uma URL para acessar todos os recursos do servidor.
Feedback: alternativa incorreta, pois a URL não é criada, ela é associada a um único
objeto do servidor, não a todos.
e) Associar uma URL a um objeto do servidor RMI.
Feedback: alternativa correta, poois a forma de usar o Naming.bind() é
Naming.bind(URLAcessarObjeto, objetoCompartilhado).
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 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) {
Implementação deImplementação de
Projeto Prático 2Projeto Prático 2
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 23/29
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 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);}  
}  }
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 24/29
Por �m, 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.
praticarVamos 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.
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 25/29
Feedback: alternativa incorreta, pois as classes especi�cam um objeto do mundo
real, de�nindo os atributos e ações que podem ser realizadas a partir do objeto
instanciado.
b) Javac.
Feedback: alternativa incorreta, pois o Javac é o compilador Java, usado para gerar
os arquivos .class a partir dos arquivos de código-fonte, os .java.
c) Calculadora.
Feedback: alternativa incorreta, pois  a calculadora foi o nome dado à classe Java,
podendo ser qualquer outro nome.
d) Interfaces.
Feedback: alternativa correta, pois as interfaces descrevem como o método deve
se comportar, informando os atributos de entrada e saída, sendo assim, de�nindo o
esqueleto dos métodos.
e) rmi://localhost:8000.
Feedback: alternativa incorreta, pois esse nome é o endereço do servidor,
especi�cando a URL e a porta a ser usada na comunicação.a justi�cativa.
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 26/29
indicações
Material
Complementar
F I L M E
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.
T R A I L E R
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 27/29
L I V R O
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.
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 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.
24/09/2020 Ead.br
https://anhembi.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 29/29
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.

Continue navegando