Você está na página 1de 38

Faculdade Nova Roma

Sistemas Distribudos

Sistemas Distribudos

RMI (Remote Method Invocation)

Bruno Abreu
brunobla@gmail.com
1 RMI Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


RMI (Remote Method Invocation) est intimamente relacionado ao RPC (Remote Procedure Call), porm, dentro do universo Orientado a Objetos. Objeto chamando mtodo de objeto remoto. Detalhes de comunicao so escondidos dos usurios. Programao com interfaces para ambos (RMI e RPC).

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Interfaces Especifica um conjunto de servios e atributos ofertados por um mdulo para outros mdulos do sistema. Pode haver vrias implementaes para a mesma interface. Detalhes de implementao so ocultados; Em programas distribudos atributos no so fornecidos pelas interfaces. Ponteiros no podem ser passados como parmetros nem serem retornados como resposta nas chamadas a mdulos remotos.

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Interface Remota Especifica os servios que esto disponveis para serem invocados remotamente. Mtodos nas interfaces remotas podem passar objetos como argumentos e retorno de mtodos. Java RMI Caractersticas de comunicao remota foram inseridas na linguagem para tornar transparente as diferenas entre chamadas locais e remotas IDL Interface Definition Language: Utilizadas para permitir que objetos implementados em diferentes linguagens possam conversar remotamente.

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


IDDL CORBA

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Referncia de Objeto Remoto

RMI

Sexta-feira, 22 de Maio de 2012

OCATI ON I NVOCATI ON
Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Maquina Local (Cliente) Local (Cliente)
int s;

Maquina Remota (Servidor) Maquina Remota (Servidor)

SampleServer remoteObject; erver remoteObject;

oteObject.sum(1,2);

s = remoteObject.sum(1,2);

public int sum(int return a,int b) a +{ b; return a } + b; }


System.out.println(s);

public int sum(int a,int b)

out.println(s);

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

RM I REM OTE M ETH OD RMI Remote Method Invocation I NVOCATI ON


Sistemas Distribudos

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

RM I REM OTE M ETH OD RMI Remote Method Invocation I NVOCATI ON


Sistemas Distribudos

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation I NTERFACE REM OTA


Objeto remoto

Data Interface remota m1

implementao dos mtodos

m2 m3

m4 m5 m6

10

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation

11

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Etapas 1.Definio da interface remota; 2.Implementao dos mtodos remotos; 3.Registro do objeto remoto; 4.Construo do cliente.

12

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


1. Definio da Interface Remota
import java.rmi.*; public interface HelloInterface extends Remote { public String sayHello() throws RemoteException; }

13

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


2. Implementao do mtodo remoto
import java.rmi.*; import java.rmi.server.*; public class Hello extends UnicastRemoteObject implements HelloInterface { private String message; // Strings are serializable public String sayHello() throws RemoteException { return message; } public Hello (String msg) throws RemoteException { message = msg; } }

14

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


3. SERVIDOR: Registro do objeto remoto
class HelloServer { public static void main (String[] argv) { try { Naming.rebind("rmi://localhost/HelloServer", new Hello("Hello, world!")); } catch (Exception e) { } } }

15

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


4. Construo do Cliente
class HelloClient { public static void main (String[] args) { HelloInterface hello; String name = "rmi://localhost/HelloServer"; String text; try { hello = (HelloInterface)Naming.lookup(name); text = hello.sayHello(); System.out.println(text); } catch (Exception e) { System.out.println("HelloClient exception:+e); } } }
RMI Sexta-feira, 22 de Maio de 2012

16

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Compilar
Compilar: javac *.java HelloInterface.java Hello.java HelloServer.java HelloClient.java rmic Hello Hello_Stub.class Hello_Skel.class

17

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Execuo
Cliente HelloInterface.class Hello_Stub.class HelloClient.class Servidor HelloInterface.class Hello.class HelloServer.class Executar servidor rmiregistry java HelloServer Executar cliente java HelloClient
RMI Sexta-feira, 22 de Maio de 2012

18

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Interface Remota
Precisa ser declarada publica public interface nomeInterface Precisa estender a interface java.rmi.Remote extends Remote Todos os metodos devem ser declarados capazes de disparar uma excecao java.rmi.RemoteException throws RemoteException

19

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Interface Remota import java.rmi.*; public interface HelloInterface extends Remote { public String sayHello() throws RemoteException; }

20

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Interface Remota

Conhecer Cliente Servidor

Interface SIM SIM

Implementao NO SIM

21

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Classe Remota - Implementao Precisa implementar a interface remota Deve estender a classe java.rmi.server.UnicastRemoteObject Deve implementar os metodos da interface remota

22

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Mtodo Remoto - Implementao import java.rmi.*; import java.rmi.server.*; public class Hello extends UnicastRemoteObject implements HelloInterface { private String message; // Strings are serializable public String sayHello() throws RemoteException { return message; } public Hello (String msg) throws RemoteException { message = msg; } }
23 RMI Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Objeto Remoto Est em um computador remoto Pode-se invocar um metodo remoto, passando-se parametros e recebendo um retorno, por meio de mensagens E necessario conhecer apenas a interface remota Pode-se passar objetos como parametros desde que sejam serializable

24

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Serializable Object Pode ser transformado numa sequencia de bits Pode ser transmitido de um computador para outro Serializacao Processo de gerar uma cadeia de bytes que representa o estado do objeto Deserializacao Processo de ler uma cadeia de bytes que contem um objeto serializado e recriar em memoria um novo objeto com o mesmo estado do objeto que foi serializado

25

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Serializable Object Deve ser declarada public Precisa implementar a interface Serializable: implements Serializable Todos os campos precisam ser tipos primitivos ou objetos Serializable

26

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Registro do objeto remoto O servico de registro que deve executar na mquina virtual do servidor Rmiregistry E necessario registrar o objeto remoto no servidor identificando-o por um nome Naming.rebind(nome, object): Registra o identificador de umobjeto remoto pelo nome. Naming.bind(nome, object) : Levanta uma exceo caso o nome j estiver vinculado a um objeto remoto.
27 RMI Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Registro do objeto remoto class HelloServer { public static void main (String[] argv) { try { Naming.rebind("rmi://localhost/HelloServer", new Hello("Hello, world!")); } catch (Exception e) { }

28

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Cliente
class HelloClient { public static void main (String[] args) { HelloInterface hello; String name = "rmi://localhost/HelloServer"; String text; try { hello = (HelloInterface)Naming.lookup(name); text = hello.sayHello(); System.out.println(text); } catch (Exception e) { System.out.println("HelloClient exception:+e); } } }
29 RMI Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Cliente Remote lookup(nome) Permite recuperar a referncia a um objeto remoto que identificado por um nome.

30

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


RMIC A classe que implementa o objeto remoto deve ser compilada da maneira tradicional javac Hello.java Entao deve ser compilada com o rmic rmic Hello Serao gerados Hello_Stub.class Hello_Skel.class Stub precisa ser copiado para o cliente Skel nao e mais necessario com SDK superior a 1.1

31

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Resumo - Desenvolvimento Projetar e implementar os componentes da aplicacao distribuida Definicao das interfaces remotas Implementacao dos objetos remotos Implementacao do servidor e clientes Compilacao dos codigos-fontes Geracao das classes do servidor e cliente
javac

Criacao dos stubs (proxies)


rmic

32

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Resumo - Execuo

Iniciar o binder para guardar os objetos remotos rmiregistry Iniciar o servidor Iniciar os clientes

33

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


RMI - Caractersticas

Linguagem especifica: Java Orientada a Objetos Suporta objetos como parametros Suporta Design Patterns Segura

34

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Invocao Remota

Referencias a objetos Referencia a objeto local Object objectName = new Object( ); Referencia a objeto remoto objectName = (ObjectInterface) Naming.lookup(name);

35

RMI

Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


Invocao Remota

Semantica de invocacao Invocacao a metodo local Semantica: Exatamente uma vez objetcName.method(paramters); Invocacao a metodo remoto Semantica: Pelo menos uma vez try { objectName.method(parameters); } catch(Exception e){ .... }
36 RMI Sexta-feira, 22 de Maio de 2012

Faculdade Nova Roma

Sistemas Distribudos

RMI Remote Method Invocation


RESUMO
Iniciar o servidor de registro Rmiregistry Iniciar o servidor O servidor registra o objeto remoto com um nome no servidor de registro Iniciar o cliente O cliente busca pelo objeto remoto no servidor de registro Invocacao remota O cliente faz uma invocacao que vai para a classe Stub A classe Stub conversa com outra classe no servidor A classe Stub retorna o resultado para o cliente
RMI Sexta-feira, 22 de Maio de 2012

37

Faculdade Nova Roma

Sistemas Distribudos

Sistemas Distribudos

RMI Perguntas?

Bruno Abreu
brunobla@gmail.com
38 RMI Sexta-feira, 22 de Maio de 2012

Você também pode gostar