Baixe o app para aproveitar ainda mais
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.
Compartilhar