3. Objetos Distribuídos e Invocação Remota 3.1 Comunicação entre Objetos Distribuídos O modelo de objetos Objetos possuem conjuntos de dados e conjuntos de métodos; Interagem entre si por invocação de métodos; Um objeto acessa outros através de uma referência; Interface define métodos, argumentos, retorno e exceções; o Objeto implementa os métodos da interface; o Uma interface pode ser implementada por vários objetos; o Interfaces não possuem construtores; Ações: o É iniciada pela invocação de um método; o Destino executa e retorna resultado; o Ação pode alterar o estado do destino; o Invocação pode gerar outras invocações; o Ação é uma série de invocações encadeadas; Exceções: o Programa pode gerar condições não esperadas; o Erro Socket, arquivo, etc; o Métodos geram exceções; o Melhora identificação dos erros; o Pode ser tratada ou passada para outro método; Coleta de Lixo: é necessário liberar espaço ocupado pelos objetos; o Java: detecta objetos não referenciados; o Se não detecta, usuário deve fazer; Objetos distribuídos Os objetos de um sistema estão separados; o Diferentes processos ou computadores; Objetos clientes invocam métodos de objetos servidores; Se comunicam por RMI; Objetos servidores podem ser clientes de outros objetos; o Arquitetura de três camadas; Outras arquiteturas: replicação, mobilidade; Objetos somente são acessados por métodos; o Controle de segurança; o Controle de concorrência; o Suporte a heterogeneidade; O modelo de objetos distribuídos Objetos remotos aceitam chamadas remotas; Para realizar uma invocação é necessária uma referência ao objeto remoto; local C local E invocation invocation remote invocation B A local invocation remote invocation F D Um objeto remoto possui uma interface remota; o Especifica os métodos remotos; Referência a Objetos Remotos: o São passadas como parâmetro em RMI; o Identificam o objeto no sistema distribuído; 32 bits 32 bits Internet address port number 32 bits time 32 bits object number interface of remote object Interface Remota: o Apenas métodos da interface remota podem ser acessados remotamente; remote object remote interface { Data m1 m2 m3 implementation of methods m4 m5 m6 CORBA: interface remota definida em CORBA IDL; o Independente de linguagem; Java RMI: interface remota definida como interface Java; o Objeto remoto deve implementar interface Remote; o Um objeto pode implementar várias interfaces; Ações distribuídas: o Irá envolver diferentes computadores; o Referência remota precisa estar disponível; Coleta de lixo distribuída: o É uma invocação de coleta local com invocações remotas; Exceções: o Processo pode falhar durante uma invocação; o Usa timeouts; o CORBA IDL prove definição de exceções; Aspectos de projeto para RMI Protocolo Request-Reply pode garantir funcionamento com: o Retransmissão de request; o Filtro de duplicatas; o Retransmissão de resultados com histórico; A combinação destes mecanismos produz as semânticas RMI; Fault tolerance measures Retransmit request message Invocation semantics Re-execute procedure or retransmit reply No Duplicate filterin g Not applicable Yes No Re-execute procedure At-least-once Yes Yes Retransmit reply At-most-once Not applicable Maybe: o Não sabe se foi executado 1 ou 0 vezes; o Falha pode ocorrer antes ou depois da execução; Maybe At-least-once: o Se receber resposta, o método foi executado ao menos uma vez; o Retransmite requisições; o O método pode ser executado mais de uma vez; o Para operações idempotentes; At-most-once: o Se receber resposta, o método foi executado exatamente uma vez; o Se vier erro o método executou 0 ou 1 vez; o Para operações não idempotentes; Semânticas: o CORBA e Java RMI: at-most-once; o CORBA: maybe; o Sun RPC: at-least-once; Transparência: o RPC original não faz distinção de chamada local e remota; o Marshall e comunicação são escondidos da aplicação; o Retransmissão transparente; o Estas características estão no RMI; o RPC e RMI enfrentam problemas de rede; o Problemas de rede não são transparentes; o Latência da rede também não é transparente; Implementação RMI Cenário da invocação remota de métodos: server client object A proxy for B skeleton & dispatcher for B’s class Request remote object B Reply Communication Remote reference module module Communication module Remote reference module Módulo de Comunicação: o Executa protocolo Request-Reply; o o o o Usa message type, methodId e objectReference; Define semântica; Seleciona o dispatcher do Objeto; Passa uma referência local a partir da remota; Módulo de Referência Remota: o Cria os objetos remotos na primeira vez que são acessados; o Contém uma tabela de referências remotas; o Uma entrada para cada objeto remoto e cada Proxy; o Converte referência do Request ou Reply em referência local a um Proxy ou objeto remoto; o É chamado pelo RMI durante o Marshall; RMI Proxy: o Prove transparência ao cliente; o Faz Marshall e unMarshall; o Chama Send e Receive; o Um para cada objeto remoto; RMI Dispatcher: o Um para cada objeto remoto; o Recebe a requisição do módulo de comunicação; o MethodId escolhe o método correto; o Chama método do Skeleton; RMI Skeleton: o Faz unMarshall e chama o método do objeto remoto; o Aguarda resultado da execução; o Faz Marshall para o Reply; o Send para o Proxy; Geração Proxy, Dispatcher e Skeleton: o São gerados por um compilador de interface; o Orbix compila CORBA IDL para C; o Java RMI compila interface Java; Programa Servidor: o Contém dispatcher, Skeleton e a implementação; o Inicialização: rotina principal para criação dos primeiros objetos; o Outros objetos são criados a partir dos iniciais; o Inicialização é registrada no binder; Programa Cliente: o Contém os proxies; o Interfaces não têm construtores; o Métodos Factory: método que cria objetos; o Binder: o Mapeia as referências dos objetos remotos; o Cliente obtém referência a um objeto pelo binder; o Objeto remoto registra seus serviços no binder; o CORBA: NamingService; o Java: RMIregistry; Ativação: o Objetos remotos não precisam estar sempre na memória; o Podem ser ativados sob demanda por outro processo; o Objeto Ativo: pronto para receber invocação; o Objeto Passivo: pronto para ser ativado; Ativador: o Cria um objeto ativo a partir de um passivo; o Cria instância e inicializa variáveis com valor armazenado; o Registra objetos passivos; o Ativa objetos sob demanda; o Ativação é transparente; Persistência: o Objeto que pode ser ativado é chamado de Persistente; o Pode ser armazenado em um formato comum; o São gerenciados por Objetos de Gerência de Persistência; Objeto é persistente quando: o É referenciado por outro objeto persistente; o Deriva de classe que implementa persistência; Localização de Objetos: o Referência possui IP e Porta da localização do objeto; o Desta forma o objeto não pode mudar de local; o Um objeto pode estar em diferentes locais; o Neste caso, a referência não pode conter o endereço do objeto; o Cliente invoca com referência do objeto, porém outro endereço; o O serviço de localização encontra o objeto; o Contém uma tabela com a localização dos objetos; o Usa cache e broadcast para localização; Coleta de lixo distribuída Baseado em contagem de referência; Quando o proxy é criado uma referência é adicionada; Quando o proxy é fechado o servidor é avisado; Trabalha em conjunto com a coleta local; o Ex: addRef(B) e removeRef(B); addRef e removeRef são idempotentes; Suporta falhas do cliente: o Armazena referências por períodos de tempo; o Cliente é responsável por pedir novo período; o Tempo começa no addRef; o Termina quando expirar ou no removeRef;