Você está na página 1de 16

Sistemas Distribudos

Java RMI

Sockets - reviso


  2

Uma porta de um canal de comunicao que permite a um processo executando num computador enviar/receber mensagens para/de outro processo. Usado para representar uma conexo entre um cliente e um servidor Interface entre o processo da aplicao e a camada de transporte Cada processo identificado por uma porta e um ip Principais tipos de Sockets:

stream sockets (TCP) datagram sockets (UDP)

Representao e Organizao de dados




Toda informao armazenada em um programa possui as seguintes caractersticas:


guardada em algum tipo de estrutura formada por uma sequncia de bytes transformada em bytes antes da transmisso remontada ao formato original depois da recepo Possui diferentes tipificaes ASCII Unicode Big-Endian (byte mais significativo vem primeiro) Little-endian

Os caracteres pode ser:


Inteiros:

Representao e Organizao de dados




Para suportar RMI (ou RPC) necessrio:


Que os argumentos sejam passados de uma mquina para outra de forma transparente; Antes de serem transmitidos os dados devem ser transformados em formatos primitivos de dados de acordo com um formato externo Durante a recepo, os dados primitivos so remontados para um formato aceito pela mquina O processo de montagem de dados para um formato aceito externamente chamado de Marshalling UnMarshalling o processo inverso, ou seja, a desmontagem do formato externo para um formato conhecido localmente pela mquina

 

Representao e Organizao de dados




Dois exemplos principais de formatos externos para representao de dados:


CORBA que possui uma representao de dados primitivos externos para troca de dados entre vrias linguagens de programao Objetos JAVA que possui uma mtodo para gerar sequncias de bytes em um formato comum externo para representar qualquer objeto simples ou conjunto de objetos que podem ser transmitidos em uma mensagem Devido a complexidade que envolve o processo de Marshalling e Unmarshalling, esta tarefa comumente desempenhada pelo middleware

Objetos Distribudos


Como um cliente invoca um mtodo em um objeto remoto?

A mensagem de invocao deve conter uma referncia ao objeto remoto que ter seu mtodo invocado Independncia dos detalhes dos protocolos de comunicao, SO e hardware

Prov transparncia de localizao

A Interface especifica os mtodos e variveis que podem ser acessados por outros mdulos de programa

Define os tipos de parmetros de entrada/sada e como passar os parmetros Esconde toda a lgica de informao, sendo acessado apenas pela Interface (impedindo acesso direto s variveis)  Pode-se alterar a lgica implementada, bastando manter a mesma Interface

Objetos Distribudos


Alocar objetos em processos distintos e executados no mesmo computador ou em computadores distintos que podem receber invocaes locais ou remotas: Locais: entre objetos do mesmo processo Remotas: entre objetos de diferentes processos (objetos remoto), atravs da Interface Remota

Java RMI
   

Remote Method Invocation Orientado objetos Comunicao remota Componentes Interface Remota - Especifica os mtodos de um objeto que
so disponveis para invocao remota por outros objetos

objetos por nome e permitir aos clientes descobrirem as referncias aos objetos remotos antes de fazer a invocao
8

Classe remota que implementa a interface RMIregistry - Usado pelos servidores para registrar seus Stubs e Skeletons

Java RMI
   

Tratar excees Servidor de Nomes Os mtodos remotos podem receber e retornar objetos Estes objetos devem implementar a interface Serializable

Fluxo RMI

Java RMI
 

O cliente chama o mtodo remoto usando um Stub O Stub ento envia uma mensagem para o Skeleton na mquina remota, contento os argumentos da chamada ao mtodo remoto O Skeleton empacota a resposta e envia ela de volta para o stub na mquina do cliente

Stubs e Skeletons
Cliente A B Stub Servidor B

(1) a1 (A) (6) B1_Stub (B Stub)

(2) B Skel (5)

(3) (4) b1 (B)

JVM 1

JVM 2

Exemplo: Calculadora com RMI




Interface: CalcInt.java

Estende java.rmi.Remote Declara um conjunto de mtodos remotos

Servidor: ServCalc.java Cliente: ClienteCalc.java

CalcInt.java
import java.rmi.*; public interface CalcInt extends Remote{ int somar(int x, int y) throws RemoteException; int subtrair(int x, int y) throws RemoteException; }

ServCalc.java
public class ServCalc extends UnicastRemoteObject implements CalcInt { public ServCalc() throws RemoteException { super(); RegistryImpl impl = new RegistryImpl(1099); } public int somar(int x, int y) { return x + y; } public int subtrair(int x, int y) { return x - y; } public static void main(String args[]) throws RemoteException, MalformedURLException { ServCalc servicos = new ServCalc(); Naming.rebind("rmi://127.0.0.1:1099/calc", servicos); System.out.println("Servidor registrado"); } }

ClienteCalc.java
public class ClienteCalc implements Serializable { public static void main(String args[]) { try { CalcInt metodos = (CalcInt) Naming.lookup("rmi://127.0.0.1:1099/calc"); int resSoma = metodos.somar(11, 20); int resSubtrair = metodos.subtrair(7, 3); System.out.println("Soma: " + resSoma + " Subtrao: " + resSubtrair); } catch (Exception e) { System.out.println("Erro: Mensagem: " + e.getMessage()); e.printStackTrace(); } } }

Você também pode gostar