Java Remote Method Invocation Java RMI Mestrando Maurício Cristal Prof. Dr. Fernando Luís Dotti Prof. Dr. Celso Maciel da Costa Sumário • • • • • Introdução Arquitetura genérica Arquitetura RMI Exemplo - Counter Exercícios Introdução • Java RMI - arquitetura de objetos distribuídos entre JVMs remotas • Integra à linguagem Java o modelo de objetos distribuídos (APIs) • Disponível a partir da versão 1.1 do compilador JDK (Sun) Arquitetura genérica Implementação do Objeto Cliente Proxy Cliente Proxy Servidor Requisição (Broker) Arquitetura RMI Aplicação Javac Javac Cliente Servidor Rmic Rmic Stubs Esqueletos ORB RMI Responsável pelo transporte Transporte Java RMI - Modelo de objetos • Clientes: superclasse java.rmi.RemoteObject • Servidores: superclasse java.rmi.RemoteServer • Interfaces: superclasse java.rmi.Remote • Exceções: superclasse java.rmi.RemoteException Java RMI Requisição e resposta de serviços • Chamada síncrona • Chamadas assíncronas e deferidas não são suportadas Java RMI - Marshalling • Superclasse java.io.serializable • Métodos readObject e writeObject permitem a escrita dos parâmetros em stream de bytes • Permitem também a serialização de classes e objetos • Por segurança classes podem desabilitar a sua serialização Java RMI - IDL • Não define IDL • Interfaces são definidas em Java • Compiladas com o compilador rmic, gerando o stub e esqueleto interpretados • Utiliza-se o runtime java para executar os proxies Java RMI - Invocações • Sempre estáticas, não suporta invocações dinâmicas • Realizadas através dos proxies compilados com rmic Java RMI - Serviço de nomes • Superclasse java.rmi.Naming • Através de nomes recupera referências para objetos • Utiliza uma URL e porta TCP para cada servidor de nomes Java RMI - Serviço de nomes ContaBancária acct = new ContaBancáriaImpl(); String url = “rmi://java.sun.com/account”; //bind da url ao objeto remoto java.RMI.Naming.bind(url, acct); .............. acct = (ContaBancária) java.RMI.Naming.lookup(url); Java RMI - Serviço de nomes • Associações entre referências remotas e nomes são gerenciadas por um processo daemon denominado rmiregistry • Pode ser classificado como o servidor de nomes propriamente dito Java RMI Serviço de ciclo de vida • Determinado pela própria JVM • Objeto RMI é um objeto Java com funcionalidades de distribuição • Exemplo: operador new Java RMI - Outros serviços • • • • Eventos Transações Trader Não são definidos na arquitetura RMI Java RMI Interoperabilidade inter-ORBs • Objetos RMI trocam mensagens com objetos CORBA, através do protocolo IIOP • RMI-over-IIOP, compatibilidade adicionada na versão JDK 1.1.6 Interoperabilidade inter-ORB Arquitetura CORBA Arquitetura RMI IIOP Bibliografia • Orfali, Robert, Harkey, Dan. Client/server Programming with Java and CORBA. Second Edition; New York, NY: John Wiley and Sons Inc, 1998. 1022p. • Farley, Jim. Java Distributed Computing. The Java Series. California: O’Reilly Associates. 1998. • Java Remote Method Invocation Specification. • http://java.sun.com/products/rmi Java Remote Method Invocation Java RMI Mestrando Maurício Cristal Prof. Dr. Fernando Luís Dotti Prof. Dr. Celso Maciel da Costa