invocação de métodos em objectos...

36
1 Page 1 Departamento de Engenharia Informática Invocação de Métodos em Objectos Remotos Departamento de Engenharia Informática Invocações de métodos remotas e locais invocation invocation remote invocation remote local local local invocation invocation A B C D E F

Upload: lamthu

Post on 25-Jan-2019

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

1

Page 1

Departamento de Engenharia Informática

Invocação de Métodos em Objectos Remotos

Departamento de Engenharia Informática

Invocações de métodos remotas e locais

invocation invocation

remote

invocationremote

local

local

local

invocation

invocation

AB

C

D

E

F

Page 2: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

2

Page 2

Departamento de Engenharia Informática

Invocação de Métodos em Objectos Remotos

• Um sistema de objectos distribuídos é uma

extensão ao conceito de RPC

• Um objecto invoca um método noutro objecto

localizado remotamente.

• Num sistema de objectos o RPC designa-se por

Remote Method Invocation ou RMI

• A IDL é uma linguagem orientada aos objectos

tipicamente baseada em C++, Java, ou C#.

Departamento de Engenharia Informática

RMI vs RPC

• Tal como em RPC, em RMI:

– Usamos interfaces para definir os métodos

invocáveis remotamente

– Existe um protocolo de invocação remota que

oferece as semânticas habituais de RPC

• Pelo menos uma vez, no máximo uma vez, etc.

– Temos um nível de transparência semelhante

• Invocações locais e remotas com sintaxe próxima, mas

programador é exposto a alguns aspectos da distribuição

jpbarreto1

Page 3: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

Slide 4

jpbarreto1 novoJoao Pedro Barreto; 04-03-2013

Page 4: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

3

Page 3

Departamento de Engenharia Informática

RMI vs RPC

• Ao contrário do RPC, em RMI:

– Programador tem ao seu dispor o poder completo

do paradigma OO

• Objectos, classes, herança, polimorfismo, etc.

– Passagem por referência é agora permitida

• Cada objecto remoto tem pode ser referenciado

remotamente

• Referência remotas podem ser passadas por argumento ou

retorno quando método é invocado remotamente

– Num servidor existem vários objectos remotos que

oferecem as respectivas interfaces remotas

• Em RPC, 1 servidor oferecia 1 interface remota

– E outros aspectos que analisaremos em breve

jpbarreto2

Departamento de Engenharia Informática

m4

m5

m6

Interface

Remota

m1

m2

m3Código

dos

métodos

Dados

Objecto remoto

Invocação de Objectos Remotos

Page 5: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

Slide 5

jpbarreto2 novoJoao Pedro Barreto; 04-03-2013

Page 6: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

4

Page 4

Departamento de Engenharia Informática

Modelo de Objectos Distribuído

12/13 Sistemas Distribuídos 7

Departamento de Engenharia Informática

Interface Remota

• Conjunto de métodos de uma classe que

podem ser invocados remotamente nos objetos

dessa classe

– Uma classe pode definir métodos que podem ser

acedidos apenas localmente

Page 7: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

5

Page 5

Departamento de Engenharia Informática

import java.rmi*;

public interface Account extends Remote {

float debit(float amount) throws RemoteException, InsufficientFundsException;

float credit(float amount) throws RemoteException;

}

public interface AccountList extends Remote {

Account getAccount(int id) throws RemoteException;

}

Exemplo em Java RMI:Interfaces remotas

A palavra chave remoteindica uma classe que tem

metodos invocáveis remotamente

Os métodos remotostratam uma exceção especifica

jam1

Departamento de Engenharia Informática

import java.rmi.*;

import java.rmi.server.UnicastRemoteObject;

Import java.util.Vector;

public class AccountListServant extends UnicastRemoteObject implements AccountList {

private Vector<Account> theList; //contains the list of accounts private

public AccountListServant()throws RemoteException{...}

public Account getAccount(int id) throws RemoteException {

return theList[id];

}

}

Exemplo em Java RMI:Classe que implementa interface remota

É necessário também implementar interface Account

Page 8: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

Slide 9

jam1 esta interface não está igual a do Corba

Uma razão é que acho que o Java não permite atributos directos na interface como o Cornba

Seria interessante ter nem que fosse ler a interestrateProf José Alves Marques; 26-03-2009

Page 9: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

6

Page 6

Departamento de Engenharia Informática

Referências remotas

• Os objetos são invocados através de referências

que os identificam

• Num sistemas distribuído objetos remotos têm

referência remotas

• Referência para um objeto remoto

– Referência para um objecto conhecido e sobre o

qual pode ser efetuada a invocação de um método

(evolução do binding handle)

– Podem ser passados como argumentos ou valores

de retorno dos métodos remotos

Departamento de Engenharia Informática

Invocação de métodos

• Invocação num sistema de objetos distribuído

– Iniciada pela invocação de um método sobre uma

referência para um objecto

– Invocação pode resultar noutras invocações de

métodos noutros objetos, quer locais quer remotos

– Podem levar à criação de novas instâncias de

objetos

• Normalmente a instância reside na mesma máquina do

objeto criador

Page 10: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

7

Page 7

Departamento de Engenharia Informática

import java.rmi.*;

public class BankServer{

public static void main(String args[]){

System.setSecurityManager(new RMISecurityManager());

try{

AccountList accountList = new AccountListServant();

Naming.rebind(“AccountList”, accountList );

System.out.println(“accountList server ready” );

}catch(Exception e) {System.out.println(“accountList

server main” + e.getMessage());}

}

}

Continuação do exemplo (I)classe BankServer com o método main

Criar um gestor de segurança

para evitar problemas com classes que são

carregadas a partir de outros sites.

Associa um nome a uma instância a partir

da qual se pode aceder a outros objectos

do servidor

Departamento de Engenharia Informática

public static void main(String args[]){

acList = (AccountList)Naming.lookup(“//host/AccountList”);

Account a = acList.getAccount(2);

a.debit(1000);

Account b = new Account(1000);

acList.addAccount(b);

}

Continuação do exemplo (II)Cliente

Page 11: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

8

Page 8

Departamento de Engenharia Informática

Outros aspectos fundamentais do Modelo de Objectos Distribuído

• Recuperação de memória

(garbage collection)

– Deve ser suportada remotamente pelo RMI

• Excepções

– As invocações remotas podem falhar devido a

excepções.

– A maioria das linguagens Object-oriented

disponibilizam excepções que podem ser estendidas

– Deve ser suportado na IDL

Departamento de Engenharia Informática

Arquitectura do RMI

12/13 Sistemas Distribuídos 16

Page 12: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

9

Page 9

Departamento de Engenharia Informática

Elementos principais da arquitectura do RMI

object A object BskeletonRequestproxy for B

Reply

CommunicationRemote Remote referenceCommunication

modulemodulereference module module

for B’s class

& dispatcher

remoteclient server

servant

Departamento de Engenharia Informática

Objectos remotos/Servants

• Instância da classe no servidor

• Clientes que chamam métodos desse objecto

podem ser remotos ou locais

– Se objecto fosse local, não podia ser invocado por

clientes remotos

• Alguns sistemas de RMI permitem que

invocações remotas concorrentes corram em

threads diferentes

– Programador deve ter o cuidado de incluir

sincronização adequada (monitores/mutexes)!

jpbarreto4

Page 13: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

Slide 19

jpbarreto4 acrescentei nota sobre sincronizaçãoJoao Pedro Barreto; 04-03-2013

Page 14: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

10

Page 10

Departamento de Engenharia Informática

Dispatcher

• Função de despacho do servidor

• Responsável por converter o methodId da

mensagem de invocação no método do objecto

local que está a ser invocado remotamente

• Existe um por classe invocável remotamente

Departamento de Engenharia Informática

Skeleton

• Stub do lado Servidor

• Implementa os métodos da interface remota

• Converte os parâmetros do pedido

(unmarshalling)

• Invoca o método no objecto de destino

• Quando o método termina converte os

parâmetros de retorno e codifica eventuais

excepções

• Envia a resposta

Page 15: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

11

Page 11

Departamento de Engenharia Informática

Proxy (Stub)

• Torna o RMI transparente para o cliente

atuando como um objeto local

– Esconde os detalhes de:

• Tradução das referências para objetos

• Conversão e serialização dos parâmetros (marshalling)

• A interface do proxy é idêntica à interface do

objeto remoto

• Existe uma classe proxy para cada interface

remota usada pelo cliente

• Existe um proxy por cada objeto remoto

(noutro processo) que o cliente referencia

Departamento de Engenharia Informática

Como são gerados os dispatchers, skeletons e proxies?

• Gerados automaticamente por compilador de

interfaces

– Compilador extrai a informação declarada em cada

interface remota

– Muitas vezes este passo de compilação é totalmente

escondido do programador

12/13 Sistemas Distribuídos 23

jpbarreto3

Page 16: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

Slide 23

jpbarreto3 novoJoao Pedro Barreto; 04-03-2013

Page 17: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

12

Page 12

Departamento de Engenharia Informática

Módulo de comunicações

• Um no cliente, outro no servidor

• Implementa protocolo de invocação remota

– Idênticos à biblioteca de run-time do RPC

– Asseguram semântica de invocação pretendida

• talvez, pelo-menos-uma-vez, no-máx-uma-vez, exactamente-

uma-vez

• Módulo de comunicações do servidor selecciona o

dispatcher da classe do objecto invocado

– Passa-lhe a referência para o objecto local sobre o qual é feito

o pedido do cliente

– Passa também o pedido

Departamento de Engenharia Informática

Módulo de referências remotas

• Pedidos de outros clientes trazem identificador

de objecto remoto, não referência local

– Como é que o módulo de comunicação do servidor

sabe qual a referência local? E vice-versa?

• Módulo de referências remotas traduz entre

referências remotas e locais

Page 18: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

13

Page 13

Departamento de Engenharia Informática

Módulo de referências remotas

• Mantém Tabela de Objectos Remotos com entradas

para:

– Objectos remotos que residem no processo

– Proxies para objectos remotos (em outros processos)

• Gere as referências remotas que saem e entram no

processo:

– Quando a referência para o objecto remoto é enviada a outro

processo como parâmetro de entrada ou de saída pela

primeira vez, cria uma referência remota (e adiciona-a à

tabela)

– Quando recebe uma referência remota que não existe na

tabela, cria um proxy e acrescenta a entrada correspondente

na tabela

Departamento de Engenharia Informática

Características avançadas

Divulgação e descoberta de objectos

Invocação dinâmica

Activação dos objectos

Recuperação de memória (garbage collection)

Page 19: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

14

Page 14

Departamento de Engenharia Informática

Divulgação e descoberta de objectos

• O cliente precisa de obter referência remota

para um primeiro objecto no servidor

– A partir da qual poderá invocar métodos e receber

outras referência remotas para outros objectos

remotos

• O binder é um serviço distribuído que permite:

– Servidores registarem objectos remotos neles

instanciados

• Cada objecto registado tem um nome

– Clientes podem consultar o binder por nome de

objecto

• Se registado, o binder devolve referência remota12/13 Sistemas Distribuídos 28

jpbarreto5

Departamento de Engenharia Informática

Invocação estática vs. dinâmica

• Normalmente, o proxy é estático

– Gerado a partir de uma interface remota conhecida

– Compilado junto com o código do cliente

• Consequências?

– Implementação dos objectos servidores pode mudar?

• Sim

– Interface dos objectos remotos pode mudar?

• Não

• E se o cliente quiser invocar métodos sobre interface

remota que não era conhecida quando foi compilado?

– Invocação dinâmica

12/13 Sistemas Distribuídos 29

Page 20: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

Slide 28

jpbarreto5 Joao Pedro Barreto; 04-03-2013

Page 21: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

15

Page 15

Departamento de Engenharia Informática

Invocação dinâmica

• Exemplo:

– Cliente que permite jogar diferentes jogos

disponíveis no servidor (jogo do galo, etc)

– Incluindo novos jogos que venham a surgir

• Cuja de interface é desconhecida quando o cliente é

programado/compilado

12/13 Sistemas Distribuídos 30

Departamento de Engenharia Informática

Invocação dinâmica

• Paradigma poderoso mas mais difícil para o

programador

– Programa do cliente deve inspeccionar a nova

interface remota e descobrir:

• Métodos disponíveis na interface

• Parâmetros de cada método

– Se encontrar método que quer invocar, chamar

método genérico doOperation que recebe

• Nome do método remoto a invocar

• Lista de argumentos

12/13 Sistemas Distribuídos 31

Page 22: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

16

Page 16

Departamento de Engenharia Informática

Invocação dinâmica

Invocação estática

Invocação dinâmica

Departamento de Engenharia Informática

Activação dos Objectos

• Os objectos no servidor podem ter um período

de vida longo

• Recursos estão a ser gastos se os objectos não

estiverem a ser invocados

• Leva a distinguir entre objectos:

– Activos: prontos para ser invocados

– Passivos : não estão activos mas podem ser

activados

Page 23: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

17

Page 17

Departamento de Engenharia Informática

Activação dos Objectos

• Tornar o objecto passivo implica salvar o estado

do objecto para poder ser em seguida

reactivado.

– O estado tem de ser transformado num formato

coerente (serializado) e guardado persistentemente

• Tem de existir uma componente no servidor

que saiba activar o objecto quando for

necessário

Departamento de Engenharia Informática

Recuperação de memória(garbage collection)

• Recuperar a memória usada por objectos

remotos quando mais nenhum cliente se lhes

refere

• Duas principais abordagens:

– Contagem de referências

– Leases

Page 24: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

18

Page 18

Departamento de Engenharia Informática

Recuperação de memóriaContagem de referências

• Servidor mantém estado sobre quais clientes

detêm proxy para objecto remoto no servidor

• Cada vez que um cliente recebe uma referência

a um objecto remoto faz uma chamada addRef() ao servidor e instancia o respectivo proxy

– Servidor adiciona esse cliente à lista associada ao

objecto remoto

• Quando o garbage collector local detecta que o

proxy não pode ser mais usado, cliente faz uma

chamada a removeRef()– Servidor retira esse cliente da lista associada ao

objecto remoto

• Quando a contagem de referência no servidor

se torna zero o servidor recupera a memória.

servidor

servidor

servidor

servidor

servidor

Departamento de Engenharia Informática

Recuperação de memóriaLeases

• Uma lease é uma licença para usar o objecto

durante um certo período de tempo

– O servidor permite o acesso ao objecto remoto

durante um certo período

– Se a lease não for renovada quando o tempo expira

a referência é automaticamente removida

• Vantagens em relação a contagem de

referências?

• Desvantagens?

• Faz sentido combinar ambos?

Page 25: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

19

Page 19

Departamento de Engenharia Informática

RMI vs RPC (recapitulando)

• Reutilização de conceitos Object Oriented

– Melhor ligação às metodologias e linguagens OO

– Utilização de conceitos OO na programação das

interfaces

• Separação da interface e da implementação

• Desenvolvimento incremental

– Herança – simplifica desenvolvimento

– Polimorfismo – permite redefinir interfaces

• Granularidade

– Mais fina do que em servidores que tipicamente

disponibilizam interfaces para programas com

alguma complexidade

Departamento de Engenharia Informática

RMI vs RPC (recapitulando)

• Objectos passados por valor ou referência

– Os objectos podem migrar ou são invocados

localmente

• Invocação dinâmica

– Sistemas de objectos � desenvolvimento

incremental / loosely coupled

• Permitem um objecto invocar dinamicamente outros de

que obtém a interface em tempo de execução

• Gestão do Ciclo de Vida dos objectos

Page 26: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

20

Page 20

Departamento de Engenharia Informática

Principais Sistemas de Objectos Remotos

• Corba

• RMI (Java / J2EE)

• Remoting (C# / .NET)

Departamento de Engenharia Informática

Java RMI

Page 27: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

21

Page 21

Departamento de Engenharia Informática

Java RMI

• Sistema de RMI para a linguagem Java

• Pressupõe que todos os processos no sistema

correm em máquinas virtuais Java

– Obvia muitos problemas de heterogeneidade

– Mas não todos, pois hardware pode ser

heterogéneo!

Departamento de Engenharia Informática

Interfaces remotas em Java RMI

• Interfaces remotas têm de ser uma extensão da

interface Remote

• Todos os métodos da interface remota lançam

excepção do tipo RemoteException

12/13 Sistemas Distribuídos 62

Page 28: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

22

Page 22

Departamento de Engenharia Informática

import java.rmi*;

public interface Account extends Remote {

float debit(float amount) throws RemoteException, InsufficientFundsException;

float credit(float amount) throws RemoteException;

}

public interface AccountList extends Remote {

Account getAccount(int id) throws RemoteException;

}

Interfaces remotas em Java RMIExemplo

jam2

Departamento de Engenharia Informática

RMI Registry

• Corresponde ao binder em Java RMI

– Utilizado para associar nomes a recursos e objectos

de forma portável

– Permitindo identificação, localização, partilha

• Normalmente corre um processo RMI registry

em cada máquina

– Gere os objectos remotos registados dessa máquina

• Nome é do tipo

//nomeComputador:porto/nomeObjecto

Page 29: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

Slide 63

jam2 esta interface não está igual a do Corba

Uma razão é que acho que o Java não permite atributos directos na interface como o Cornba

Seria interessante ter nem que fosse ler a interestrateProf José Alves Marques; 26-03-2009

Page 30: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

23

Page 23

Departamento de Engenharia Informática

RMI Registry

• Implementa a interface JNDI (Java Naming and

Directory Interface)

12/13 Sistemas Distribuídos 65

void rebind (String name, Remote obj)

This method is used by a server to register the identifier of a remote object by

name.

void bind (String name, Remote obj)

This method can alternatively be used by a server to register a remote object by

name, but if the name is already bound to a remote object reference an

exception is thrown.

void unbind (String name, Remote obj)

This method removes a binding.

Remote lookup(String name)

This method is used by clients to look up a remote object by name. A remote

object reference is returned.

String [] list()

This method returns an array of Strings containing the names bound in the registry.

Departamento de Engenharia Informática

Passagem de parâmetros por valor vs referência

Os parâmetros (argumentos ou retorno) de um método

remoto são:

• Passados por Referência quando o parâmetro herda de

java.rmi.Remote

– Nesse caso diz-se que é um objecto remoto

• Passado por Valor caso contrário

– Nesse caso diz-se que é um objecto local

• Tem de implementar java.io.Serializable

• Todos os tipos primitivos são serializáveis

– Estado do objecto é serializado na mensagem de pedido (se for

argumento) ou resposta (se for retorno)

• Uma nova instância é criada remotamente

• As cópias são independentes e as atualizações podem torná-las

inconsistentes

Page 31: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

24

Page 24

Departamento de Engenharia Informática

Passagem de parâmetros por valorSerialização de objecto

• Exemplo (simplificado) de serialização de

instância da classe Person, cujos atributos são:

– int year = 1984

– String name = “Smith”

– String place = “London”

12/13 Sistemas Distribuídos 67

Nome da classe Versão da classe

Nº atributos

Valor de “year”

Inteiro em formato

canónico binário

Valor de “name”

- Nº de caracteres

- String em codificação UTF-8

Tipos dos

atributos

Person

3

1984

8-byte version number

int year

5 Smith

java.lang.Stringname:

6 London

java.lang.Stringplace:

Departamento de Engenharia Informática

Passagem de parâmetros por valorCarregamento dinâmico de classes

• Quando há passagem por valor, o receptor

pode não ter a classe respectiva

– Exemplo?

• Problema: Como “des-serializar” o objecto e

como criar nova instância no receptor se este

não conhece a classe?

• Solução: quando um objecto é serializado, é

enviado:

– Informação sobre qual a sua classe

– URL de servidor onde a classe pode ser

descarregada dinamicamente

Page 32: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

25

Page 25

Departamento de Engenharia Informática

Passagem de parâmetros por valorCarregamento dinâmico de classes

Departamento de Engenharia Informática

Protocolos de invocação remota

• RMI pode ser suportado usando o Java Remote

Method Protocol (JRMP) ou o Internet Inter-

ORB Protocol (IIOP).

– O JRMP é um protocolo específico criado para o RMI

– O IIOP é um protocolo normalizado para

comunicação entre objectos CORBA.

• O RMI usando o IIOP permite aos objectos

remotos em Java comunicarem com objectos

em CORBA que podem estar programados com

linguagens diferentes do Java

Page 33: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

26

Page 26

Departamento de Engenharia Informática

import java.rmi.*;

public class BankServer{

public static void main(String args[]){

System.setSecurityManager(new RMISecurityManager());

try{

AccountList accountList = new AccountListServant();

Naming.rebind(“AccountList”, accountList );

System.out.println(“accountList server ready” );

}catch(Exception e) {System.out.println(“accountList

server main” + e.getMessage());}

}

}

classe BankServer com o método mainCriar um gestor de segurança

para evitar problemas com classes que são carregadas a partir de

outros sites.

Associa um nome a uma instância a partir da qual se pode aceder a

outros objectos do servidor

Sistemas Distribuídos 2009/10

Departamento de Engenharia Informática

import java.rmi.*;

import java.rmi.server.UnicastRemoteObject;

Import java.util.Vector;

public class AccountListServant extends UnicastRemoteObject implements AccountList {

private Vector<Account> theList; //contains the list of accounts private

public AccountListServant()throws RemoteException{...}

public Account getAccount(int id) throws RemoteException {

return theList[id];

}

}

Classe AccountListServant implementa a interface AccountList

Necessário também implementar interface Account

Page 34: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

27

Page 27

Departamento de Engenharia Informática

RemoteObject

RemoteServer

Activatable UnicastRemoteObject

<servant class>

Classes que suportam o Java RMI

• Classe UnicastRemoteObject “exporta” o objecto: contém código necessário para a serialização e estabelecimento de comunicação

entre máquinas virtuais

Departamento de Engenharia Informática

Sistemas Distribuídos 2009/10

import java.rmi.*;

import java.rmi.server.*;

public class AccountListClient{

public static void main(String args[]){

System.setSecurityManager(new RMISecurityManager());

AccountList acList = null;

try{

acList = (AccountList)Naming.lookup(“//host/AccountList”);

Account a = acList.getAccount(2);

a.debit(1000);

}catch(RemoteException e) {System.out.println(e.getMessage());

}catch(Exception e){System.out.println(“Client:”+e.getMessage());}

}

}

Cliente da interface AccountList

Obteve referência remota pelo nome da instância remota

Obteve referência remota por retorno de método

Page 35: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

28

Page 28

Departamento de Engenharia Informática

Java RMI – mecanismo de Reflexão

• A reflexão é usada para passar informação nas

mensagens de invocação sobre o método que

se pretende executar

• API de reflexão permite, em run-time:

– Determinar a classe de um objecto.

– Obter informação sobre os métodos / campos de

uma classe / interface

– Criar uma instância de uma classe cujo nome é

desconhecido antes da execução

– Invocar métodos que são desconhecidos antes da

execução

Departamento de Engenharia Informática

Reflexão no RMI – como usar

• Visão geral:

– Obter instâncias das classes genéricas “Class” e “Method”

– Cada instância de Method representa as características de um

método (classe, tipo dos argumentos, valor de retorno, e

excepções)

– Invocar métodos remotos com o método “invoke” da classe

“Method”. Requer dois parâmetros:

• O primeiro é o objecto a invocar

• O segundo é um vector de Object contendo os argumentos

• Mais detalhes em

http://java.sun.com/docs/books/tutorial/reflect/

Page 36: Invocação de Métodos em Objectos Remotosdisciplinas.ist.utl.pt/~leic-sod.daemon/2012-2013-sem2/teoricas... · Departamento de Engenharia Informática Invocação de Métodos em

29

Page 29

Departamento de Engenharia Informática

2009 José Alves Marques

Arquitectura J2EE