Java RMI - Remote Method Invocation Programação com Objetos Distribuídos (C. Geyer) Java-RMI 1
Autores Autoria Cláudio Geyer Marcelo Castiglia Pereira Local Instituto de Informática UFRGS disciplinas: Programação Distribuída e Paralela (CIC e ECP) Programação com Objetos Distribuídos Versão atual V12.1 Mar/2013 Programação com Objetos Distribuídos (C. Geyer) Java-RMI 2
Súmula Súmula conceitos básicos de RMI lado servidor lado cliente exemplo Hello roteiro de desenvolvimento segurança pacote RMI Programação com Objetos Distribuídos (C. Geyer) Java-RMI 3
Bibliografia Bibliografia documentação JDK API geral: versão 7 (março 2012) http://docs.oracle.com/javase/7/docs/api/ RMI: -> pacotes e classes RMI Programação com Objetos Distribuídos (C. Geyer) Java-RMI 4
Bibliografia Bibliografia documentação JDK versão 1.5.0 http://java.sun.com/j2se/1.5.0/docs/guide/rmi/ index.html => http://docs.oracle.com/javase/1.5.0/docs/guide/ rmi/index.html inclui 3 tutoriais básico: programa Helllo World variações de socket objetos ativáveis Versão 7: Página não encontrada Programação com Objetos Distribuídos (C. Geyer) Java-RMI 5
Bibliografia Bibliografia tutorial Java da Sun Oracle: Exemplo mais complexo: servidor de execução http://docs.oracle.com/javase/tutorial/rmi/ index.html Exemplo Hello World Sun http://docs.oracle.com/javase/6/docs/ technotes/guides/rmi/hello/hello-world.html http://java.sun.com/docs/books/tutorial/rmi/ index.html em geral, esses endereços são independentes de versão Programação com Objetos Distribuídos (C. Geyer) Java-RMI 6
Bibliografia Bibliografia Farley, J. Distributed Java Curso Java RMI do jguru Orfali, R. et alli. Client/Server Programming with Java and Corba. 2 edition, Wiley, 1998. Cap. 13 - RMI versus CORBA/Java ORBs Programação com Objetos Distribuídos (C. Geyer) Java-RMI 7
Conceitos Básicos Programação com Objetos Distribuídos (C. Geyer) Java-RMI 8
Conceitos Básicos Conceitos básicos RMI - Remote Method Invocation chamada remota de método função/objetivo mecanismo que permite a chamada de métodos de objetos remotos (distribuídos) Programação com Objetos Distribuídos (C. Geyer) Java-RMI 9
Conceitos Básicos Conceitos básicos (cont.) Segue modelo cliente / servidor Aplicação RMI usualmente composta por 2 programas Cliente Servidor Programação com Objetos Distribuídos (C. Geyer) Java-RMI 10
Conceitos Básicos Conceitos básicos (cont.) Servidor típico Cria objetos remotos (RMI) Torna as referências desses objetos acessíveis aos clientes Espera por chamadas dos clientes Cliente típico Obtém referência a um (1) ou mais objetos remotos Realiza chamadas aos objetos remotos Programação com Objetos Distribuídos (C. Geyer) Java-RMI 11
Conceitos Básicos Arquitetura típica de RMI Programação com Objetos Distribuídos (C. Geyer) Java-RMI 12
Conceitos Básicos Conceitos básicos (cont.) oferecer comunicação entre objetos distribuídos de forma similar à comunicação entre objetos locais simplifica a programação de sistemas distribuídos características similares às de RPC (chamada remota de procedure) Programação com Objetos Distribuídos (C. Geyer) Java-RMI 13
Conceitos Básicos Conceitos básicos (cont.) tratamento automático/implícito da heterogeneidade entre máquinas cliente/servidor comunicação bidirecional argumentos de entrada valor de retorno comunicação síncrona chamador (cliente, emissor) fica bloqueado até retorno (void inclusive) do chamado (servidor, receptor) Programação com Objetos Distribuídos (C. Geyer) Java-RMI 14
Conceitos Básicos Outras características permite passagem de objetos carga automática de classes (programas) Permite mudança dinâmica do comportamento de programas Por exemplo, o cliente pode passar o código (classe) de um cálculo a ser realizado pelo servidor Ver exemplo no tutorial da Oracle Programação com Objetos Distribuídos (C. Geyer) Java-RMI 15
Conceitos Básicos Outras características atendimento multithreaded a chamadas concorrentes implica uso de sincronização conforme aplicação por exemplo, se os métodos acessam variáveis de instância em escrita -> exclusão mútua -> uso de synchronized Programação com Objetos Distribuídos (C. Geyer) Java-RMI 16
Conceitos Básicos Diferenças entre RPC e RMI RPC: chamada de uma procedure de um módulo/ processo o módulo/processo é implícito na chamada so há uma procedure com determinado nome no módulo registra-se a procedure e não o módulo procedure usa os dados (contexto) do módulo Programação com Objetos Distribuídos (C. Geyer) Java-RMI 17
Conceitos Básicos Diferenças entre RPC e RMI RMI: chamada de um método de um objeto o objeto é explícito na chamada vários objetos podem ter o mesmo método objetos tem dados (contexto) locais ou próprios registra-se objetos (e não os métodos) Programação com Objetos Distribuídos (C. Geyer) Java-RMI 18
Remote Method Invocation (RMI) Máquina Virtual Java #1 (Cliente) Máquina Virtual Java #2 (Servidor)... o.método () {...... }... chamada (... parâmetros...) retorna resultado objeto remoto método remoto () {...... } Programação com Objetos Distribuídos (C. Geyer) Java-RMI 19
Recursos Básicos Programação com Objetos Distribuídos (C. Geyer) Java-RMI 20
Recursos Básicos Recursos básicos localizar objetos remotos: obtenção de referências a objetos através de um servidor de nomes RMI: rmiregistry servidor registra seus objetos com nomes especiais cliente obtém referência a partir do nome especial Programação com Objetos Distribuídos (C. Geyer) Java-RMI 21
Recursos Básicos Recursos básicos comunicação entre objetos totalmente a cargo do RMI transparente ao programador similar à comunicação local quase... Programação com Objetos Distribuídos (C. Geyer) Java-RMI 22
Recursos Básicos Recursos básicos carga de classes de objetos passados pela rede tipos: argumentos, retorno, classe stub uso de servidores WEB protocolos HTTP, FTP,... Programação com Objetos Distribuídos (C. Geyer) Java-RMI 23
Comunicação entre os componentes Comunicação entre os componentes do sistema RMI RMI RMI Registry cliente RMI servidor Protocolo URL WEB server Protocolo URL WEB server Programação com Objetos Distribuídos (C. Geyer) Java-RMI 24
Passagem de Parâmetros e Resultados Passagem de Parâmetros e Resultados tipos primitivos por exemplo, int, boolean, double,... são passados por valor objetos remotos isto é, objetos que implementam a interface remota são passados como referências remotas apenas para permitir que o receptor possa chamar os métodos dos objetos remotos implicitamente na busca do servidor pelo cliente (inicialização) Programação com Objetos Distribuídos (C. Geyer) Java-RMI 25
Passagem de Parâmetros e Resultados Passagem de Parâmetros e Resultados (cont.) todos os outros objetos são serializados passados por valor isto é, uma cópia do objeto é transferida Programação com Objetos Distribuídos (C. Geyer) Java-RMI 26
Falhas Outras diferenças entre chamada local e remota diferentes tipos de falha podem ocorrer em um sistema distribuído afeta programação por exemplo, a falha pode atingir somente o servidor alguns métodos, como hashcode, equals, tostring, são sensíveis a contextos distribuídos Programação com Objetos Distribuídos (C. Geyer) Java-RMI 27
Camadas de Software do Sistema RMI caminho lógico Programa Cliente Programa Servidor Stub Camada de Referência Remota Camada de Transporte Internet Esqueleto Camada de Referência Remota Camada de Transporte Camadas de Software do Sistema RMI Programação com Objetos Distribuídos (C. Geyer) Java-RMI 28
Camadas de Software do Sistema RMI Camadas de software (implementação) Interface remota Stub Define os métodos de uma classe remota que podem ser chamados remotamente Classe derivada de uma classe remota (servidora) Implementa os métodos da interface remota Cliente faz a chamada ao stub Stub é responsável por redirecionar a chamada ao objeto remoto Cliente só pode chamar os métodos que estão na interface Programação com Objetos Distribuídos (C. Geyer) Java-RMI 29
Aspectos de Programação Programação com Objetos Distribuídos (C. Geyer) Java-RMI 30
Programação: servidor Aspectos básicos de programação O lado do servidor O lado cliente Exemplo Hello Passos para criação e execução Programação com Objetos Distribuídos (C. Geyer) Java-RMI 31
Programação: servidor Aspectos básicos de programação o lado do servidor uma interface remota uma classe que implementa a interface registro de objetos servidores no rmiregistry Programação com Objetos Distribuídos (C. Geyer) Java-RMI 32
Programação: servidor Aspectos básicos de programação o lado do servidor métodos remotos são especificados em uma interface remota que estende java.rmi.remote objetos servidores remotos são instâncias de classes que implementam a interface remota essas classes são definidas como subclasses de java.rmi.server.unicastremoteobj ect Programação com Objetos Distribuídos (C. Geyer) Java-RMI 33
O Lado do Servidor Aspectos básicos de programação o lado do servidor o programa servidor gerente (mestre) cria um (ao menos) um objeto remoto associa esse objeto a um nome simbólico e o adiciona ao rmiregistry o gerente pode ser a própria classe remota não recomendado em programas complexos Programação com Objetos Distribuídos (C. Geyer) Java-RMI 34
O Lado do Servidor Aspectos básicos de programação o lado do servidor métodos remotos e construtores de objetos remotos podem disparar RemoteExceptions elas devem ser declaradas e tratadas motivos: rede falha ou cai, máquinas do servidor ou do cliente sofrem um crash,... Programação com Objetos Distribuídos (C. Geyer) Java-RMI 35
Exemplo HelloWorld Aspectos básicos de programação exemplo aplicação HelloWorld em modo cliente/servidor servidor remoto um único método retorna um string Hello World cliente chama método acima Programação com Objetos Distribuídos (C. Geyer) Java-RMI 36
Exemplo hello: interface do servidor Exemplo Hello // todos os arqs em um pacote package hello; // importa pacote de classes RMI import java.rmi.remote; import java.rmi.remoteexception; // interface do objeto servidor public interface Hello extends Remote { // um único método sayhello public String sayhello()throws java.rmi.remoteexception; } Programação com Objetos Distribuídos (C. Geyer) Java-RMI 37
Exemplo Hello Exemplo hello: implementação do servidor package hello; import java.rmi.registry.registry; import java.rmi.registry.locateregistry; import java.rmi.remoteexception; import java.rmi.server.unicastremoteobject; // implementa a interface Hello // em versões anteriores era usual herdar da // classe RMI (UnicastRemoteObject) public class HelloImpl implements Hello { Programação com Objetos Distribuídos (C. Geyer) Java-RMI 38
Exemplo Hello Exemplo hello: implem. do servidor (cont.) // implementa o construtor public HelloImpl() throws RemoteException{ super(); // não obrigatório } // implementa o método sayhello public String sayhello() { return Hello, World! ; } Programação com Objetos Distribuídos (C. Geyer) Java-RMI 39
Exemplo Hello Exemplo hello: implem. do servidor (cont.) // método main da classe servidora // cria um objeto servidor Server obj = new Server(); // cria um objeto stub do servidor Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0); // associa o objeto stub do servidor a um nome no // registry Registry registry = LocateRegistry.getRegistry(); registry.bind("hello", stub); System.err.println("Server ready"); Programação com Objetos Distribuídos (C. Geyer) Java-RMI 40
Exemplo Hello Exemplo hello: implem. do servidor (cont.) // método main da classe servidora } catch (Exception e) { System.err.println("Server exception: " + e.tostring()); e.printstacktrace(); } } } Programação com Objetos Distribuídos (C. Geyer) Java-RMI 41
Programação: cliente Aspectos básicos de programação o lado do cliente conhecimento da interface remota acesso à interface remota do servidor em tempo de compilação localização de um (ao menos) objeto servidor no rmiregistry conhecimento do nome associado ao objeto chamadas remotas Programação com Objetos Distribuídos (C. Geyer) Java-RMI 42
O Lado do Cliente Aspectos básicos de programação o lado do cliente um cliente que queira utilizar classes de um servidor remoto deve estabelecer um gerenciador de segurança por exemplo, RMISecurityManager o cliente referencia o objeto remoto usando seu nome simbólico para procurá-lo no registro Programação com Objetos Distribuídos (C. Geyer) Java-RMI 43
O Lado do Cliente Aspectos básicos de programação o lado do cliente agora, o cliente pode chamar métodos de um objeto remoto da mesma maneira que ele chama métodos de objetos locais o cliente deve tratar as RemoteExceptions dos métodos remotos Programação com Objetos Distribuídos (C. Geyer) Java-RMI 44
Implementação de um Cliente RMI Exemplo hello: implementação do cliente package hello; import java.rmi.*; public class HelloClient { public static void main (String args[]) { System.setSecurityManager (new RMISecurityManager()); Programação com Objetos Distribuídos (C. Geyer) Java-RMI 45
Implementação de um Cliente RMI // obtem referência ao registry // busca referência ao stub com nome do servidor // realiza chamada ao servidor String host = (args.length < 1)? null : args[0]; try { Registry registry = LocateRegistry.getRegistry(host); Hello stub = (Hello) registry.lookup("hello"); String response = stub.sayhello(); System.out.println("response: " + response); } catch (Exception e) { System.err.println("Client exception: " + e.tostring()); e.printstacktrace(); } } } Programação com Objetos Distribuídos (C. Geyer) Java-RMI 46
Passos do Uso de RMI Passos para gerar e executar uma aplicação RMI 1) Escreva arquivos Java para interface remota classe que implementa a interface remota (servidor) classe que chama o método remoto (cliente) 2) Compile os arquivos.java com javac Atualmente gera todas as classes necessárias à execução Programação com Objetos Distribuídos (C. Geyer) Java-RMI 47
Passos do Uso de RMI Passos para gerar e executar uma aplicação RMI 3) Gere stubs e skeletons com o compilador RMI rmic: a partir da versão 1.x (com certeza 1.5 e 1.6) o uso do rmic (abaixo~) não é mais necessário simplesmente compilar com javac rmic < classe que implementa a interface remota> cuidados em caso de package chamar o rmic do diretório pai do pacote: pai do hello indicar todo o caminho da classe: hello.helloimpl indicar o diretório para o stub e skeleton por - d. : diretório do package Programação com Objetos Distribuídos (C. Geyer) Java-RMI 48
Passos do Uso de RMI Passos para gerar e executar uma aplicação RMI 4) Torne as classes disponíveis na rede 5) Inicie o registry daemon na máquina remota: se Unix (Solaris) rmiregistry & se Windows 95/98: start rmiregistry Programação com Objetos Distribuídos (C. Geyer) Java-RMI 49
Passos do Uso de RMI Passos para gerar e executar uma aplicação RMI 6 ) Inicie o servidor na máquina remota se o RMISecurityManager foi criado, é preciso indicar a política de controle de segurança as opções de políticas (sintaxe e semântica) são bastante ricas (e complexas) política totalmente aberta (cuidado) para testes: conteúdo de arquivo policy grant { // Allow everything for now permission java.security.allpermission; }; Programação com Objetos Distribuídos (C. Geyer) Java-RMI 50
Passos do Uso de RMI Passos para gerar e executar uma aplicação RMI 6 ) Inicie o servidor na máquina remota (cont.) o interpretador Java tem muitas opções inclusive quanto à segurança variações conforme versão do JDK exemplo de chamada: java -Djava.security.policy= \myhome\mysources\policy hello.helloimpl o arquivo \myhome\mysources\policy contem a política Programação com Objetos Distribuídos (C. Geyer) Java-RMI 51
Passos do Uso de RMI Passos para gerar e executar uma aplicação RMI 7) Inicie o programa cliente na máquina cliente java hello.helloapp Programação com Objetos Distribuídos (C. Geyer) Java-RMI 52
Usando RMI Bootstrap do Cliente e RMI Cliente Servidor Hello Client lookup(): onde está Hello? onde está Registry Stub envia a referência (stub) aqui está o stub sayhello() Hello HelloImpl_Stub.class HelloImpl_Skel.class HelloImpl.class Programação com Objetos Distribuídos (C. Geyer) Java-RMI 53
Aspectos Adicionais Segurança, Integridade Referencial, Programação com Objetos Distribuídos (C. Geyer) Java-RMI 54
Segurança do RMI Segurança do RMI Um programa (normalmente o cliente) que queira utilizar classes de uma máquina remota deve estabelecer um gerenciador de segurança, por exemplo: System.setSecurityManager (new RMISecurityManager()); Programação com Objetos Distribuídos (C. Geyer) Java-RMI 55
Segurança do RMI Segurança do RMI O RMISecurityManager não permite que classes remotas (entre outras) utilizem novas classes manipulem threads saiam da Máquina Virtual Java Outros gerenciadores de segurança construção por extensão do RMISecurityManager exemplo: implementar autenticação de chaves públicas. Programação com Objetos Distribuídos (C. Geyer) Java-RMI 56
Outros Aspectos Integridade referencial quando duas (ou mais) referências ao mesmo objeto (não remoto) são passadas em uma mesma chamada remota na máquina receptora, elas apontarão para a mesma (única) cópia do objeto Se em chamadas distintas Dois objetos no destino Programação com Objetos Distribuídos (C. Geyer) Java-RMI 57
Outros Aspectos Semântica de chamada RPC cada chamada é executada somente uma vez se a chamada falha (rede, servidor), há certeza de que a chamada foi executada ou uma única vez ou nenhuma Programação com Objetos Distribuídos (C. Geyer) Java-RMI 58
Extensões a RMI Extensões a RMI diversos trabalhos acadêmicos correção de deficiências de RMI questões cache replicação assincronismo sincronização distribuída chamada local criação de objetos remotos Programação com Objetos Distribuídos (C. Geyer) Java-RMI 59
Extensões a RMI Extensões a RMI ver resumos em http://gppd.inf.ufrgs.br/wiki/index.php/cmp167/ TrabalhosLeves1a2003s1 Página perdida Programação com Objetos Distribuídos (C. Geyer) Java-RMI 60
Contras Desvantagens de RMI Somente Java Pouco usado (ou ao menos poucos usos novos comerciais)? Futuro incerto? Desempenho Não web Evolução de WS Programação com Objetos Distribuídos (C. Geyer) Java-RMI 61
Resumo Resumo RMI permite cliente chamar métodos de objetos remotos em servidor Chamada de método (quase) usual Atendimento concorrente a múltiplas chamadas Carga automática de classes Obtenção de referências remotas por servidor de nomes Objetos argumentos passados por cópia Interface RMI Define métodos remotos Implementados por classe RMI Programação com Objetos Distribuídos (C. Geyer) Java-RMI 62
Pacote java.rmi Programação com Objetos Distribuídos (C. Geyer) Java-RMI 63
Pacote java.rmi Pacote java.rmi uso por clientes e servidores Classe Remote servidores com interface marcadora Classe Naming associação, desassociação e procura de objetos remotos Observação: Slides não atualizados desde versão 1.4 (?) Programação com Objetos Distribuídos (C. Geyer) Java-RMI 64
Pacote java.rmi Pacote java.rmi Classe RMISecurityManager testes de segurança em classes carregadas de máquinas remotas por exemplo, stubs de clientes Programação com Objetos Distribuídos (C. Geyer) Java-RMI 65
Pacote java.rmi Pacote java.rmi (cont.) Classe RemoteException estende java.lang.exception subclasses, por exemplo ConnectException AccessException NoSuchObjectException devem ser pegas num bloco catch ou declaradas em uma cláusula throws Programação com Objetos Distribuídos (C. Geyer) Java-RMI 66
Pacote java.rmi Pacote java.rmi.server necessitado por servidores apenas as classes mais importantes: RemoteObject estende java.lang.object métodos como equals(), tostring(), hashcode(), que fazem sentido para objetos remoto RemoteServer métodos para obter informações sobre clientes e para login Programação com Objetos Distribuídos (C. Geyer) Java-RMI 67
Pacote java.rmi Pacote java.rmi.server (cont.) as classes mais importantes: UnicastRemoteObject subclasse de RemoteServer vinda com o pacote usa sockets TCP para comunicação referências remotas não permanecem válidas após reinícios (falha - start) do servidor uma única cópia do objeto Programação com Objetos Distribuídos (C. Geyer) Java-RMI 68
Pacote java.rmi Pacote java.rmi.server Classe java.rmi.activation.activatable classe abstrata objetos remotos da classe são ativados somente quando chamados pode destruir-se quando achar conveniente Programação com Objetos Distribuídos (C. Geyer) Java-RMI 69
Interfaces de Registro Conceitos Um registro é um objeto remoto que mapeia nomes para objetos remotos. Um registro pode ser usado em uma máquina virtual com outras classes de servidores ou sozinho. Programação com Objetos Distribuídos (C. Geyer) Java-RMI 70
Interfaces de Registro Interfaces de Registro (cont.) para recuperação e registro de objetos através de um simples nome. Interface java.rmi.registry.registry classe java.rmi.registry.locateregistry Programação com Objetos Distribuídos (C. Geyer) Java-RMI 71
A interface Registry A interface Registry A interface java.rmi.registry.registry métodos para procura, associação, reassociação, desassociação e listagem do conteúdo de um registro. A classe java.rmi.naming usa a interface remota registry para o uso de nomes baseados em URL. Programação com Objetos Distribuídos (C. Geyer) Java-RMI 72
A interface Registry A interface Registry: package java.rmi.registry; public interface Registry extends java.rmi.remote { public static final int REGISTRY_PORT = 1099; public java.rmi.remote lookup(string name) throws java.rmi.remoteexception, java.rmi.notboundexception, java.rmi.accessexception; Programação com Objetos Distribuídos (C. Geyer) Java-RMI 73
A interface Registry public void bind(string name, java.rmi.remote obj) throws java.rmi.remoteexception, java.rmi.alreadyboundexception, java.rmi.accessexception; public void rebind(string name java.rmi.remote obj) throws java.rmi.remoteexception, java.rmi.accessexception; Programação com Objetos Distribuídos (C. Geyer) Java-RMI 74
A interface Registry public void unbind(string name) throws java.rmi.remoteexception, java.rmi.notboundexception, java.rmi.accessexception; } public String[] list() throws java.rmi.remoteexception, java.rmi.accessexception; Programação com Objetos Distribuídos (C. Geyer) Java-RMI 75
A interface Registry A interface Registry (cont.) REGISTRY_PORT é a porta default de registro lookup retorna o objeto remoto associado ao nome especificado o objeto remoto implementa um conjunto de interfaces remotas clientes podem juntar o objeto remoto à interface remota desejada. Programação com Objetos Distribuídos (C. Geyer) Java-RMI 76
A interface Registry A interface Registry (cont.) bind associa o nome ao objeto remoto obj. se o nome já está associado a um outro objeto, a exceção AlreadyBoundException é ativada. Rebind associa o nome ao objeto remoto obj. qualquer associação do nome feita anteriormente é descartada. Programação com Objetos Distribuídos (C. Geyer) Java-RMI 77
A interface Registry A interface Registry (cont.) unbind remove a associação entre o nome e o objeto remoto obj List Se o nome não está associado a nenhum objeto, a exceção NotBoundException é ativada. retorna um array de strings contendo uma lista dos nomes associados no registro. Programação com Objetos Distribuídos (C. Geyer) Java-RMI 78
A interface Registry A interface Registry (cont.) Clientes podem acessar o registro por interfaces LocateRegistry e Registry métodos da classe java.rmi.naming. Programação com Objetos Distribuídos (C. Geyer) Java-RMI 79
A interface Registry A interface Registry (cont.) Clientes X domínios bind, unbind e rebind apenas de clientes que estejam no mesmo domínio do servidor. Lookup pode ser feito de qualquer domínio. Programação com Objetos Distribuídos (C. Geyer) Java-RMI 80
A classe LocateRegistry A classe LocateRegistry java.rmi.registry.locateregistry métodos estáticos que retornam uma referência para o registro: no domínio atual numa porta específica do domínio atual num domínio específico numa determinada porta de um domínio específico Programação com Objetos Distribuídos (C. Geyer) Java-RMI 81
A classe LocateRegistry A classe LocateRegistry (cont.) createregistry cria e exporta um registro no domínio local na porta especificada. o registro implementa uma sintaxe de nome simples que associa o nome de um objeto remoto (uma string) a uma referência de um objeto remoto o nome e as associações do objeto remoto não são mantidas após a reinicialização do servidor. Programação com Objetos Distribuídos (C. Geyer) Java-RMI 82
A classe LocateRegistry A classe LocateRegistry (cont.) o que é retornado é o stub remoto para o registro com o domínio especificado e a informação da porta. nenhuma operação remota precisa ser executada para obter uma referência (stub) para qualquer registro em qualquer domínio. Programação com Objetos Distribuídos (C. Geyer) Java-RMI 83
A classe LocateRegistry package java.rmi.registry; public final class LocateRegistry { public static Registry getregistry() throws java.rmi.remoteexception; public static Registry getregistry(int port) throws java.rmi.remoteexception; public static Registry getregistry(string host) throws java.rmi.remoteexception, java.rmi.unknownhostexception; Programação com Objetos Distribuídos (C. Geyer) Java-RMI 84
A classe LocateRegistry public static Registry getregistry(string host, int port) throws java.rmi.remoteexception, java.rmi.unknownhostexception; } public static Registry createregistry(int port) throws java.rmi.remoteexception; Programação com Objetos Distribuídos (C. Geyer) Java-RMI 85
A interface RegistryHandler A interface RegistryHandler interface para implementações privadas. package java.rmi.registry; public interface RegistryHandler { Registry registrystub(string host, int port) throws java.rmi.remoteexception, java.rmi.unknownhostexception; Programação com Objetos Distribuídos (C. Geyer) Java-RMI 86
A interface RegistryHandler Registry registryimpl(int port) throws java.rmi.remoteexception; } Programação com Objetos Distribuídos (C. Geyer) Java-RMI 87
A interface RegistryHandler registrystub retorna uma referência para contatar um registro remoto no domínio e na porta especificados. registryimpl constrói e exporta um registro na porta especificada a porta deve ser diferente de zero. Programação com Objetos Distribuídos (C. Geyer) Java-RMI 88
Revisão RMI básico Revisão RMI básico o que é? Apropriado para que tipo de arquitetura de SDs? RMI X OO? RMI X heterogeneidade de hw e plataforma? RMI X direcionalidade da comunicação? RMI x sincronização (em TM)? Programação com Objetos Distribuídos (C. Geyer) Java-RMI 89
Revisão RMI básico Revisão RMI básico RMI X RPC? estados? quantos podem ser chamados? semântica do atendimento em chamadas concorrentes? transferência (passagem) de objetos carga de executáveis? Programação com Objetos Distribuídos (C. Geyer) Java-RMI 90
Revisão RMI básico Revisão RMI básico localização do objeto servidor: via? como? servidor? cliente? carga de classes de objetos transferidos? quais as formas (3) de passagem de argumentos? qual a relação entre falhas e RMI? RMI e certos métodos como equals? Programação com Objetos Distribuídos (C. Geyer) Java-RMI 91
Java RMI - Remote Method Invocation Programação com Objetos Distribuídos (C. Geyer) Java-RMI 92