Baixe o app para aproveitar ainda mais
Prévia do material em texto
21/03/12 1 INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia 2. Tecnologias de programação em sistemas distribuídos 2.1 Programação baseada em troca de mensagens 2.2 Chamada de procedimentos remotos (RPC) 2.3 Invocação de métodos remotos (RMI) 2.4 Padronização para objetos distribuídos – Corba Tema da aula 21/03/12 2 INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia o PermiFr que a chamada a um procedimento remoto se assemelhe ao programador o máximo possível com a chamada a um procedimento convencional; o Tecnologia que foi descoberta por Birrell e Nelson em 1984 Introdução RPC INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia RPC • Dado que os procedimentos executam em máquinas diferentes, os seguintes aspectos devem ser levados em consideração: – A semânFca da passagem de parâmetros; – As máquinas podem falhar, causando problemas; 21/03/12 3 INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia • Dificuldade para transferências de Objetos entre processos remotos. • Obrigatoriedade na uFlização da Interface DefiniFon Language (IDL). Desvantagens do RPC INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia • As interfaces são especificadas num formato independente de linguagens: a IDL. Isto permite que muitos dos detalhes de implementação, como o formato das sequências de dados mulFmídia, a transparência de rede e as dependências de linguagens de programação, sejam escondidos da especificação da interface. RPC -‐ IDL 21/03/12 4 INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia • A função de um procedimento stub no RPC é semelhante à de um método proxy. Ele desempacota os argumentos presentes na mensagem de requisição e chama o procedimento de serviço correspondente e empacota os valores de retorno para a mensagem resposta; • O processo no servidor contém um despachante junto com o procedimento stub. Ele seleciona um procedimento stub de servidor, de acordo com o idenFficador de procedimento presente na mensagem de requisição; RPC – CaracterísAcas INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia RPC – Comunicação 21/03/12 5 INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia RPC – Implementação 1. O procedimento cliente chama localmente o stub cliente; 2. Stub cliente constrói a mensagem e chama o SO local; 3. O SO local envia a mensagem ao SO remoto; 4. O SO Remoto entrega a mensagem ao stub servidor; 5. O stub servidor desempacota os parâmetros e chama o procedimento servidor; 6. O servidor realiza o trabalho retornando o resultado ao stub; 7. O stub servidor empacota o resultado em uma mensagem e chama o SO local; 8. O SO do servidor envia a mensagem ao SO do cliente; 9. O SO do cliente entrega a mensagem ao stub cliente; 10. O stub cliente desempacota o resultado e o retorna ao cliente. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia RMI 21/03/12 6 INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia • UFlizado na Plataforma JAVA. • É uma implementação do RPC. • UFlizado para comunicação de um Objeto JAVA com outro. Chamada de método remota -‐ RMI INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia • Uma vez que um método ou serviço de um objeto Java é registrado como sendo remotamente acessível, um cliente pode pesquisar (“lookup”) esse serviço e receber uma referencia que permita ao cliente uFlizar esse serviço, isto é, chamar o método; • A sintaxe da chamada de um método é idênFca aquela de uma chamada para um método de outro objeto de um mesmo programa; • O programador não precisa se preocupar com a transmissão dos dados na rede. A RMI não exige que seja criado uma IDL, porque todo o código de rede é gerado por classes existentes no programa, além disso, o RMI por suportar apenas a plataforma Java não necessita de uma interface padrão. Introdução RMI 21/03/12 7 INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia • A camada de stub/skeleton oferece as interfaces que os objetos da aplicação usam para interagir entre si; • A camada de referência remota é o middleware entre a camada de stub/skeleton e o protocolo de transporte. É nesta camada que são criadas e gerenciadas as referências remotas aos objetos; • A camada do protocolo de transporte oferece o protocolo de dados binários que envia as solicitações aos objetos remotos pela rede. Arquitetura do RMI INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Exemplo 01 21/03/12 8 INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia o Implementação da Interface: o Importar o pacote rmi o Criar a interface com todos os métodos que serão acessados pelo usuário Implementação RMI import java.rmi.*;! public interface Calc extends Remote {! public int getSoma (int a, int b) throws RemoteException;! public int getSubtracao (int a, int b) throws RemoteException;! public int getMultiplicacao (int a, int b) throws RemoteException;! public double getDivisao (int a, int b) throws RemoteException;! }! INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia o Implementação do servidor: o Importar os pacotes o Montar o servidor Implementação RMI import java.rmi.*;! importjava.rmi.registry.*;! import java.rmi.server.*;! public class CalcServer extends UnicastRemoteObject implements Calc{ ! ! !public CalcServer() throws RemoteException{! super();! }! ! ! 21/03/12 9 INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia o Implementação do servidor: o Montar o servidor Implementação RMI public static void main(String[] args) {! !try {! LocateRegistry.createRegistry(2335);! ! CalcServer f = new CalcServer();! Naming.rebind("//localhost:2335/calc", f);! System.out.println("Servidor Fibonacci pronto.");! }! catch (RemoteException re) {! System.out.println(" Exception in " + re);! ! !}! catch (Exception e) {! e.printStackTrace();! }! }! ! ! INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia o Implementação do servidor: o Criar os métodos de acesso do cliente Implementação RMI public int getSoma(int a, int b) throws RemoteException{! System.out.println(" Calculando a soma de " + a + " + "+ b);! return a + b;! }! public int getSubtracao(int a, int b) throws RemoteException{! System.out.println(" Calculando a subtracao de " + a + " - "+ b);! return a - b;! }! public int getMultiplicacao(int a, int b) throws RemoteException{! System.out.println(" Calculando a multiplicacao de " + a + " * "+ b);! return a * b;! }! public double getDivisao(int a, int b) throws RemoteException{! System.out.println(" Calculando a divisao de " + a + " / "+ b);! return (double) a / b;! }! ! 21/03/12 10 INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia o Implementação do cliente: Implementação RMI public static void main(String args[]) {! Calc calculator; ! try {! calculator = (Calc) Naming.lookup("rmi://localhost:2335/calc"); ! int a = 3; // n da serie! int b = 4;! int f = calculator.getSoma(a,b); ! System.out.println(" A soma eh: " + f);! }! catch(MalformedURLException e) {! System.out.println( "nao eh um URI RMI valida");! }! catch(RemoteException re) {! System.err.println("Objeto Remoto tratou a execucao " + re);! }! catch(NotBoundException e) {! System.out.println( "Nao foi possivel achar o objeto remoto no servidor");! }! }! INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia • A interface pode ser modificada para ter uma interação melhor com o servidor; Arquitetura do RMI 21/03/12 11 INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia • Etapas: – Solicitar um Jframe – Colocar um JTextField – Colocar 16 jBumons – Posicionar todos os componentes da melhor forma Arquitetura do RMI INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia • Etapas: – Criar as seguintes variáveis globais: – No construtor da classe colocar: – Clicar em cada botão (menos o de igual) e mudar o texto e acionar o método com dois cliques: Arquitetura do RMI private String conta = "";! private Calc calculator;! calculator = (Calc) Naming.lookup(! "rmi://localhost:2335/calculadora");! conta = conta + "1";! jTextField1.setText(conta);! 21/03/12 12 INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia • Etapas: – No botão igual Arquitetura do RMI if(conta.contains("+")){! try {! String[] res = conta.split(" +");! jTextField1.setText(""+! calculator.getSoma(Integer.parseInt(res[0]), ! Integer.parseInt(res[2].trim())));! } catch (RemoteException ex) {! Logger.getLogger(GUI.class.getName()).log! (Level.SEVERE, null, ex);! }! }! INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia • Etapas: – No botão igual Arquitetura do RMI else if(conta.contains("-")){! try {! String[] res = conta.split(" - ");! jTextField1.setText(""+calculator.getSubtracao! (Integer.parseInt(res[0]), ! Integer.parseInt(res[1])));! } catch (RemoteException ex) {! Logger.getLogger(GUI.class.getName()).log! (Level.SEVERE, null, ex);! }! }! ! 21/03/12 13 INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia • Etapas: – No botão igual Arquitetura do RMI else if(conta.contains("x")){! try {! String[] res = conta.split(" x ");! jTextField1.setText(""+calculator.getMultiplicacao! (Integer.parseInt(res[0]), ! Integer.parseInt(res[1])));! } catch (RemoteException ex) {! Logger.getLogger(GUI.class.getName()).log! (Level.SEVERE, null, ex);! }! }! ! INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia • Etapas: – No botão igual Arquitetura do RMI else{! try {! String[] res = conta.split(" / ");! jTextField1.setText(""+calculator.getDivisao! (Integer.parseInt(res[0]), ! Integer.parseInt(res[1])));! } catch (RemoteException ex) {! Logger.getLogger(GUI.class.getName()).log! (Level.SEVERE, null, ex);! }! }! conta = "";! ! ! 21/03/12 14 INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Fim aula..... ricardoboaventura@iftm.edu.br
Compartilhar