Vous êtes sur la page 1sur 36

RMI JAVA

MIDDLEWARE

Aplicativos RMI, RPC e eventos Protocolo Requesio-Respostal Representao Externa dos Dados Sistemas Operacionais Camadas Middleware

RMI REMOTE METHOD INVOCATION

C E Invocao remota B Invocao local D F Invocao remota

RMI REMOTE METHOD INVOCATION

Maquina Local (Cliente)


SampleServer remoteObject; int s; s = remoteObject.sum(1,2);

Maquina Remota (Servidor)

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

System.out.println(s);

RMI REMOTE METHOD INVOCATION

RMI REMOTE METHOD INVOCATION

INTERFACE REMOTA

Objeto remoto

Data Interface remota m1

implementao dos mtodos

m2 m3

m4 m5 m6

RMI REMOTE METHOD INVOCATION

RMI JAVA - ETAPAS


Definio Interface Remota | Implementao dos mtodos remotos | Registro do objeto remoto | Construo do cliente
|

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

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; }

REGISTRO DO OBJETO REMOTO SERVIDOR


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

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); } } }

COMPILAR
|

Compilar: javac *.java


HelloInterface.java y Hello.java y HelloServer.java y HelloClient.java
y

rmic Hello
Hello_Stub.class y Hello_Skel.class
y

EXECUO
|

Cliente y HelloInterface.class y Hello_Stub.class y HelloClient.class Servidor y HelloInterface.class y Hello.class y HelloServer.class Executar servidor y rmiregistry y java HelloServer Executar cliente y java HelloClient

INTERFACE REMOTA
|

Precisa ser declarada pblica


y

public interface nomeInterface extends Remote

Precisa estender a interface java.rmi.Remote


y

Todos os mtodos devem ser declarados capazes de disparar uma exceo java.rmi.RemoteException
y

throws RemoteException

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

INTERFACE REMOTA
|

Cliente
Precisa conhecer a interface y No precisa conhecer a implementao
y

Servidor
Precisa conhecer a interface y Precisa conhecer a implementao
y

CLASSE REMOTA IMPLEMENTAO


Precisa implementar a interface remota | Deve estender a classe java.rmi.server.UnicastRemoteObject | Deve implementar os mtodos da interface remota
|

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; }

OBJETO REMOTO
Esta em um computador remoto | Pode-se invocar um mtodo remoto, passando-se parmetros e recebendo um retorno, por meio de mensagens | necessrio conhecer apenas a interface remota | Pode-se passar objetos como parmetros desde que sejam serializable
|

SERIALIZABLE OBJECT
Pode ser transformado numa sequncia de bits | Pode ser transmitido de um computador para outro | Serializao
| y |

Processo de gerar uma cadeia de bytes que representa o estado do objeto Processo de ler uma cadeia de bytes que contm um objeto serializado e recriar em memria um novo objeto com o mesmo estado do objeto que foi serializado

Deserializao
y

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

REGISTRO DO OBJETO REMOTO


|

O servio de registro roda no servidor


y

rmiregistry

|
|

necessrio registrar o objeto remoto no servidor


String url = "rmi://" + host + ":" + port + "/" + objectName;
|

A porta default 1099

Naming.rebind(url, object);

REGISTRO DO OBJETO REMOTO SERVIDOR


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

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); } } }

RMIC
|

A classe que implementa o objeto remoto deve ser compilada da maneira tradicional
y

javac Hello.java rmic Hello

Ento deve ser compilada com o rmic


y

Sero gerados
Hello_Stub.class y Hello_Skel.class
y

Stub precisa ser copiado para o cliente | Skel no mais necessrio com SDK superior a 1.1
|

SEGURANA
|

Pode ser necessrio alterar o esquema de segurana no cliente


System.setSecurityManager(new RMISecurityManager());

RESUMO DESENVOLVIMENTO RMI JAVA


|

Projetar e implementar os componentes da aplicao distribuda


Definio das interfaces remotas y Implementao dos objetos remotos y Implementao do servidor e clientes
y

Compilao dos cdigos-fontes


y y

Gerao das classes do servidor e cliente


|

javac rmic

Criao dos stubs (proxies)


|

RESUMO - EXECUO
|

Iniciar o binder para guardar os objetos remotos


y

rmiregistry

Iniciar o servidor | Iniciar os clientes


|

RMI JAVA CARACTERSTICAS


Linguagem especfica: Java | Orientada a Objetos | Suporta objetos como parmetros | Suporta Design Patterns | Segura
|

RMI JAVA VS INVOCAO LOCAL


|

Referncias a objetos Referncia a objeto local


y

Object objectName = new Object( );

Referncia a objeto remoto


y

objectName = (ObjectInterface) Naming.lookup(name);

RMI JAVA VS INVOCAO LOCAL


|

Semntica de invocao Invocao a mtodo local


Semntica: Exatamente uma vez y objetcName.method(paramters);
y

Invocao a mtodo remoto


Semntica: Pelo menos uma vez y try { objectName.method(parameters); } catch(Exception e){ .... }
y

RPC VS RMI JAVA


RPC Procedual Independente de linguagem Representao externa de dados XDR Tipos primitivos como parmetros Ponteiros devem ser manipulados explicitamente Sem mobilidade de cdigo RMI Java Orientada a Objetos Linguagem Java Serializao de objetos Objetos serializveis como parmetros Referncias para objetos remotos e locais so tratados automaticamente Mobilidade de cdigo (byte-code)

TPICOS AVANADOS
RMI sobre Secure Socket Layer (SSL) | Exportao byte-code usando HTTP | Performance
|

Deve ser usada para large-grain computation y Cada invocao a um mtodo remoto resulta em
y

Nova conexo TCP | Disparo de uma nova thread


|

RESUMO
|

Iniciar o servidor de registro


y

rmiregistry O servidor registra o objeto remoto com um nome no servidor de registro O cliente busca pelo objeto remoto no servidor de registro

Iniciar o servidor
y

Iniciar o cliente
y

Invocao remota
O cliente faz uma invocao que vai para a classe Stub y A classe Stub conversa com outra classe no servidor y A classe Stub retorna o resultado para o cliente
y

Vous aimerez peut-être aussi