RMI – Remote Method Invocation Mecanismo de Invocação de métodos em um sistema de objetos distribuídos; Exemplos: Java RMI Java RMI – IIOP Internet Inter-Orb Protocol Corba DCOM Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)([email protected]) RMI – Remote Method Invocation Mecanismo de Invocação de métodos para a linguagem Java; Suporta a invocação automática de objetos; Permite carregamento dinâmico de classes; Componentes: Linguagem de definição de interface: Java; Servidor de nomes: rmiregistry Compilador usado: rmic Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)([email protected]) RMI – Remote Method Invocation Stubs e Skeletons Objeto Cliente Objeto remoto stub skeleton os skeleton´s só são gerados pelo compilador java 1.4 e anterior, os superiores não geram. Os próprios stub´s fazem os dois papéis Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)([email protected]) RMI – Projeto e Compilação de aplicação remota Passos Definição da interface Implementação e compilação da interface Implementação e compilação do Cliente Geração dos Sutub´s pelo compilador Saídas Interface.java Server.java, server.class Client.java, client.class Server-skeleton.calss, client-sutb.class Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)([email protected]) RMI – Execução da Aplicação Remota Passos Inicialização do servidor de nomes Inicialização do servidor Servidor exporta interface Inicialização do cliente Cliente importa interface Comandos rmiregistry java server naming.rebind(serviço) java client naming.lookup(serviço) Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)([email protected]) RMI – Visão Geral serviço de nomes (rmiregistry) Obtenção de referência da interface Exportação de interface Interface remota objeto remoto objeto cliente Invocação de método remoto Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)([email protected]) RMI – Compilando rmic Gera os clientes-stubs e server-skeletons (java1.4) Cada classe que implementa uma interface remota. Exem: rmic HelloImpl (.class arquivo) Ele cria os arquivos HelloImpl_Skel.class (servidor – apenas java1.4) HelloImpl_Stub.class (Cliente (Cliente e Servidor)) Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)([email protected]) RMI – Passagem de parâmetro Objeto não remoto Deve implementar interface java.io.Serializable Objetos cujas instâncias podem ser copiadas entre espaço de endereçamento diferentes. Cópia passada por valor (como parâmetro ou valor de retorno) Objeto remoto Deve implementar interface java.rmi.Remote Objeto cujas instâncias podem ser usadas remotamente Referência do objeto é passado (como parâmetro ou valor de retorno) Corresponde ao seu stub Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)([email protected]) RMI – Interfaces e Classes RMI Interface Classes Remote Activatable RemoteObject IOException RemoteServer RemoteException InicastRemoteObject Implementação Extensão Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)([email protected]) RMI – Exemplo: Impressão de uma mensagem em um servidor Será criado : Interface: Servidor: ServidorInt.java Servidor.java Cliente: Cliente.java Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)([email protected]) RMI – Exemplo: Impressão de uma mensagem em um servidor Interface: ServidorInt.java import java.rmi.*; public interface ServidorInt extends Remote { void imprimeMensagem (String mensagem) throws RemoteException; } Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)([email protected]) RMI – Exemplo: Impressão de uma mensagem em um servidor Programa: Servidor.java import java.rmi.*; import java.remi.server.*; public class Servidor extends UnicastRemoteObject implements ServidorInt{ public Servidor() throws RemoteException{ super(); }; public void imprimeMensagem(String mensagem){ System.out.println(“Mensagem enviada é : ” + mensagem); } public sataic void main (String args[]){ try { Servidor s = new Servidor(); Naming.rebind (“servidor”, s); System.out.println(“Servidor resgistrado”); } catch (Exception e){ System.out.println(“Erro ” + e.getMessage()); e.printStactTrace(); } } } Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)([email protected]) RMI – Exemplo: Impressão de uma mensagem em um servidor Programa: Cliente.java import java.rmi.*; import java.io.*; public class Cliente implements Serializable{ public sataic void main (String args[]){ try { ServidorInt s = (Servidor) Naming.lookup(“servidor”); s.imprimeMensagem(“Oi pessoal”); } catch (Exception e){ System.out.println(“Erro :” + e.getMessage()); e.printStactTrace(); } } } Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)([email protected]) RMI – Exemplo: Impressão de uma mensagem em um servidor Processo de criação da aplicação Compilar os arquivos javac ServidorInt.java Servidor.java Cliente.java Geração do stub e skeleton -> (java1.4) rmic Servidor Ativação do serviço de nomes Gera as classes Servidor_Stub.class e Servidor_Skel.class Rmiregistry Ativação das aplicações java Servidor java Cliente Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)([email protected]) RMI – Coleta de Lixo (Garbage Collection) Processo de destruição automática de objetos não mais acessados por clientes; Baseado na contagem de referências ao objeto servidor Uma referência seria uma conexão estabelecida entre o cliente e o servidor O cliente adquire o leasing da referência por um período de tempo e deve renova-lo Se o servidor falha, deve-se renovar a referência. Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)([email protected]) RMI – Carregamento dinâmico de classes Baseado na anotação de classes durante a serialização. A anotação indica de onde conseguir as classes objeto cliente Servidor de Classes do cliente Classe MinhaClasse http://200.17.144.50:9000 objeto remoto http Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)([email protected]) RMI – Ativação de objeto Remoto Evita o consumo de CPU por objetos inativos Suporta referências persistentes de objetos ativador objeto cliente stub 3 Passa referência 1 4 2 ativa objeto ativo objeto inativo Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)([email protected]) RMI – Security Manager Todos os programas que usam RMI devem instalar um módulo de segurança para: Carregar objetos passados como parâmetros; Valores retornados ou exceções. Garantia de que o código carregado obedece à requisitos de segurança. RMISecurityManager Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)([email protected]) RMI – Exemplo: Impressão de uma mensagem em um servidor Programa: Cliente.java com Segurança import java.rmi.*; import java.io.*; public class Cliente implements Serializable{ public sataic void main (String args[]){ if (System.getSecurityManager() == null) { System.setSecurityManager( new RMISecurityManager() ); } try { ServidorInt s = (Servidor) Naming.lookup(“servidor”); s.imprimeMensagem(“Oi pessoal”); } catch (Exception e){ System.out.println(“Erro :” + e.getMessage()); e.printStactTrace(); } } } Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)([email protected]) RMI – Bibiografia http://java.sun.com Java Remote Method Specification na tutoriais. INvocation Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos (UFBA)([email protected])